iptables · 핵심 요약 & 실습
01 / 13
정의

방화벽이란?

  • 네트워크를 통과하는 패킷을 검사하여 미리 정한 정책에 따라 허용하거나 차단하는 기능(또는 시스템)
  • 리눅스에서는 Netfilter가 방화벽 기능을 담당 — 즉, Netfilter가 실제 방화벽
  • iptables는 Netfilter에게 "이렇게 동작해라"고 규칙을 등록하는 관리 프로그램
Netfilter

리눅스 커널에 내장된 방화벽 프레임워크

패킷 필터링, 상태 기반(Stateful) 패킷 검사, NAT(Network Address Translation) 등의 기능을 제공한다. iptables와 nftables는 이러한 Netfilter 기능을 설정·관리하기 위한 사용자 공간 도구다.

LINUX FIREWALL

iptables

미리 정의된 보안 정책에 따라 트래픽을 검사하고 허용·차단하는 보안 시스템

What
Table
무슨 일을 할 것인가
→
When
Chain
언제 처리할 것인가
→
How
Rule
어떻게 처리할 것인가
iptables의 구조

Table → Chain → Rule

WHAT

Table

목적별 작업 공간 — 허용/차단, NAT, 패킷 수정 등

WHEN

Chain

패킷이 처리되는 시점 — 들어올 때, 나갈 때, 전달될 때

HOW

Rule

실제 동작 정의 — 조건에 맞으면 허용/차단/변환

패킷을 처리할 목적에 따라 여러 테이블로 나뉘고, 각 테이블 안에는 패킷이 검사받는 타이밍인 체인이 있으며, 체인에는 실제 동작을 정의하는 규칙이 순서대로 등록된다.

bash
iptables -A INPUT -p tcp --dport 22 -j ACCEPT   # filter(기본) · INPUT · 22번 허용
iptables의 구조 · 상세

패킷 한 개가 처리되는 순서

Step 1
Table 진입
목적에 맞는 테이블로
→
Step 2
Chain 통과
해당 시점의 체인으로
→
Step 3
Rule 순차 검사
위 → 아래로 하나씩
→
Step 4
Target 실행
일치 시 동작 확정
계층질문의미
Table무슨 일을 할 것인가?허용/차단, NAT, 패킷 수정 등 목적별 작업 공간
Chain언제 처리할 것인가?들어올 때 · 나갈 때 · 전달될 때 등 처리 시점
Rule어떻게 처리할 것인가?조건에 맞는 패킷을 허용·차단·주소 변경하는 실제 동작

☆ 하나의 체인에는 여러 Rule이 존재하며, 가장 먼저 조건이 일치한 Rule에서 처리가 끝난다 — 그 아래 Rule은 검사되지 않는다.

동작 비교

DROP vs REJECT

규칙에 따라 패킷을 ACCEPT · DROP · REJECT 중 하나로 처리한다

항목DROPREJECT
동작조용히 버림거부 응답 전송
상대방 경험타임아웃까지 대기즉시 거부 확인
보안성포트 존재 은닉차단 사실 노출
적합한 곳외부 공개 서버내부망 · 개발 환경
테이블

5가지 테이블

테이블역할주 사용 사례
filter패킷 허용/차단방화벽 설정 (가장 많이 사용)
nat주소 변환포트 포워딩, 공유기 NAT
mangle패킷 헤더 수정QoS, TTL 변경, 패킷 마킹
rawconntrack 제어성능 최적화, 특수 환경
securitySELinux 연동보안 정책 적용
체인 (Chain)

패킷이 지나가는 경로

filter 테이블

INPUT / OUTPUT / FORWARD

외부→서버, 서버→외부, 경유(라우팅) 패킷을 각각 검사

nat 테이블

PREROUTING / POSTROUTING / OUTPUT

라우팅 전 목적지 변경(DNAT), 라우팅 후 출발지 변경(SNAT)

※ 라우팅은 커널이 수행 — iptables는 그 패킷을 검사·허용·차단·수정(NAT)할 뿐

규칙 (Rule)

Match + Target, 그리고 순서

조건 → 동작
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
위 → 아래 순서로 검사
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP                # SSH만 허용, 나머지 차단
자주 쓰는 옵션

Match & Target

조건 (Match)

  • -p tcp/udp/icmp
  • -s / -d 출발지 · 목적지 IP
  • --dport / --sport 포트
  • -m conntrack --ctstate 연결 상태

동작 (Target)

  • ACCEPT 허용
  • DROP 조용히 버림
  • REJECT 거부 응답
  • DNAT / SNAT / MASQUERADE 주소 변환
실전 예시

기본 방화벽 & 포트 포워딩

filter 테이블
# 기존 연결 허용
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# SSH / HTTP 허용
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 나머지 전부 차단
iptables -A INPUT -j DROP
nat 테이블 · 포트 포워딩
iptables -t nat -A PREROUTING -p tcp --dport 2222 \
  -j DNAT --to-destination 192.168.1.100:22
실습 01

80 · 8080 포트만 허용

iptables
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 80   -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -P INPUT DROP
PASS 8080에서 실행한 Python 웹서버 → Host IP 접속 성공
BLOCK 그 외 포트 접속 → connection timed out
실습 02

SSH를 특정 IP에만 허용

iptables
iptables -A INPUT -s 172.16.X.X -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
PASS 허용된 PC에서 SSH 접속 성공
BLOCK 그 외 PC에서 SSH 접속 차단

규칙 순서 원칙: 허용(ACCEPT)을 먼저, 차단(DROP)을 나중에 — 위에서부터 검사되기 때문

실습 03

규칙 확인 · 카운터 · 초기화

확인
# 규칙 및 패킷/바이트 카운터 확인
iptables -L -n -v

# 번호와 함께 목록 → 특정 규칙 삭제
iptables -L --line-numbers -n
iptables -D INPUT <번호>
전체 초기화
iptables -F
iptables -X
iptables -P INPUT   ACCEPT
iptables -P OUTPUT  ACCEPT
iptables -P FORWARD ACCEPT

pkts/bytes 증가 확인 → 규칙 삭제 확인 → 전체 초기화 후 iptables -L -n -v로 최종 확인