Einfache Firewall für Rootserver mit iptables Für alle Linux Destributionen
#!/bin/sh -e #ROOTSERVER IP ROOTSERVER="10.23.45.10" #Chains flushen und Chains löschen iptables -F iptables -X # Erstmal alles in die Tonne iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # Drop to Log iptables -N block_in iptables -A block_in -j LOG --log-prefix "FW DROP IN: " --log-level info iptables -A block_in -j DROP iptables -N block_out iptables -A block_out -j LOG --log-prefix "FW DROP OUT: " --log-level info iptables -A block_out -j DROP # Incoming Traffic (normal) iptables -N allow_in # Outgoing Traffic (normal) iptables -N allow_out # Incoming Traffic (special) iptables -N special_in # Outgoing Traffic (special) iptables -N special_out # Loopback iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # DHCP Client weil Rootie IP von DHCP bekommt iptables -A INPUT -i eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT iptables -A OUTPUT -o eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT ################################################################# ### Incoming Traffic ################################################################# #ICMP Allow iptables -A allow_in -d $ROOTSERVER -p icmp --icmp-type echo-request -j ACCEPT iptables -A allow_in -d $ROOTSERVER -p icmp --icmp-type echo-reply -j ACCEPT iptables -A allow_in -d $ROOTSERVER -p icmp --icmp-type destination-unreachable -j ACCEPT #Apache / Pound(SSL) iptables -A allow_in -d $ROOTSERVER -p tcp --dport 80 -j ACCEPT #SSL iptables -A allow_in -d $ROOTSERVER -p tcp --dport 443 -j ACCEPT #Exim SMTP (SSL) / Courier POP3/IMAP (SSL) iptables -A allow_in -d $ROOTSERVER -p tcp --dport 25 -j ACCEPT iptables -A allow_in -d $ROOTSERVER -p tcp --dport 110 -j ACCEPT iptables -A allow_in -d $ROOTSERVER -p tcp --dport 143 -j ACCEPT # SSL iptables -A allow_in -d $ROOTSERVER -p tcp --dport 993 -j ACCEPT iptables -A allow_in -d $ROOTSERVER -p tcp --dport 995 -j ACCEPT #PowerDNS iptables -A allow_in -d $ROOTSERVER -p udp --dport 53 -j ACCEPT #Serververkehr der reingeht iptables -A allow_in -d $ROOTSERVER -p udp --sport 53 -j ACCEPT iptables -A allow_in -d $ROOTSERVER -p tcp --sport 25 -j ACCEPT iptables -A allow_in -d $ROOTSERVER -p tcp --sport 80 -j ACCEPT iptables -A allow_in -d $ROOTSERVER -p tcp --sport 443 -j ACCEPT iptables -A allow_in -d $ROOTSERVER -p tcp --sport 22 -j ACCEPT ################################################################# ################################################################# ################################################################# ### Outgoing Traffic ################################################################# # ICMP Allow iptables -A allow_out -s $ROOTSERVER -p icmp --icmp-type echo-reply -j ACCEPT iptables -A allow_out -s $ROOTSERVER -p icmp --icmp-type echo-request -j ACCEPT iptables -A allow_out -s $ROOTSERVER -p icmp --icmp-type destination-unreachable -j ACCEPT # Apache / Pound iptables -A allow_out -s $ROOTSERVER -p tcp --sport 80 -j ACCEPT # SSL (nicht sicher) iptables -A allow_out -s $ROOTSERVER -p tcp --sport 443 -j ACCEPT #Exim SMTP (SSL) / Courier POP3/IMAP (SSL) iptables -A allow_out -s $ROOTSERVER -p tcp --sport 25 -j ACCEPT iptables -A allow_out -s $ROOTSERVER -p tcp --sport 110 -j ACCEPT iptables -A allow_out -s $ROOTSERVER -p tcp --sport 143 -j ACCEPT #SSL iptables -A allow_out -s $ROOTSERVER -p tcp --sport 993 -j ACCEPT iptables -A allow_out -s $ROOTSERVER -p tcp --sport 995 -j ACCEPT #PowerDNS iptables -A allow_out -s $ROOTSERVER -p udp --sport 53 -j ACCEPT #Serververkehr der rausgeht iptables -A allow_out -s $ROOTSERVER -p udp --dport 53 -j ACCEPT iptables -A allow_out -s $ROOTSERVER -p tcp --dport 25 -j ACCEPT iptables -A allow_out -s $ROOTSERVER -p tcp --dport 80 -j ACCEPT iptables -A allow_out -s $ROOTSERVER -p tcp --dport 443 -j ACCEPT iptables -A allow_out -s $ROOTSERVER -p tcp --dport 22 -j ACCEPT ################################################################# ################################################################# ### Rules ################################################################# ## Incoming Traffic iptables -A INPUT -j allow_in iptables -A INPUT -j special_in iptables -A INPUT -j block_in ## Outgoing Traffic iptables -A OUTPUT -j allow_out iptables -A OUTPUT -j special_out iptables -A OUTPUT -j block_out
Denjenigen, die per SSH auf den Server zugreifen, sei folgende Zeile ans Herz gelegt:
iptables -A allow_in -d $ROOTSERVER -p tcp –dport 22 -j ACCEPT
Gruß,
Malte