NETFILTER 방화벽은 3개의 테이블로 구성.
 각 테이블은 chain(패킷의 이동통로) 으로 구성
 
1. filter table(접근제어) -> 가장 중요
   FORWARD  : client의 목적지가 방화벽 너머 host 일때 이동통로
   INPUT  : client 의 목적지가 방화벽 내부의 서비스일때 이동통로
   OUTPUT  : 방화벽에서 외부 host로 접속하려할때 이동통로
  2. nat table(주소변환)
   OUTPUT
   POSTROUTING
   PREROUTING
  3. mangle table(패킷의 속성<ttl, tos…..>변경)
   FORWARD
   INPUT
   OUTPUT
   POSTROUTING
   PREROUTING


iptables 문법순서
 
1. table 명 (-t filter, -t nat, -t mangle)
 2. chine 명 ( -A/-D/-R/-I chine명 )
 3. ipaddress (-s ip주소 or network address / -d ip 주소 or network address) 목적지 주소 생략하면 모든 컴퓨터
 4. protocol, port Number (-p tcp / -p udp, --sport 포트번호/--dport) 생략하면 모든 포트, 모든 프로토콜
 5. 처리내용 ( -j ACCEPT/DROP/REJECT/LOG… )


 Ex) 내부망의 특정 host가 p2p 프로그램을 많이 사용하여 트래픽이 증가한다는 사실을 IDS 를 통해 확인했다. 해당
     host(10.1.1.1) 의 모든 인터넷 서비스 접속을 차단하도록 네트워크 방화벽을 세팅하세요.
 
  (답) iptables -t filter -A FORWARD -s 10.1.1.1 -j DROP


 iptables -F 모든 설정 삭제
 iptables -L 상태 확인


iptables -t filter -A INPUT -s 192.168.0.22 -d 192.168.0.14 -j DROP

iptables -L  ==> 목록 열람


iptables -F  ==> 기존에 설정된 것을 전부다 없앤다.



iptables 명령어순서


1. chain name - 체인에 설정할 내용 (insert/delete/replace..) ex) -I CHAIN 3, -A, -D, -R, -F


2. table name - filter(기본값),nat,mangle ex) -t nat, -t filter(기본값)


3.Layer 3 - ex) -s ip주소, -d ip주소


4.Layer 4 - ex) -p tcp --dport 80, -p udp --sport 21


5.Target - ex) -j ACCEPT,LOG,DROP,REJECT



호스트기반의 방화벽에서, serv컴이 방화벽이 설치되어있다.


퀴즈1) serv컴퓨터로 접속할 수 있는 client 중 ip가 192.168.247.20(work)가 있다.


         serv컴에서 이 컴퓨터의 모든 접속을 차단하고자 한다.


         어떻게 방화벽을 셋팅을 해야 할까..


===>INPUT 기본 정책이 ACCEPT로 되어있기에 work컴만 DROP또는 REJECT 시키면 된다.


     iptables -I INPUT -t filter -s 192.168.247.20 -j DROP (DROP은 ping도 거절한다.모든응답차단)   


                       (REJECT는 ping응답을 받고 보낸다)



iptables-save > /root/firewall.rule  ==>룰을 저장


iptables-restore < /root/firewall.rule  ==>룰을 불러옴



컴퓨터가 재부팅되면 설정되었던 iptables룰이 없어진다.


==>/etc/sysconfig/iptables ==> 기본설정룰


    /etc/sysconfig/iptables-config  ==> 환결설정화일


vi iptables-config


19행 IPTABLES_SAVE_ON_STOP="yes"


25행 IPTABLES_SAVE_ON_RESTART="yes"


로 바꾸면 재부팅되어도 설정된 룰이 사라지지 않는다.


iptables -L -v ==> 차단한 패킷의 수와 사이즈를 확인


iptables -L --line-numbers  ==> 룰의 순서를 보여준다.


iptables -L -n ==> 문자주소가 숫자주소로 바뀌어 출력된다. or -nL




iptables -R INPUT 3 -t filter -s 10.1.1.0/24 -j REJECT


iptables -D INPUT 3



iptables -Z  ==>iptables -L -v 로 확인했던 차단패킷 사이즈등을 초기화시킴(모니터링을위해)



<사용자정의체인>:관리의 편의성을 위해서 사용한다.


iptables -X RH-Firewall-1-INPUT  ==>사용자정의 체인 삭제


iptables -N INTRANET  ==>사용자정의 생성


iptables -E INTRANET EXTRANET  ==>사용자정의 이름 변경



*매칭되는 룰이 없을경우는 기본정책의 적용을 받는다.


iptables -A EXTRANET -t filter -s 192.168.247.1 -j ACCEPT


*사용자 정의 체인은 만들어도 쓸수 없다. 링크가 되어 있어야 쓸 수 있다.(0 references)


*INPUT체인에서 EXTRANET에 링크로 갔다가 다시 INPUT으로 돌아와서 다 적용해본후 아무런 매칭된 경우가 없을 경우 INPUT의 기본정책에 적용된다.


iptables -I INPUT 2 -j EXTRANET ==>EXTRANET을 링크시킨다.


iptables -D INPUT 2




*1)사용자 정의를 삭제하기 위해서는 링크를 먼저 삭제해야한다.


*2)사용자 정의를 삭제하기 위해서는 체인내의 모든 RULE을 삭제


iptables -D INPUT 3


iptables -X EXTRANET


iptables -F EXTRANET  ==>EXTRANET 사용자정의체인내의 룰만 삭제한다..



퀴즈) serv컴퓨터에서는 work컴퓨터에서의 telnet접속만 차단할 수 있도록 rule셋팅하세요.


iptables -I INPUT -t filter -s 192.168.247.20 -p tcp --dport 23 -j DROP



iptables -P FORWARD DROP


iptables -P INPUT DROP



퀴즈) serv컴에서는 work 컴에게 ssh접속만 허용하고 xp컴에게는 telnet 접속만 허용하도록 설정하시고 그 이외의 모든 접속을 차단하도록 설정해보세요.


iptables -P INPUT DROP


iptables -A INPUT -t filter -s 192.168.247.20 -p tcp --dport 22 -j ACCEPT


iptables -A INPUT -t filter -s 192.168.247.1 -p tcp --dport 23 -j ACCEPT




iptables -A INPUT -t filter -p tcp --sport 1:1023 -j ACCEPT  ==>1세대방화벽의 단점(ssh,telnet등의 서비스들의 ack/syn패킷을 받기 위해서 사용)




상태추적기능을 이용해보자.


*ping은 echo-request와 echo-reply를 사용한다.


              <-m state --state>


NEW상태는  접속요청하면 아무나 다 접속된다.(SYN패킷을 가져오는 컴은 다 접속된다.)


ESTABLISH상태는 접속요청에대한 응답패킷을 establish상태라고 한다.요청으로 나갔다가 다시들어오는 패킷들을 허용한다.


RELATED ftp서버를 위해서


INVALID 연결상태를 알수 없거나 잘못된 페더를 가진 경우



iptables -I INPUT 1 -t filter -m state --state ESTABLISHED,RELATED -j ACCEPT 이제는 외부로의 ftp나 ping등의 접속이 된다.나갔다가(sync) 다시 되돌아오는 패킷(sync ack)들을 허용하기위해서(상태추적테이블을 이용한다.)


cat /proc/net/ip_conntrack ==> 상태추적 테이블 저장


방화벽은 2-3계층사이에서 동작한다.


iptables -I INPUT 1 -t filter -m state --state NEW,RELATED,ESTABLISHED ==> 모든 서비스가 다 접속이 되어 버린다. ( 절대로 이런설정은 하면 안된다.)



UDP:123


SysLog-UDP:514


TFTP UDP:69


UDP포트는 서비스를 제공받을시 똑같은 포트를 이용한다. 123/UDP <---------------->123/UDP


                                                                              SERVER                             CLIENT



퀴즈) work 컴퓨터에서만 핑을 허용하고 그외의 모든 핑은 차단한다.


iptables -A INPUT -t filter -s 192.168.149.20 -p icmp --icmp-type echo-request -j ACCEPT



멀티포트


iptables -I INPUT 1 -p tcp -m multiport --dport 80,22,25 -j ACCEPT



노트북을 이용해서 이동하면서 원격접속시는 ip어드레스가 바뀌므로 방화벽에 의해 접속이 안되는 경우를 위해서 맥어드레스를 이용해서 방화벽허용을 한다.


00:0C:29:D4:46:58


iptables -I INPUT 3 -t filter -m mac --mac-source 00:0C:29:D4:46:58 -p tcp --dport 22 -j ACCEPT



-j LOG  --> /var/log/messages


vi /etc/syslog.conf


3행수정 kern.*                      /var/log/firewall


-j LOG는 순서를 맨위로 하는 것이 좋다. 로그기록을 하고 바로 밑으로 순서대로 진행한다.


iptables -I INPUT -t filter -p tcp --dport 23 -j LOG --log-prefix "Warning telnet access"


사용자체인을 걸어서 로그기록들의 링크를 걸어놓는 것이 좋은 방법이다.



우리가 열어놓지 않는 포트에의 접속시도의 로그를 남기는 것이 더 효율적이다.


퀴즈)serv컴퓨터에서 접속을 허용한 ssh,web 서비스 이외의 접속에 대해서 로그를 생성할 수 있도록 방화벽 셋팅을 하세요(단 로그를 남길때 "not permit access" 코맨트를 첨부하세요) (not,multiport이용)


==>iptables -I INPUT 1 -t filter -p tcp -m multiport --dport ! 21,22,23,80 -j LOG --log-prefix "not permit access"

iptables 메뉴얼2

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다