2018/01/20 14:27 1/13 방화벽 - iptables 방화벽 - iptables 서버구축을할때 iptables 를꺼놓고하는경우가있다. 딱보면방화벽규칙을작성하는게만만치않이기도하고홈서버의경우대부분공유기를사용하고있으니공유기가방화벽역할을어느정도라고믿기때문이다. iptables 란넷필터프로젝트에서개발했으며광범위한프로토콜상태추적, 패킷애플리케이션계속도제한, 필터링정책을명시하기위한강력한매커니즘을제공한다. IPTABLES 개요 네트워크패킷을필터링하기위한리눅스의기본방화벽으로 Netfilter Project에서개발. 2.2커널에서 ipchains를사용하였으나 2.4커널부터 iptables이기본탑재 IPTABLES 기능 상태추적 (Stateful) 기능 : iptables를경유하는패킷에대한연결상태를추적가능매칭기능 : 출발지 / PORT, 목적지프로토콜등을사용한매칭로깅기능 : 매칭되는패킷을로그로저장포트포워딩 : NAT 기능을포함 IPTABLES 구조 Filter, Nat, Mangle, Raw 의 4 개의테이블을통해패킷을제어한다. Filter NAT Mangle Raw INPUT FORWAARD OUTPUT PreROUTING PostROUTING Filter Chain Chain INPUT 설명 외부에서유입되는패킷 ( 목적 IP가로컬시스템 ) 에대한 Chain OUTPUT 로컬에서생성된패킷이외부시스템으로접근하는 Chain 패킷 FORWARD 로컬시스템을경유하는패킷에대한 Chain IPTABLES 동작개념
Last update: 2016/05/27 20:17 정보기술 : 방 http://www.conschool.com/doku.php?id=%ec%a0%95%eb%b3%b4%ea%b8%b0%ec%88%a0:%eb%b0%a9%ed%99%94%eb%b2%bd_%ec%84%a4%ec%a0%95 화벽 _ 서비스등록과시작 CentOS 6.4 Minimal 에는 iptables가설치되어있다. ip6tables도함께설치되어있는데 IPv6 이는체계에서사용한다. rpm -qa grep iptables iptables-1.4.7-9.el6.x86_64 iptables-ipv6-1.4.7-9.el6.x86_64 설치되어있지않다면설치 yum -y install iptables chkconfig --list ip6tables 0: 해제 1: 해제 2: 해제 3: 해제 4: 해제 5: 해제 6: 해제 iptables 0: 해제 1: 해제 2: 해제 3: 해제 4: 해제 5: 해제 6: 해제 서비스를시작프로그램에등록한다. chkconfig iptables on 서비스를시작한다. service iptables start iptables 의파일위치 : /etc/sysconfig/iptables 용어 어려운용어들은제껴두고간략히사용할부분에대해서설명한다. 1) 테이블 (tables) 우선 iptables에는테이블이라는광범위한범주가있는데이테이블은 filter, nat, mangle, raw 같은 4개의테이블로구성되며이중에서우리에게필요한것은필터링규칙을 filter 테이블이다세우는. 2) 체인 (chain) iptables에는 filter 테이블에미리정의된세가지의체인이존재하는데 INPUT, 이는OUTPUT, FORWARD 이다. 이체인들은어떠한네트워크 (IP 트래픽패킷 ) 에대하여정해진규칙들을수행한다. 가령들어오패킷 (INPUT) 에대하여허용 (ACCEPT) 할것인지, (REJECT) 거부할것인지, (DROP) 버릴것인지를결정한다. http://www.conschool.com/ Printed on 2018/01/20 14:27
2018/01/20 14:27 3/13 방화벽 - iptables INPUT - 호스트컴퓨터를향한모든패킷 OUTPUT - 호스트컴퓨터에서발생하는모든패킷 FORWARD - 호스트컴퓨터가목적지가아닌모든패킷, 즉라우터로사용되는호스트컴퓨과하는패킷 3) 매치 (match) iptables 에서패킷을처리할때만족해야하는조건을가리킨다. 즉, 이조건을만족시키는패킷을적용한다. source (-s) : 출발지 IP 주소나네트워크와의매칭 destination (-d) : 목적지 ip 주소나네트워크와의매칭 protocol (-p) : 특정프로토콜과의매칭 in-interface (i) : 입력인테페이스 out-interface (-o) : 출력인터페이스 state : 연결상태와의매칭 string : 애플리케이션계층데이터바이트순서와의매칭 comment : 커널메모리내의규칙과연계되는최대 256 바이트주석 syn (-y) : SYN 패킷을허용하지않는다. fragment (-f) : 두번째이후의조각에대해서규칙을명시한다. table (-t) : 처리될테이블 jump (-j) : 규칙에맞는패킷을어떻게처리할것인가를명시한다. match (-m) : 특정모듈과의매치 4) 타겟 (target) iptables 는패킷이규칙과일치할때동작을취하는타겟을지원한다. ACCEPT - 패킷을받아들인다. DROP - 패킷을버린다. ( 패킷이전송된적이없던것처럼 ) REJECT - 패킷을버리고이와동시에적절한응답패킷을전송한다. LOG - 패킷을 syslog 에기록한다. RETURN - 호출체인내에서패킷처리를계속한다. REJECT는서비스에접속하려는사용자의액세스를거부하고 connection refused라는오류메시지를보여주는반면drop은말그대로 telnet 사용자에게어떠한경고메시지도보여주지않은채패킷을드롭한다. 관리자의재량껏이러한규칙을사용할수있지만사용자가혼란스러워하며계속해서접속하는것을방지하려면 REJECT를사용하는것이좋다. 5) 연결 (Connection 추적 Tracking) iptables는연결추적 (connection tracking) 이라는방법을사용하여내부네트워크상서비스연결상태에따라서그연결을감시하고제한할수있게해준다. 연결추적방식은연결상태를표에문에, 다음과같은연결상태에따라서시스템관리자가연결을허용하거나거부할수있다 NEW 새로운연결을요청하는패킷, 예, HTTP 요청 ESTABLISHED 기존연결의일부인패킷 RELATED 기존연결에속하지만새로운연결을요청하는패킷, 예를들면접속포트가동 FTP 의경우전송포트는사용되지않은 1024 이상의어느포트라도사용가능하다.
Last update: 2016/05/27 20:17 정보기술 : 방 http://www.conschool.com/doku.php?id=%ec%a0%95%eb%b3%b4%ea%b8%b0%ec%88%a0:%eb%b0%a9%ed%99%94%eb%b2%bd_%ec%84%a4%ec%a0%95 화벽 _ INVALID 연결추적표에서어디연결에도속하지않은패킷 상태에기반 (stateful) 한 iptables 연결추적기능은어느네트워크프로토콜에서나사용. UDP 가능하다와같이상태를저장하지 (stateless) 않는프로토콜에서도사용할수있다. 6) 명령어 (commond) -A ( append) : 새로운규칙을추가한다. -D ( delete) : 규칙을삭제한다. -C ( check) : 패킷을테스트한다. -R ( replace) : 새로운규칙으로교체한다. -I ( insert) : 새로운규칙을삽입한다. -L ( list) : 규칙을출력한다. -F ( flush) : chain 으로부터규칙을모두삭제한다. -Z ( zero) : 모든 chain 의패킷과바이트카운터값을 0 으로만든다. -N ( new) : 새로운 chain 을만든다. -X ( delete-chain) : chain 을삭제한다. -P ( policy) : 기본정책을변경한다. 6) 기본동작 패킷에대한동작은위에서부터차례로각규칙에대해검사하고, 그규칙과일치하는패킷에겟에지정한ACCEPT,DROP등을수행한다. 규칙이일치하고작업이수행되면, 그패킷은해당규칙과에따리처리하고체인에서추가규칙을무시한다. 패킷이체인의모든규칙과매치하지않아바닥에도달하면정해진기본정책 (policy) 이수행된다. 기본정책은 policy ACCEPT, policy DROP 으로할수있다. 일반적으로기본정책은모든패킷에 DROP 대해을하고특별히지정된포트와 IP주소등에대해 ACCEPT를수행하게만든다. 7) iptables 출력 Iptables 의룰셋을확인할때아래와같이하면보기더편리하다. iptables -nl Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 http://www.conschool.com/ Printed on 2018/01/20 14:27
2018/01/20 14:27 5/13 방화벽 - iptables ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 아래와같이각룰셋의적용순서까지확인가능한방법도있다. iptables -nl --line-numbers Chain INPUT (policy DROP) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 5 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 8 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 Chain FORWARD (policy DROP) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination iptables -L -v Chain INPUT (policy DROP 1626 packets, 214K bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- lo any anywhere anywhere 944 194K ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:domain 4 245 ACCEPT udp -- any any anywhere anywhere udp dpt:domain 6 304 ACCEPT tcp -- any any anywhere anywhere tcp dpt:http 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:https 2 88 ACCEPT tcp -- any any anywhere anywhere
Last update: 2016/05/27 20:17 정보기술 : 방 http://www.conschool.com/doku.php?id=%ec%a0%95%eb%b3%b4%ea%b8%b0%ec%88%a0:%eb%b0%a9%ed%99%94%eb%b2%bd_%ec%84%a4%ec%a0%95 화벽 _ tcp dpt:mysql Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 179 packets, 22190 bytes) pkts bytes target prot opt in out source destination 기본정책이모든패킷에 ACCEPT 대해이며, SSH 서비스가기본적으로허용되어있다. 이것을과감히날리고! 새로운정책의규칙을작성할것이다. 기본정책수립에있어 DROP으로할경우원격에서 SSH를접속해사용중이라면그순간서버에접속할수없게된다. 그러므로일단기본 ACCEPT 정책을로해서SSH 을마친후다시기본정책을DROP으로변경하도록하자현재 iptables 작업을콘솔 ( 서버컴퓨터로 ) 상으로작업하고있다면문제될것이없다. 기본 1) 기본정책을 ACCEPT 로변경 iptables -P INPUT ACCEPT 2) 체인에정의된모든규칙을삭제 iptables -F 3) 확인해보면규칙이모두제거되어있다. iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination http://www.conschool.com/ Printed on 2018/01/20 14:27
2018/01/20 14:27 7/13 방화벽 - iptables 4) INPUT 체인에로컬호스트인터페이스에들어오는모든패킷을허용추가 iptables -A INPUT -i lo -j ACCEPT 일반적으로많은소프트웨어들이 localhost 어댑터와통신이되어야하기에필요하다. 5) INPUT 체인에 state 모듈과매치되는연결상태가 ESTABLISHED,RELATED 인패킷에대해허용추가 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT INPUT 체인에접속에속하는패킷 ( 응답패킷을가진것 ) 과기존의접속부분은아니지만연관성을패킷 (ICMP 에러나 ftp 데이터접속을형성하는패킷 ) 을허용하는규칙이다. 6) INPUT 체인에프로톨콜이 tcp 이며목적지포트가 22 번인패킷에대해허용추가 iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 이로써 SSH 접속이허용된다. telnet 의경우는목적지포트가 23 번 7) 이제 INPUT 체인에대한기본정책을 (DROP) 버림으로변경 iptables -P INPUT DROP 8) FORWARD 체인에대한기본정책을버림으로변경 iptables -P FORWARD DROP 서버를라우팅기기로사용하지않기에모든포워드에대한 DROP 패킷을 9) OUTPUT 체인에대한기본정책을허용으로변경 iptables -P OUTPUT ACCEPT 10) 한것들에대한확인 iptables -L -v Chain INPUT (policy DROP 108 packets, 12199 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- lo any anywhere anywhere 273 25012 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 9 packets, 1612 bytes) pkts bytes target prot opt in out source
Last update: 2016/05/27 20:17 정보기술 : 방 http://www.conschool.com/doku.php?id=%ec%a0%95%eb%b3%b4%ea%b8%b0%ec%88%a0:%eb%b0%a9%ed%99%94%eb%b2%bd_%ec%84%a4%ec%a0%95 화벽 _ destination 11) 한것들저장 service iptables save iptables: 방화벽규칙을 /etc/sysconfig/iptables에저장 : 중[ OK ] 그밖의서비스허용 iptables 규칙을만들때는순서가매우중요하다. 예를 chain 들어에서만일로컬 192.168.100.0/24 서브넷에서들어오는 drop하도록모든지정한패킷을 (drop 후하도록지정된서브넷에포함되는 ) 192.168.100.13에서들어오는패킷을 chain (-A) 모드을그허용하는후에추가하면뒤에추가된추가규칙이무시된다. 먼저 192.168.100.13를허용하는규칙브넷을 drop하는규칙을해야한다. 아래의은기본정책을 OUTPUT 체인을 DROP (iptables -P OUTPUT DROP) 으로했을경우를대비해 OUTPUT도함께기술하였다. 네임서버 DNS -- TCP 53 / UDP 53 iptables -A INPUT -p tcp --dport 53 -j ACCEPT iptables -A INPUT -p udp --dport 53 -j ACCEPT 웹서버 HTTP -- TCP 80 iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT HTTPS -- TCP 443 iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp -m multiport --dports 80,443 -j ACCEPT MySQL -- TCP 3306 iptables -A INPUT -p tcp --dport 3306 -j ACCEPT http://www.conschool.com/ Printed on 2018/01/20 14:27
2018/01/20 14:27 9/13 방화벽 - iptables FTP(passive mode) iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A OUTPUT -p tcp -sport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 1024:65535 -j ACCEPT iptables -A OUTPUT -p tcp --sport 1024:65535 -j ACCEPT 메일서버 SMTP -- TCP 25 iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT Secure SMTP -- TCP 465 iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT POP3 -- TCP 110 iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT Secure POP3 -- TCP 995 iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT IMAP -- TCP 143 iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT Secure IMAP -- 993 iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT ICMP 허용 (ping) iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
Last update: 2016/05/27 20:17 정보기술 : 방 http://www.conschool.com/doku.php?id=%ec%a0%95%eb%b3%b4%ea%b8%b0%ec%88%a0:%eb%b0%a9%ed%99%94%eb%b2%bd_%ec%84%a4%ec%a0%95 화벽 _ NTP 시간동기화 iptables -A INPUT -p udp --dport 123 -j ACCEPT 서버 취약점보안 NULL 패킷차단 NULL 패킷은정찰패킷으로서버의약한곳을찾기위한방법으로사용된다. iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP syn-flood attack 차단 syn-flood attack 은공격자가새로운연결을만들고빠지고를반복해리소스의소모를시키는것 iptables -A INPUT -p tcp! --syn -m state --state NEW -j DROP Anti synflood with iptables Edit /etc/sysctl.conf to defend against certain types of attacks and append / update as follows: net.ipv4.tcp_syncookies = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.netfilter.ip_conntrack_max = 1048576 XMAS 패킷차단 XMAS 또한정찰패킷 iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP 기타 사용법 iptables 수정법 등록된 iptables 를수정하는방법은 /etc/sysconfig/iptables 에서직접 vi 로수정하거나 iptables 명령어를 http://www.conschool.com/ Printed on 2018/01/20 14:27
2018/01/20 14:27 11/13 방화벽 - iptables 사용한다. 실행순번을확인하기 iptables -nl line-number 아래의예는순번 3의행을아래와 R(replace) 같이 - 수정하게된다 iptables -R INPUT 3 -p tcp --dport 2222 -j ACCEPT 인터페이스지정 루프백인터페이스에대해모든패킷을허용 iptables -A INPUT -i lo -j ACCEPT 랜카드지정에대해모든패킷을허용 iptables -A INPUT -i eth0 -j ACCEPT IP 주소지정 신뢰할만한 ip 에 대해모든패킷을허용 iptables -A INPUT -s 192.168.0.3 -j ACCEPT 신뢰할만한 ip 대역에대해모든패킷을허용 iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT 신뢰할만한 ip 대역에대해모든패킷을허용 iptables -A INPUT -s 192.168.0.0/255.255.255.0 -j ACCEPT 신뢰할만한 ip 와 MAC 주소에대해모든패킷을허용 iptables -A INPUT -s 192.168.0.3 -m mac --mac-source 00:50:80:FD:E6:32 -j ACCEPT 포트범위지정 iptables -A INPUT -p tcp dport 6881:6890 -j ACCEPT
Last update: 2016/05/27 20:17 정보기술 : 방 http://www.conschool.com/doku.php?id=%ec%a0%95%eb%b3%b4%ea%b8%b0%ec%88%a0:%eb%b0%a9%ed%99%94%eb%b2%bd_%ec%84%a4%ec%a0%95 화벽 _ 자동화스크립트 myfirewall!/bin/bash iptables 자동화스크립트 입맛에따라수정해서사용합시다. iptables -F TCP 포트 22 번을 SSH 접속을위해허용 원격접속을위해먼저합니다 iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 기본정책을합니다 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT localhost 접속허용 iptables -A INPUT -i lo -j ACCEPT established and related 접속을허용 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT Apache 포트 80 허용 iptables -A INPUT -p tcp --dport 80 -j ACCEPT 을저장 /sbin/service iptables save 한내용을출력 iptables -L -v 1) 위내용을입맛에맞게수정한 (myfirewall) 후에저장 2) chmod +x myfirewall 3)./myfirewall 참고 http://webdir.tistory.com/170 http://www.conschool.com/ Printed on 2018/01/20 14:27
2018/01/20 14:27 13/13 방화벽 - iptables From: http://www.conschool.com/ - CONSCHOOL Permanent link: http://www.conschool.com/doku.php?id=%ec%a0%95%eb%b3%b4%ea%b8%b0%ec%88%a0:%eb%b0%a9%ed%99%94%eb%b2%bd_%ec%84%a4%ec%a0%95 Last update: 2016/05/27 20:17