Page 1 of 1

Forward-Regel für bestimmtes Netzerkinterface

Posted: 01. Feb 2008 14:43
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?

Posted: 01. Feb 2008 23:59
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

Posted: 04. Feb 2008 8:55
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?

Posted: 04. Feb 2008 13:49
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?

Posted: 04. Feb 2008 15:21
by Janka
Ach so, andersrum. Dann natürlich --in-interface eth1.

Janka

Posted: 04. Feb 2008 15:34
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.

Posted: 04. Feb 2008 19:05
by Janka
Nochmal: In welchem Netz (IP, Netzmaske, Interface) befinden sich die Clients? Welches Netz (IP, Netzmaske, Interface) soll den Gateway beinhalten?

Janka

Posted: 05. Feb 2008 14:10
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

Posted: 05. Feb 2008 20:04
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

Posted: 06. Feb 2008 8:22
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?

Posted: 06. Feb 2008 9:22
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...

Posted: 06. Feb 2008 13:25
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?

Posted: 06. Feb 2008 23:27
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

Posted: 07. Feb 2008 7:14
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...