Errata zu "Das Firewall Buch"

1. Auflage 2001

Start-Scripte

Bis zur Fertigstellung des Buches verwendete SuSE /sbin/init.d als Pfad für die Init-Scripte (bis einschließlich SuSE Linux 7.0). Seit SuSE 7.1 finden sich die Init-Scripte in /etc/init.d.

Außerdem gibt es seit SuSE 7.1 eine Neuordnung der Runlevels:
  • 2 = Multiuser ohne Netzwerk (vorher: Netzwerk ohne X11)
  • 3 = Multiuser mit Netzwerk (vorher: Netzwerk + X11)
  • 5 = Multiuser, Netzwerk, X11-Oberfläche (neu)
Die Festlegungen beschreiben nur die Absicht, aber meist nicht exakt das, was tatsächlich gestartet wird. Da auch im Runlevel 2 das Script "network" gestartet wird (Setzen der Netzwerkinterfaces), sollte das Firewallscript in den Runleveln 2, 3 und 5 gestartet werden. Bei anderen Distributionen als SuSE ist der Punkt entsprechend zu prüfen.

Es empfiehlt sich insbesondere bei Updates - nicht nur von SuSE bis 7.0 auf höhere Versionen -immer zu prüfen, ob die Firewallscripte auch tatsächlich beim Systemstart schon ausgeführt werden. Ein einfaches iptables -nvL zeigt, ob und welche Regeln gesetzt wurden.

ab Kernel 2.4.10
Die Kernelparameter bezüglich  icmp in /proc/sys/net/ipv4 wurden klammheimlich geändert, so daß die meisten Scripte im Buch hier auf einen Fehler liefen. Seit Kernel 2.4.19 gibt es wieder Dokumentation dazu im Kernelbaum:

/usr/src/linux/Documentation/networking/ip-sysctl.txt, dort nach "icmp_" suchen.

Tip:

echo "5" > /proc/sys/net/ipv4/icmp_ratelimit

tut es erstmal, wer möchte, kann sich den Parameter icmp_ratemask in der Doku genauer vornehmen, er besitzt aber eine brauchbare Defaulteinstellung.

smpppd, nicht existente Devices zum Zeitpunkt des Firewall-Script-Aufrufes Der smpppd (ab SuSE 7.3) startet die Devices ziemlich spät, nach den Beispielen im Buch kann es gerade bei x-DSL zu folgender Fehlermeldung kommen:

/proc/sys/net/ipv4/conf/ppp0/rp_filter : no such file or directory

Die Scripte kann man hier so abändern, daß nicht einzelne Devices wie ppp0, sondern "default" (und/oder "all") gesetzt wird. Dann muß das Interface zum Zeitpunkt des Scriptstartes nicht existieren:

echo "1" > /proc/sys/net/ipv4/conf/{all,default}/rp_filter

Seite 40 traceroute sendet das erste Paket mit TTL=1 (nicht TTL=0).
Seite 43

Die Skizze ist leider ziemlich falsch. Generell nummerieren beide Seiten unabhängig von einander die Sequenzen. Ein ACK ist dann die letzte Sequenznummer der Gegenseite +1.

Das Verbindungsende ist in der Zeichnung auch falsch. Das Ende wird eingeleitet mit einem FIN-Flag. Die Bestätigung des FIN-Flags ist ein normales ACK-Paket (ohne gesetztes FIN-Flag), das einfach das Paket mit dem FIN-Flag bestätigt.

In der Gegenrichtung funktioniert das ebenso. Ein Paket mit gesetztem FIN-Flag wird ebenfalls mit einem normalen ACK (ohne FIN) bestätigt. Verkompliziert wird das durch den Umstand, daß der Server etwa auf ein FIN-Flag vom Client im nächsten Paket dieses mit ACK bestätigt und gleichzeitig ein FIN setzt (ebenfalls Einleitung Verbindungsende). Damit sind dann nur 3 Pakete statt 4 zum vollständigen Verbindungsende erforderlich.

Seite 70 Erster grauer Kasten: wenn geprüft werden soll, ob das ACK gesetzt ist, gleichzeitig aber das SYN-Flag gelöscht ist, muß das Beispiel so aussehen:
iptables -A INPUT -p TCP --tcp-flags SYN,ACK ACK ...
Seite 71 Bei der Option -m multiport muß das Schlüsselwort für die Portangabe im Plural angegeben werden:
--source-ports
--destination-ports
--ports
Seite 82 Zweiter grauer Kasten: wenn in allen Regelketten die erste Filterregel ein DROP sein soll, muß das so aussehen:
iptables -I INPUT 1 -j DROP
iptables -I FORWARD 1 -j DROP
iptables -I OUTPUT 1 -j DROP

Im Buch steht bei FORWARD und OUTPUT ein -P für Default Policy. (Dank an Samuel Kerschbaumer für den Hinweis).

Seite 214
Beispiel mit SMTP, POP3: die 4 Regel hat vertauschte Source-/Destination-Ports:


$IPTABLES -A INPUT -p TCP --dport $p_high \
          -s $mail --sport pop3 ! --syn -j ACCEPT

Seite 217
Noch ein --sport/--dport Tip-Fehler:

$IPTABLES -A INPUT -p TCP -s $FRIEND --sport ssh \
                           ! --syn  --dport $p_ssh -j ACCEPT

Seite 224 Das Präfix für den Runlevel-Link sollte S06 statt S04 betragen:
/etc/init.d/rc2.d/S06fw_surfer
/etc/init.d/rc3.d/S06fw_surfer

/etc/init.d/rc5.d/S06fw_surfer
Begründung: die Netzwerkinterfaces werden erst über S05network gestartet. Existiert das Netzwerkinterface nicht, klappen die Einstellungen via /proc/sys/net/ipv4/conf/<interface> nicht, weil das Unterverzeichnis <interface noch nicht existiert.

Auf jeden Fall ab SuSE 7.1 den Runlevel 5 nicht vergessen, bei anderen Distributionen entsprechend anpassen.

Seite 238
Seite 256
Seite 275
Seite 297
Seite 302

Fast alle Scripte enthalten weit vorne eine Regel, die eingehenden Verbindungsaufbau generell ablehnt:

# ----------------------------------------------------------
# Rückkanal: eingehende Pakete zu einer bestehenden Verbindung

$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -m state --state NEW,INVALID -j my_drop

Soll die ident-Abfrage (eingehende Verbindung) wie vorgeschlagen am Ende des Scriptes rejected werden, muß entweder die REJECT-Regel vor der INPUT-Regel mit --state NEW,INVALID stehen, oder man streicht die Regel ganz (nicht erlaubte Pakete werden ja sowieso am Ende über die Ausputzerregel abgefangen).

Seite 300 Das richtige Interface im Script für den äußeren Paketfilter exa nach drinnen muß lauten:
set DMZ = eth0

Im Text steht eth1:0

Seite 309
Die Angabe --to-source ist falsch, richtig muß es heißen:

$IPTABLES -t nat -A PREROUTING -i $EXT  \
  -p TCP --sport $p_high --dport http \
-j DNAT --to-destination $httpsrv

Seite 317
Die Angabe --to-source ist falsch, richtig muß es heißen:

$IPTABLES -t nat -A PREROUTING -i $INT \
  -p TCP --sport $p_high --dport 80 \
-j DNAT --to-destination ${squidsrv}:3128

Natürlich stimmt auch der Kommentar in der Überschrift nicht: das Beispiel hat nichts mit FTP zu tun.

Anhang C: SSH Im Text angegeben ist, daß die Konfiguration für ssh und openssh im wesentlichen identisch ist. Das ist auch richtig. Aber es gibt kleine Inkompatibilitäten:
  • Seite 436: Parameter AllowHosts ist nur bei ssh gültig, openssh kennt den Parameter nicht.
Literatur-Verzeichnis [BSI99] ist unter die Räder gekommen: der richtige Eintrag heißt:
[BSI99] Bundesamt für Sicherheit in der Informationstechnik, Herausgeber. IT-Grundschutzhandbuch, Band 3. Bundesanzeiger Verlag, Bonn, 1999

Das Buch bei Amazon.de bestellen:

Sitemap   Impressum   Druckansicht