본문으로 건너뛰기

iptables 사용법

iptables

iptables은 패킷이 netfilter를 통과할 때 적용되는 규칙을 관리하는 툴입니다. 패킷은 체인을 따라 흐르며, 각 테이블에는 체인에 따른 규칙이 정의되어있습니다.


https://stuffphilwrites.com/2014/09/iptables-processing-flowchart/

테이블/체인PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING
(routing decision)v
rawvv
(connection tracking)vv
manglevvvvv
nat (DNAT)vv
(routing decision)v
filtervvv
securityvvv
nat (SNAT)vv
  • 테이블
    • raw: connection tracking에서 처리할지 결정
    • mangle: 패킷 헤더의 일부를 변경
    • nat: 패킷의 source 또는 destination 주소를 변경
    • filter: 패킷 허용/거부
    • security:

규칙 추가

iptables [-t <table>] -A <chain> <rule>
iptables [-t <table>] -I <chain> [<ruleNum>] <rule>
  • -t <table>
    • 생략하면 filter 테이블을 사용합니다.
  • -A: 테이블 마지막에 규칙을 추가합니다.
  • -I: <ruleNum>번째에 규칙을 추가합니다.
    • <ruleNum>이 생략되면 첫번째(1)에 추가합니다.
  • <rule>
    • -p <protocol>
    • -i <inputInterface>
    • -o <outputInterface>
    • -s <source>
    • -d <destination>
    • -j <target>
      • <target>
        • ACCEPT: 패킷을 허용합니다.
        • DROP: 패킷을 삭제합니다.
        • REJECT: 패킷을 삭제하고, 적절한 응답을 보냅니다.
        • DNAT: 패킷의 destination 주소를 --to-destination <addr>로 변경합니다.
        • SNAT: 패킷의 source 주소를 --to-source <addr>로 변경합니다.
        • MASQUERADE: 패킷 source 주소를 인터페이스 주소로 변경합니다.
          • SNAT + --to-source <interfaceAddr>

규칙 확인

iptables [-t <table>] -L [<chain>] <option>
  • -t <table>
    • 생략하면 filter 테이블을 사용합니다.
  • -n: 주소를 숫자로 표시합니다.
  • -v