You cannot see this page without javascript.

메뉴 건너뛰기

WHKorea

 

 

iptables [-t table] command [match] [target\jump]

-A(--appebd) : 규칙을 추가한다
-N(--new-chain) : 새로운 체인 생성
-X(--delete-chain) : 체인 제거
-P(--policy) : 체인 기본 정책 변경
-L(--list) : 체인의 규칙 상태 보기
-F(--flush) : 체인내의 모든 규칙 제거
-Z(--zero) : 체인내의 모든 규칙의 패킷과 바이트의 카운트를 0으로 초기화
-D(--delete) : 규칙을 삭제
-R(--relace) : 새로운 규칙으로 대체
-I(--insert) : 체인의 가장 처음에 규칙을 추가한다
-E(--rename-chain) : 체인의 이름을 변경한다

INPUT : 로컬로 들어오는 패킷
FORWARD : INPUT 와 OUTPUT 역할, 라우터에 방화벽을 적용할때 쓰임
OUTPUT : 외부로 나가는 패킷
  • 기존정책
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
  • 루프백 허용
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
  • DNS 포트 허용
iptables -A FORWARD -p udp -m udp --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
  • ICMP Ping 허용
iptables -A OUTPUT -o eth0 -p icmp --icmp-type echo-request -j ACCEPT
iptables -A FORWARD -i eth0 -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp --icmp-type echo-reply -j ACCEPT

 

 

예시 - 필자가 사용하고 있는 방화벽 스크립트

아래 스크립트에서 IP부분 첫줄과 두번째줄 적절히 수정후 실행한뒤

/etc/init.d/iptables save 하면 다음 재기동때에 적용된다.

 

#!/bin/sh

MyIP="xxx.xxx.xxx.xxx"
MyIP2="xxx.xxx.xxx.xxx"
IPTABLE=/sbin/iptables

$IPTABLE -F
$IPTABLE -X
$IPTABLE -t nat -F
$IPTABLE -P INPUT DROP
$IPTABLE -P FORWARD DROP
$IPTABLE -P OUTPUT ACCEPT
$IPTABLE -A INPUT -p tcp -m state --state INVALID -j DROP
$IPTABLE -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLE -A INPUT -p icmp -j ACCEPT
$IPTABLE -A INPUT -i lo -j ACCEPT
$IPTABLE -A INPUT -p tcp -d 0/0 --dport auth -j ACCEPT
#$IPTABLE -A INPUT -p tcp ! --syn --sport 21 --dport 1024: -s 0/0 -j ACCEPT
#$IPTABLE -A INPUT -p tcp --sport 50000:50100 --dport 1024: -s 0/0 -j ACCEPT

 

# Name service
$IPTABLE -A INPUT -p udp -s $MyIP --sport 53 --dport 0: -j ACCEPT
$IPTABLE -A INPUT -p udp -s $MyIP2 --sport 53 --dport 0: -j ACCEPT
$IPTABLE -A INPUT -p udp -s 168.126.63.1 --sport 53 --dport 0: -j ACCEPT
$IPTABLE -A INPUT -p udp -s 168.126.63.2 --sport 53 --dport 0: -j ACCEPT
$IPTABLE -A INPUT -p udp -s any/0 --sport 0: -d $MyIP --dport 53 -j ACCEPT
$IPTABLE -A INPUT -p udp -s any/0 --sport 0: -d $MyIP2 --dport 53 -j ACCEPT
$IPTABLE -A INPUT -p udp -s any/0 --sport 53 -d $MyIP --dport 0: -j ACCEPT
$IPTABLE -A INPUT -p udp -s any/0 --sport 53 -d $MyIP2 --dport 0: -j ACCEPT

 

# All service
$IPTABLE -A INPUT -p all -s 211.233.81.73 -d $MyIP -j ACCEPT
$IPTABLE -A INPUT -p all -s 211.233.81.73 -d $MyIP2 -j ACCEPT
 

 

# Broad Cast Drop
#$IPTABLE -A INPUT -p all -s 211.233.73.127 -d $MyIP -j DROP
#$IPTABLE -A INPUT -p all -s 211.233.81.127 -d $MyIP -j DROP
#$IPTABLE -A INPUT -p all -s 222.231.6.191 -d $MyIP -j DROP

 

# Web Service Port
$IPTABLE -A INPUT -p tcp -s any/0 --sport 1024: -d $MyIP --dport 80 -j ACCEPT
$IPTABLE -A INPUT -p tcp -s any/0 --sport 1024: -d $MyIP2 --dport 80 -j ACCEPT
#$IPTABLE -A INPUT -p tcp -s any/0 --sport 1024: -d $MyIP2 --dport 80 -j ACCEPT
#$IPTABLE -A INPUT -p tcp -s any/0 --sport 1024: -d $MyIP --dport 9000 -j ACCEPT
#$IPTABLE -A INPUT -p tcp -s any/0 --sport 1024: -d $MyIP --dport 8000 -j ACCEPT
#$IPTABLE -A INPUT -p tcp -s any/0 --sport 1024: -d $MyIP --dport 8008 -j ACCEPT
#$IPTABLE -A INPUT -p tcp -s any/0 --sport 1024: -d $MyIP --dport 8009 -j ACCEPT

 

#Mail Service Port
#$IPTABLE -A INPUT -p tcp -s any/0 --sport 1024: -d $MyIP --dport 25 -j ACCEPT
#$IPTABLE -A INPUT -p tcp -s any/0 --sport 1024: -d $MyIP --dport 110 -j ACCEPT

 

#FTP Service Port
$IPTABLE -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
$IPTABLE -A INPUT -p tcp -m tcp --sport 21 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
$IPTABLE -A INPUT -p tcp -m tcp --dport 50000:50100 -j ACCEPT
$IPTABLE -A INPUT -p tcp -m tcp --sport 50000:50100 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT

 

#MySQL Service Port
#$IPTABLE -A INPUT -p tcp -s any/0 --sport 1024: -d $MyIP --dport 3306 -j ACCEPT
 

# SSH Service
$IPTABLE -A INPUT -p tcp -s any/0 --sport 1024: -d $MyIP --dport 208 -j ACCEPT
$IPTABLE -A INPUT -p tcp -s any/0 --sport 1024: -d $MyIP2 --dport 208 -j ACCEPT
#$IPTABLE -A INPUT -p tcp -s any/0 --sport 1024: -d $MyIP2 --dport 208 -j ACCEPT

 

# Samba Service
#$IPTABLE -A INPUT -p tcp -s any/0 --sport 1024: -d $MyIP2 --dport 137 -j ACCEPT
#$IPTABLE -A INPUT -p tcp -s any/0 --sport 1024: -d $MyIP2 --dport 138 -j ACCEPT
#$IPTABLE -A INPUT -p tcp -s any/0 --sport 1024: -d $MyIP2 --dport 139 -j ACCEPT
#$IPTABLE -A INPUT -p tcp -s any/0 --sport 1024: -d $MyIP2 --dport 445 -j ACCEPT

 

# IP DROP
#$IPTABLE -A INPUT -p all -s 191.96.249.97 -d $MyIP -j DROP ##2017_03_07_10_56##hack-ip

...

.

.

.

 

비정상 패킷 차단

 

DNS UDP size 512byte 이상의 패킷을 차단

iptables -A INPUT -p udp  --dport 53 -m length --length 512: -j DROP

 

DNS 5초동안 5번 쿼리 발생시 해당패킷 차단

iptables -A INPUT -p udp --dport 53 -m recent --name ddos2 --set

iptables -A INPUT -p udp --dport 53 -m recent --name ddos2 --update --second 5 --hitcount 5 -j DROP

 

Hulk DoS 공격 방어

# 30개 이상의 concurrent connection에 대한 차단
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP

 

비정상적인 TCP FLAG 조합

SYN_FIN 조합

iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP

SYN_FIN 변형 조합

iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

FIN 패킷 차단
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j DROP

NULL 패킷 차단
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

모든플래그조합 패킷 차단 (UAPRSF) - X-mas scan
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

 

위조된 TCP SYN 패킷을 차단
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

 

웹서버에 초당 10번 들어오는 패킷 차단

iptables -A INPUT -p tcp --syn --dport 80 -m limit --limit 10/s -j DROP

 

웹서버에 대한 같은 네트워크대역에서 10번 동식 접속하는 TCP SYN flooding 차단

iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-abobe 10 --connlimit-mask 24 -j DROP

iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

 

 

FTP 상태기반 오픈설정

Atcive Mode/Passive Mode

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    #Atcive Mode/Passive Mode

iptables -A INPUT -m state --state NEW -p tcp --dport 21 -J ACCEPT   #Atcive Mode/Passive Mode

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -J ACCEPT #Atcive Mode

 

SSH Brute Force/Dictionary Attack 차단 룰 설정 : 60초 이내에 5번 이상 연결요청이 차단

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

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

 

위로