Post

iptables 옵션 정리

iptables 옵션 정리

2024 사이버보안 전국기능경기대회 준비 겸 정리한다.
매번 iptables 문제만 만나면 허우적대는것같다..ㅋㅋㅋ

iptables란?

iptables는 리눅스 운영체제에서 네트워크 트래픽을 필터링하고 관리하는 데 사용되는 방화벽 도구이다.
iptables는 리눅스 커널 내의 네트워크 패킷 필터링 프레임워크인 netfilter를 사용한다.
이를 통해 사용자는 들어오고 나가는 네트워크 패킷을 제어할 수 있다.

iptables 명령어 구조

1
iptables [-t 테이블] [액션] [체인] [매치] [-j 타겟]

기본적으로 iptables는 위와 같은 명령어 구조를 가진다.

테이블

  • filter : 기본 테이블, 패킷 필터링
  • nat : Network Address Translation, IP 주소 변환
  • mangle : 패킷 데이터를 변경하는 규칙 혹은 성능 향상을 위한 TOS(Type of Service)
  • raw : 넷필터의 연결 추적 하위 시스템과 독립 동작
  • security : SELinux 정책에서 사용

체인

  • FORWARD : 시스템을 경유하는 패킷
  • INPUT : 외부에서 내부로 들어오는 패킷
  • OUTPUT : 내부에서 외부로 나가는 패킷
  • POSTROUTING : SourceNAT(SNAT) 타켓과 매칭되어 내부 네트워크에서 방화벽을 통해 외부로 나갈 때 사용
  • PREROUTING : DestinationNAT(DNAT) 타켓과 매칭되어 주로 외부에서 방화벽 내부 서버로 향하는 패킷을 방화벽이 보호하는 내부 서버로 포워딩 할 때 사용
  • <custom chain> : -N 옵션으로 생성

매치

  • -p : 프로토콜 이름이나 숫자
  • -s : 출발지 (source)
  • -d : 목적지 (destination)
  • -i : 입력 인터페이스
  • -o : 출력 인터페이스
  • --sport : 출발지 포트
  • --dport : 목적지 포트
  • --tcp-flags : TCP 플래그
  • --syn : SYN 플래그
  • -v : 자세한 정보 출력
  • --line-numbers : 줄 번호 출력
  • -m : 특정 모듈 사용
  • --state : 연결 상태
  • --string : 어플리케이션 계층 데이터 바이트 순서
  • --comment : 주석

타겟

  • ACCEPT : 패킷을 받아들인다.
  • DROP : 패킷을 버린다(패킷이 전송된 적이 없던 것처럼).
  • REJECT : 패킷을 버리고 이와 동시에 적절한 응답 패킷을 전송한다.
  • LOG : 패킷을 syslog에 기록한다.
  • RETURN : 현재 체인의 처리 규칙을 중단하고 호출 체인으로 돌아간다.
  • SNAT : 출발지 IP 주소를 변경한다 (주로 POSTROUTING 체인에서 사용).
  • DNAT : 목적지 IP 주소를 변경한다 (주로 PREROUTING 체인에서 사용).
  • MASQUERADE : 출발지 IP 주소를 동적으로 변경한다 (주로 NAT 테이블에서 사용).
  • REDIRECT : 패킷을 지정된 포트로 리다이렉트한다.

iptables 명령어 예시

1. 특정 IP 주소에서 들어오는 패킷 차단

1
iptables -A INPUT -s 192.168.1.100 -j DROP

192.168.1.100 IP 주소에서 들어오는 모든 패킷을 차단한다.
-A INPUT은 입력 체인에 규칙을 추가하고, -s 192.168.1.100은 출발지 IP 주소를 지정하며, -j DROP은 해당 패킷을 버리는 작업을 수행한다.

2. 특정 포트로 들어오는 패킷 허용

1
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

22번 포트, 즉 22번 포트로 들어오는 SSH 패킷만을 허용한다.
-A INPUT으로 입력 체인에 규칙을 추가하고, -p tcp를 이용해서 TCP 프로토콜을 지정하고, --dport 22로 목적지 포트를 지정하며 -j ACCEPT은 패킷을 허용하는 작업을 수행한다.

3. 특정 네트워크에서 오는 패킷 로그 기록

1
iptables -A INPUT -s 192.168.0.0/24 -j LOG --log-prefix "Network 192.168.0.0/24: "

192.168.0.0/24 네트워크에서 들어오는 모든 패킷을 로그로 기록한다.
-A INPUT은 입력 체인에 규칙을 추가하고, -s 192.168.0.0/24는 출발지 네트워크를 지정하며, -j LOG는 로그 기록을 지정하고, --log-prefix "Network 192.168.0.0/24: "는 로그 메시지에 추가될 접두사를 지정한다.

4. 특정 포트에서 나가는 패킷을 다른 포트로 리다이렉트

1
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

NAT 테이블의 PREROUTING 체인에 규칙을 추가하여 포트 80(주로 HTTP)으로 들어오는 TCP 패킷을 포트 8080으로 리다이렉트한다.
-t nat는 NAT 테이블을 지정하고, -A PREROUTING은 PREROUTING 체인에 규칙을 추가하며, -p tcp는 TCP 프로토콜을 지정하고, --dport 80은 목적지 포트를 지정하며, -j REDIRECT --to-port 8080은 패킷을 포트 8080으로 리다이렉트한다.

5. 포트 80과 443에서 들어오는 패킷 허용

1
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

TCP 프로토콜을 사용하고 포트 80(HTTP)과 443(HTTPS)으로 들어오는 모든 패킷을 허용한다.
-A INPUT은 입력 체인에 규칙을 추가하고, -p tcp는 TCP 프로토콜을 지정하며, -m multiport --dports 80,443은 여러 목적지 포트(HTTP와 HTTPS 포트)를 지정하고, -j ACCEPT는 해당 패킷을 허용하는 작업을 수행한다.

This post is licensed under CC BY 4.0 by the author.