리눅스의 방화벽 관리를 담당하는 iptables는 커널 레벨의 네트워크 패킷 필터링 프레임워크인 Netfilter를 제어하는 사용자 공간 도구이다.
iptables의 핵심 개념 3가지
테이블 (Table)
패킷을 어떻게 처리할지 목적에 따라 분류한 큰 범주이다.
- filter (기본값): 패킷의 허용/차단을 결정합니다. 가장 많이 사용된다.
- nat: Network Address Translation. 패킷의 출발지나 목적지 IP/포트를 변환할 때 사용한다.
- mangle: 패킷의 헤더(TTL, TOS 등)를 조작할 때 사용한다.
- raw: 연결 추적(Connection tracking)을 우회할 때 사용한다.
체인 (Chain)
패킷이 이동하는 경로를 의미한다.
- INPUT: 외부에서 서버(Local)로 들어오는 패킷
- OUTPUT: 서버(Local)에서 외부로 나가는 패킷
- FORWARD: 서버를 거쳐 다른 네트워크로 통과하는 패킷
- PREROUTING: 라우팅 경로가 결정되기 전 (주로 DNAT에 사용)
- POSTROUTING: 라우팅 경로가 결정된 후 나갈 때 (주로 SNAT에 사용)
타겟 (Target)
규칙에 일치하는 패킷을 어떻게 처리할지를 정의한다.
- ACCEPT: 패킷 통과 허용
- DROP: 패킷 차단 (응답 없이 무시하여 상대방은 타임아웃 발생)
- REJECT: 패킷 차단 (상대방에게 연결 거부 메시지 전송)
- LOG: 패킷 정보를 syslog에 기록 (차단/허용 액션은 취하지 않고 기록만 함)
iptables 기본 문법
iptables -t [테이블] [액션] [체인] [매치조건] -j [타겟]
- -t 옵션을 생략하면 기본적으로 filter 테이블이 적용된다.
- 주요 액션: -A (규칙 추가), -I (규칙 최상단 삽입), -D (규칙 삭제), -L (규칙 조회), -P (기본 정책 설정), -F (모든 규칙 초기화)
iptables 사례 및 예시
특정 IP의 접근을 차단하고 싶을 때
# -I를 써서 최상단 규칙으로 올려 즉시 적용
iptables -I INPUT -s 203.0.113.50 -j DROP
특정 포트 접근을 내부망만 허용할 때
iptables -A INPUT -p tcp -s 10.0.0.0/8 --dport 3306 -j ACCEPT
Dos 공격 방어를 위해 초당 접속 횟수 제한
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
포트 포워딩 (80포트로 오면 8080포트로 전달하기)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
3번째 규칙만 삭제하고 싶을 때
iptables -D INPUT 3
기존 방화벽 규칙 확인 할 때
iptables -L -n -v
특정 IP에서만 SSH 허용할 때
# 특정 IP (192.168.1.100) 에서만 SSH 허용할 경우
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
웹 서버를 운영하기 위해 80(HTTP)번과 443(HTTPS)번 포트를 열 때
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
레드햇 계열에서 설정 저장하기
service iptables save
# 또는
iptables-save > /etc/sysconfig/iptables



💬 댓글 0