Last active
August 29, 2015 14:15
-
-
Save amineasli/b919c5d6d0d72922874a to your computer and use it in GitHub Desktop.
A simple Stateful Firewall using iptables for a Linux Webserver. The rules are given in an order that will prevent you from immediate disconnection of your SSH session, in case if you are logged into a remote machine.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
iptables -P FORWARD DROP | |
iptables -P OUTPUT ACCEPT | |
iptables -N TCP | |
iptables -N UDP | |
iptables -A INPUT -p icmp --icmp-type echo-request -m recent --name ping_limiter --set | |
iptables -A INPUT -p icmp --icmp-type echo-request -m recent --name ping_limiter --update --hitcount 6 --seconds 4 -j DROP | |
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT | |
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT | |
iptables -A TCP -p tcp --dport 22 -j ACCEPT | |
iptables -P INPUT DROP | |
iptables -A INPUT -i lo -j ACCEPT | |
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP | |
iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP | |
iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP | |
iptables -I TCP -p tcp -m recent --update --seconds 60 --name TCP-PORTSCAN -j REJECT --reject-with tcp-rst | |
iptables -A INPUT -p tcp -m recent --set --name TCP-PORTSCAN -j REJECT --reject-with tcp-rst | |
iptables -I UDP -p udp -m recent --update --seconds 60 --name UDP-PORTSCAN -j REJECT --reject-with icmp-port-unreachable | |
iptables -A INPUT -p udp -m recent --set --name UDP-PORTSCAN -j REJECT --reject-with icmp-port-unreachable | |
iptables -A TCP -p tcp --dport 80 -j ACCEPT | |
iptables -A TCP -p tcp --dport 443 -j ACCEPT | |
iptables -A UDP -p udp --dport 53 -j ACCEPT | |
iptables -A TCP -p tcp --dport 21 -j ACCEPT | |
iptables -A TCP -p tcp --sport 20 -j ACCEPT | |
iptables -A TCP -p tcp --dport 25 -j ACCEPT | |
iptables -A OUTPUT -p udp --dport 123 -j ACCEPT | |
iptables -A INPUT -p udp --sport 123 -j ACCEPT | |
#iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment