iptables

리눅스 커널에 내장된 netfilter라는 리눅스 커널 모듈을 통하여 실제로 필터링 동작.

개발 정책의 방향성에 따라 구분한 그룹

  • INPUT: 서버로 유입되는 트래픽 구간
  • OUTPUT: 서버에서 나가는 트래픽 구간
  • FORWARD: 서버를 통과하는 트래픽 구간

체인을 역할별로 구분한 그룹

  • Filter Table: 방화벽의 기본 기능인 패킷을 허용하거나 차단하는데 사용
  • NAT Table: IP를 변환하는 NAT 기능을 위한 테이블
  • Mangle Table: 주로 패킷 헤더의 TOS, TTL 값을 변경
  • Raw Table: 연결 추적 시스템에서 처리하면 안되는 패킷 표시
  • Security Table: 필수접근제어 네트워크 규칙. SELinux와 같은 보안 모듈에서 구현. filter 테이블 이후에 호출

제어하려는 패킷의 상태 또는 정보 값의 정의. 정책에 대한 조건

Match와 일치하는 패킷에 대한 처리 방식

  • ACCEPT: 패킷을 정상적으로 처리
  • DROP: 패킷을 폐기
  • REJECT: 패킷을 폐기 및 차단응답 메시지 전송
  • LOG: 패킷을 syslog에 기록
iptables -L # 조회
  • iptables [<switches>…]
    • -L, –list: 정책보기
      • -v: : 통과하는 패킷과 바이트 수 확인
    • -S, –list-rules: 실제 정책(인터페이스 포함) 보기
    • -F, –flush: 정책 모두 삭제
    • -F, –zero: 패킷 카운트 초기화
    • -Z chain, –append chain: 정책추가 (chain: 정책을 추가할 체인. eg.INPUT, OUTPUT, …)
      -D chain, –delete chain: 정책삭제 (chain: 정책을 삭제할 체인. eg.INPUT, OUTPUT, …)
      -R chain, –replace chain: 정책교체
      -C chain, –check chain: 정책확인 (chain: 정책을 확인할 체인. eg.INPUT, OUTPUT, …)
      -I chain line, –insert chain line: 특정 라인에 정책추가 (chain: 정책을 추가할 체인. eg.INPUT, OUTPUT, …) (line: 정책을 삽입할 줄번호)
      • -i interface, –in-interface interface: 입력 인터페이스 지정. (interface)
        -o interface, –out-interface interface: 출력 인터페이스 지정.
      • -p protocol, –protocol protocol: 프로토콜 지정. (protocol: 프로토콜 명 또는 포트번호)
      • –sport port: 출발지 포트 지정(port: 포트번호)
        –dport port: 목적지 포트 지정
      • -s ip, –source ip: 출발지 IP 지정(source: IP. 127.0.0.1, 127.0.0.1/24 )
        -d ip, –destination ip: 목적지 IP 지정
      • –state state: 연결 상태와 매치(state: 연결 상태)
      • –string: 애플리케이션 계층 데이터 바이트 순서와 매치
      • –comment comment: 커널 메모리 규칙과 연계되는 최대 256바이트 주석(comment: 주석)
      • -y, –syn: SYN 패킷 불허
      • -f, –fragment: 두 번째 이후의 조각 규칙 명시
      • -t table, –table table: 테이블 지정(table: 처리될 테이블)
      • -m module, –module module: 특정 모듈과의 매치
        • iprange: ip 범위 지정
          • –src-range iprange: 출발지 IP 지정(iprange: IP. 127.0.0.1-127.0.0.2 )
            –dst-range iprange: 목적지 IP 지정
        • multiport: 포트 범위 지정
          • –sports ports: 출발지 포트 지정(ports: 포트범위. start:end, 1,2,3)
            –dports ports: 목적지 포트 지정
      • -j target, –jump target: 타깃 지정(target: ACCEPT, DROP, REJECT, LOG)
        • ACCEPT
        • DROP
        • REJECT
        • LOG: 로그 기록
          • –log-level level: 로깅 수준 설정(level: 로깅 레벨)
          • –log-prefix 'prefix' : 로깅시 접두어 설정(prefix: 로깅시 접두어 설정)
    • -P chain target, –policy chain target : 기본 정책 변경
    • -N chain, –new chain : 새로운 체인 추가
    • -X chain, –delete-chain chain : 체인 삭제
  • iptables -A INPUT -p tcp –dport 80 -j ACCEPT: HTTP 정책 추가
  • iptables -D INPUT -p tcp –dport 80 -j ACCEPT: HTTP 정책 삭제
  • iptables -C INPUT -p tcp –dport 80 -j ACCEPT: HTTP 정책 확인
  • iptables -I INPUT 5 -p tcp –dport 80 -j ACCEPT: HTTP 정책을 5번째 줄에 추가

Example

  • ACCEPT: 허용 정책
  • DROP
  • REJECT: 패킷 차단 이유를 출발지에 전달
  • state {state}
    • NEW: 신규 세션
    • RELATED: 연계를 위하여 연결(eg. FTP)
    • ESTABLISHED
  • tcp
  • dpt:{service} : 목적지 서비스명 지정
  • reject-with: REJECT 시 사유 추가
    • icmp-host-prohibited

yum (iptables-services)

  • linux/cli/iptables.txt
  • 마지막으로 수정됨: 2023/12/30 03:08
  • 저자 writer