iptables - 포트포워딩 + 방화벽
리눅스에서 인터넷 공유기처럼 쓰고 있습니다. 포트포워딩과 방화벽을 사용하려고 합니다.
아래 그림과 같이 세팅했습니다. 1.1.1.1이 리눅스구요, 2.2.2.2는 접근을 막으려는 PC의 IP입니다. 192.168.0.100은 리눅스 밑에 붙은 내부 아이피를 갖는 PC입니다. 포트포워딩이 이리로 되어 있죠.
아래와 같이 4가지 포트포워딩을 하고 있구요.. 모.. 더 될수도 있습니다.
문제는 방화벽을 거는데요... 아래와 같이 80, 21, 2121 포트를 막았습니다. 해서 리눅스의 21 포트인 FTP와 80인 WEB은 잘 막히더군요... 헌데 2121은 막아도 포트포워딩이 걸린 192.168.0.100의 21이 열립니다.
이걸 어떻게 막아야 할까요... 아래와 같이 firewall 체인을 FORWARD에 넣어주어도 안되네요... 포트포워딩이 처음 접하는 체인이 바로 NAT의 PREROUTING인가요? FORWARD를 거쳐서 가는 게 아닌가요? 그 경로도 궁금합니다...
Chain INPUT (policy ACCEPT 1121 packets, 119K bytes)
pkts bytes target prot opt in out source destination
8 329 ACCEPT all -- eth0 * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
1493 160K firewall all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 4 packets, 216 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- eth0 eth1 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
1493 160K firewall all -- * * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 810 packets, 100K bytes)
pkts bytes target prot opt in out source destination
Chain firewall (1 references)
pkts bytes target prot opt in out source destination
0 0 DROP tcp -- * * 2.2.2.2 1.1.1.1 tcp dpt:80
0 0 DROP tcp -- * * 2.2.2.2 1.1.1.1 tcp dpt:21
0 0 DROP tcp -- * * 2.2.2.2 1.1.1.1 tcp dpt:2121
===================================================================
Chain PREROUTING (policy ACCEPT 854 packets, 59705 bytes)
pkts bytes target prot opt in out source destination
1 48 DNAT tcp -- * * 0.0.0.0/0 1.1.1.1 tcp dpt:2121 to:192.168.0.100:21
1 48 DNAT tcp -- * * 0.0.0.0/0 1.1.1.1 tcp dpt:8080 to:192.168.0.100:80
1 48 DNAT tcp -- * * 0.0.0.0/0 1.1.1.1 tcp dpt:3000 to:192.168.0.100:3089
1 48 DNAT tcp -- * * 0.0.0.0/0 1.1.1.1 tcp dpt:4000 to:192.168.0.100:3090
Chain POSTROUTING (policy ACCEPT 1 packets, 48 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * eth0 192.168.0.0/24 0.0.0.0/0
4 240 SNAT all -- * eth0 0.0.0.0/0 0.0.0.0/0 to:1.1.1.1
Chain OUTPUT (policy ACCEPT 4 packets, 240 bytes)
pkts bytes target prot opt in out source destination
netfilter의 패킷 처리 경로는 [url=https://lists.
netfilter의 패킷 처리 경로는 요기서 참고하실 수 있습니다. 예쁘게 그려져 있는 걸 어디서 본 것 같는데 못 찾겠네요.
현재 filter/firewall 체인에서 전혀 패킷 차단이 이뤄지고 있지 않은 것 같습니다. DROP 규칙의 첫 번째 컬럼인 'pkts'가 모두 0인 걸 보면 이를 확인하실 수 있습니다.
DROP 규칙에 패킷이 걸리지 않는 이유는 nat/PREROUTING 체인에서 이미 패킷의 목적지 주소가 변경되었기 때문입니다. 따라서 filter/firewall 체인에서 DROP 규칙을 집어넣을 때 목적지 주소를 1.1.1.1이 아닌 192.168.0.100으로 명시해 주셔야 합니다. 마찬가지로 --dport로 목적지 포트를 지정해 주실 때도 변경된 후의 포트 번호를 사용해 주셔야 합니다.
$PWD `date`
댓글 달기