Linux 에서 웹 트래픽 허용을 위한 firewalld 설정

CompTIABeginner
지금 연습하기

소개

이 실습에서는 실제 서버 환경에서의 실습을 통해 Linux 시스템에서 웹 트래픽을 허용하도록 firewalld를 설정하는 필수 단계를 학습합니다. 서버 보안을 책임지는 시스템 관리자에게 필수적인 기술인 firewall-cmd 명령줄 도구를 사용하여 방화벽 존과 서비스를 관리하는 방법을 익히게 됩니다. 주요 목표는 HTTP 및 HTTPS 용 표준 포트를 개방하여 보안 상태를 유지하면서 외부에서 웹 서버에 접속할 수 있도록 만드는 것입니다.

먼저 firewalld 서비스의 상태를 확인하여 서비스가 설치되어 실행 중인지, 부팅 시 자동으로 시작되도록 설정되어 있는지 확인하는 것으로 시작합니다. 그런 다음 기본 방화벽 존을 public으로 설정하고, 간단한 Python 웹 서버를 실행하여 방화벽 규칙이 실제 네트워크 연결에 미치는 영향을 체험해 봅니다. httphttps 서비스에 대한 방화벽 규칙을 추가하고 제거하는 과정을 통해 이러한 설정이 실제 연결성에 어떻게 작용하는지 직접 확인하게 됩니다. 실습의 마지막에는 설정 내용을 검증하고 더 깊은 학습을 위해 firewall-cmd에서 제공하는 다양한 옵션을 살펴보는 방법을 배웁니다.

이 과정은 학습과 실습을 돕기 위해 단계별 지침을 제공하는 가이드 실습입니다. 각 단계를 주의 깊게 따라가며 실무 경험을 쌓으시기 바랍니다. 통계 데이터에 따르면 이 실습은 초급 수준이며, 완료율은 90%, 학습자 만족도는 92%입니다.

firewalld 상태 및 기본 존 확인

이 단계에서는 Linux 의 강력하고 유연한 방화벽 관리 도구인 firewalld를 다루기 시작합니다. 설정을 변경하기 전에 서비스가 설치되어 실행 중인지 확인하고 현재의 기본 설정을 파악하는 것이 중요합니다. 이를 통해 작업의 기준점을 명확히 할 수 있습니다.

먼저 시스템에 firewalld가 설치되어 있는지 확인합니다. 이미 설치되어 있을 수도 있지만, 설치 명령을 실행하는 것이 가장 확실한 확인 방법입니다. 터미널을 열고 다음 명령을 실행하여 패키지 목록을 업데이트하고 firewalld를 설치합니다.

sudo apt-get update && sudo apt-get install -y firewalld

설치가 완료되면 firewalld는 기본적으로 활성화되어야 합니다. 이를 확인하기 위해 현대적인 Linux 배포판에서 서비스 관리에 사용되는 systemctl 명령을 사용하여 firewalld 서비스의 상태를 확인합니다.

다음 명령을 실행하여 firewalld가 활성 상태인지 확인합니다.

sudo systemctl status firewalld

출력 결과에 active (running)이라고 표시되면 방화벽이 정상적으로 작동하고 있는 것입니다.

서비스가 실행 중임을 확인했다면 이제 구성을 살펴볼 수 있습니다. firewalld는 네트워크 연결의 신뢰 수준을 관리하기 위해 "존 (zone)"이라는 개념을 사용합니다. 존은 미리 정의된 규칙의 집합입니다. 현재 어떤 존이 기본값으로 설정되어 있는지 확인해 보겠습니다.

firewalld의 주요 명령줄 인터페이스인 firewall-cmd 도구를 사용하여 기본 존을 확인합니다.

sudo firewall-cmd --get-default-zone

새로 설치된 시스템에서는 보통 public이라는 결과가 반환됩니다.

public

이제 firewalld의 상태를 확인하고 기본 존이 무엇인지 파악했습니다. 다음 단계에서는 이 설정을 수정하는 방법을 배워보겠습니다.

기본 존을 public 으로 설정

이 단계에서는 firewalld의 기본 존을 설정하는 방법을 배웁니다. 기본 존은 다른 존에 명시적으로 할당되지 않은 모든 네트워크 인터페이스에 적용됩니다. 새로 설치한 경우 기본 존이 이미 public으로 되어 있는 경우가 많지만, 이를 설정하는 방법을 아는 것은 방화벽 관리의 기본입니다. public 존은 일반적으로 신뢰할 수 없는 공용 네트워크에서 사용됩니다. 즉, 네트워크상의 다른 컴퓨터가 내 컴퓨터에 해를 끼치지 않을 것이라고 신뢰하지 않는 환경을 가정합니다.

기본 존을 변경하려면 firewall-cmd 명령에 --set-default-zone 옵션을 사용합니다. 이 변경 사항은 영구적으로 적용되며 즉시 반영됩니다.

터미널에서 다음 명령을 실행하여 기본 존을 public으로 설정합니다.

sudo firewall-cmd --set-default-zone=public

명령을 실행하면 firewalld가 변경 성공 메시지를 표시합니다.

success

변경 사항이 올바르게 적용되었는지 확인하는 습관을 들이는 것이 좋습니다. 이전 단계에서 했던 것처럼 --get-default-zone 명령을 다시 실행하여 확인합니다.

sudo firewall-cmd --get-default-zone

출력 결과에서 기본 존이 public으로 설정된 것을 확인할 수 있습니다.

public

방화벽의 기본 존을 성공적으로 설정하고 확인했습니다. 이를 통해 모든 네트워크 연결에 대한 기초적인 보안 태세를 갖추었습니다. 이어지는 단계에서는 특정 유형의 트래픽을 허용하기 위해 이 존에 규칙을 추가해 보겠습니다.

public 존에 http 서비스 추가 및 웹 서버 테스트

이 단계에서는 웹 트래픽을 허용하는 규칙을 방화벽에 추가하고, 실제 웹 서버를 실행하여 그 효과를 확인해 봅니다. 기본적으로 firewalld는 시스템 보호를 위해 대부분의 들어오는 트래픽을 차단합니다. 특정 연결을 허용하려면 노출하려는 서비스에 대한 규칙을 추가해야 합니다. firewalld는 표준 네트워크 포트를 기억하기 쉬운 이름으로 정의한 "서비스" 개념을 사용합니다. 예를 들어, http 서비스는 암호화되지 않은 웹 트래픽의 표준 포트인 TCP 80 번 포트에 해당합니다.

먼저, 변경을 적용하기 전에 public 존의 현재 방화벽 상태를 확인해 보겠습니다.

sudo firewall-cmd --zone=public --list-services

처음에는 목록에 http가 없는 것을 볼 수 있는데, 이는 80 번 포트로의 외부 접속이 차단되어 있음을 의미합니다.

이제 public 존에 http 서비스를 추가해 보겠습니다. 수정하려는 존을 지정하고 --add-service 옵션과 함께 firewall-cmd 명령을 사용합니다.

sudo firewall-cmd --zone=public --add-service=http

이 명령은 public 존에 http 서비스 규칙을 추가하도록 firewalld에 지시합니다. 이 변경 사항은 런타임 구성에 적용되어 즉시 효과가 나타납니다. 다음과 같은 확인 메시지가 표시되어야 합니다.

success

서비스가 제대로 추가되었는지 서비스 목록을 다시 확인해 봅니다.

sudo firewall-cmd --zone=public --list-services

이제 허용된 서비스 목록에 http가 포함된 것을 볼 수 있습니다.

실제 효과를 확인하기 위해 간단한 웹 서버를 시작해 보겠습니다. Python 에 내장된 HTTP 서버를 80 번 포트에서 실행합니다.

cd /tmp
echo "<h1>Welcome to LabEx Firewall Demo</h1><p>This server is running on port 80</p>" > index.html
sudo python3 -m http.server 80

80 번 포트는 권한이 필요한 포트 (1024 번 이하) 이므로 sudo가 필요합니다. 이 서버를 별도의 터미널에서 계속 실행해 두십시오.

이제 다른 터미널에서 연결을 테스트합니다.

curl http://localhost

방화벽에서 http 서비스가 허용되었으므로 연결이 성공합니다. localhost 연결은 방화벽 규칙을 우회할 수도 있지만, 핵심은 이제 방화벽이 80 번 포트로의 외부 접속을 허용한다는 점입니다.

방화벽 관리 기능을 더 자세히 알아보기 위해 잠시 HTTP 서비스를 제거해 보겠습니다.

sudo firewall-cmd --zone=public --remove-service=http

서비스 목록을 확인하여 제거되었는지 확인합니다.

sudo firewall-cmd --zone=public --list-services

목록에서 http가 사라진 것을 확인할 수 있습니다. 이제 다시 서비스를 추가합니다.

sudo firewall-cmd --zone=public --add-service=http

다시 추가되었는지 확인합니다.

sudo firewall-cmd --zone=public --list-services

방화벽에서 HTTP 서비스를 관리하는 방법을 성공적으로 익히고 설정 변경 사항을 확인했습니다. 핵심 개념은 웹 서버가 실행 중이더라도 방화벽에 http 서비스 규칙이 없으면 80 번 포트로의 외부 접속이 차단된다는 것입니다. 시연이 끝나면 Ctrl+C를 눌러 웹 서버를 중단할 수 있습니다.

public 존에 https 서비스 추가 및 HTTPS 설정 테스트

이 단계에서는 https 서비스를 추가하여 방화벽 설정을 계속 진행합니다. http가 일반적인 웹 트래픽을 허용한다면, 현대적인 웹 통신은 암호화와 보안을 위해 https(HTTP Secure) 에 의존합니다. https 서비스는 TCP 443 번 포트에 해당하며, 민감한 정보를 다루는 모든 서버에 필수적입니다.

HTTPS 서비스를 추가하기 전에, 방화벽 규칙 없이 HTTPS 연결을 시도하면 어떻게 되는지 먼저 확인해 보겠습니다. 다음 명령을 실행하여 현재 방화벽 서비스를 확인합니다.

sudo firewall-cmd --zone=public --list-services

목록에 http는 있지만 https는 없는 것을 확인할 수 있습니다.

이제 public 존에 https 서비스를 추가합니다. firewall-cmd --add-service 명령을 사용하여 public 존을 통한 https 트래픽을 허용합니다. 이를 통해 서버가 외부 사용자의 보안 연결을 수락할 수 있게 됩니다.

터미널에서 다음 명령을 실행하여 https 서비스를 추가합니다.

sudo firewall-cmd --zone=public --add-service=https

이 명령은 public 존의 런타임 구성을 수정하여 https 서비스에 대한 규칙을 포함시킵니다. firewalld가 규칙 추가 성공 메시지를 표시합니다.

success

이제 서비스 목록을 다시 확인하여 HTTPS 서비스가 추가되었는지 검증합니다.

sudo firewall-cmd --zone=public --list-services

출력 결과에 httphttps가 모두 표시되어야 하며, 이는 방화벽이 두 종류의 웹 트래픽을 모두 허용하도록 설정되었음을 의미합니다.

실제 차이점을 확인하기 위해 현재 어떤 포트가 열려 있는지 확인할 수도 있습니다.

sudo firewall-cmd --zone=public --list-ports
sudo firewall-cmd --zone=public --list-services

--list-services 명령은 서비스 이름을 보여주며, http 서비스는 80 번 포트에, https 서비스는 443 번 포트에 대응함을 알 수 있습니다.

이제 일반 (http) 및 보안 (https) 웹 트래픽을 모두 허용하도록 방화벽 설정을 마쳤습니다. 이는 민감한 정보를 다루거나 보안 연결이 필요한 웹사이트를 호스팅할 때 필수적인 설정입니다.

public 존에 웹 서비스 추가 여부 확인

이 단계에서는 httphttps 서비스가 public 존에 성공적으로 추가되었는지 최종 확인합니다. 설정을 변경한 후에는 예상대로 적용되었는지 검증하는 것이 매우 중요한 모범 사례입니다. 이를 통해 방화벽이 원하는 상태인지 확인하고 문제 해결에 도움을 얻을 수 있습니다.

특정 존에서 현재 허용된 모든 서비스 목록을 보려면 firewall-cmd 명령에 --list-services 옵션을 사용합니다. public 존에 서비스를 추가했으므로 명령에서 해당 존을 지정해야 합니다.

터미널에서 다음 명령을 실행하여 public 존의 활성 서비스 목록을 확인합니다.

sudo firewall-cmd --list-services --zone=public

출력 결과에 서비스 이름 목록이 표시됩니다. 이 목록에서 httphttps를 확인할 수 있어야 하며, dhcpv6-clientssh와 같이 기본적으로 활성화된 다른 서비스들도 함께 보일 수 있습니다.

dhcpv6-client ssh http https

출력 결과에서 httphttps를 확인했다면 외부 웹 트래픽을 허용하도록 방화벽을 성공적으로 설정한 것입니다. 이제 시스템은 표준 및 보안 포트 모두에서 웹 콘텐츠를 서비스할 준비가 되었습니다.

firewall-cmd --help 를 통한 사용 가능한 명령 탐색

마지막 단계에서는 firewall-cmd의 기능을 스스로 탐색하는 방법을 배웁니다. 명령줄 도구는 대개 수많은 옵션과 기능을 가지고 있으며, 내장된 문서를 확인하는 방법을 아는 것은 Linux 사용자에게 매우 중요한 기술입니다. --help 옵션은 명령의 구문과 사용 가능한 옵션을 빠르게 훑어볼 수 있는 보편적인 방법입니다.

firewall-cmd에서 사용할 수 있는 모든 명령과 옵션을 확인하려면 터미널에서 다음을 실행합니다. 이 명령은 정보만 표시하므로 sudo 권한이 필요하지 않습니다.

firewall-cmd --help

이 명령을 실행하면 터미널에 긴 옵션 목록이 출력됩니다. 위로 스크롤하여 전체 내용을 확인할 수 있습니다. 출력은 다음과 같이 시작될 것입니다.

Usage: firewall-cmd [OPTIONS...]

General Options
  -h, --help            Prints a short help text and exists
  -V, --version         Print the version string of firewalld
  -q, --quiet           Do not print status messages

Status Options
  --state               Get state of firewalld
  --reload              Reload firewall rules and keep state information
  --complete-reload     Reload firewall rules and lose state information
  --runtime-to-permanent
                        Save runtime configuration to permanent
...

잠시 시간을 내어 출력 내용을 살펴보십시오. "Zone Options", "Service Options", "Port Options" 등 다양한 섹션을 볼 수 있습니다. 이는 새로운 기능을 발견하거나 자주 사용하지 않는 명령의 구문을 떠올릴 때 매우 유용한 리소스입니다. 예를 들어, 이전에 사용한 --add-service 명령의 반대 기능인 --remove-service 옵션도 찾을 수 있습니다.

축하합니다! 실습을 완료하고 firewalld의 기본 조작법을 익혔습니다. 이제 상태 확인, 존 관리, 특정 트래픽 허용을 위한 서비스 추가를 능숙하게 수행할 수 있습니다.

요약

이 실습에서는 실제적인 시연을 통해 Linux 시스템에서 firewalld를 관리하고 설정하는 핵심 단계를 학습했습니다. 먼저 firewalld 서비스의 설치 여부를 확인하고, systemctl 명령을 사용하여 서비스를 시작, 활성화 및 상태를 점검하는 것으로 시작했습니다. 또한 활성 기본 존을 식별하고 firewall-cmd를 사용하여 이를 public으로 변경하는 방법을 배워 방화벽 규칙 설정을 위한 명확한 기준을 마련했습니다.

이번 실습의 핵심은 실제 웹 서버를 활용하여 방화벽의 효과를 직접 확인한 것입니다. 간단한 Python HTTP 서버를 구축하고 방화벽 규칙이 네트워크 접근을 어떻게 제어하는지 직접 체험했습니다. public 존에서 http 서비스를 추가하고 제거해 봄으로써 웹 연결에 미치는 즉각적인 영향을 확인했으며, 이를 통해 방화벽 규칙이라는 추상적인 개념을 구체적이고 실무적으로 이해할 수 있었습니다.

이러한 기초를 바탕으로 public 존에 httphttps 서비스를 추가하여 일반 및 보안 웹 트래픽을 모두 허용하도록 방화벽을 구성했습니다. 다양한 firewall-cmd 옵션을 사용하여 변경 사항을 검증하는 방법을 익혔고, 서비스 이름과 해당 포트 번호 사이의 관계를 살펴보았습니다. 마지막으로 firewall-cmd의 상세한 도움말 문서를 확인하는 방법을 찾아냄으로써, 향후 스스로 고급 기능을 탐색할 수 있는 역량을 갖추게 되었습니다.