You cannot see this page without javascript.

진주성 블로그 방문하기

 

 

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

 

번호 제목 날짜 조회 수
95 국제공통 평가 기준 표준 (CC:Common Criteria) 2017.11.09 248
94 정보통신망법 2017.11.09 97
93 IoT 보안 2017.11.08 87
92 접근통제 참조모델 2017.11.07 143
91 쉘쇼크(Shellshock) 2017.11.07 116
90 악성코드의 종류 2017.11.07 383
89 디지털 포렌직 조사의 일반원칙 2017.11.07 92
88 ftp 보안 취약점및 대책 2017.11.05 538
87 Dos 공격유형 및 차단 2017.11.03 721
86 command file 2017.11.01 959
85 ICMP 2017.11.01 1049
84 아파치 웹서버 보안설정 file 2017.11.01 3419
83 HTTP Header 2017.11.01 112
82 IPv4, IPv6 2017.11.01 108
81 OSI 7 Layer 2017.11.01 214
진주성 블로그 방문하기
CLOSE