[질문] iptables 필터링 질문입니다..
글쓴이: onlytrue / 작성시간: 화, 2005/03/08 - 7:55오전
다음과 같은 상태에서 리눅스 서버에 방화벽을 구축하였습니다.
하나로ADSL모뎀 | | (ppp0 : adsl-setup을 통해서 접속이 이루어졌음) | --------------------------------------------- | eth0 10.0.0.1/255.0.0.0 (외부 연결) | | | (리눅스 서버) | brg0 192.168.0.1/255.255.255.0 | | (eth1과 eth2를 브릿지로 설정) | --------------------------------------------- | | | | | (윈도xp 1컴) | (윈도xp 2컴) --------------------- ----------------------- | 192.168.0.2 | | 192.168.0.3 | | /255.255.255.0 | | /255.255.255.0 | --------------------- -----------------------
위에서 말씀드린 것과 같이 리눅스 서버에서 방화벽을 구축하였는데 (커널2.6.11/iptables 1.2.7a),
문제가 하나 있었습니다.
클라이언트에서 리눅스서버에 만든 proxy(squid)에 접속이
되지 않는군요(방화벽 설정을 없애면 proxy에 접근이 가능하므로 방화벽 설정에 문제가 있는게 확실한 것 같네요).
마찬가지로 쿨라이언트에서 하나로 DNS서버 주소를 직접 지정하면 잘 되는데 저의 리눅스 서버에서 받아오려고 하면 실패합니다(역시나 방화벽 설정을 하기 전에는 리눅스 서버에서 DNS 정보를 잘 받아왔습니다)
다음은 rc.local에 만든 필터링 소스입니다.
어디가 문제가 있는 걸까요?
추가로 무언가 빠진 것이 있다면 조언 부탁드립니다.
# 방화벽 스크립트 # flushing 및 초기화 iptables -F iptables -X # 기본정책 설정 iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP # 방화벽 자체 접근 설정 # 0) 비정상적 tcp-flags 차단 iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP # 1) 스푸핑 차단 iptables -A INPUT -i ppp0 -s 127.0.0.1/8 -j DROP # 루프백 가장 iptables -A INPUT -i ppp0 -s 192.168.0.0/24 -j DROP # 사설 가장 iptables -A INPUT -i ppp0 -s 0.0.0.0/8 -j DROP # 예약주소 가장 iptables -A INPUT -i ppp0 -s 169.254.0.0/16 -j DROP # " iptables -A INPUT -i ppp0 -s 192.0.2.0/24 -j DROP # " iptables -A INPUT -i ppp0 -s 248.0.0.0/5 -j DROP # " # 2) 루프백에서 방화벽으로 접근 가능 iptables -A INPUT -i lo -j ACCEPT # 3) 내부에서만 방화벽으로 접근 가능 iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT # 4) 외부에서는 ftp접근 가능 iptables -A INPUT -p tcp --sport 1024: --dport 21 -m state --state NEW -j ACCEPT # 연결 요청 iptables -A INPUT -p tcp --sport 1024: --dport 20 -m state --state ESTABLISHED ! --syn -j ACCEPT # active 응답 iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHE D,RELATED ! --syn -j ACCEPT # passive 응답 # 5) ftp 클라이언트 허용 iptables -A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCE PT iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHE D -j ACCEPT # 6) DNS 요청에 대한 외부의 응답 가능 iptables -A INPUT -p udp --sport 53 --dport 1024: -m state --state ESTABLISHED - j ACCEPT iptables -A INPUT -p tcp --sport 53 --dport 1024: -m state --state ESTABLISHED - j ACCEPT # 7) ping 요청에 대한 외부의 응답 가능 iptables -A INPUT -p icmp --icmp-type echo-reply -m state --state ESTABLISHED -j ACCEPT # 8) finger 요청에 대한 외부의 응답 가능 iptables -A INPUT -p tcp --sport 79 --dport 1024: -m state --state ESTABLISHED - j ACCEPT iptables -A INPUT -p udp --sport 79 --dport 1024: -m state --state ESTABLISHED - j ACCEPT # 내부로의 포워딩 정책 # 0) 비정상적 tcp-flags 차단 iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j DROP iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j DROP iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j DROP iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j DROP iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j DROP iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j DROP # 1) 내부네트워크 접속 차단 iptables -A FORWARD -p tcp -d 192.168.0.0/24 --syn -j DROP # 2) 팝업 스팸 차단 iptables -A FORWARD -p udp -d 192.168.0.0/24 --dport 135 -j DROP # 2) 스푸핑 차단 iptables -A FORWARD -i ppp0 -s 127.0.0.1/8 -j DROP # 루프백 가장 iptables -A FORWARD -i ppp0 -s 192.168.0.0/24 -j DROP # 사설 가장 iptables -A FORWARD -i ppp0 -s 0.0.0.0/8 -j DROP # 예약주소 가장 iptables -A FORWARD -i ppp0 -s 169.254.0.0/16 -j DROP # " iptables -A FORWARD -i ppp0 -s 192.0.2.0/24 -j DROP # " iptables -A FORWARD -i ppp0 -s 248.0.0.0/5 -j DROP # " # 3) WEB 포트 허용 iptables -A FORWARD -p tcp -s 192.168.0.0/24 --dport 80 -j ACCEPT # 4) 삼바 포워딩 내부에서만 허용 iptables -A FORWARD -p tcp -s 192.168.0.0/24 --dport 137:139 -j ACCEPT iptables -A FORWARD -p tcp -d 192.168.0.0/24 --sport 137:139 -j ACCEPT iptables -A FORWARD -p udp -s 192.168.0.0/24 --dport 137:139 -j ACCEPT iptables -A FORWARD -p udp -d 192.168.0.0/24 --sport 137:139 -j ACCEPT # 5) 외부로의 ping 허용 iptables -A FORWARD -p icmp --icmp-type echo-request -o ppp0 -m state --state NE W -j ACCEPT iptables -A FORWARD -p icmp --icmp-type echo-reply -i ppp0 -m state --state ESTA BLISHED -j ACCEPT # 6) MSN 허용 iptables -A FORWARD -p tcp -d 192.168.0.0/24 --dport 1863:1864 -j ACCEPT iptables -A FORWARD -p tcp -d 192.168.0.0/24 --dport 6901 -j ACCEPT iptables -A FORWARD -p tcp -d 192.168.0.0/24 --dport 7801:7825 -j ACCEPT iptables -A FORWARD -p tcp -d 192.168.0.0/24 --dport 6891:6900 -j ACCEPT # 7) ftp 클라이언트 허용 iptables -A FORWARD -p tcp --dport 21 -m state --state NEW -j ACCEPT iptables -A FORWARD -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT iptables -A FORWARD -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j AC CEPT #iptables -A FORWARD -p tcp --sport 1024: --dport 1024: -m state --state ESTABLI SHED -j ACCEPT iptables -A FORWARD -o ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -o brg0 -m state --state ESTABLISHED,RELATED -j ACCEPT
장황하지만.. 살펴봐주세요..
iptables-save도 붙여봅니다.
# Generated by iptables-save v1.2.7a on Tue Mar 8 07:54:41 2005 *nat :PREROUTING ACCEPT [3491:175839] :POSTROUTING ACCEPT [83:15195] :OUTPUT ACCEPT [118:23005] -A POSTROUTING -o ppp0 -j MASQUERADE COMMIT # Completed on Tue Mar 8 07:54:41 2005 # Generated by iptables-save v1.2.7a on Tue Mar 8 07:54:41 2005 *mangle :PREROUTING ACCEPT [25582:9417664] :INPUT ACCEPT [9083:485686] :FORWARD ACCEPT [16955:8987922] :OUTPUT ACCEPT [6081:3033348] :POSTROUTING ACCEPT [22916:12027600] COMMIT # Completed on Tue Mar 8 07:54:41 2005 # Generated by iptables-save v1.2.7a on Tue Mar 8 07:54:41 2005 *filter :INPUT DROP [2881:159503] :FORWARD DROP [278:23437] :OUTPUT ACCEPT [6050:3036993] -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP -A INPUT -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP -A INPUT -p tcp -m tcp --tcp-flags FIN,ACK FIN -j DROP -A INPUT -p tcp -m tcp --tcp-flags PSH,ACK PSH -j DROP -A INPUT -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP -A INPUT -s 127.0.0.0/255.0.0.0 -i ppp0 -j DROP -A INPUT -s 192.168.0.0/255.255.255.0 -i ppp0 -j DROP -A INPUT -s 0.0.0.0/255.0.0.0 -i ppp0 -j DROP -A INPUT -s 169.254.0.0/255.255.0.0 -i ppp0 -j DROP -A INPUT -s 192.0.2.0/255.255.255.0 -i ppp0 -j DROP -A INPUT -s 248.0.0.0/248.0.0.0 -i ppp0 -j DROP -A INPUT -i lo -j ACCEPT -A INPUT -s 192.168.0.0/255.255.255.0 -j ACCEPT -A INPUT -p tcp -m tcp --sport 1024:65535 --dport 21 -m state --state NEW -j ACC EPT -A INPUT -p tcp -m tcp --sport 1024:65535 --dport 20 ! --tcp-flags SYN,RST,ACK S YN -m state --state ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 ! --tcp-flags SYN,R ST,ACK SYN -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --sport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state ES TABLISHED -j ACCEPT -A INPUT -p udp -m udp --sport 53 --dport 1024:65535 -m state --state ESTABLISHE D -j ACCEPT -A INPUT -p tcp -m tcp --sport 53 --dport 1024:65535 -m state --state ESTABLISHE D -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --sport 79 --dport 1024:65535 -m state --state ESTABLISHE D -j ACCEPT -A INPUT -p udp -m udp --sport 79 --dport 1024:65535 -m state --state ESTABLISHE D -j ACCEPT -A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP -A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP -A FORWARD -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP -A FORWARD -p tcp -m tcp --tcp-flags FIN,ACK FIN -j DROP -A FORWARD -p tcp -m tcp --tcp-flags PSH,ACK PSH -j DROP -A FORWARD -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP -A FORWARD -d 192.168.0.0/255.255.255.0 -p tcp -m tcp --tcp-flags SYN,RST,ACK SY N -j DROP -A FORWARD -d 192.168.0.0/255.255.255.0 -p udp -m udp --dport 135 -j DROP -A FORWARD -s 127.0.0.0/255.0.0.0 -i ppp0 -j DROP -A FORWARD -s 192.168.0.0/255.255.255.0 -i ppp0 -j DROP -A FORWARD -s 0.0.0.0/255.0.0.0 -i ppp0 -j DROP -A FORWARD -s 169.254.0.0/255.255.0.0 -i ppp0 -j DROP -A FORWARD -s 192.0.2.0/255.255.255.0 -i ppp0 -j DROP -A FORWARD -s 248.0.0.0/248.0.0.0 -i ppp0 -j DROP -A FORWARD -s 192.168.0.0/255.255.255.0 -p tcp -m tcp --dport 80 -j ACCEPT -A FORWARD -s 192.168.0.0/255.255.255.0 -p tcp -m tcp --dport 137:139 -j ACCEPT -A FORWARD -d 192.168.0.0/255.255.255.0 -p tcp -m tcp --sport 137:139 -j ACCEPT -A FORWARD -s 192.168.0.0/255.255.255.0 -p udp -m udp --dport 137:139 -j ACCEPT -A FORWARD -d 192.168.0.0/255.255.255.0 -p udp -m udp --sport 137:139 -j ACCEPT -A FORWARD -o ppp0 -p icmp -m icmp --icmp-type 8 -m state --state NEW -j ACCEPT -A FORWARD -i ppp0 -p icmp -m icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT -A FORWARD -d 192.168.0.0/255.255.255.0 -p tcp -m tcp --dport 1863:1864 -j ACCEP T -A FORWARD -d 192.168.0.0/255.255.255.0 -p tcp -m tcp --dport 6901 -j ACCEPT -A FORWARD -d 192.168.0.0/255.255.255.0 -p tcp -m tcp --dport 7801:7825 -j ACCEP T -A FORWARD -d 192.168.0.0/255.255.255.0 -p tcp -m tcp --dport 6891:6900 -j ACCEP T -A FORWARD -p tcp -m tcp --dport 21 -m state --state NEW -j ACCEPT -A FORWARD -p tcp -m tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT -A FORWARD -p tcp -m tcp --sport 20 -m state --state RELATED,ESTABLISHED -j ACCE PT -A FORWARD -o ppp0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT -A FORWARD -o brg0 -m state --state RELATED,ESTABLISHED -j ACCEPT COMMIT # Completed on Tue Mar 8 07:54:41 2005
Forums:
proxy 서비스 포트에 대해서 접근 허용 정책이 추가되지 않는 것 같습
proxy 서비스 포트에 대해서 접근 허용 정책이 추가되지 않는 것 같습니다.
프록시 서버 포트를 3128로 사용한다면 이 포트에 대해서 내부 네트워크이 접근
할 수 있도록 허용 정책을 추가해 보시기 바랍니다.
위의 방화벽 자체 설정 부분의 3번을 보시면..내부네트워크에서 리눅스
위의 방화벽 자체 설정 부분의 3번을 보시면..
내부네트워크에서 리눅스서버(의 squid proxy)로의 접근은
모두 가능하게 해 놓았습니다.
그리고 역시 리눅스서버에서 나가는 설정(OUTPUT)은
기본정책에서 모두 ACCEPT로 했구요.
그러니 프록시 사용이나 리눅스 서버에 대한 DNS 쿼리가 되어야 하는 것 아닌가요?
왜 안되는지 모르겠네요.. 또 도움 부탁드립니다! ^^
^^
[quote]iptables -L -v[/quote]명령을
명령을 사용하시면 어떤 룰에 패킷들이 걸리는지 확인 할 수 있습니다.
저 명령을 사용해서 패킷갯수를 보시면서
프록시 접속을 시도해보세요. 어디서 drop되는지 파악하실 수 있을겁니다.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
감사합니다. 해결했네요^^
감사합니다. 해결했네요^^
^^
댓글 달기