Niederösterreichisches Bildungsservice

Masquerading und Firewall

Da das Masquerading bei Linux je nach verwendeter Kernelversion verschieden implementiert wurde, gilt die hier beschriebene Variante nur für die Version SuSE 7.2 ff, wenn die SuSE-Firewall nicht aktiviert ist.

Masquerading ohne Firewall

Alle Befehle und Änderungen müssen vom Benutzer root durchgeführt werden.
Das folgende Masquerade-Skript masquerade wurde für die AHS-NÖ-Standardausstattung von Mag. Gerald STACHL geschrieben:
In der Datei /etc/rc.config muss die Variable START_MASQ mit yes belegt werden, damit das Skript das Masquerading startet. (Wenn die Variable nicht vorhanden ist, kann sie mit einem Editor in diese Datei eingefügt werden.)
#! /bin/sh

. /etc/rc.config

test "$START_MASQ" = yes || exit 0

# Die folgenden Werte für das eigene Netz anpassen:
INTERNAL_NET="10.0.0.0/8"
EXTIP="127.0.0.1"

echo -n "Masquerade starten"

#Alle Regeln löschen
iptables -F
iptables -t nat -F

#Policy setzen
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

#Masquerade definieren
iptables -t nat -A POSTROUTING -s $INTERNAL_NET -d ! $INTERNAL_NET -j SNAT --to $EXTIP

echo -e $rc_done

Das Skript muss mit
chmod 744 masquerade
ausführbar gemacht werden und kann dann mit
./masquerade
gestartet werden.

Masquerading und Firewall

Das folgende Masquerade-Skript firewall stammt ebenfalls von Mag. Gerald Stachl und wurde von Dr. Herwig Reidlinger erweitert.
#! /bin/sh
# allgemeine Variable (bitte an eigene Bedürfnisse anpassen)
CMD="/usr/sbin/iptables"
MDPR="/sbin/modprobe"
modules="_tables table_filter t_LOG t_state table_mangle table_nat _conntrack _conntrack_ftp _nat_ftp"

# Diese Dienste werden immer in beide Richtungen durchgelassen
allowed_ports_tcp="ftp ftp-data https ssh smtp time domain bootps bootpc pop3 ntp imap 1024:"
allowed_ports_udp="fsp ftp-data https ssh smtp time domain bootps bootpc pop3 ntp imap 1024:"

# WWW wird nur für den eigenen Server akzeptiert
allowed_ports_to_server_tcp="www"
allowed_ports_to_server_udp="www"

# Diese Dienste sollen nur im eigenen Schulnetz möglich sein
allowed_ports_from_intern_tcp="telnet sunrpc"
allowed_ports_from_intern_udp="sunrpc"

EXTIP="193.170.0.1"
# Broadcasting-Adresse extern
EXTBC="193.170.0.31"
INTIP="10.0.0.1"
# Broadcasting-Adresse intern
INTBC="10.0.0.255"
INTERNAL_NET="10.0.0.0/8"

# Rechner, die direkt (ohne Proxy) ins WWW dürfen
PRIVILEGDED_IP="10.0.1.1/32 10.0.1.32/27"

# Alle Regeln löschen
$CMD -F
$CMD -t nat -F
$CMD -t mangle -F

# Policy setzen
$CMD -P INPUT  ACCEPT
$CMD -P OUTPUT ACCEPT
$CMD -P FORWARD ACCEPT
$CMD -t nat -P PREROUTING DROP
$CMD -t nat -P POSTROUTING ACCEPT
$CMD -t nat -P OUTPUT ACCEPT
$CMD -t mangle -P PREROUTING ACCEPT
$CMD -t mangle -P OUTPUT ACCEPT

# Module für ftp,.. -Masquerade aktivieren
for mod in $modules 
do
    $MDPR ip$mod
done

# ICMP akzeptieren
$CMD -t nat -A PREROUTING -p icmp -j ACCEPT

# Erlaubte Ports in PREROUTING akzeptieren
for x in $allowed_ports_tcp
do
    $CMD -t nat -A PREROUTING -p tcp --dport $x -j ACCEPT
done
for u in $allowed_ports_udp
do
    $CMD -t nat -A PREROUTING -p udp --dport $u -j ACCEPT
done

# Erlaubte Ports (auf Server) intern/extern in PREROUTING akzeptieren
for x in $allowed_ports_to_server_tcp
do
    $CMD -t nat -A PREROUTING -p tcp -d $EXTIP --dport $x -j ACCEPT
    $CMD -t nat -A PREROUTING -p tcp -d $INTIP --dport $x -j ACCEPT
done
for u in $allowed_ports_to_server_udp
do
    $CMD -t nat -A PREROUTING -p udp -d $EXTIP --dport $u -j ACCEPT
    $CMD -t nat -A PREROUTING -p udp -d $INTIP --dport $u -j ACCEPT
done

# Erlaubte Ports nur innerhalb des internen Netzes
for x in $allowed_ports_from_intern_tcp
do
    $CMD -t nat -A PREROUTING -p tcp -s $INTERNAL_NET -d $INTERNAL_NET --dport $x -j ACCEPT
done
for u in $allowed_ports_from_intern_udp
do
    $CMD -t nat -A PREROUTING -p udp -s $INTERNAL_NET -d $INTERNAL_NET --dport $u -j ACCEPT
done

## MASQUERADE EINRICHTEN
# priviligierte IP dürfen direkt ins Internet (ohne Filter)
for x in $PRIVILEGDED_IP
do
    $CMD -t nat -A PREROUTING -p tcp -s $x -d ! $INTERNAL_NET --dport www -j ACCEPT
    $CMD -t nat -A PREROUTING -p udp -s $x -d ! $INTERNAL_NET --dport www -j ACCEPT
    $CMD -t nat -A POSTROUTING -p tcp -s $x -d ! $INTERNAL_NET --dport www -j SNAT --to $EXTIP
    $CMD -t nat -A POSTROUTING -p udp -s $x -d ! $INTERNAL_NET --dport www -j SNAT --to $EXTIP
done

# Transparenter Proxy
$CMD -t nat -A PREROUTING -p tcp -s $INTERNAL_NET -d ! $INTERNAL_NET --dport www -j REDIRECT --to 3128

# Falls FTP nur über den Proxy möglich sein soll, dann die nächsten Zeilen aktivieren
# $CMD -t nat -A POSTROUTING -p tcp -s $INTERNAL_NET -d ! $INTERNAL_NET --dport ftp -j DROP
# $CMD -t nat -A POSTROUTING -p tcp -s $INTERNAL_NET -d ! $INTERNAL_NET --dport ftp-data -j DROP

# MASQUERADE für den Rest
$CMD -t nat -A POSTROUTING -s $INTERNAL_NET -d ! $INTERNAL_NET  -j SNAT --to $EXTIP

# Zugriffe auf Broadcasting-Adresse abblocken (Smurf-Amplifier)
$CMD -t nat -A PREROUTING -d $EXTBC -j DROP
$CMD -t nat -A PREROUTING -d $INTBC -j DROP

# Nächste Zeile aktivieren, wenn abgewiesene Pakete mitprotokolliert werden sollen (für Fehlersuche)
# $CMD -t nat -A PREROUTING -j LOG

Das Skript muss mit
chmod 744 firewall
ausführbar gemacht werden. Es wird dann mit
./firewall
gestartet. Wenn die letzte Zeile für das Mitprotokollieren aktiviert wurde, findet man in der Datei /var/log/warn die abgewiesenen Datenpakete.
Mit dem Befehl
iptables -L -v
iptables -t nat -L -v
erhält man eine Liste der eingestellten Firewallregeln mit einer Statistik der durchgelassenen bzw. abgelehnten Pakete. Durch den Befehl
./masquerade
kann die Firewall wieder deaktiviert werden.
Bemerkung: Wenn sich im internen Netz ein Novell-Server befindet, werden mit dem obigen Skript Datenpakete (z. B. Protokoll ospfigp, Protokoll udp, Port router) abgelehnt. Sollte die Funktion des Novell-Servers beeinträchtigt sein, müsste man auch dies Pakete durchlassen.
Die Ports bootps und bootpc sind notwendig, wenn Linuxrechner über NFS installiert werden.

Beide Skripts können hier komprimiert als Datei mask_fire.tgz oder mask_fire.zip heruntergeladen werden.

Weitere Informationen bei Mag.Gerald Stachl gerald.stachl@brg-wrn.ac.at.
Unter sta.brg-wrn.ac.at/AG_inf_2002.htm kann eine Powerpoint-Präsentation zu diesem Thema heruntergeladen werden.


1. Seite Linuxrechner als Internetserver Proxy-Server squid Logdateien

Letzte Änderung am 04.04.2003 E-Mail webmaster@pinoe-hl.ac.at.