*filter # accept established connections -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # accept local traffic -A INPUT -i lo -j ACCEPT -A OUTPUT -o lo -j ACCEPT # accept ping -A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT # accept ssh with rate limiting -N LOGREJECTSSH -A LOGREJECTSSH -j LOG --log-prefix "iptables deny: " --log-level 7 -A LOGREJECTSSH -j REJECT -A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --set --name SSH --rsource -A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 --name SSH --rttl --rsource -j LOGREJECTSSH -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT # drop invalid -A INPUT -m conntrack --ctstate INVALID -j DROP # reject all others (linux compliant blacklist) -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable -A INPUT -p tcp -j REJECT --reject-with tcp-rst -A INPUT -j REJECT --reject-with icmp-proto-unreachable # drop forwards -A FORWARD -j DROP COMMIT