Zuerst vielen Dank für die viele positive Resonanz auf mein Handbuch. Einige
Dinge sind sicher noch verbesserungsbedürftig, andere aber auch
beabsichtigt. Hier also die Fragen:
Wenn ich das fertige FirewallSkript starte, erhalte ich viele Fehlermeldungen
!
Das ist wahr. Es fehlen nämlich einige Definitionen von Variablen.
Ohne gültige Variablen oben im Header melden weiter unten einige ipfwadm
Befehle einen Syntaxerror. Um herauszufinden, an welcher Stelle dies
geschieht, kann man einfach an einigen Stellen eine Zeile der Art:
echo "Merker 1"
einsetzen. So findet man die fehlerhaften Zeilen. Dies ist im Grunde von mir
auch so beabsichtigt. Fertige Skripte sind sogar von mir schwer zu
durchblicken, insbesondere diejenigen, die das Firewall Configuration Toolkit
(FCT) so liefert. Siehe hierzu auch
http://www.friedrich-net.de . Besser ist
für Anfänger das Skript
http://www.mindstorm.com/~sparlin/demos/fwconfig/ zu überblicken.
Hier ein Beispiel:
#!/bin/sh
# Firewall Skript built for ipfwadm
# Skript created Sat Jul 17 05:20:19 1999
#
# http://www.mindstorm.com/~sparlin/demos/fwconfig/
#
# Set up variables
INTERNALIP="192.168.1.1"
EXTERNALIP="222.222.222.222"
LOOPBACK="127.0.0.1"
NETWORKIP="192.168.1.0"
ANYWHERE="0.0.0.0/0"
PORTS="1024:65535"
TCP_ALLOWIN="ftp smtp www pop-3 pop"
TCP_ALLOWOUT="tcpmux echo discard systat daytime netstat qotd chargen \
ftp-data ftp telnet smtp time whois domain mtp gopher rje finger www \
link supdup hostnames iso-tsap x400 x400-snd csnet-ns pop-2 pop-3 pop \
sunrpc sunrpc ident sftp uucp-path nntp ntp netbios-ns netbios-dgm \
netbios-ssn imap NeWS exec login shell printer efs tempo courier \
conference netnews uucp remotefs pcserver listen nterm ingreslock tnet\
cfinger lnetxfer netperf"
MASQ_ALLOWIN="discard ftp-data ftp telnet smtp domain www pop-3 ident"
# =====================================
# ========== Incoming Rules ===========
# =====================================
# Flush previous rules
/sbin/ipfwadm -I -f
# Set default policy to deny
/sbin/ipfwadm -I -p deny
# Unlimited traffic within the local network
/sbin/ipfwadm -I -a accept -V "$INTERNALIP" -S "$NETWORKIP" -D "$ANYWHERE"
# =====Deny spoofed packets and log denied requests
/sbin/ipfwadm -I -a deny -V "$EXTERNALIP" -S "$NETWORKIP" -D "$ANYWHERE" -o
# Target
for SERVICES in `echo $TCP_ALLOWIN` ; do
/sbin/ipfwadm -I -a accept -P tcp -V "$EXTERNALIP" -S "$ANYWHERE" \
"$PORTS" -D "$EXTERNALIP" "$SERVICES" -o
done
# Return
for SERVICES in `echo $TCP_ALLOWOUT` ; do
/sbin/ipfwadm -I -a accept -P tcp -S -V "$EXTERNALIP" "$ANYWHERE" "$SERVICES" \
-D "$EXTERNALIP" "$PORTS" -o
done
# Allow ping requests
/sbin/ipfwadm -I -a accept -P icmp -V "$EXTERNALIP" -S "$ANYWHERE" \
-D "$EXTERNALIP" -o
# DNS
/sbin/ipfwadm -I -a accept -P udp -V "$EXTERNALIP" -S "$ANYWHERE" \
-D "$EXTERNALIP"
/sbin/ipfwadm -I -a accept -V "$LOOPBACK" -S "$ANYWHERE" -D "$ANYWHERE"
# Log the rest
/sbin/ipfwadm -I -a deny -S "$ANYWHERE" -D "$ANYWHERE" -o
# =====================================
# ========== Outgoing Rules ===========
# =====================================
# Flush previous rules
/sbin/ipfwadm -O -f
# Set default policy to deny
/sbin/ipfwadm -O -p deny
# Unlimited traffic within the local network
/sbin/ipfwadm -O -a accept -V "$INTERNALIP" -S "$ANYWHERE" -D "$NETWORKIP"
# Logging
/sbin/ipfwadm -O -a deny -V "$EXTERNALIP" -S "$ANYWHERE" -D "$NETWORKIP" -o
/sbin/ipfwadm -O -a deny -V "$EXTERNALIP" -S "$NETWORKIP" -D "$ANYWHERE" -o
# Target
for SERVICES in `echo $TCP_ALLOWOUT`; do
/sbin/ipfwadm -O -a accept -P tcp -S "$EXTERNALIP" "$PORTS" \
-D "$ANYWHERE" "$SERVICES" -o
done
# Return
for SERVICES in `echo $TCP_ALLOWIN`; do
/sbin/ipfwadm -O -a accept -P tcp -S "$EXTERNALIP" "$SERVICES" \
-D "$ANYWHERE" "$PORTS" -o
done
# DNS
/sbin/ipfwadm -O -a accept -P udp -V "$EXTERNALIP" -S "$EXTERNALIP" \
-D "$ANYWHERE"
/sbin/ipfwadm -O -a accept -V "$LOOPBACK" -S "$ANYWHERE" -D "$ANYWHERE"
# Allow ping requests
/sbin/ipfwadm -O -a accept -P icmp -V "$EXTERNALIP" -S "$ANYWHERE" \
-D "$EXTERNALIP" -o
# Log the rest
/sbin/ipfwadm -O -a deny -S "$ANYWHERE" -D "$ANYWHERE" -o
# ======================================
# ========== Forwarded Rules ===========
# ======================================
# Flush previous rules
/sbin/ipfwadm -F -f
# Set default policy to deny
/sbin/ipfwadm -F -p deny
for MSERVICES in `echo $MASQ_ALLOWIN`; do
/sbin/ipfwadm -F -a m -P tcp -S "$NETWORKIP" -D "$ANYWHERE" $MSERVICES -o
done
# DNS
/sbin/ipfwadm -F -a m -P udp -S "$NETWORKIP" -D "$ANYWHERE" domain
# Log the rest
/sbin/ipfwadm -F -a deny -S "$ANYWHERE" -D "$ANYWHERE" -o
S.u.S.E 5.3/6.0/6.1 hat ebenfalls eine nettes Konfigurations - Skript
eingebaut, welches über /etc/rc.config konfiguriert wird. Das
eigentliche Skript, welches die Firewall startet, ist
/sbin/init.d/firewall oder unter /etc/rc.d/ (neuere
Versionen) zu finden. Das Problem mit diesen Skripten ist, daß sie einfach
aussehen, aber fatale Fehler enthalten und einige Dinge nicht korrekt
behandeln, z.B. ICMP Codes. Die Problematik habe ich bereits im
Skript
http://www.little-idiot.de/firewall/workshop2.pdf ausführlich
beschrieben. Hier ein Ausschnitt der Konfigurationsdatei von S.u.S.E.:
FW_START="no"
FW_LOCALNETS=""
FW_FTPSERVER=""
FW_WWWSERVER=""
FW_SSLSERVER=""
FW_SSLPORT="443"
FW_MAILSERVER=""
FW_DNSSERVER=""
FW_NNTPSERVER=""
FW_NEWSFEED=""
FW_WORLD_DEV="eth1"
FW_INT_DEV="eth0"
FW_LOG_ACCEPT="no"
FW_LOG_DENY="yes"
FW_ROUTER=""
FW_FRIENDS="no"
FW_INOUT="no"
FW_SSH="no"
FW_TRANSPROXY_OUT=""
FW_TRANSPROXY_IN=""
FW_REDIRECT=""
FW_TCP_LOCKED_PORTS="1:1023"
FW_UDP_LOCKED_PORTS="1:1023"
# Masquerading settings - See /usr/doc/packages/firewall
# for a detailed deSkription
MSQ_START="no"
MSQ_NETWORKS="192.168.0.0/24"
MSQ_DEV="eth0"
MSQ_MODULES="ip_masq_cuseeme ip_masq_ftp ip_masq_irc ip_masq_quake
ip_masq_raudio ip_masq_vdolive"
Es gibt eine Reihe von Variablen, die Traffic über die Firewall zu
bestimmten Servern im Intranet zulassen. Die Programmierer bei S.U.S.E haben
hier fatale, logische Fehler begangen. Erstens sollten einige Masquerading
Optionen niemals aktiviert werden, und zweitens darf niemals der Zugriff auf
einen Server in der DMZ erlaubt werden, ohne daß dieser selber noch einmal
durch eine Firewall gegenüber dem Intranet abgesichert ist. Server in der DMZ
darf man nicht als sicher betrachten. Den Autoren fehlt offensichtlich noch
etwas Verständnis für die Begriffe "reverse proxy" und die Einsicht darin,
daß Server in der DMZ stets durch "buffer overflows" bedroht sind. Ich
selber habe nach ca. 10 Minuten Suche einen erfolgreichen Angriff auf die S.u.S.E. Konfiguration
(alles nach Handbuch konfiguriert) durchgeführt (S.u.S.E. 6.0 und 6.1 beta).
Wer weiß, was er tut, der kann das Skript durchaus einsetzen, jedoch nicht,
ohne mit Hilfe des IIS noch einmal alles zu verifizieren. Wer aber noch
neu in der Materie ist, der hat auch keine Möglichkeit zu verstehen, was in
dem Skript eigentlich passiert, und sollte dringend die Finger davon lassen.
Als Alternative bietet sich an, obiges Skript um weitere, wichtige Regeln zu
ergänzen, z.B. um die Spoofing - Regeln u.s.w.
|