iptables: Gateway zwischen zwei Netzen

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
GeorgeDorn
Beiträge: 5
Registriert: 28.08.2005 17:28:06

iptables: Gateway zwischen zwei Netzen

Beitrag von GeorgeDorn » 26.04.2006 22:57:23

Hallo!

Ich habe ein Netzwerk (192.168.0.x) in welchem sich Router, Server und einige Clients befinden. Nun soll ein zweites dazukommen (192.168.1.x) in dem nur Zugriff auf das Internet möglich sein soll. Zu diesem Zweck habe ich eine zweite Netzwerkkarte in den Server gebaut und ip_forward aktiviert. Den Switch des zweiten Netzes habe ich an diese Netzwerkkarte angeschlossen. Jetzt habe ich mit den iptables Regeln angefangen:

Code: Alles auswählen

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Mit dieser Einstellung bewirke ich, wenn ich das richtig verstehe, dass alles was auf eth0 (192.168.0.x) soll, maskiert wird. Nachdem ich diese Regel eingefügt hatte, war es mir möglich von einem Client im 192.168.1.x Netz Clients im 192.168.0.x Netz zu pingen. Diese Pings kommen dann vom Server, sind also maskiert worden (Das hab ich mit tcpdump geprüft).

Nun will ich ja eben das verhindern. Also folgende Regeln eingefügt:

Code: Alles auswählen

iptables -A FORWARD -d 192.168.0.1/255.255.255.255 -i eth1 -j ACCEPT
iptables -A FORWARD -d 192.168.0.0/255.255.255.0 -i eth1 -j DROP
Das sorgt jetzt dafür, dass nur Pakete zum Router (192.168.0.1) durchgehen. Alles andere wird gedroppt.

Nachdem ich jetzt meine Schritte breitgetreten habe, zur Diskussion:
- Ist das so sicher und der richtige Weg?
- Kann ich sichergehen, dass Clients im 192.168.1.x Netz keinen Zugriff auf die Rechner im anderen Netz haben?
- Was muss ich noch machen, um die Netze sicher zu trennen?

Vielen Grüße und Dank,

GeorgeDorn

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: iptables: Gateway zwischen zwei Netzen

Beitrag von gms » 26.04.2006 23:05:40

GeorgeDorn hat geschrieben:

Code: Alles auswählen

iptables -A FORWARD -d 192.168.0.1/255.255.255.255 -i eth1 -j ACCEPT
iptables -A FORWARD -d 192.168.0.0/255.255.255.0 -i eth1 -j DROP
Das sorgt jetzt dafür, dass nur Pakete zum Router (192.168.0.1) durchgehen. Alles andere wird gedroppt.
dachte die eth1-Clients sollen auch ins Internet dürfen, also willst du das eigentlich nicht,oder ?

GeorgeDorn
Beiträge: 5
Registriert: 28.08.2005 17:28:06

Beitrag von GeorgeDorn » 26.04.2006 23:12:29

Ich hab mich da wohl etwas missverständlich ausgedrückt.

Code: Alles auswählen

iptables -A FORWARD -d 192.168.0.1/255.255.255.255 -i eth1 -j ACCEPT 
iptables -A FORWARD -d 192.168.0.0/255.255.255.0 -i eth1 -j DROP
Es geht bei diesen Regeln nur am das lokale Netz. Das Internet ist ja ausserhalb der 192.168.x.x. Da regele ich ja nichts. Diese beiden Regeln sagen lediglich:

1.) Akzeptiere Pakete die auf eth1 kommen und an den Router gehen
2.) Droppe alles andere was auf eth1 kommt und ins 192.168.0.x Netz geht

Die 1. Regel musste ich setzen um im eingeschränkten Netz DNS-Anfragen an den Router zu erlauben.

Ich hoffe es ist jetzt etwas klarer geworden.

Grüße,

GeorgeDorn

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 26.04.2006 23:21:12

aja, default policy auf FORWARD hast du dann auf ACCEPT.

mußte auch kurz weg, daher jetzt ein anderere Punkt:
MASQUERADE brauchst du nur und solltest du auch nur verwenden, wenn der Server seine IP dynamisch bezieht, ansonsten SNAT

wenn du deinen Router selber konfigurieren kannst, bräuchtest du eigentlich beides nicht.

Gruß
gms

GeorgeDorn
Beiträge: 5
Registriert: 28.08.2005 17:28:06

Beitrag von GeorgeDorn » 27.04.2006 07:38:09

Hallo gms und auch alle anderen!

Vielen Dank für die schnelle Antwort. Ja, default ist ACCEPT auf allen Chains. Später will ich auch die Ports, die aus dem 1.x Netz benutzt werden können regulieren, aber darauf hab ich erstmal verzichtet. Spätestens dann würde ich aber auf default DROP umschwenken.

Warum SNAT MASQUERADE vorzuziehen ist, hab ich durch die man Page verstanden. Danke schonmal für den Tip.

Wie meinst du denn ist es möglich auf beides zu verzichten? Mein Problem ist ja dabei, dass der Router ein SOHO-Router ist. Der ist ins 0.x Netz integriert. Erst der Gateway ist in beiden Netzen zuhaus. Und die Internetpakete müssen ja vom Gateway zum Router durchs 0.x Netz durch. Meinst du ich sollte da die netmask "erhöhen" oder wie stellst du die das vor?

Faultier
Beiträge: 181
Registriert: 29.06.2003 20:10:20
Wohnort: Darmstadt

Beitrag von Faultier » 27.04.2006 09:07:11

Er meint wahrscheinlich, dass es schlauer wäre, auf xNAT zu verzichten und einen "echten" Router drauszumachen. Mit NAT kannst du dir ne Menge Filterchaos einfangen. Ich würde Packete, die in das Unerwünschte Netz gehen dann schon in der INPUT Ebene abfangen. Ist aus meiner Sicht zumindest sauberer.
Wenn es nur ums Surfen geht, wäre ein Proxy noch effektiver.
p2/400 komplett passv gekühlter Debian/Sarge Server/Router || Gentoo Workstation an der immer mal rumgebastelt wird

diedl2003
Beiträge: 111
Registriert: 01.04.2004 00:23:36
Wohnort: Frankfurt
Kontaktdaten:

Beitrag von diedl2003 » 27.04.2006 13:06:58

GMS und Faultier meinen damit das es schöner wäre, falls du auf deinem SOHO router eine
route für das 192.168.1.0 Netzwerk mit gw deines linux rechners setzen kannst.Wenn alle clients in den beiden netzen dann auch den linux rechner als default gw haben,ist alles gut :)

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 27.04.2006 13:08:18

Das SNAT/MASQUERADE auf deinem Server bnötigst du derzeit, weil der Router keine Ahnung hat, wohin er Pakete an das 192.168.1.x Subnet ausliefern soll. Durch das SNAT/MASQUERADE braucht er dies auch nicht zu wissen, weil er ja dann nur an deinen Server (im 192.168.0.x Subnet) ausliefern muß.
Wenn du auf deinem Router, das Routing beieinflussen kannst, könntest du daher auf das SNAT/MASQUERADE auf deinem Server verzichten.

Gruß
gms

Benutzeravatar
DynaBlaster
Beiträge: 958
Registriert: 25.03.2004 18:18:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DF0://dynablaster.adf

Beitrag von DynaBlaster » 27.04.2006 14:01:06

Genau das ist bei mir auch das Problem. SNAT/Masquerading (wobei SNAT schneller ist und deshalb ja bereits als zu bevorzugen empfohlen wurde) ist bei mir nötig, weil ich keine Möglichkeit habe, bei meinem SOHO-DSL-Router (SMC Barricade 7004 VBR) eine statische Route in ein anderes Netz einzustellen. Allerdings habe ich auch schon SOHO-Router-Modelle gesehen, die diese Option anbieten.

@ diedl2003

wenn der SOHO-Router die Einstellung einer Route ins 192.168.1.x-Netz erlaubt, können die Clients im Netz 192.168.0.x ruhig den SOHO-Router als Standard-GW (falls der nicht sowieso als DHCP-Server in dem Netz arbeitet) benutzen - der SOHO-Router leitet Pakete ins 192.168.1.x-Netz dann ja über diese gesetzte Route an das Linux-Gateway weiter. Selbstverständlich funktioniert dein Vorschlag auch - setzt aber voraus das das Linux-GW immer angeschaltet ist, auch wenn nur die Clients aus dem Netz 192.168.0.x angeschaltet sind. Aus Stromspar-Gründen ist das evtl. nicht so günstig - aber dazu muss man die Infrastruktur bzw. deren Nutzung/Auslastung besser kennen.

In meinem Fall ist es jedenfalls so, daß das andere Netz (OpenVPN-Verbindungen) nur sporadisch genutzt wird und ich den Router auch nur zu diesen Zeiten anschalte. Da mein SOHO-Router keine statischen Routen kann, habe ich halt auf meinen Clients "von Hand" statische Routen in das OpenVPN-Netz angelegt. Das ist aber auch nur eine Notlösung und einigermassen praktikabel weil die Zahl der Clients recht überschaubar ist.

GeorgeDorn
Beiträge: 5
Registriert: 28.08.2005 17:28:06

Beitrag von GeorgeDorn » 28.04.2006 07:30:16

Hallo und vielen Dank für Eure zahlreichen Antworten!

Ich hab mal versucht mir alles zu Herzen zu nehmen und eine statische Route für 1.x mit dem Ziel Server in den Router gesetzt. Daraufhin ging alles auch ohne iptables ;-) nur durch ip_forwarding. Aber das wollen wir ja nicht. Also hab ich folgendes Script geschrieben:

Code: Alles auswählen

case "$1" in
  start)
    echo -n "Starting gateway: "

    # Alles flushen
    iptables -F

    #Default-Policy für FORWARD auf DROP
    iptables -P FORWARD DROP

    # Pakete die zu existierenden Verbindungen gehören durchlassen
    iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

    # Pakete, die auf Port 53 zu 192.168.1.1 wollen, durchlassen
    iptables -A FORWARD -p udp -i eth1 -d 192.168.0.1 --dport 53 -j ACCEPT
    iptables -A FORWARD -p tcp -i eth1 -d 192.168.0.1 --dport 53 -j ACCEPT
    iptables -A FORWARD -p udp --dport 53 -j REJECT
    iptables -A FORWARD -p tcp --dport 53 -j REJECT

    # Pakete, die auf Port 25 zu xxx.xxx.xxx.xxx wollen, durchlassen
    iptables -A FORWARD -p tcp -i eth1 -d xxx.xxx.xxx.xxx --dport 25 -j ACCEPT
    iptables -A FORWARD -p tcp --dport 25 -j REJECT

    # Pakete, die nicht in 192.168.0.x wollen, durchlassen
    iptables -A FORWARD -i eth1 -d ! 192.168.0.0/255.255.255.0 -j ACCEPT

    echo "iptables."
  ;;
  stop)
    echo -n "Stopping gateway: "

    # Alles flushen
    iptables -F

    echo "iptables."
    exit 0
  ;;
  *)
    echo "Usage: iptables {start|stop}" >&2
    exit 1
  ;;
esac

exit 0
Bitte verzeiht mir, dass ich kein Bash-Script-Gott bin.

So erreiche ich, dass der SOHO-Router in beiden Netzen Nameserver sein darf, aber sonst aus dem 192.168.1.x Netz nicht zu erreich ist, dass das 1.x Netz ins Internet kann und das Emails nur an einen bestimmten Server geschickt werden können.

Was haltet Ihr jetzt von dieser Lösung? ist doch um einiges sauberer oder?

Viele Grüße,

GeorgeDorn

Faultier
Beiträge: 181
Registriert: 29.06.2003 20:10:20
Wohnort: Darmstadt

Beitrag von Faultier » 28.04.2006 08:35:44

Well done! :daumen: :)
p2/400 komplett passv gekühlter Debian/Sarge Server/Router || Gentoo Workstation an der immer mal rumgebastelt wird

diedl2003
Beiträge: 111
Registriert: 01.04.2004 00:23:36
Wohnort: Frankfurt
Kontaktdaten:

Beitrag von diedl2003 » 28.04.2006 11:26:58

Faultier hat geschrieben:Well done! :daumen: :)
..find ich auch. Nur hast du an deinen linux router selber noch nicht gedacht. Du solltest, wenn dir das wichtig ist, auch die default input policy auf drop setzen und nur das erlauben, was du brauchst.

Gruß

Benutzeravatar
DynaBlaster
Beiträge: 958
Registriert: 25.03.2004 18:18:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DF0://dynablaster.adf

Beitrag von DynaBlaster » 28.04.2006 11:34:18

Jap, sieht gut aus. Nur eine Anmerkung noch: da die Default-Policy der FORWARD-CHAIN eh auf DROP gesetzt ist, sind die zusätzlichen REJECT-Regeln eigentlich überflüssig.

Ansonsten musst du halt noch den Router selbst absichern.

Antworten