iptables 기본 구조 및 사용법
iptables는 Linux 시스템에서 네트워크 트래픽을 제어하는 핵심 도구입니다. 기본 명령 구조는 다음과 같습니다:
iptables -t 테이블명 옵션 체인 이름 조건 동작
설치 및 시작
- 패키지 설치:
yum install iptables*
- 서비스 시작:
systemctl start iptables
- firewalld 비활성화:
systemctl disable --now firewalld
주요 옵션 설명
| 옵션 | 설명 |
-t | 사용할 테이블 지정 (filter, nat, mangle 등) |
-L | 현재 규칙 목록 출력 |
-v | 패킷 수 및 크기 정보 표시 |
-n | IP 주소를 해석하지 않고 그대로 표시 |
-A | 체인의 끝에 규칙 추가 |
-I | 체인의 처음에 규칙 삽입 |
-F | 모든 규칙 삭제 |
-Z | 패킷 카운터 초기화 |
동작 유형
| 동작 | 설명 |
ACCEPT | 패킷 허용, 이후 규칙 검사 중단 |
REJECT | 거부하고 상대방에게 거부 메시지 전송 |
DROP | 패킷 무시, 후속 처리 없음 |
REDIRECT | 다른 포트로 리디렉션, 다음 규칙 검사 계속 |
네트워크 조건 매칭
-s: 소스 주소 (발신자)
-d: 목적지 주소 (수신자)
--sport: 소스 포트
--dport: 목적지 포트
-i: 들어오는 네트워크 인터페이스
-o: 나가는 네트워크 인터페이스
-p: 프로토콜 지정 (TCP, UDP, ICMP 등)
-m: 모듈 사용 (확장 기능 활성화)
-j: 적용할 동작 지정
실습 사례
- SSH만 허용
iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
- SSH, HTTP, HTTPS만 허용
iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
- 특정 서브넷 접근 제한
iptables -t filter -A INPUT -p TCP -s 192.168.15.71 -d 192.168.15.81 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP
- 외부 통신 차단 (특정 인터페이스)
iptables -t filter -A INPUT -p TCP -i eth0 -j DROP
- 포트 리디렉션 (8080 → 80)
iptables -t nat -A PREROUTING -p TCP --dport 8080 -j REDIRECT --to-port 80
- 특정 시간대 서비스 제한
iptables -t filter -A INPUT -p TCP -m time --timestart 12:00 --timestop 13:00 -j DROP
※ UTC 기준 시간 사용
확장 모듈 활용
multiport: 다중 포트 일괄 처리
iptables -t filter -A INPUT -p TCP -m multiport --dports 22,80,443,30000:50000 -j ACCEPT
iprange: IP 범위 지정
iptables -t filter -A INPUT -p TCP -m iprange --src-range 192.168.15.1-192.168.15.10 -j ACCEPT
string: 문자열 패턴 매칭
iptables -t filter -A INPUT -p TCP -m string --string "HelloWorld" --algo kmp -j DROP
time: 시간 기반 필터링
iptables -t filter -A INPUT -p TCP -m time --timestart 12:00 --timestop 13:00 -j DROP
icmp: ICMP 제어
iptables -t filter -A INPUT -p ICMP -m icmp --icmp-type echo-request -j DROP
connlimit: 동시 연결 수 제한
iptables -t filter -A INPUT -p TCP --dport 22 -m connlimit --connlimit-above 2 -j DROP
limit: 속도 제한
iptables -t filter -A INPUT -p TCP -m limit --limit 333/s --limit-burst 5 -j ACCEPT
시스템 확인 명령어
- 포트 사용 현황 확인:
netstat -nutlp
- 웹 요청 테스트:
curl http://example.com