리눅스 서버를 운영하거나 보안을 공부하다 보면 반드시 만나게 되는 것이 바로 iptables입니다.
iptables는 리눅스에서 네트워크 패킷을 필터링하고 제어하는 강력한 도구로, 일종의 방화벽(Firewall) 역할을 합니다.
이번 글에서는 iptables의 기본 개념부터 실전 명령어까지 정리해보겠습니다.
iptables는 리눅스 커널의 Netfilter 기능을 기반으로 동작하는 사용자 공간 도구입니다.
네트워크를 통해 들어오고 나가는 패킷을 규칙(rule)에 따라 허용하거나 차단할 수 있습니다.
✔ 쉽게 말하면:
"들어오는 트래픽과 나가는 트래픽을 내가 원하는 대로 통제하는 시스템"
iptables는 다음과 같은 구조로 이루어져 있습니다:
Table → Chain → Rule
iptables에는 여러 테이블이 존재합니다.
filter : 기본 테이블 (패킷 허용/차단)nat : IP 변환 (포트포워딩 등)mangle : 패킷 수정raw : 연결 추적 제외각 테이블에는 체인이 존재합니다.
INPUT : 들어오는 패킷OUTPUT : 나가는 패킷FORWARD : 다른 곳으로 전달되는 패킷체인 안에 있는 실제 필터링 규칙입니다.
예:
iptables -L
iptables -A INPUT -s 192.168.0.10 -j DROP
192.168.0.10에서 오는 모든 패킷 차단
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
# 초기화
iptables -F
# 기본 정책
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
# 로컬 허용
iptables -A INPUT -i lo -j ACCEPT
# 기존 연결 허용
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# SSH 허용 (22번 포트)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# HTTP 허용
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
최근 접속 기록 확인 (3회 이상이면 차단)
iptables -A INPUT -p tcp --dport 22 \
-m recent --name SSH --update --seconds 60 --hitcount 3 -j DROP
접속 시도 기록 추가
iptables -A INPUT -p tcp --dport 22 \
-m recent --name SSH --set -j ACCEPT
iptables는 기본적으로 재부팅하면 사라집니다.
iptables-save > /etc/iptables.rules
또는
netfilter-persistent save