В общем не так давно писал скрипт для небольшого сервера, думаю сгодиться кому-нибудь.
#!/bin/bash
IPT=iptables
EC=echo
#############################################
$IPT -F
$IPT -X
$IPT -t filter -F
$IPT -t mangle -F
$IPT -t nat -X
$IPT -t filter -X
$IPT -t mangle -X
##############################################
$EC 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all #отключаем пинг
$EC 1 > /proc/sys/net/ipv4/tcp_syncookies #Для защиты от syn флуда
$EC 30 > /proc/sys/net/ipv4/tcp_fin_timeout #Сколько секунд ожидать приема FIN до полного закрытия сокета
$EC 14400 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established # Время ожидания до закрытия соединения
$EC 0 > /proc/sys/net/ipv4/tcp_sack # Запрещаем selective acknowledgements, RFC2018
$EC 0 > /proc/sys/net/ipv4/tcp_timestamps # Запрещаем TCP timestamps, RFC1323
################################################
$IPT -P INPUT DROP #Что не разрешенно, то запрещенно
$IPT -t filter -A INPUT -i lo -j ACCEPT #Loop-back accept all
$IPT -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #any established or related conns are welcome
#Молчать на сканирование
$IPT -t filter -A INPUT -p icmp --icmp-type timestamp-request -j DROP
$IPT -t filter -A OUTPUT -p icmp --icmp-type timestamp-reply -j DROP
$IPT -t filter -A INPUT -p tcp --tcp-flags ALL NONE -j DROP # All of the bits are cleared
$IPT -t filter -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP # SYN and FIN are both set
$IPT -t filter -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP # SYN and RST are both set
$IPT -t filter -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP # FIN and RST are both set
$IPT -t filter -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP #FIN is the only bit set,without the expected accompanying ACK
$IPT -t filter -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP #PSH is the only bit set,without the expected accompanying ACK
$IPT -t filter -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP #URG is the only bit set,without the expected accompanying ACK
$IPT -t filter -A INPUT -p tcp -m multiport --dports 137:139 -j DROP # netbios - ignore
$IPT -t filter -A INPUT -p udp -m multiport --dports 137:139 -j DROP # netbios - ignore
$IPT -t filter -A INPUT -p tcp -m tcp --dport 111 -j DROP #rpcbind - ignore
$IPT -t filter -A INPUT -p tcp -m tcp --dport 135 -j DROP #msrpc - ignore
$IPT -t filter -A INPUT -p tcp -m tcp --dport 136 -j DROP #profile - ignore
$IPT -t filter -A INPUT -p tcp -m tcp --dport 445 -j DROP #microsoft-ds - ignore
#Открытые порты
$IPT -t filter -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT #апач
$IPT -t filter -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT #фтп
$IPT -t filter -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT #ssh
$IPT -t filter -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT #bind