iptables 명령어 사용법

안녕하세요? 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

 

Was this answer helpful? 1 Users Found This Useful (1 Votes)