iptables
리눅스의 방화벽 규칙을 위한 tool 현재는 FirewallD라는 더 손쉽게 사용가능한 툴로 대체중이다.1
자주 쓰이는 명령어 형태
iptables {-A | -C | -D } chain rule-specification
iptables -I chain [rulenum] rule-specification
iptables -R chain rulenum rule-specification
iptables -D chain rulenum
iptables {-F | -L | -Z } [chain [rulenum]] [options...]
iptables -P chain target
rule-specification = [matches...]
match = -m matchname [per-match-option]
target = -j targetname [per-target-option]
cheat sheet
- 룰 보기
iptables -L [chain]
- 룰 추가
- 제일 앞에 추가 :
iptables -I chain rule-specification
- 제일 뒤에 추가 :
iptables -A chain rule-specification
- 특정 위치에 추가 :
iptables -I chain rulenum rule-specification
- 제일 앞에 추가 :
- 룰 삭제
iptables -D chain rulenum
iptables -D chain rule-specification
- 룰 변경
iptables -R chain rulenum rule-specification
- 체인 기본 정책 변경
iptables -P chain target
- 초기화
iptables -F [chain]
설명
iptables는 Linux 패킷 필터링 룰 관리 툴이다. 일반적으로 iptables는 방화벽 프로그램으로 알려져 있으나 방화벽 역활을 하는 패킷 필터링은 실질적으로 netfilter가 담당하게 되며 iptables는 패킷 필터링을 위한 룰을 만들어 줄 뿐이다.
iptables의 구성요소
Chain
체인은 패킷이 통과하는 파이프와 같다. iptables에서는 3개의 기본 chain이 존재하며 이 체인은 지울수 없다.
- INPUT : 로컬로 들어오는 패킷
- FORWORD : 로컬을 지나쳐 가능 패킷, 라우터나 방화벽의 역활을 할경우에 사용
- OUTPUT : 외부로 나가는 패킷
위의 기본 chain 이외에 사용자 정의 체인 또한 만들수 있다. 사용자 정의 체인은 iptable -N new-chain-name
을 사용하면 만들수 있다.
Target
타켓은 패킷을 보낼곳을 말한다. 타켓은 미리 정의된 타켓이거나 또다른 체인일 수 있다. 미리 정의된 타켓은 다음과 같다.
- ACCEPT : 패킷을 통과 시킴
- DROP : 패킷을 버림
- QUEUE : user queue handler에 처리를 넘김
- RETURN : 현재 체인에서의 처리를 마치고 이전 체인의 다음 룰을 진행
rule
- -p protocol : 프로토콜 지정
- –dport destination-port : 도착지 포트
- –sport destination-port : 소스 포트
- –source address
- –destination address
- -i –in-interface name
- -o –out-interface name
룰은 맨위에서 부터 순서대로 적용된다. 위에서 부터 하나씩 검사하여 일치하는 룰이 있다면 target에 지정된대로 처리하게 된다. 만약 마지막 룰까지 일치하지 않는다면 그 체인의 기본 전략대로 처리하게 된다.
Example
- HTTP 허용
iptables -I -p tcp –dport 80 -j ACCEPT - 192.168.10.x 대역에서의 접근을 거부
iptables -I INPUT -s 192.168.10.1⁄192.168.10.255 -j DROP - 192.168.10.x 대역 ssh 접근거부, 192.168.10.50은 예외
iptables -A INPUT -s 192.168.10.50 -p tcp –dprot 22 -j ACCEPT iptables -A INPUT -s 192.168.10.1⁄192.168.10.255 -p tcp –dport 22 -j DROP
참고 링크
- http://www.i-swear.com/148
- http://blog.daum.net/hypermax/6
- http://blog.blueweb.co.kr/185
- http://www.iptables.info/en/iptables-contents.html
- http://fedoraproject.org/wiki/How_to_edit_iptables_rules
- 사실상 firewalld가 iptables의 좀 더 쉬운 interface를 제공하는 느낌이다.