Da ich ein Server habe, der mit einer öffentlichen IP-Adresse direkt im Netz steht, ist eine Firewall unumgänglich.
Da ich natürlich Linux einsetze spricht alles für iptables.
Sobald ich aber mein Firewall-Skript starte laufen alle Netzwerkverbindungen sehr viel langsamer. Vorallem ftp (ca. 40s bis Login erscheint, danach weitere 40s für LIST Command). Nameserver anfrage laufen gar nicht mehr! (auch bei iptables -A output -j ACCEPT) Ich danke das ist ein Timeout problem. SSH läuft auch sehr langsam
Wenn ich das Skript nicht lade läuft alles wunderbar.
Ich poste nachfolgend mal mein Skript und hoffe, dass jemand ein Fehler entdeckt oder mir möglichkeiten nennen kann, wie sich das Problem eingrenzen lässt!
Vielen Dank
Code: Select all
# Bereits existierende Regeln löschen
iptables -F
# Voreinstellung: Unbekannte Pakete dürfen nicht passieren
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# INPUT Regeln
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 1024: ! --syn -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT # FTP Data
iptables -A INPUT -p udp --dport 20 -j ACCEPT # FTP Data
iptables -A INPUT -p tcp --dport 21 -j ACCEPT # FTP
iptables -A INPUT -p udp --dport 21 -j ACCEPT # FTP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH
iptables -A INPUT -p udp --dport 22 -j ACCEPT # SSH
iptables -A INPUT -p tcp --dport 25 -j ACCEPT # SMTP
iptables -A INPUT -p udp --dport 25 -j ACCEPT # SMTP
iptables -A INPUT -p tcp --dport 53 -j ACCEPT # DNS
iptables -A INPUT -p udp --dport 53 -j ACCEPT # DNS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT # MySQL
iptables -A INPUT -p udp --dport 3306 -j ACCEPT # MySQL
# auth-Anfragen werden mit einer Fehlermeldung an den Absender verweigert.
# Das beschleunigt den Aufbau zu Servern, die eine ident-Anfrage durchführen.
iptables -A INPUT -p tcp --dport auth -j REJECT --reject-with tcp-reset
# Fragmentierte ICMP-Pakete blockieren
iptables -A INPUT -p icmp --fragment -j LOG
iptables -A INPUT -p icmp --fragment -j DROP
# Bestimmte ICMP-Pakete erlauben
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type source-quench -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A INPUT -p icmp --icmp-type parameter-problem -j ACCEPT
# Manche Ereignisse kommen so häufig vor, dass ich sie im Protokoll nicht
# sehen will.
iptables -A INPUT -p udp --dport netbios-ns -j DROP
# Alles andere wird zunächst protokolliert und dann gesperrt.
iptables -A INPUT -j LOG
iptables -A INPUT -j DROP
# OUTPUT Regeln
# NUR ZUM TESTEN: Alle Pakete senden
# iptables -A OUTPUT -j ACCEPT
# Pakete nach Loopback
iptables -A OUTPUT -o lo -j ACCEPT
# Bestimmte UDP-Pakete
iptables -A OUTPUT -p udp --sport 1024: --dport 53 -j ACCEPT # domain/udp
#iptables -A OUTPUT -p udp --dport 7091 -j ACCEPT # nautilus
# Wir betreiben ein paar Server
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT # our sshd
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT # our httpd
#iptables -A OUTPUT -p tcp --sport 113 -j ACCEPT # our authd
# TCP-Pakete von lokalen Client-Programmen
iptables -A OUTPUT -p tcp --sport 1024: --dport 21 -j ACCEPT # ftp
iptables -A OUTPUT -p tcp --sport 1024: --dport 22 -j ACCEPT # ssh
iptables -A OUTPUT -p tcp --sport 1024: --dport 23 -j ACCEPT # telnet
iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT # smtp
iptables -A OUTPUT -p tcp --sport 1024: --dport 37 -j ACCEPT # time
iptables -A OUTPUT -p tcp --sport 1024: --dport 43 -j ACCEPT # whois
iptables -A OUTPUT -p tcp --sport 1024: --dport 53 -j ACCEPT # domain/tcp
iptables -A OUTPUT -p tcp --sport 1024: --dport 79 -j ACCEPT # finger
iptables -A OUTPUT -p tcp --sport 1024: --dport 80 -j ACCEPT # www
iptables -A OUTPUT -p tcp --sport 1024: --dport 110 -j ACCEPT # pop-3
iptables -A OUTPUT -p tcp --sport 1024: --dport 119 -j ACCEPT # nntp
iptables -A OUTPUT -p tcp --sport 1024: --dport 143 -j ACCEPT # imap2
iptables -A OUTPUT -p tcp --sport 1024: --dport 443 -j ACCEPT # https
iptables -A OUTPUT -p tcp --sport 1024: --dport 554 -j ACCEPT # Real G2
# Abgehende TCP-Verbindungen sind erlaubt, wenn auf beiden Enden der
# Verbindung ein unsicherer Port benutzt wird. Unsicher, aber für
# passives FTP notwendig, sofern -m state nicht benutzt wird.
iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -j ACCEPT
# Alternative: Das Zustandsmodul erlaubt aktives und passives FTP
# (beachten Sie auch die entsprechende Regel in der INPUT-Chain!)
#iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Bestimmte ICMP-Pakete erlauben
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
# Der Rest wird protokolliert und gesperrt. Bei TCP-Verbindungen senden
# wir eine Fehlermeldung an unser eigenes Programm, damit wir nicht auf
# den langwierigen Timeout warten müssen.
iptables -A OUTPUT -j LOG
iptables -A OUTPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A OUTPUT -j DROP