Forward-Regel für bestimmtes Netzerkinterface

Post Reply
Message
Author
WilliWupp

Forward-Regel für bestimmtes Netzerkinterface

#1 Post by WilliWupp »

Ich habe hier einen Rechner mit zwei Netzwerkkarten, für den ich folgendes erreichen möchte:

Mit eth0 hängt dieser in einem Netz, von dem aus er uneingeschränkt erreichbar sein soll.

Mit eth1 hängt er in einem anderen Netz, über das die Leute über den Linux-Server über eth0 zum Internet-Gateway gelangen sollen, ansonsten aber von dem Neth an eth0 nichts sehen dürfen.

Irgend wie muss dass ja mit iptables und einer FORWARD-Rule gehen, nur leider bleibe ich an der Stelle hängen, an der ic hdas Ziel (nämlich das Gateway vom eth0-Netz) eingeben müsste. Hat jemand einen Tipp wie sowas geht?

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#2 Post by Janka »

Du musst eine Forward-Regel definieren, die nur Pakete durchlässt, die *nicht* an eine Zieladresse im IP-Range gehen, die in eth1 benutzt werden. Und alle anderen Pakete blocken. Das geht z.B. mit

Code: Select all

echo 0 >/proc/sys/net/ipv4/ip_forward
iptables --policy FORWARD drop
iptables --flush FORWARD
iptables --append FORWARD --out-interface eth1 --destination ! <ETH1_NETZADRESSE>/<ETH1_NETZMASKE> --jump accept
echo 1 >/proc/sys/net/ipv4/ip_forward 
Dann das Routing auf deinem Rechner so einstellen, dass es den Gateway als Standardroute benutzt. Fertig.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

WilliWupp

#3 Post by WilliWupp »

Danke für die Hilfe! Irgend was stimmt aber noch nicht.

Gebe ich bei dem Rechner, der an eth1 angeschlossen ist die IP von eth1 als Gateway und DNS an, so sehe ich das restliche Netz zu dem auch der Server gehört und auf das eigentlich nicht zugegriffen werden können soll, ins INet komme ich gar nicht...

Gebe ich bei dem Rechner an eth1 als Gateway und DNS allerdings die IP and, die auch der Server als Gateway und DNS verwendet (und die zu einem anderen Suzbnetz gehört als eth1), so komme ich nirgends rein - noch nicht mal da hin wo ich nicht hin kommen können sollte.

Hat evtl. noch mal jemand einen Hinweis?

WilliWupp

#4 Post by WilliWupp »

So, ich habe noch ein bissl experimentiert...so wie ich das sehe ist die DHCP-Konfiguration, in der ich jetzt das interne Netzwerk sehe die richtige. Was mir jetzt fehlt ist eine Regel/Möglichkeit, alles was an eth1 reingeht auf das Gateway zu zwingen?

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#5 Post by Janka »

Ach so, andersrum. Dann natürlich --in-interface eth1.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

WilliWupp

#6 Post by WilliWupp »

Hmmm...sicher? Das scheint nix zu ändern, ich komme dann über eth1 (192.168.2.0/24) auf das Netzwerk 90.0.0.0/24 das nicht sichtbar sein sollte aber ds Gateway 90.0.0.254 das ins Internet führen sollte ist nicht zu erreichen.

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#7 Post by Janka »

Nochmal: In welchem Netz (IP, Netzmaske, Interface) befinden sich die Clients? Welches Netz (IP, Netzmaske, Interface) soll den Gateway beinhalten?

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

WilliWupp

#8 Post by WilliWupp »

Es gibt eigentlich zwei Netze: 90.0.0.0/24 mit Gateway 90.0.0.254 (funktioniert bereits, in dem Netz steht auch der Linux-Server mit eth0) und 192.168.2.0/24 das an besagter eth1 hängen soll.

Am 90.0.0.0er Netz soll nichts verändert werden, hingegen sollen alle Clients im 192.168.2.0er Netz zwar über das Gateway 90.0.0.254 ins Internet können, aber sonst nichts vom 90.0.0.0er Netz sehen dürfen. Das wäre für diese Clients also der Weg eth1 -> eth0 -> 90.0.0.254

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#9 Post by Janka »

In dem Fall musst du es wie folgt machen:

Code: Select all

echo 0 >/proc/sys/net/ipv4/ip_forward 
iptables --policy FORWARD drop 
iptables --flush FORWARD 
iptables --append FORWARD --out-interface eth1 --destination ! 90.0.0.0/24 --jump accept 
echo 1 >/proc/sys/net/ipv4/ip_forward
Dadurch werden nur noch Pakete, die nicht 90.0.0.0/24 als Ziel haben, durch den Rechner nach eth1 durchgeleitet. Das Routing funktioniert trotzdem, da dadurch ja nicht die Zieladresse im Paket angefasst wird.

Wenn du damit keine Pakete durchbekommst, ist an deiner Routing-Konfiguration etwas falsch. Evtl. versuchst du auch doppeltes Masquerading? Das geht nämlich schief.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

WilliWupp

#10 Post by WilliWupp »

ein iptables --list liefert mir folgendes:

Code: Select all

Chain INPUT &#40;policy ACCEPT&#41;
target     prot opt source               destination

Chain FORWARD &#40;policy DROP&#41;
target     prot opt source               destination
ACCEPT     all  --  anywhere            !AMontpellier-257-1-113-net.w90-0.abo.wanadoo.fr/24

Chain OUTPUT &#40;policy ACCEPT&#41;
target     prot opt source               destination
Das AMontpellier-257-1-113-net.w90-0.abo.wanadoo.fr ist gleich 90.0.0.0 da das erste Netz dummerweise eine existierende IP verwendet die aufgelöst wird...jedenfalls sind keine weiteren Regeln aktiv, aber auch mit der Änderung ändert sich am Verhalten absolut nix, es ist immer noch nur das Netz erreichbar, das nicht sichtbar sein soll.

Brauche ich nicht noch eine zusätzliche Regel die mir die eingehende Verbindung explizit auf das eigentliche Gateway 90.0.0.254 umbiegt?

WilliWupp

#11 Post by WilliWupp »

Kleine Korrektur: es ist NICHT das 90.0.0.0er netz zu sehen sondern nur der Server, in dem auch die beiden Netzwerkkarten stecken. Die weiterleitung von eth1 auf irgend etwas im 90.0.0.0er Netzwerk (inklusive des Gateways) klappt also nicht.

Mir fehlt von der Logik her auch noch die Verbindung von diesem 192.168.2.0er Netzwerk zum Gateway...

WilliWupp

#12 Post by WilliWupp »

Aaaaalso, damit funktioniert es jetzt FAST:

Code: Select all

        echo 0 >/proc/sys/net/ipv4/ip_forward

        iptables -P INPUT ACCEPT
        iptables -P FORWARD DROP
        iptables -P OUTPUT ACCEPT
        iptables -t nat -P PREROUTING ACCEPT
        iptables -t nat -P POSTROUTING ACCEPT
        iptables -t nat -P OUTPUT ACCEPT


        echo 1 > /proc/sys/net/ipv4/ip_forward
        iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE
        iptables -A FORWARD -i eth0 -o eth1 ! -s 90.0.0.0/24 -j ACCEPT
        iptables -A FORWARD -i eth0 -o eth1 -s 90.0.0.254 -j ACCEPT
        iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
Ich komme über mein eth1-er Netz ins Internet, leider sind trotz der beiden Regeln an vorletzter und vorvorletzter Stelle noch immer der Linux-Server selber, auf dem diese iptables installiert sind zu sehen als auch sämtliche Windows-Freigaben.

Speziell das mit den Freigaben verstehe ich nicht - wieso werden die nicht ausgefiltert? Liegts am Protokoll?

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#13 Post by Janka »

Der Rechner, auf dem die Forward-Regel definiert ist, wird von dieser selbstverständlich nicht erfasst. Die Forward-Chain gilt nur für weitergeleitete Pakete. Wenn du den Rechner selbst ausblenden willst, musst du diese Regeln auch noch in der Input-Chain plazieren.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

WilliWupp

#14 Post by WilliWupp »

Ah, klingt logisch...und wie werde ich die Windows-Freigaben aus dem 90.0.0.0er Netz los? Normales http aus diesem Netz kommt nicht mehr durch, nur diese Dinger sind seltsamerweise noch zu sehen...

Post Reply