Weiter Zurück [Inhalt] Online Suche im Handbuch LITTLE-IDIOT NETWORKING

7. Häufig gestellte Fragen (FAQ)

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.


Weiter Zurück [Inhalt] Online Suche im Handbuch LITTLE-IDIOT NETWORKING