일부 방화벽 모델은 포트 변환을 허용합니다. 일부 프로토콜을 사용하여 하나의 수신(인바운드) 포트를 다른 포트로 변경하는 것을 의미합니다. 또한 내부 포트를 원래 포트의 일부 외부 포트(아웃바운드 트래픽)로 다시 변경할 수 있습니다.
아래의 DMZ 외부 방화벽 모델입니다. DMZ 방화벽을 사용하는 대신 iptables를 사용하여 이 모든 작업이 서버에서 직접 발생하길 원한다고 가정해 보겠습니다. CentOS 6 서버에서 이런 일이 발생하도록 허용하는 명령은 무엇입니까?
DMZ 네트워크 규칙 모델:
TCP 트래픽이 있고 공용 포트가 8082이고 내부 포트가 8081이라고 가정해 보겠습니다. 예를 들어 DMZ의 Tomcat(클라이언트)은 외부 DMZ 방화벽 외부에 포트 8081로 TCP 패킷을 보낸 다음 인터넷을 통해 8082로 일부 공용 IP로 전송됩니다. 그리고 반대로 공인 IP의 요청이 8082의 동일한 서버로 전송된다고 가정하면 해당 서버의 DMZ에 들어가면 포트가 8081로 변경됩니다.
- 공용 포트 = 8082
- 내부 포트 = 8081
iptables 네트워크 규칙 모델:
- 서버 외부 포트 = 8082
- Tomcat은 포트 = 8081의 물리적 서버에서 TCP 요청을 보내고 받고 있습니다.
답변1
해결책은 iptables
정의된 NAT 규칙을 사용하는 것입니다.
제 예에서는 $physicalServerIP(로컬 IP) 및 $publicIP(공용 IP)를 참조하겠습니다.
포트 8081의 서버에 연결하려는 시도가 실제로 포트 8082의 서버로 이동하도록 Tomcat을 리디렉션하려면($physicalServerIP에 있다고 가정):
iptables -t nat -A PREROUTING -p tcp -s $physicalServerIP --dport 8081 -j REDIRECT --to-port 8082
포트 8082의 $publicIP에 도착하는 수신 요청은 포트 8081의 $physicalServerIP로 전송될 수 있습니다.
iptables -t nat -A PREROUTING -d $publicIP -p tcp -m tcp --dport 8082 -j DNAT --to-destination $physicalServerIP:8081
이전 NAT를 완료하려면 $physicalServerIP의 패킷이 공용 인터페이스에서 NAT를 통해 전송(반환)되도록 지시합니다.
iptables -t nat -A POSTROUTING -s $physicalServerIP/32 -j SNAT --to-source $publicIP
이 접근 방식을 염두에 두고 전체 LAN이 NAT를 통과하도록 하려면 32
이전 명령을 24
LAN이 $physicalServerIP/24인 경우로 변경할 수 있습니다.
답변2
다음 포트 매핑 명령을 사용해 보십시오. 8082에서 연결을 설정하고 내부적으로 포트 8081에 매핑하는 데 도움이 될 수 있습니다.
iptables -t nat -I 사전 설정 -p tcp --dport 8082 -j REDIRECT --to-ports 8081