Iptables: Difference between revisions
No edit summary |
No edit summary |
||
Line 135: | Line 135: | ||
<references /> | <references /> | ||
[[category:command]] | [[category:command/utility]] |
Revision as of 08:40, 25 July 2016
Overview
Iptables 명령어 사용법 및 활용법 정리.
Command
iptables -[ADC] chain 상세룰 [옵션] iptables -[RI] chain 룰번호 상세룰 [옵션] iptables -D chain 룰번호 [옵션] iptables -[LFZ] [chain] [옵션] iptables -[NX] chain iptables -E 이번체인이름 새로운체인이름 iptables -P chain target [옵션] iptables -h -A chain, –append chain : chain을 추가한다. -D chain, –delete chain : chain에서 룰을 삭제한다. -D chain 룰넘버, –delete chain 룰넘버 : chain 정책 중 지정한 룰넘버를 삭제한다. 만일 룰넘버가 1이라면 chain 규칙의 첫 번째 룰을 삭제한다. -I chain [룰넘버], –insert chain [룰넘버] : chain 정책에 지정한 숫자번째에 삽입하거나, 마지막에 룰을 삽입한다. -R chain 룰넘버, –relace : chain 정책 중 지정한 숫자번째의 룰을 교체한다. -L [chain], –list [chain] 모든 chain 정책을 보거나, 지정한 chain 정책을 본다. -F [chain], –flush : 모든 chain 정책을 삭제하거나, 지정한 chain 정책을 삭제한다. -Z [chain], –zero : 모든 chain 정책을 제로로 만들거나, 지정한 chain 정책을 제로로 만든다. -C chain, –check chain : 설정한 chain 정책을 테스트한다. -N chain, –new-chain : 새로운 정책을 만든다. -X [chain], –delete-chain : 사용자가 만든 chain이나 모든 chain을 삭제한다. -P chain target, –policy chain target : chain 정책을 지정한 chain 정책으로 바꾼다. -E old-chain new-chain, –rename-chain old-chain new-chain : chain명을 바꾼다. -p, –protocol [!] proto : 프로토콜을 지정한다. !은 제외의 의미이다. -s, –source [!] address[/mask] : 출발지 주소를 지정한다. mask는 C클래스면 255.255.255.0이나 24비트로 표현된다. -d, –destination [!] address[/mask] : 목적지 주소를 지정한다. -i, –in-interface [!] input name[+] 수신하는 네트워크 인터페이스 이름을 지정한다. name+은 name으로 시작하는 모든 인터페이스 이름이다. -j –jump target : 지정하는 target으로 리다이렉트 시킨다. -m : 지정한 match로 확장이 가능하다. -n : IP주소와 포트번호를 숫자 그대로 보여준다. -o, –out-interface [!] output name[+] : 발신하는 네트워크 인터페이스 이름을 지정한다. -v, –verbose : 상세한 정보를 보여준다. –line-numbers : 룰정책을 보여줄 때 줄번호도 나타낸다. -x, –exact : 정확한 값으로 나타낸다. -V, –version : 버전 정보를 보여준다.
Basic rules
Table
Iptable 에는 크게 4가지 테이블이 존재한다(Filter, Nat, Mangle, Raw).
Chain
Filter 테이블에는 미리 정의된 3가지 체인이 존재한다(INPUT, OUTPUT, FORWARD).
- INPUT : 호스트 컴퓨터를 향한 모든 패킷 - OUTPUT : 호스트 컴퓨터에서 발생하는 모든 패킷 - FORWARD : 호스트 컴퓨터가 목적지가 아닌 모든 패킷, 즉 라우터로 사용되는 호스트 컴퓨터를 통과하는 패킷
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) : 특정 모듈과의 매치
Target
규칙에서 취해야 할 동작을 지정한다.
- ACCEPT : 패킷을 받아들인다. - DROP : 패킷을 버린다. - REJECT : 패킷을 버리고 이와 동시에 적절한 응답 패킷을 전송한다. - LOG : 패킷을 syslog에 기록한다. - RETURN : 호출 체인 내에서 패킷 처리를 계속한다.
REJECT는 서비스에 접속하려는 사용자의 액세스를 거부하고 connection refused라는 오류 메시지를 보여주는 반면 DROP은 말 그대로 telnet 사용자에게 어떠한 경고 메시지도 보여주지 않은 채 패킷을 드롭한다.
Connection Tracking
서비스 연결상태에 따른 규칙 적용이 가능하다.
- NEW : 새로운 연결을 요청하는 패킷, 예, HTTP 요청 - ESTABLISHED : 기존 연결의 일부인 패킷 - RELATED : 기존 연결에 속하지만 새로운 연결을 요청하는 패킷, 예를 들면 접속 포트가 20인 수동 FTP의 경우 전송 포트는 사용되지 않은 1024 이상의 어느 포트라도 사용 가능하다. - INVALID : 연결 추적표에서 어디 연결에도 속하지 않은 패킷
상태에 기반(stateful)한 iptables 연결 추적 기능은 어느 네트워크 프로토콜에서나 사용 가능하다. UDP와 같이 상태를 저장하지 않는 (stateless) 프로토콜에서도 사용할 수 있다.
Samples
Default DROP
기본 설정을 DROP으로 하고, 이어서 필요한 서비스들에 대한 포트들만 ACCEPT 하는 전략. <source lang=bash>
- -- Set default policy to DROP
$ sudo iptables -P INPUT DROP
- -- ssh
$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT $ sudo iptables -A INPUT -p udp --dport 22 -j ACCEPT
- -- http
$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT $ sudo iptables -A INPUT -p udp --dport 80 -j ACCEPT
- -- https
$ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT $ sudo iptables -A INPUT -p udp --dport 443 -j ACCEPT
- -- jenkins
$ sudo iptables -A INPUT -p tcp --dport 8081 -j ACCEPT
- -- sip
$ sudo iptables -A INPUT -p tcp --dport 5060 -j ACCEPT $ sudo iptables -A INPUT -p tcp --dport 5060 -j ACCEPT $ sudo iptables -A INPUT -p tcp --dport 5061 -j ACCEPT $ sudo iptables -A INPUT -p tcp --dport 5061 -j ACCEPT $ sudo iptables -A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT </source>
See also
- http://www.cyberciti.biz/tips/linux-iptables-examples.html - Linux: 20 Iptables Examples For New SysAdmins
- https://www.thomas-krenn.com/en/wiki/Saving_Iptables_Firewall_Rules_Permanently - Saving Iptables Firewall Rules Permanently
- http://webdir.tistory.com/170 - [CentOS] 방화벽 설정 - iptables
References
<references />