내가 현재 관리 중인 서버의 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; #..............................................................
Leave a Reply