[질문] iptables 필터링 질문입니다..

onlytrue의 이미지

다음과 같은 상태에서 리눅스 서버에 방화벽을 구축하였습니다.

          하나로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
mercy의 이미지

proxy 서비스 포트에 대해서 접근 허용 정책이 추가되지 않는 것 같습니다.

프록시 서버 포트를 3128로 사용한다면 이 포트에 대해서 내부 네트워크이 접근
할 수 있도록 허용 정책을 추가해 보시기 바랍니다.

onlytrue의 이미지

위의 방화벽 자체 설정 부분의 3번을 보시면..
내부네트워크에서 리눅스서버(의 squid proxy)로의 접근은
모두 가능하게 해 놓았습니다.

그리고 역시 리눅스서버에서 나가는 설정(OUTPUT)은
기본정책에서 모두 ACCEPT로 했구요.

그러니 프록시 사용이나 리눅스 서버에 대한 DNS 쿼리가 되어야 하는 것 아닌가요?
왜 안되는지 모르겠네요.. 또 도움 부탁드립니다! ^^

^^

mithrandir의 이미지

Quote:

iptables -L -v

명령을 사용하시면 어떤 룰에 패킷들이 걸리는지 확인 할 수 있습니다.

저 명령을 사용해서 패킷갯수를 보시면서
프록시 접속을 시도해보세요. 어디서 drop되는지 파악하실 수 있을겁니다.

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

onlytrue의 이미지

감사합니다. 해결했네요^^

^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.