듀에코르다의 익스트림 네가티브

lively using firewall script for iptables 9 개월 전

적당한 옵션으로 커널이 컴파일되어 있고 ip_tables 등의 필요한 모듈이 로드되는 시스템이 필요하겠지...


http://en.gentoo-wiki.com/wiki/Iptables


그 다음엔 스크립트다.


의도는 대충 다음과 같다.

 

1. 모두 DROP하는 정책이다.

2. 외부에서 내부로 ssh 접속을 허용한다. (port 22)

3. 내부에서 외부로 ssh 연결을 허용한다. (port 22)

4. http와 https 역시 양방향 모두 허용한다. (port 80, 443)

5. 내부에서 외부로 DNS 쿼리를 허용한다.  (port 53)

6. svn 연결을 양방향 모두 허용한다. (port 3690)

7. 포트 스캔 등을 로깅하고 드랍한다.

8. 핑을 제한적으로 허용한다.

....


firewall 구동 스크립트다.

#!/bin/bash

IPT="sudo /sbin/iptables"

$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP

$IPT -N check_flags
$IPT -F check_flags
$IPT -N allow_in
$IPT -F allow_in
$IPT -N allow_out
$IPT -F allow_out
$IPT -N allowed_connection
$IPT -F allowed_connection

$IPT -A allowed_connection -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A allowed_connection -j DROP

$IPT -A check_flags -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/minute -j LOG --log-level alert --log-prefix "NMAP-XMAS:"
$IPT -A check_flags -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPT -A check_flags -p tcp --tcp-flags ALL ALL -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "XMAS:"
$IPT -A check_flags -p tcp --tcp-flags ALL ALL -j DROP
$IPT -A check_flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "XMAS-PSH:"
$IPT -A check_flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPT -A check_flags -p tcp --tcp-flags ALL NONE -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "NULL_SCAN:"
$IPT -A check_flags -p tcp --tcp-flags ALL NONE -j DROP
$IPT -A check_flags -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/minute -j LOG --log-level 5 --log-prefix "SYN/RST:"
$IPT -A check_flags -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPT -A check_flags -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/minute -j LOG --log-level 5 --log-prefix "SYN/FIN:"
$IPT -A check_flags -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

$IPT -N icmp_allowed
$IPT -F icmp_allowed
$IPT -A icmp_allowed -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A icmp_allowed -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPT -A icmp_allowed -p icmp -j LOG --log-prefix "Bad ICMP traffic:"
$IPT -A icmp_allowed -p icmp -j DROP

$IPT -A allow_in -m limit --limit 1/second -p tcp --tcp-flags ALL RST --dport 22 -j ACCEPT
$IPT -A allow_in -m limit --limit 1/second -p tcp --tcp-flags ALL FIN --dport 22 -j ACCEPT
$IPT -A allow_in -m limit --limit 1/second -p tcp --tcp-flags ALL SYN --dport 22 -j ACCEPT

$IPT -A allow_in -p tcp --sport 80 -j ACCEPT
$IPT -A allow_in -p tcp --sport 443 -j ACCEPT
$IPT -A allow_in -p tcp --dport 80 -j ACCEPT
$IPT -A allow_in -p tcp --dport 443 -j ACCEPT

$IPT -A allow_in -p udp --sport 53 -j ACCEPT

$IPT -A allow_in -p tcp --sport 3690 -j ACCEPT

$IPT -A allow_out -p tcp --sport 22 -j ACCEPT

$IPT -A allow_out -p tcp --dport 80 -j ACCEPT
$IPT -A allow_out -p tcp --dport 443 -j ACCEPT
$IPT -A allow_out -p tcp --sport 80 -j ACCEPT
$IPT -A allow_out -p tcp --sport 443 -j ACCEPT

$IPT -A allow_out -p udp --dport 53 -j ACCEPT

$IPT -A allow_out -p tcp --dport 3690 -j ACCEPT

$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A INPUT -p icmp -j icmp_allowed
$IPT -A INPUT -j check_flags
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -j allow_in
$IPT -A INPUT -j allowed_connection
$IPT -A FORWARD -m state --state INVALID -j DROP
$IPT -A FORWARD -p icmp -j icmp_allowed
$IPT -A FORWARD -j check_flags
$IPT -A FORWARD -o lo -j ACCEPT
$IPT -A FORWARD -j allow_in
$IPT -A FORWARD -j allowed_connection
$IPT -A OUTPUT -m state --state INVALID -j DROP
$IPT -A OUTPUT -p icmp -j icmp_allowed
$IPT -A OUTPUT -j check_flags
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A OUTPUT -j allow_out
$IPT -A OUTPUT -j allowed_connection

 

firewall 해제 스크립트다.

#!/bin/bash

IPT="sudo /sbin/iptables"

$IPT -F
$IPT -X

$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT


iptables...... 꽤 어렵다.... 위의 내용만 꾸역꾸역 이해하고 있는 정도... 자유롭게 사용하기는 아직 어려움이 많네...




가까운 글

Games
Junks
Search
Recent Articles
Recent Comments
Blogroll