현재 운영 중인 iptables
이상없이 돌아가고 있기 때문에 그대로 쓰면 된다.
#!/bin/bash
#################################################################
# Title : A simple firewall for home users #
# Version : 1.1 #
# Tested-on : ubuntu 11.04//sbin/iptables v1.4.4 #
# Author : Brian Jung (09/17/2011) #
# Copyright : N/A #
# Note : Thanks to Ubuntu Korea users #
#################################################################
##[ COMMON ROUTINE ]##############################################
## Variables ##
##################################################################
HOME=$(ifconfig -a eth0 | awk '/(cast)/ { print $2 }' | cut -d ':' -f2 | head -1);
iPGroup_BLACKLIST="";
# Block Services - 닫을 포트를 여기에 추가한다.
portGroup_KNOWN_SERVICE="21 23 25 53 69 79 87 110 111 161 512 513 514 515 540 631 1080 1214 2000 2049 4288 5000 6000 6001 6002";
# Must be open for SSH
port_SSH="22";
##[ COMMON ROUTINE ]##############################################
## Initialize ##
##################################################################
#........................................remove previous policies
/sbin/iptables --flush;
/sbin/iptables --delete-chain;
/sbin/iptables --zero;
/sbin/iptables --table nat --flush;
/sbin/iptables --policy INPUT ACCEPT;
/sbin/iptables --policy FORWARD ACCEPT;
/sbin/iptables --policy OUTPUT ACCEPT;
#.....................................................DROP::ALL
/sbin/iptables --policy INPUT DROP;
/sbin/iptables --policy FORWARD DROP;
/sbin/iptables --policy OUTPUT DROP;
#......................................ACCEPT::incoming traffic
/sbin/iptables --append INPUT --in-interface lo --jump ACCEPT;
#......................................ACCEPT::outgoing traffic
/sbin/iptables --append OUTPUT --jump ACCEPT;
#..............................................................
##[ COMMON ROUTINE ]##############################################
## Start using internet(TCP,UDP) ##
##################################################################
#............................................ACCEPT::INPUT::ALL
/sbin/iptables --append INPUT --in-interface eth0 --match state --state NEW,ESTABLISHED,RELATED --jump ACCEPT;
/sbin/iptables --append INPUT --in-interface eth0 --match state --state NEW,ESTABLISHED,RELATED --jump ACCEPT;
#..............................................................
###############################################################
## Customized area(WARNING::DO NOT USE '--destination-port') ##
###############################################################
#..............................................DROP::black list
for IPLIST in $iPGroup_BLACKLIST
do
/sbin/iptables --table filter --insert INPUT --protocol tcp --source $IPLIST --destination $HOME --jump DROP;
done;
#.............................................REJECT::KNOWN.PORT::STEALTH
for STEALTH_PORT in $portGroup_KNOWN_SERVICE;
do
/sbin/iptables --table filter --insert INPUT --protocol tcp --match state --state NEW,ESTABLISHED --source 0/0 --source-port $STEALTH_PORT --jump REJECT;
/sbin/iptables --table filter --insert OUTPUT --protocol tcp --match state --state ESTABLISHED --source $HOME --source-port $STEALTH_PORT --jump REJECT;
done;
#...................................................ACCEPT::ssh
for IPLIST in $iPGroup_USER_SSH;
do
/sbin/iptables --table filter --insert INPUT --protocol tcp --match state --state NEW,ESTABLISHED --source $IPLIST --source-port $port_SSH --destination $HOME --jump ACCEPT;
/sbin/iptables --table filter --insert OUTPUT --protocol tcp --match state --state ESTABLISHED --source $HOME --source-port $port_SSH --destination $IPLIST --jump ACCEPT;
done;
##################################################################
## Block known attacks ##
##################################################################
#.............................................. DROP::port scan
/sbin/iptables --new-chain port-scan;
/sbin/iptables --append port-scan --protocol tcp --tcp-flags SYN,ACK,FIN,RST RST --match limit --limit 1/s --jump RETURN;
/sbin/iptables --append port-scan --jump DROP;
#....................................................DROP::ping
/sbin/iptables --append INPUT --protocol icmp --match icmp --icmp-type echo-request --jump DROP;
/sbin/iptables --append OUTPUT --protocol icmp --match icmp --icmp-type echo-reply --jump DROP;
#.....................................DROP::no syn flood attack
/sbin/iptables --new-chain syn-flood;
/sbin/iptables --append syn-flood --protocol tcp --syn --match limit --limit 1/s --limit-burst 4 --jump ACCEPT;
/sbin/iptables --append syn-flood --protocol tcp --syn --jump DROP;
#..............................................................
##################################################################
## Log ##
##################################################################
#......................................................examples
#/sbin/iptables --append INPUT --jump LOG --log-prefix "FIREWALL:INPUT ";
#/sbin/iptables --append FORWARD --jump LOG --log-prefix "FIREWALL:FORWARD";
#/sbin/iptables --append OUTPUT --jump LOG --log-prefix "FIREWALL:OUTPUT ";
#..............................................................
##[ COMMON ROUTINE ]###########################################
## End of traffic ##
###############################################################
#................................................can be omitted
/sbin/iptables --append INPUT --jump DROP;
/sbin/iptables --append OUTPUT --jump DROP;