Edit Files
Login Register

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.<sup>1</sup>&frasl;<sub>192</sub>.168.10.255 -j DROP
  • 192.168.10.x 대역 ssh 접근거부, 192.168.10.50은 예외 iptables -A INPUT -s 192.168.10.50 -p tcp &ndash;dprot 22 -j ACCEPT iptables -A INPUT -s 192.168.10.<sup>1</sup>&frasl;<sub>192</sub>.168.10.255 -p tcp &ndash;dport 22 -j DROP

참고 링크


  1. 사실상 firewalld가 iptables의 좀 더 쉬운 interface를 제공하는 느낌이다.