소개
이 실습에서는 포트 포워딩을 배웁니다.
우편물을 받는 주소가 있다고 가정해 보겠습니다. 그런데 새 방으로 이사했고, 이전 방 번호인 80 번으로 발송된 모든 우편물을 새 방 번호인 8080 번으로 자동 배송하고 싶습니다. 모든 사람에게 주소록을 수정해 달라고 요청하는 대신, 건물 관리자가 우편물을 대신 전달하도록 하는 것입니다.
포트 포워딩은 NAT(Network Address Translation, 네트워크 주소 변환) 의 한 기능입니다. 들어오는 트래픽을 다시 작성해 한 포트로 도착한 요청을 다른 대상으로 리디렉션합니다.
따라서 방화벽은 트래픽을 단순히 허용하거나 차단하는 데 그치지 않습니다. 패킷의 대상 정보를 직접 변환해 외부에 공개된 하나의 서비스 진입점이 다른 내부 대상으로 연결되도록 합니다.
시나리오:
8080 번 포트에서 웹 서버가 실행 중입니다. 하지만 일반적인 웹 브라우저는 80 번 포트에서 웹사이트를 찾습니다. 웹 서버를 변경하는 대신 방화벽에 다음과 같이 설정합니다. “누군가 80 번 포트를 두드리면 8080 번 포트로 바로 보내라.”
이 실습에서는 다음 작업을 수행합니다.
- 트래픽을 처리하도록 방화벽을 준비합니다 (마스커레이딩).
- 80 번 포트를 8080 번 포트로 포워딩하는 규칙을 만듭니다.
- 포트 리디렉션의 동작을 테스트하고 이해합니다.
마스커레이딩 활성화
이 단계에서는 firewalld가 포트를 포워딩하기 전에 필요한 네트워크 패킷 수정 권한을 설정합니다. 이 기능을 **마스커레이딩 (Masquerading)**이라고 합니다.
마스커레이딩은 주소 변환의 한 형태입니다. 실제 환경에서는 방화벽이나 게이트웨이가 중간에서 트래픽을 처리하고, 트래픽이 시작된 위치와 다른 주소 컨텍스트에서 온 것처럼 보이게 할 때 주로 사용합니다.
마스커레이딩을 방화벽이 중간자 역할을 수행할 수 있도록 허용하는 기능이라고 생각하면 됩니다. 방화벽은 패킷의 주소 라벨을 다시 작성해 패킷이 올바른 위치에 도착하도록 합니다.
참고: 이 실습 환경에서는 웹 터미널의 연결이 계속 유지되도록 trusted 영역을 활성 영역으로 사용합니다.
먼저 현재 활성화된 영역을 확인합니다.
sudo firewall-cmd --get-active-zones
네트워크 인터페이스 (예: eth0) 와 함께 trusted가 표시될 가능성이 높습니다.
이제 trusted 영역에서 마스커레이딩을 활성화합니다.
sudo firewall-cmd --zone=trusted --add-masquerade
활성화되었는지 확인합니다.
sudo firewall-cmd --zone=trusted --query-masquerade
출력이 yes이면 다음 단계로 진행할 준비가 된 것입니다.
포워딩 규칙 만들기
이 단계에서는 핵심 작업인 포워딩 규칙 생성을 진행합니다.
포워딩 규칙을 사용하면 애플리케이션 자체를 변경하지 않고도 외부에서 보이는 동작을 일정하게 유지할 수 있습니다. 방화벽이 클라이언트가 기대하는 위치와 실제 서비스가 수신 대기하는 위치 사이에서 변환 계층 역할을 합니다.
다음과 같이 설정합니다. “trusted 영역에서 80 번 포트를 대상으로 하는 모든 TCP 트래픽을 8080 번 포트로 포워딩하라.”
다음 명령을 실행합니다.
sudo firewall-cmd --zone=trusted --add-forward-port=port=80:proto=tcp:toport=8080
옵션을 나누어 살펴보겠습니다.
port=80: 원래 대상 포트입니다 (이전 방 번호).proto=tcp: 사용하는 프로토콜입니다 (웹 트래픽은 TCP 를 사용합니다).toport=8080: 새 대상 포트입니다 (새 방 번호).
규칙이 올바르게 추가되었는지 확인합니다.
sudo firewall-cmd --zone=trusted --list-forward-ports
출력에 해당 규칙이 표시되어야 합니다.
포워딩 테스트
초기 설정에서 8080 번 포트의 간단한 웹 서버를 시작해 두었습니다. 이 단계에서는 해당 포트에 직접 접속해 웹 서버가 정상적으로 동작하는지 확인합니다.
curl http://127.0.0.1:8080
다음과 같은 출력이 표시되어야 합니다. "Hello from Port 8080! Port Forwarding is working."
이제 자신의 IP 주소를 사용해 80 번 포트에 접속하여 포트 포워딩을 테스트합니다.
먼저 IP 주소를 확인합니다.
MY_IP=$(hostname -I | awk '{print $1}')
echo "My IP is: $MY_IP"
이 IP 주소를 사용해 80 번 포트에 연결합니다.
curl http://$MY_IP:80
테스트 참고 사항: 이 실습을 포함한 많은 Linux 환경에서는 Connection refused 오류가 표시될 수 있습니다. 이는 NAT Loopback이라는 알려진 제한 때문입니다. 커널은 NAT 규칙에 따라 자신의 외부 IP 주소로 연결하려는 동작을 차단하는 경우가 많습니다.
이 제한은 설정이 올바른지와 로컬 테스트 결과를 구분해야 한다는 점에서 중요합니다. 같은 컴퓨터에서 테스트하면 결과가 오해를 일으킬 수 있지만, 규칙 자체는 유효할 수 있습니다.
실제 환경에서는 다른 컴퓨터에서 접속한 방문자가 정상적으로 리디렉션됩니다. 이전 단계에서 list-forward-ports 명령을 실행했을 때 규칙이 표시되었다는 사실이 성공을 확인하는 실제 증거입니다.
규칙 삭제
작업이 끝난 뒤에는 설정을 정리하는 것이 좋습니다. 이 단계에서는 트래픽이 다시 정상적으로 동작하도록 포워딩 규칙을 삭제합니다.
방화벽 관리에서 정리 작업은 중요합니다. 오래된 규칙이 남아 있으면 원래 테스트를 잊은 뒤에도 애플리케이션의 외부 노출 상태가 조용히 변경될 수 있습니다.
규칙을 삭제하려면 규칙을 추가할 때 사용한 것과 정확히 같은 세부 정보를 --remove-forward-port와 함께 지정합니다.
sudo firewall-cmd --zone=trusted --remove-forward-port=port=80:proto=tcp:toport=8080
규칙이 삭제되었는지 확인합니다.
sudo firewall-cmd --zone=trusted --list-forward-ports
출력이 비어 있어야 합니다.
요약
이 실습에서는 포트 포워딩을 사용해 네트워크 트래픽을 리디렉션하는 방법을 배웠습니다. 다음 작업을 수행했습니다.
- 방화벽이 패킷을 다시 작성할 수 있도록 마스커레이딩을 활성화했습니다.
- 80 번 포트에서 8080 번 포트로 트래픽을 포워딩하는 규칙을 만들었습니다.
- NAT Loopback과 로컬 테스트가 때때로 까다로운 이유를 배웠습니다.
- 원래 상태로 복원하기 위해 규칙을 삭제했습니다.
포트 포워딩은 데이터베이스나 사용자 지정 애플리케이션과 같은 내부 서비스를 표준 공개 포트로 노출할 때 자주 사용하는 강력한 기술입니다.



