iptables로 특정 포트를 차단하려고 합니다.
글쓴이: CoffeeDust / 작성시간: 월, 2004/03/22 - 10:48오후
현재 리눅스 서버로 구축된 내용은 웹, 메일, 마스커래이딩, 삼바 등을 사용하고 있습니다.
그러나 삼바의 보안이 취약한 것 같아서 내부망에서만 접근하고 외부망에서는 차단하려고 하는데 잘 안되네요.
내부 = eth0
외부 = eth1
iptables의 설정은 다음과 같습니다.
[root@www root]# more</etc/sysconfig/iptables # Firewall configuration written by lokkit # Manual customization of this file is not recommended. # Note: ifup-post will punch the current nameservers through the # firewall; such entries will *not* be listed here. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Lokkit-0-50-INPUT - [0:0] -A INPUT -j RH-Lokkit-0-50-INPUT -A FORWARD -j RH-Lokkit-0-50-INPUT -A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 110 --syn -j ACCEPT -A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 22 --syn -j ACCEPT -A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 25 --syn -j ACCEPT -A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 80 --syn -j ACCEPT -A RH-Lokkit-0-50-INPUT -p udp -m udp -s 0/0 --sport 67:68 -d 0/0 --dport 67:68 -i eth0 -j ACCEPT -A RH-Lokkit-0-50-INPUT -p udp -m udp -s 0/0 --sport 67:68 -d 0/0 --dport 67:68 -i eth1 -j ACCEPT -A RH-Lokkit-0-50-INPUT -i lo -j ACCEPT -A RH-Lokkit-0-50-INPUT -i eth1 -j ACCEPT -A RH-Lokkit-0-50-INPUT -i eth0 -j ACCEPT -A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 0:1023 --syn -j REJECT -A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 2049 --syn -j REJECT -A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 0:1023 -j REJECT -A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 2049 -j REJECT -A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 6000:6009 --syn -j REJECT -A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 7100 --syn -j REJECT
제가 iptables을 어찌 건드려 보아도 139번 포트가 차단되지 않네요.
도와주세요. ㅜ.ㅜ;
Forums:
레드햇 쓰시나 보네요....RH-Lokkit-o-50-INPUT
레드햇 쓰시나 보네요....
RH-Lokkit-o-50-INPUT 은 Redhat에 기본으로 설정되어있는 방화벽 체인입니다. 따라서 INPUT, OUTPUT, FORWARD체인에 아무리 더해봐야.. 이곳엔 보이지 않습니다..
물론 그래도 작동은 합니다.
외부망(eht1)에서 Net-bios포트를 차단하기 위해선
139 tcp와 139 udp를 둘다 막아야 하니까..
랜카드 eth1에서 막으려고 하면.. 이렇게 하면 되는건지는 확실하지 않지만.. 비슷할거구요..
-A RH-Lokkit-0-50-INPUT -p tcp --dport 139 -i eth1 -j REJECT
-A RH-Lokkit-0-50-INPUT -p udp --dport 139 -i eth1 -j REJECT
확실하게 되는 방법을 말씀드리면... ^^
-A RH-Lokkit-0-50-INPUT -p tcp -s ! xxx.xxx.xxx.0/24 -d yyy.yyy.yyy.yyy/32 --dport 139 -j REJECT
-A RH-Lokkit-0-50-INPUT -p udp -s ! xxx.xxx.xxx.0/24 -d yyy.yyy.yyy.yyy/32 --dport 139 -j REJECT
라고 하면 되겠네요.. 이건 IP를 이용해서 걸르는 방법입니다.
xxx.xxx.xxx.0 은 내부내트워크를 쓰면됩니다.
ex : 192.168.0.1 ~ 192.168.0.255 까지를 포함하려면 192.168.0.0/24
yyy.yyy.yyy.yyy는 eth1의 IP입니다.
이건 물론 전용선과 같이 IP가 불변일때 쓸 수 있는 방법입니다.
해석하자면... 프로토콜(-p) 이 tcp이고 패킷의 출발지 (소스 -s)가 xxx.xxx.xxx.0의 네트워크가 아니고(!) 패킷의 도착지(목표,데스티네이션 일려나요.. ㅡㅡ; -d)가
yyy.yyy.yyy.yyy이며 포트가 139번인 패킷은 REJECT시켜라 입니다.
중요한건 체인의 순서입니다. 위에 부터 반영되는거기 때문에 맨 아래에 추가해도 이미 위쪽에서 ACCEPT되는 범위의 채인이 있다면..
REJECT까지 가기도 전에 이미 패킷은 방화벽을 통과합니다.
사람마다 다르지만.. 전 우선적으로 거부할 REJECT를 맨위에...
그다음에 허용할 체인을 두고.. 마지막에 이것도 아니고 저것도 아닌 패킷은 DROP시켜버리는 패쇄적인 정책을 씁니다..
http://wiki.kldp.org/Translations//html/Packet_Filtering-KLDP/Packet_Filtering-KLDP.html#toc5
http://woogi.org/
에 가보시면 더욱 많은 자료가 있습니다.
가능하다면.. 레드햇 내장 파이어월보다는 스크립트를 이용해서 자체적으로 제작하는 방식이 훨씬 안정성이 높겠죠.. 자유도도 있고..
무엇보다.. 내부에서 나가는 네트워크도 제어할 수 있는 막강성이 관리자에게 부여된답니다.. :P
너무 감사합니다.잘 해결되었네요.말씀하신 내용중 "우선적으로
너무 감사합니다.
잘 해결되었네요.
말씀하신 내용중 "우선적으로 거부를 먼저한다"라는 내용에 공감해서 INPUT에 RH-Lokkit-0-50-INPUT이라는 체인으로 가는 라인 앞쪽에 다음과 같이 2줄을 넣었더니 잘 되네요...^^
-A INPUT -p udp -s ! xxx.xxx.xxx.0/24 -d yyy.yyy.yyy.yyy/32 --dport 139 -j DROP
-A INPUT -p tcp -s ! xxx.xxx.xxx.0/24 -d yyy.yyy.yyy.yyy/32 --dport 139 -j DROP
지금 막 테스트 성공했습니다.
139번은 막히고 웹, 메일, 내부삼바, 마스커래이딩 모두 잘 돌아가네요.
많은 도움이 되었습니다.
정말 감사합니다. ^^
댓글 달기