für alle die mal einen DSL Router aufbauen wollen

Seite 1 von 2 - Forum: Linux and other OS auf overclockers.at

URL: https://www.overclockers.at/linux/fuer_alle_die_mal_einen_dsl_router_aufbauen_wollen_87446/page_1 - zur Vollversion wechseln!


De@thbringer schrieb am 28.07.2003 um 11:36

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


alex5612 schrieb am 04.10.2003 um 18:24

hab das script grad am rennen :) gefallt mir muss ich sagen

hau evtl irgendwo im comment deine webpage rein


funka schrieb am 08.10.2003 um 18:42

kenn mich ja nicht so aus aber was ist der grund hierfuer

Zitat
chmod 0755 /etc/init.d/firewall

ansonsten top faq


alex5612 schrieb am 09.10.2003 um 17:07

naja vermutlich damit nicht root user nicht die firewall config verpfuschen

Zitat
chown root:root /etc/init.d/firewall

wie schauts aus wegen proxy ? kann mir da jemand irgendwas empfehlen ?


spunz schrieb am 09.10.2003 um 17:32

squid => http://www.squid-handbuch.de/


shadowman schrieb am 12.10.2003 um 12:57

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?.


DAO schrieb am 19.11.2003 um 11:26

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


De@thbringer schrieb am 19.11.2003 um 12:54

Zitat von alex5612
naja vermutlich damit nicht root user nicht die firewall config verpfuschen



wie schauts aus wegen proxy ? kann mir da jemand irgendwas empfehlen ?

genau wegen dem.


othan schrieb am 13.02.2004 um 20:24

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

der rest gleich wie vom original

/EDIT: Server is MEPIS/Debian

/EDIT2:

Hat sich erledigt, war irgend ein fehler beim eth0
nachm neustart gings


d3cod3 schrieb am 30.03.2004 um 08:24

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:


De@thbringer schrieb am 30.03.2004 um 15:59

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


d3cod3 schrieb am 17.04.2004 um 21:35

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


d3cod3 schrieb am 02.07.2004 um 20:32

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?


shadowman schrieb am 02.07.2004 um 20:41

--source-port PORT:PORT

das gleiche gilt für --destination-port

Ob das in diesem Script ohne weiteres fruchtet weiß ich leider nicht.


dio schrieb am 02.07.2004 um 21:04

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-2021