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를 눌러 웹 서버를 중단할 수 있습니다.