Linux Firewall mit ipchains

Surfen benötigt auch DNS

Das Surfen im Internet wird bis jetzt nicht funktionieren, da DNS-Anfragen der Firewall in Richtung Internet noch verboten sind. Die nächsten Filterregeln helfen hier weiter und erlauben UDP.

# DNS -> Internet (UDP) + Antwort
ipchains -A output -i ppp0 -p udp --sport 32768:60999 --dport 53 -j ACCEPT
ipchains -A input -i ppp0 -p udp --sport 53 --dport 32768:60999 -j ACCEPT

Wenn allerdings Antworten auf DNS-Anfragen eine Paketgröße von 512 Bytes überschreiten, wird dem Surfen ein jähes Ende gesetzt. Der Transport der DNS-Daten schaltet dann nämlich automatisch auf TCP um. Aus diesem Grund muss dies auch erlaubt werden:

# DNS -> Internet (TCP) + Antwort
ipchains -A output -i ppp0 -p tcp --sport 32768:60999 --dport 53 -j ACCEPT
ipchains -A input -i ppp0 -p tcp --sport 53 --dport 32768:60999 ! -y -j ACCEPT

Beim Regelsatz für DNS-Anfragen über UDP sollte eine Warnlampe beim Firewall-Administrator aufleuchten! Da der Linux-Kernel 2.2.x nur statische Filter zur Verfügung stellt, kann jeder beliebige Host im Internet über ein geeignetes Werkzeug (etwa netcat) eine UDP-Verbindung mit Quellport 53 zu einem Port zwischen 32768 und 60999 auf die Firewall aufbauen. Eventuell sind jedoch UDP-Dienste auf solchen Ports aktiv, die sich nicht an eine bestimmte, interne Schnittstellenadresse binden lassen. Werden diese Ports nicht extra gegen eingehende Pakete geblockt, dann entsteht hier ein massives Sicherheitsloch. Ein Beispiel für einen dedizierten Portblocker (hier Port 40000) wäre:

# Dedizierter Portblocker (mit Log) wegen eines von intern benötigten Dienstes auf diesem Port
ipchains -A input -i ppp0 -p tcp --dport 40000 -j DENY -l
ipchains -A input -i ppp0 -p udp --dport 40000 -j DENY -l