Shorewall + Masquerading

Hallo,

ich habe folgendes Szenario:

  • Server mit zwei Interfaces eth0 und eth1
  • eth0 geht zum lokalen Netz, Subnet 192.168.9.0/24
  • eth1 geht zu einem Router, Subnet 192.168.254.0/24

Jetzt habe ich vor, einzelnen Rechnern im lokalen Netz den Internetzugang über Masquerading zu erlauben. Das habe ich mit einer etwas unsauberen, aber dennoch logischen (meine Meinung nach :wink:) Konfiguration gemacht. Ich lasse Masquerading allgemein zu, aber zunächst sperre ich das gesamte Subnet:

/etc/shorewall/masq:

eth1 eth0!192.168.9.0/24

iptables -L -t nat:

Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
eth1\_masq all -- anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain eth1\_masq (1 references)
target prot opt source destination
excl\_1 all -- 192.168.9.0/24 anywhere

Chain excl\_1 (1 references)
target prot opt source destination
RETURN all -- 192.168.9.0/24 anywhere
MASQUERADE all -- anywhere anywhere

Das erstellt zwei iptables-Ketten, eth1_masq und excl_1. eth1_masq referenziert zu excl_1, welche das gesamte Subnet ausschließt. Dann füge ich einzelne Rechner VOR den Verweis auf excl_1 ein:

iptables -I eth1\_masq -t nat -s 192.168.9.101 -j MASQUERADE

iptables -L -t nat:

Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
eth1\_masq all -- anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain eth1\_masq (1 references)
target prot opt source destination
MASQUERADE all -- apollo.cybercrew.lg anywhere
excl\_1 all -- 192.168.9.0/24 anywhere

Chain excl\_1 (1 references)
target prot opt source destination
RETURN all -- 192.168.9.0/24 anywhere
MASQUERADE all -- anywhere anywhere

Jetzt sollte iptables das Paket masqueraden, weil die Regel ja vor dem Exclude abgearbeitet wird. Dennoch bringt mir ein Traceroute auf dem CLient

tracert www.google.de

Routenverfolgung zu www.l.google.com [64.233.183.99] über maximal 30 Abschnitte


> 


 1 

Der Server selber kann aber pingen. Auch wenn ich wirklich das gesamte Subnet masquerade kommt das Ping nicht durch!

Hat jemand eine Idee, wie ich das ganze ohne größere Änderungen an meinem Plan realisieren kann? Oder auch mit ...

Grüße,
Nik

Hallo,

Hi,

ich kenn shorewall ueberhaupt nicht.

ich habe folgendes Szenario:

  • Server mit zwei Interfaces eth0 und eth1
  • eth0 geht zum lokalen Netz, Subnet 192.168.9.0/24
  • eth1 geht zu einem Router, Subnet 192.168.254.0/24

Jetzt habe ich vor, einzelnen Rechnern im lokalen Netz den
Internetzugang über Masquerading zu erlauben.

Warum machst Du zwischen zwei privaten Netzen Masquerading?

Das habe ich mit
einer etwas unsauberen, aber dennoch logischen (meine Meinung
nach :wink:) Konfiguration gemacht. Ich lasse Masquerading
allgemein zu, aber zunächst sperre ich das gesamte Subnet:

iptables -L -t nat:

Bitte immer

 # iptables -nvL

verwenden.

> Chain POSTROUTING (policy ACCEPT)  
> target prot opt source destination  
> eth1\_masq all -- anywhere anywhere  
>   
> Chain eth1\_masq (1 references)  
> target prot opt source destination  
> excl\_1 all -- 192.168.9.0/24 anywhere  
>   
> Chain excl\_1 (1 references)  
> target prot opt source destination  
> RETURN all -- 192.168.9.0/24 anywhere  
> MASQUERADE all -- anywhere anywhere

Das erstellt zwei iptables-Ketten, eth1_masq und excl_1.
eth1_masq referenziert zu excl_1, welche das gesamte Subnet
ausschließt. Dann füge ich einzelne Rechner VOR den Verweis
auf excl_1 ein:

iptables -I eth1_masq -t nat -s 192.168.9.101 -j
MASQUERADE

iptables -L -t nat:

> Chain POSTROUTING (policy ACCEPT)  
> target prot opt source destination  
> eth1\_masq all -- anywhere anywhere  
>   
> Chain eth1\_masq (1 references)  
> target prot opt source destination  
> MASQUERADE all -- apollo.cybercrew.lg anywhere  
> excl\_1 all -- 192.168.9.0/24 anywhere  
>   
> Chain excl\_1 (1 references)  
> target prot opt source destination  
> RETURN all -- 192.168.9.0/24 anywhere  
> MASQUERADE all -- anywhere anywhere

Jetzt sollte iptables das Paket masqueraden, weil die Regel ja
vor dem Exclude abgearbeitet wird. Dennoch bringt mir ein
Traceroute auf dem CLient

> tracert www.google.de

Bitte auch tracert das reverse DNS abgewoehnen.

> Routenverfolgung zu www.l.google.com [64.233.183.99] über maximal 30 Abschnitte  
>   
> 1   
> Der Server selber kann aber pingen. Auch wenn ich wirklich das  
> gesamte Subnet masquerade kommt das Ping nicht durch!


Bitte bringe die Ausgabe von 

     # iptables-save; route -n; cat /proc/sys/net/ipv4/ip\_forward

 an (wenn alles zusammen nicht laenger als 40 Zeilen ist).



> Hat jemand eine Idee, wie ich das ganze ohne größere  
> Änderungen an meinem Plan realisieren kann? Oder auch mit ...


Also... ich wuerde Masquerading in Frage stellen und statt dessen auf einfaches routing umsteigen, die white list nicht in der nat table pflegen und sie statt dessen in die filter table (wo sie hingehoert) legen. Und vor allem nicht sowas von hinten durch die Brust ins Auge... erstmal alles Maskieren, dann das gesamte Subnetz verbieten und dann aber wieder einzelne Rechner erlauben. Warum nicht gleich einfach einzelne Rechner maskieren? Sehr obskur.

 Gruss vom Frank.