[질문] 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
감사합니다. 해결했네요^^
감사합니다. 해결했네요^^
^^
댓글 달기