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
는 해당 패킷을 허용하는 작업을 수행한다.