iptables 옵션 및 상태 추적 테이블 및 rule

by ADMINPLAY posted Nov 30, 2009
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

#lokkit

#iptables -Z 
   패킷의 용량을 초기화 시킨다 (모든 패킷 0 )
   룰셋팅을 했을때 모니터링 할때 사용한다


#iptables -N  (chain 을 만든다)

               -X  (추가된 chain을 삭제 )

               -E  (chain명을 change 사용자 정의)


#iptables -X RH-Firewall-1-INPUT
       (사용자 정의 Chain 삭제)

#iptables -nL   (삭제 되었는지 확인)


새로운 chain 생성

#iptables -N TESTCHAIN

#iptables -nL

생성된 Chain 이름 변경

#iptables -E 예전chain명 새로운chain명

#iptables -E TESTCHAIN SSHD

#iptables -nL

 

새로운 chain을 만드는것은 관리를 쉽게 하기 위해서 만드는 것이다
rule이 많을 경우 관리하기가 어렵기 때문이다
서비스별로 분리를 하면 관리가 쉽다


사용자 저의 chain 은 policy 가 안되며 references가 적용


가정 >


 rule을 적용을 했을경우 하나도 매칭이 되지 않을 경우
최종적으로 rule 이 하나가 시작된다

최종 rule (기본정책:policy)

1. 윈xp에서 serv로 접속 ssh

2. serv에서 셋팅  (사용자 정의 SSHD)

   #iptables -t filter -A SSHD -s 192.168.37.1 -j DROP
      기본적으로 명령어를 보면 접속이 되지 않겠다고 생각하겠지만
       사용자 정의는 그 자체만으로는 적용이 되지 않는다
      
        기본 chain하고 링크가 걸어져야만 적용이 된다

   #iptables -t filter  -I INPUT -j SSHD  (링크를건다)
       
       이제 링크가 걸려서 xp에서 serv는 접속이 되지 않는다
  
  #iptables -vL

   #iptables -X SSHD  (링크가 걸려서 삭제가 되지 않는다)(

   #iptables -t filter -D INPUT 1

   #iptables -X SSHD  (삭제확인 : 되지 않는다 chain안에 룰)

     

    #iptables -F SSHD  (SSHD에 들어있는 모든 rule을 삭제할때 사용)
  
    #iptables -X SSHD ( SSHD 사용자 정의 chain 이 삭제 된다)

    #iptables -L

 


iptables -P   (기본 디폴트값 정책을 바꾼다 ACCEPT를 다른것으로)


기본 정책으로 보통 다 아래와 같이 설정해 둔다

이렇게 설정해 둘 경우  필요한 서비스만  ACCEPT 하여 보완성 안전하게
구성할 수 있다


#iptables -P INPUT DROP  (모든 들어오는 패킷 DROP)

#iptables -P FORWARD DROP  (개인 방화벽이므로 포워드 DROP)

#iptables -P OUTPUT ACCEPT  (설정 or 기본값 나가는거...)

 


위와같이 설정할 경우 몇가지 문제점이 있다.,(다른 컴과 통신 두절)

#ping 192.168.37.20  (핑 가지 않는다)

#yum -y install telnet-server  (다운로드 되지 않는다)


위와 같이 하는것은 핑이 다시 되돌아 올때 INPUT으로 들어오는 패킷을
DROP하기 때문이다

위의 것이 1세대 방화벽 방식이다.

 

 

이 모든것을 해결하기 위해서 상태 추적 테이블을 이용한다


======================상태 추적 테이블====================


현재 연결상태의 상태정보를 이용하여 패킷의 drop/allow 여부를
 결정한다면 많은 검사를 생략하여 방화벽의 속도를 획기적으로
향상이 가능하다.

명령어

# -m stat -state{NEW,ESTABLISHED,RELATED,INVLALID}


-NEW : 새로운 연결을 시작하거나 이전에 사용한 상태추적
         테이블에 정보가 없을때 (사용안한다)

-ESTABLISHED : 정상적으로 연결이 형성된 경우
          (ACK 패킷이 정상적으로 처리된 경우)

-RELATED :  FTP 서비스와 같이 제어포트와 데이터포트가 별도로
          존재할때 데이터를 전송하기 위해서는 제어포트를 통해
           데이터 포트의 연결을 시도한다
           이때 사용되는 연결 상태를 의미한다
             

-INVALID : 연결상태를 알 수 없거나 잘못된 접속 요청을 할때


정상적으로 접속을 할려면 -ESTABLISHED 나 RELATED 또는 INVLALID

 

<SERV 에서 정상적으로 이제 방화벽을 구동 (위 문제점을 해결) >


#iptables -t filter -I INPUT -m state --state

ESTABLISHED,RELATED -j ACCEPT


#ping 192.168.37.20  (이제 핑이 제대로 간다)

 


#cat /proc/net/ip_conntrack

상태추적테이블은 메모리에 만들어 진다.
이것은 항상 유지가 되는 것이 아니라 시간이 경과 후 사라진다.

 

 


Rule Matching


#ssh root@localhost
   자기 자신이 ssh서버에 접속이 되지 않는다

  -i lo -j ACCEPT : 루프백에 들어오는 패킷 허용
 
  -o eth0 -j DROP :  eth0에 들오는 패킷 DROP


#iptables -t filter -A INPUT -i lo -j ACCEPT

    위 명령어는 loopbak 의 패킷을 허용한다는 것이다.

#ssh root@localhost  (접속이 이제는 된다)

 

 


-negation (부정문)

 부정표시 ! 표시 (아이피 앞 또는 port번호 앞)

 

-TCP MATCHES

 -p tcp, --protocal tcp

 --sport , --source-port

 --dport , --destinatioon-port


port

 UDP

  TFTP : 69
  NTP : 123
  SYSLOG : 514
  DHCP : 67.68

 

<SERV>

#iptable -F

#vi /var/www/html/index.html
 <html>
 <body bgcolor=green>
 <h1>Host Firewall</h1>
 </body>
 </html>

#vi /etc/xinetd.d/telnet
 disable = no 수정

#service httpd start
#service vsftpd start
#service xinetd restart
#netstat -ntlp 명령으로 open port 확인

 

퀴즈> serv 컴에는 많은 서비스가 동작중이다 이러한 서비스중 xp에게는  
        web서비스만 접속을 허용하고, work컴에게는 ssh.telnet 서비스만
        허용 할 수 있도록 serv 컴의 방화벽을 셋팅하세요
         (단 위에서 언급되지 않는 서비스의 접속은 모두 차단)

-t filter (입력안해도 된다 미 입력시 기본으로 된다)

 #iptable -P INPUT DROP

 #iptables -I INPUT -m state --state ESTABLISHED,RELATED -j   

ACCEPT

 #iptables -A INPUT -s 192.168.37.1 -p tcp --dport 80 -j ACCEPT

 #iptables -A INPUT -s 192.168.37.20 -p tcp --dport 22 -j ACCEPT

 #iptables  -A INPUT -s 192.168.37.20 -p tcp --dport 23 -j ACCEPT


 입력후 제대로 동작이 되는지 확인...