[linux-l] Erfahrungsbericht: Firewall-Tools

Peter Ross Peter.Ross at alumni.tu-berlin.de
Mo Jan 7 04:06:00 CET 2008


Hi Volker,

On Mon, 7 Jan 2008, Volker Grabsch wrote:

>     http://wiki.njh.eu/Firewall_zu_Hause
> 
> Eine Regel im Texteditor 10x zu kopieren und 10x abzuwandeln
> finde ich viel angenehmer, als sich 10 Regeln zusammenklicken
> zu müssen.

Hier mal eine Skizze für den Ausbau, wenns komplexer wird:

[Dein Vorschlag]

/sbin/iptables -A INPUT -j ACCEPT -p tcp --dport ssh
/sbin/iptables -A INPUT -j ACCEPT -p tcp --dport http

Neu:

in_allowed="ssh http"

for p in ${in_allowed}; do
   /sbin/iptables -A INPUT -j ACCEPT -p tcp --dport ${p}
done

Die Regel einmal geschrieben (weniger fehlerträchtig, auch einfacher zu 
verbessern, wenn sie wirklich falsch sein sollte, einfacher modifizieren, 
falls Du vielleicht mehr Karten reinsteckst, besser zu lesen .. Du kennst 
das ja),

und dann vielleicht

if [ "X${dryrun}" = "Xyes" ]; then
   command="echo /sbin/iptables"
else
   command="/sbin/iptables"
fi

so kannst Du nach jeder Änderung testen.

Ich hatte tatsächlich wesentlich aufwändigere Firewalls, die eine Konfig 
hatten, in der Variablen wie in_allowed, out_allowed standen, und das war 
alles, was ich editierte, nachdem die Regeln einmal geschrieben waren.

Das Gute an solchen selbstgeschriebenen Skripts ist, daß man sie bei 
Bedarf an neue Anforderungen anpassen kann.

Beispiel: neue Interfaces.

ifs="eth0 eth1"

in_allowed="ssh"
in_allowed_eth0="http" #http nur am Interface eth0

for i in ${ifs}; do
  eval in_allowed_if=\$in_allowed_${i}
  for p in ${in_allowed} ${in_allowed_if}; do
     ${command} -A INPUT -j ACCEPT -i ${i} -p tcp --dport ${p}
  done
done

Du brauchst jetzt auch UDP für DNS:

# Start config
ifs="eth0 eth1"
protocols="udp tcp"
in_allowed_udp="domain" 
in_allowed_tcp="ssh" 
in_allowed_tcp_eth0="http" #http nur am Interface eth0
# End config

# Script, no need to read or edit;-)

if [ "X${dryrun}" = "Xyes" ]; then
   command="echo /sbin/iptables"
else
   command="/sbin/iptables"
fi

for i in ${ifs}; do
  for prot in ${protocols}; do
    eval in_allowed=\$in_allowed_${prot}  
    eval in_allowed_if=\$in_allowed_${prod}_${i}
    for p in ${in_allowed} ${in_allowed_if}; do
       ${command} -A INPUT -j ACCEPT -i ${i} -p ${prot} --dport ${p}
    done
  done
done

Usw. usf.

Ich glaube, man kann hier sehen, wo die Stärken von Shellskripts liegen;-)

Eine Firewall sollte nie brennen, genauso wenig wie eine Brandmauer. Wer 
die nicht kennt, sollte die Vorfahren fragen. Wenn die in Berlin oder 
anderen deutschen Städten (oder während des "blitz" in London etc.) gelebt 
haben, wußten sie über Brandmauern sehr früh Bescheid:(

Gruß
Peter


Mehr Informationen über die Mailingliste linux-l