/엔지니어/네트워킹 / 서버/iptables 실전 — 룰 추가·NAT·포트포워딩
네트워킹 / 서버중급UbuntuDebianCentOSiptables방화벽NAT

iptables 실전 — 룰 추가·NAT·포트포워딩

iptables 체인 구조부터 입출력 필터링, NAT 마스커레이딩, 포트포워딩, 룰 영구 저장까지 실무 방화벽 설정을 정리합니다.

체인 구조

CODE
패킷 수신
    ↓
PREROUTING (NAT)
    ↓
라우팅 판단
    ├── 로컬 프로세스 → INPUT → 프로세스 → OUTPUT → 송신
    └── 포워딩 → FORWARD → POSTROUTING → 송신

테이블 종류: filter (기본), nat, mangle, raw


기본 명령

Bash
# 현재 룰 조회
sudo iptables -L -n -v --line-numbers

# NAT 테이블 조회
sudo iptables -t nat -L -n -v

# 특정 체인만
sudo iptables -L INPUT -n -v

기본 정책 설정

Bash
# 기본 DROP (화이트리스트 방식)
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# 로컬루프백 허용
sudo iptables -A INPUT -i lo -j ACCEPT

# 기존 연결 유지
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH 허용 (잠기지 않도록 가장 먼저!)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# HTTP / HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# ICMP (ping)
sudo iptables -A INPUT -p icmp -j ACCEPT

특정 IP 차단·허용

Bash
# IP 차단
sudo iptables -A INPUT -s 203.0.113.0/24 -j DROP

# IP 허용 (특정 포트)
sudo iptables -A INPUT -s 10.0.0.0/8 -p tcp --dport 5432 -j ACCEPT

# 차단 룰 삭제 (줄 번호 사용)
sudo iptables -L INPUT --line-numbers
sudo iptables -D INPUT 3    # 3번째 룰 삭제

# 특정 룰 삭제
sudo iptables -D INPUT -s 203.0.113.0/24 -j DROP

NAT 마스커레이딩 (인터넷 공유)

Bash
# IP 포워딩 활성화
echo 1 > /proc/sys/net/ipv4/ip_forward
# 영구 적용: /etc/sysctl.conf에 net.ipv4.ip_forward = 1

# NAT 설정 (인터넷 공유, eth0이 외부 인터페이스)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

포트포워딩

Bash
# 80 → 내부 서버 8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:8080
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 8080 -j ACCEPT

# 로컬 포트 리다이렉션 (3000 → 80, 루트 없이)
sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 3000

룰 영구 저장

Bash
# Ubuntu / Debian
sudo apt install -y iptables-persistent
sudo netfilter-persistent save
sudo netfilter-persistent reload

# CentOS / RHEL
sudo service iptables save
# 저장 위치: /etc/sysconfig/iptables

# 수동 저장·복원
sudo iptables-save > /etc/iptables/rules.v4
sudo iptables-restore < /etc/iptables/rules.v4

전체 룰 초기화

Bash
sudo iptables -F        # 모든 룰 삭제
sudo iptables -X        # 사용자 정의 체인 삭제
sudo iptables -t nat -F
sudo iptables -P INPUT ACCEPT   # 정책을 ACCEPT로 복원
#iptables#방화벽#NAT#포트포워딩#linux
편집 안내 · Editorial Note

이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.

관련 공식 문서GNU/Linux man 페이지

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.