URL: https://www.overclockers.at/linux/fuer_alle_die_mal_einen_dsl_router_aufbauen_wollen_87446/page_1 - zur Vollversion wechseln!
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/firewall
Code:
wget http://www.pimpzkru.de/debian/firewall.sh
cp 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
hab das script grad am rennen gefallt mir muss ich sagen
hau evtl irgendwo im comment deine webpage rein
kenn mich ja nicht so aus aber was ist der grund hierfuer
Zitatchmod 0755 /etc/init.d/firewall
naja vermutlich damit nicht root user nicht die firewall config verpfuschen
Zitatchown root:root /etc/init.d/firewall
squid => http://www.squid-handbuch.de/
Thx fürs script
Wollte gerade den Kernel compilieren und da gibts leider einen Haufen von Sachen die mit masquerading usw. zu tun haben.
Gibts da irgendwo ne gute Auflistung was man wirklich braucht und was nicht?.
Freebsd Handbook : http://www.freebsd.org/doc/en_US.IS...books/handbook/
ADSL+Nat unter Freebsd : http://www.bugat.at/mini-howto/free...adsl-natd.ihtml
Zitat von alex5612naja vermutlich damit nicht root user nicht die firewall config verpfuschen
wie schauts aus wegen proxy ? kann mir da jemand irgendwas empfehlen ?
Hab das Ganze mal gemacht hänge aber noch bei den clients
eth0:
ip 192.168.0.5
verbunden mit adsl modem/router 192.168.0.1
verbindung ins internet vom server aus kein problem
eth1:
ip 192.168.1.1
verbunden mit client 192.168.1.200 (über dhcp)
ping server -> client geht
ping client -> server geht nicht
einstellungen auf dem client:
ip 192.168.1.200
subnet 255.255.255.0
gateway 192.168.1.1
dns1+2 vom provider 212.90.xxx.xxx
Das script:
Code:# Schnittstelle zum lokalen Netzwerk IFACE_INT=eth1 # Internetschnittstelle IFACE_EXT=eth0
damit bei mir die firewall automatisch startet hab ich sie in /etc/init.d/firewall gelegt und dann einen links gesetzt:
ln -s /etc/init.d/firewall /etc/rc2.d/S30firewall
dann hats gepasst. :thumbsup:
unter debian kannst du dir das paket rcconf installieren dort kannst du services ab und anwählen die automatisch gestartet werden sollen.
somit ersparst du dir die symlinks
wenn ich
# Ports an einen Rechner im lokalen Netz weiterleiten
DEST_HOST="" # 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
auf
# Ports an einen Rechner im lokalen Netz weiterleiten
DEST_HOST="192.168.0.14" # Durch die IP-Adresse des Rechner ersetzen
PORTS_TCP="6881" # Falls dies nicht gewünscht ist, leer Klammer angeben
PORTS_UDP="" # Falls dies nicht gewünscht ist, leer Klammer angeben
ändere, und dann die fw restarte bekomm ich immer strange iptables fehler. hat das sonst auch noch wer?
wenn ich nur "" hab rennt alles pipifein.
fehlermeldung:
epia:/home/decode# /etc/init.d/firewall restart
Starting firewall: iptablesiptables v1.2.6a: invalid port/service `-d' specified
Try `iptables -h' or 'iptables --help' for more information.
.
kernel is 2.4.18-bf2.4
edit: hat sich geklärt
wieder mal probleme
i brauch diese ports hier: http://forum.massive.se/viewtopic.p...;highlight=port
wenn i die alle eintrag sagt er mir es sind zu viele.
was mich zur frage bringt: was is das maximum? bzw kann man ranges eingeben mit 5600-5700 zb?
--source-port PORT:PORT
das gleiche gilt für --destination-port
Ob das in diesem Script ohne weiteres fruchtet weiß ich leider nicht.
am besten is, du kopierst die zeilen mit den port-routes so oft wie du sie brauchst und änderst lediglich die ports um.
edit: am einfachsten verwaltest die firewall mit webmin, von dem script von darkangel ausgehend kann mans sehr fein erweitern
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2024