안녕하세요? WEBPD.NET 서버운영팀입니다.
* 기본적인 명령어 용법
|
iptables [-t table명] 명령어 [룰] [타겟] |
* 테이블 설정
-t filter 또는 -t nat 또는 -t mangle, 설정하지 않으면 filter 테이블로 인식
* 기본 명령어
|
- |
설명 |
예시 |
|
-A |
제일 끝에 룰을 추가 |
> iptables -A INPUT |
|
-D |
룰을 테이블에서 삭제 |
> iptables -D INPUT -p tcp --dport 80 -j DROP > iptables -D INPUT 1 |
|
-I |
제일 처음에 룰을 추가 |
> iptables -I INPUT -p tcp --dport 80 -j ACCEPT |
|
-L |
chain 의 룰 목록 |
> iptables -L INPUT |
|
-F |
모든 룰을 삭제 |
> iptables -F INPUT |
|
-N |
새로운 chain 을 생성. |
> iptables -N TEST |
|
-X |
지정한 chain 을 삭제 |
> iptables -X TEST |
|
-P |
기본정책(ACCEPT, DROP, REJECT) 설정 |
> iptables -P INPUT DROP |
* 룰
-s [IP 또는 IP대역]
-d [IP 또는 IP대역]
-p tcp [--sport] [--dport] [--tcp-flags] [--syn] [--tcp-option]
-p udp [--sport] [--dport]
-p icmp [--icmp-type]
-m state --state
-m [기타 매칭 확장]
[기타 매칭 확장] : mac, limit, owner, unclean, connlimit, recent
* 타겟
-j [정책]
정책 : ACCEPT, DROP, REJECT, LOG
* 패킷 필터 작성 예
|
케이스 |
작성 룰 |
|
위조된 TCP SYN 패킷 차단 |
> iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
|
|
웹서버 TCP SYN Flooding 공격 대응 |
> iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP 또는 > iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP |
|
비정상 TCP 플래그 조합(SYN_FIN 플래그) 차단 |
> iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP |
|
비정상 TCP 플래그 조합(SYN_FIN 플래그 변형) 차단 |
> iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP |
|
비정상 TCP 플래그 조합(FIN 스캔) 차단 |
> iptables -A INPUT -p tcp --tcp-flags ALL FIN -j DROP |
|
비정상 TCP 플래그 조합(NULL 스캔) 차단 |
> iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP |
|
비정상 TCP 플래그 조합(XMAS 스캔) 차단 |
> iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP |
|
SSH Brute Force/ Dictionary Attack 차단 |
> iptables -A INPUT -m state --state NEW -p tcp --dport 22 -m recent --name SSH_DROP --set > iptables -A INPUT -m state --state NEW -p tcp --dport 22 -m recent --name SSH_DROP --update --seconds 60 --hitcount 5 -j DROP |
