Hi Leute,
da ich selber weiß wie schwer es für anfänger ist gscheite howto's für eine firewall zu finden hier mal ein leichtverständliches und nutzvolles.
1. Einleitende Worte
In dieser HOWTO wird eine Schritt-für-Schritt-Anleitung zur Konfiguration eines Internetrouters gegeben. Das hier verwendete Paketfilterskript ist für NutzerInnen gedacht, die eine tiefere Auseinandersetzung mit der Thematik scheuen. Daher ist das Skript auch nicht der Weisheit letzter Schluss, biete aber dennoch einen passablen Grundschutz. Es ist auch als Grundlage für eigene Skripte geeignet.
Das Grundprinzip in dem Skript ist es, zuerst allen Netzwerkverkehr zu verbieten um dann wieder nur noch gewünschten zu erlauben. Verkehr ins und vom lokalen Netzwerk (falls vorhanden) wird erlaubt. Aus dem Internet werden nur angeforderte Daten-Pakete erlaubt, so dass es nicht möglich ist, sich aus dem Internet zu einem Serverdienst auf dem Router oder im Netzwerk dahinter zu verbinden.
Wie dies dennoch ermöglicht werden kann, wird im Abschnitt 4 erläutert.
2. Installation
Als Voraussetzung bedarf es einem Kernel aus der 2.4er Serie mit aktiviertem netfilter (das ist die 'Firewall'). Dies ist bei allen 2.4er Kerneln von Debian der Fall. Mit "uname -r" lässt sich die Versionsnummer des verwendeten Kernels ermittlen.
Der Paketfilter (Firewall) im Kernel wird mit Hilfe der iptables-Skripte konfiguriert. Ein "apt-get install iptables" versichert, dass diese installiert sind.
Auf das Einrichten des Internetzugangs wird hier nicht eingegangen. Dies ist sehr gut und sehr ausführlih im Debian Handbuch beschrieben, welches online unter[URL
http://www.openoffice.de/linux/buch/internet.html verfügbar ist.
Auch die Konfiguration eines lokalen Netzwerkes entfällt hier.
Zuerst muss folgendes Skript auf dem Router nach "/etc/init.d/firewall" kopiert werden. Das Skript ist auch über http zu beziehen: [URL
http://www.pimpzkru.de/debian/firewallCode:
wget
http://www.pimpzkru.de/debian/firewall.shcp firewall.sh /etc/init.d/firewall
Hier nun das ganze Skript:
Code:
#!/bin/sh
# Kleine Paketfilterfirewall von Sebastian Heinlein
# 2003 - glatzor at pimpzkru.de
# GRUNDKONFIGURATION
# Schnittstelle zum lokalen Netzwerk
IFACE_INT=eth0
# Internetschnittstelle
IFACE_EXT=ppp+
# Loopback device
IFACE_LO=lo
# SERVERKONFIGURATION
# Ports auf dem Router aus dem Internet zugänglich machen
SERVER_PORTS_TCP="" # Falls dies nicht gewünscht ist, leer Klammer angeben
SERVER_PORTS_UDP="" # Falls dies nicht gewünscht ist, leer Klammer angeben
# Ports an einen Rechner im lokalen Netz weiterleiten
DEST_HOST="10.1.1.2" # Durch die IP-Adresse des Rechner ersetzen
PORTS_TCP="" # Falls dies nicht gewünscht ist, leer Klammer angeben
PORTS_UDP="" # Falls dies nicht gewünscht ist, leer Klammer angeben
# Ab hier nichts mehr editieren!
case "$1" in
start)
echo -n "Starting firewall: iptables"
# Alte Regeln löschen
iptables -F
iptables -F -t mangle
iptables -F -t nat
iptables -X
iptables -X -t mangle
iptables -X -t nat
# ************
# * POLICIES *
# ************
# Default-Policies setzen - alles fliegt raus
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# Einschalten von ip-Forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward
# ***********************
# * EINGEHENDER VERKEHR *
# ***********************
# Soll nicht sein
iptables -A INPUT -p TCP ! --syn -m state --state NEW -j DROP
# Aus dem internen Netz: alles erlauben
iptables -A INPUT -i $IFACE_INT -j ACCEPT
# Über das Loopback: Alles erlauben
iptables -A INPUT -i $IFACE_LO -j ACCEPT
# Vom Internet: Darf nicht sein
iptables -A INPUT -i $IFACE_EXT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i $IFACE_EXT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i $IFACE_EXT -s 192.168.0.0/24 -j DROP
# Verkehr aus dem Internet auf bereits initialisierten Verbindungen erlauben
iptables -A INPUT -i $IFACE_EXT -m state \
--state ESTABLISHED,RELATED -j ACCEPT
# Falls Serverdienste vom Internet zugänglich sein sollen, diese erlauben
if [ "$SERVER_PORTS_TCP" != "" ]; then
iptables -A INPUT -i $IFACE_EXT -m multiport \
--dport $SERVER_PORTS_TCP -j ACCEPT
fi
if [ "$SERVER_PORTS_UDP" != "" ]; then
iptables -A INPUT -i $IFACE_EXT -m multiport \
--dport $SERVER_PORTS_UDP -j ACCEPT
fi
# ****************************
# * WEITERGELEITETER VERKEHR *
# ****************************
# Lokal -> Internet: Alles erlauben
iptables -A FORWARD -i $IFACE_INT -o $IFACE_EXT -j ACCEPT
# Internet -> Lokales: Nur Verkehr über bereits bestehende Verbindungen erlauben
iptables -A FORWARD -i $IFACE_EXT -o $IFACE_INT -m state \
--state ESTABLISHED,RELATED -j ACCEPT
# Internet -> Lokales Netz: Ports die weitergeleitet werden sollen
if [ "$PORTS_TCP" != "" ]; then
iptables -A FORWARD -i $IFACE_EXT -o $IFACE_INT -p tcp -m multiport \
--dport $PORTS_TCP -j DNAT --to $DST_HOST
fi
if [ "$PORTS_UDP" != "" ]; then
iptables -A FORWARD -i $IFACE_EXT -o $IFACE_INT -p udp -m multiport \
--dport $PORTS_UDP -j DNAT --to $DST_HOST
fi
# **********
# * OUTPUT *
# **********
# Ins lokale Netzwerk: Alles erlauben
iptables -A OUTPUT -o $IFACE_INT -j ACCEPT
# Ans Loopback: Alles erlauben
iptables -A OUTPUT -o $IFACE_LO -j ACCEPT
# Ins Internet : Alles erlauben
iptables -A OUTPUT -o $IFACE_EXT -j ACCEPT
# ***********
# * ROUTING *
# ***********
# Umleiten der Ports
if [ "$PORTS_TCP" != "" ]; then
iptables -A PREROUTING -i $IFACE_EXT -p tcp -m multiport \
--dport $PORTS_TCP -j DNAT --to $DST_HOST
fi
if [ "$PORTS_UDP" != "" ]; then
iptables -A PREROUTING -i $IFACE_EXT -p udp -m multiport \
--dport $PORTS_UDP -j DNAT --to $DST_HOST
fi
# Masquerading
iptables -A POSTROUTING -o $IFACE_EXT -t nat -j MASQUERADE
# ***********
# * LOGGING *
# ***********
# Alles was bis hier kommt, mitprotokollieren
iptables -A OUTPUT -j LOG --log-prefix "Nicht raus: "
iptables -A FORWARD -j LOG --log-prefix "Nicht durch: "
iptables -A INPUT -j LOG --log-prefix "Nicht rein: "
echo "."
;;
stop)
echo -n "Stopping firewall: iptables"
# Alte Regeln löschen
iptables -F
iptables -F -t mangle
iptables -F -t nat
iptables -X
iptables -X -t mangle
iptables -X -t nat
# ************
# * POLICIES *
# ************
# Default-Policies setzen - alles bis auf Weiterleitung erlaubt
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Deaktivierung des ip-Forwarding
echo "0" > /proc/sys/net/ipv4/ip_forward
echo "."
;;
restart)
$0 start
;;
status)
iptables -L
;;
*)
echo "Usage: /etc/init.d/firewall start|stop|restart|status"
exit 1
;;
esac
Das Skript muss nun ausführbar gemacht werden:
Code:
chmod 0755 /etc/init.d/firewall
Und dem Benutzer root zugeordnet werden:
Code:
chown root:root /etc/init.d/firewall
3. Anpassen der Grundkonfiguration
Im ersten Abschnitt des Skripts müssen eventuell einige Änderungen durchgeführt werden.
IFACE_INT gibt die Netzwerkschnittstelle ins lokale Netzwerk an. Ist nur eine Netzwerkkarte vorhanden, so bedarf es keiner Änderung.
IFACE_EXT bezeichnet den Namen der Internetschnittstelle. Für Analog-Modem und DSL-NutzerInnen ist hier keine Anpassung erforderlich. Wird ISDN mit dem ipppd verwendet, so muss dieser Wert auf "ippp+" geändert werden.
4. Serverdienste auf dem Router und im lokalen Netz
Soll ein Serverdienst auf dem Router zugänglich sein, müssen die entsprechenden Ports im Konfigurationsabschnitt angegeben werden (SERVER_PORTS_TCP und SERVER_PORTS_UDP). So verlangt zum Beispiel ein Web-Server einen offenen Port 80: "SERVER_PORTS_TCP=80". Sollen mehrer Ports freigeben werden, müssen sie durch ein Komma getrennt werden - es sind maximal 15 möglich.
Das Skript bietet auch noch einen einfachen Weg Ports an einen Rechner im lokalen Netz weiterzuleiten, damit auf diesem ein Serverdienst betrieben werden kann. Hierfür bei DEST_HOST die IP-Adresse des Rechners angeben, zu dem die Ports weitergeleitet werden sollen. PORTS_TCP und PORTS_UDP enthalten die gewünschten Ports.
Es ist darauf zu achten, dass wenn diese Features nicht genutzt werden, die Port-Variablen auf leere "" gesetzt sind. Ansonten kommt es zu Fehlern im Skript.
5. Abschluss
Ist die Konfiguration erfolgt, so kann die Firewall mit folgendem Befehl gestartet werden:
Code:
/etc/init.d/firewall start
Ein Deaktivieren ist ebenfalls möglich. Hierbei wird jedoch das Routing deaktiviert:
Code:
/etc/init.d/firewall stop
Ist die Firewall problemlos gestartet, sollte ein Sicherheitscheck durchgeführt werden. Die Firma sygate bietet hierfür freundlicherweise einen kostenlosen scan auf ihrer Homepage an:
[url
http://scan.sygate.com/Das Skript kann nun mit foglendem Befehl zu den Startskripten mit aufgenommen werden, so dass es automatisch bei jedem Neustart ausgeführt wird:
Code:
update-rc.d firewall defaults
edit: bin grad draufgekommen das der link zum skript net funzt, also dann händisch schreiben. oder mit putty copy paste machen.
was mir noch einfällt, bin grad dabei ein howto für einen ganzen DSL router zu machen, das ich dan posten werde, somit werden sich auch viele fragen die gestellt wurden bzw noch werden von alleine lösen