Hallo zusammen, ich habe eine Firwall mitwelcher ich auch NAT betreibe. Nun zu meiner Frage: $IPTABLES -t nat -A POSTROUTING -o ppp1 -j MASQUERADE $IPTABLES -t nat -A POSTROUTING -o ppp2 -j MASQUERADE Hier definiere ich die ppp device für NAT. Denke dies ist OK. Woran kann ich denn erkennen, ob sie wirklich genommen werden? Bestimmt kommt jetzt "iptables -L" aber da steht nicht wirklich was von NAT drinne. Starte ich mein Firewall Script kommt folgender Fehler: Try `iptables -h' or 'iptables --help' for more information. iptables v1.2.7a: Couldn't load target `MASQERRADE':/usr/lib/iptables/libipt_MASQERRADE.so: cannot open shared object file: No such file or directory Any Ideas? Stefan
Hallo Stefan, also "iptables -t filter -L" gibt den Inhalt der Tabelle filter aus (identisch mit "iptables -L". Wenn Du praktisch die Tabelle NAT anschauen willst, musste "iptables -t nat -L" machen. Ansonsten ist die folgende Fehlermeldung
Try `iptables -h' or 'iptables --help' for more information. iptables v1.2.7a: Couldn't load target `MASQERRADE':/usr/lib/iptables/libipt_MASQERRADE.so: cannot open shared object file: No such file or directory
wohl das Ergebnis eines Tippfehlers in deinem Skript. Das Ziel MASQERRADE gibt es nämlich nicht. Gruß Sebastian www.wolfgarten.com
Hallo Stefan,
also "iptables -t filter -L" gibt den Inhalt der Tabelle filter aus (identisch mit "iptables -L". Wenn Du praktisch die Tabelle NAT anschauen willst, musste "iptables -t nat -L" machen. Ansonsten ist die folgende Fehlermeldung
Try `iptables -h' or 'iptables --help' for more information. iptables v1.2.7a: Couldn't load target `MASQERRADE':/usr/lib/iptables/libipt_MASQERRADE.so: cannot open shared object file: No such file or directory
wohl das Ergebnis eines Tippfehlers in deinem Skript. Das Ziel MASQERRADE gibt es nämlich nicht.
Hallo Sebastian, wie sollte das Ziel (anstatt MASQUERRADE) denn sonst heißen? Was muß ich statdessen eintragen? Ich habe da noch eine kleine Frage zum Thema NAT: Folgende Konstelation: MeinNetz -- VPN GW mit NAT -- INET -- VPN GW mit NAT -- anderes Netz Dies sollte normal gehen. (Natürlich wenn das NAT erstmal sauber eingerichtet ist.) Jetzt soll aber ein weiterer Client über VPN an mein VPN GW eingebunden werden, u. über mein GW dann weiter in das "andere Netz" routen. Da währe dann ja 3mal NAT dazwischen. Geht das? Derweil habe ich zwischen 4 Werken leichte Routingprobleme wegen NAT. Danke für Deine Hilfe Stefan
Hallo Stefan, das Ziel (Target) heisst "MASQUERADE" und nicht anders.
Ich habe da noch eine kleine Frage zum Thema NAT: Folgende Konstelation: MeinNetz -- VPN GW mit NAT -- INET -- VPN GW mit NAT -- anderes Netz
Dies sollte normal gehen. (Natürlich wenn das NAT erstmal sauber eingerichtet ist.) Jetzt soll aber ein weiterer Client über VPN an mein VPN GW eingebunden werden, u. über mein GW dann weiter in das "andere >Netz" routen. Da währe dann ja 3mal NAT dazwischen. Geht das? Derweil habe ich zwischen 4 Werken leichte Routingprobleme wegen NAT.
Ja, das geht. Vielleicht solltest Du vorher dein normales NAT/Masquerading erstmal in Ordnung bringen? Nein, ernsthaft. Was ist denn jetzt dein Problem? Gruß Sebastian
Ja, das geht. Vielleicht solltest Du vorher dein normales NAT/Masquerading erstmal in Ordnung bringen? Nein, ernsthaft. Was ist denn jetzt dein Problem?
Hallo Sebastian, klappt jetzt wenn ich Masquerade richtig schreibe ;-) Nur ein Problem immer noch nicht. Hier mein Problem: netz1 -- inet netz2 Das ganze wird über VPN getunnelt. Ein Ping von Netz1 ins Netz2 geht, aber anders rum nicht. Routing stimmt, ich komme beim Traceroute nur bis zum VPN Server, nicht ins Netz. Stefan
Hallo Stefan, also Ping und Traceroute sind unterschiedliche ICMP-Typen, hast Du die denn überhaupt freigeschaltet? Gruß, Sebastian
Sebastian Wolfgarten schrieb:
Hallo Stefan,
also Ping und Traceroute sind unterschiedliche ICMP-Typen, hast Du die denn überhaupt freigeschaltet?
Gruß, Sebastian
Jep, sind freigeschaltet. KOmme ja auch auf dem Server. Er Routet nur nicht ins Netz. Aber aus dem Netz raus, und das ist mein Problem. Stefan
Hallo Stefan, erläutere mir mal genauer dein Setup. Deine Beschreibungen sind etwas ungenau, hast Du Dir die Firewall selber gebastelt? Gruß Sebastian www.wolfgarten.com
Ja, meine Firewall ist ein einfacher Iptable Script, zumindest auf der einen Seite (Server) auf der anderen (HomeOffices) stehen DSL Router, welche ein Portforwarding nutzen. Sie bauen einen Tunnel über vtun auf. Vtun erstellt selber ein Device (z.B. ppp1) welches ich per NAT das Maskiere. Vom Client aus kann ich über diesen Tunnel routen, andersherum komme ich vom Server aber nicht ins Netz des Clients. Auf der Clientseite hängt hinter dem DSL Router ein LinuxServer (für den Tunnel). Defaultroute ist der ISDN Router, außer in mein ServerNetz. Das wird auf ppp1 (tunnel) geroutet. Die Verbindung steht wie gesagt, nur möchte ich gerne auch in mein Netz greifen, und genau an dieser Stelle hägt etwas, nämlich an der Clientseite. Mein Client Script: #!/bin/sh # IPTABLES=/usr/sbin/iptables INSMOD=/sbin/insmod case "$1" in start) # Module für Connection-Tracking für Stateful-Filter laden: #$INSMOD ip_conntrack #$INSMOD ip_conntrack_ftp # Für die Filterung wird eine neue Tabelle 'block' angelegt. Dies # ermöglicht die Verwendung sowohl in der 'INPUT' wie in der # 'FORWARDING'-Tabelle. # Datenpakete die zu bereits bestehenden Verbindungen gehören # (ESTABLISHED,RELATED) werden durchgelassen, ebenso Pakete die # eine neue Verbindung aufbauen und aus dem internen Netz (eth0) # kommen. Alle anderen Pakete werden durchgelassen. $IPTABLES -N block $IPTABLES -A block -m state --state ESTABLISHED,RELATED -j ACCEPT # $IPTABLES -A block -s 172.23.1.0/24 -j ACCEPT #$IPTABLES -A block -s 172.23.100.48 -j ACCEPT $IPTABLES -A block -m state --state NEW -i eth0 -j ACCEPT $IPTABLES -A block -m state --state NEW -i ppp0 -j ACCEPT $IPTABLES -A block -m state --state NEW -i ppp1 -j ACCEPT $IPTABLES -A block -m state --state NEW -i ppp2 -j ACCEPT #$IPTABLES -A block -d 212.55.99.52/255.255.255.255 -i ppp0 -j ACCEPT $IPTABLES -A block -d 62.153.140.162/255.255.255.255 -i ppp0 -j ACCEPT #$IPTABLES -A block -d 0.0.0.0/0 -i eth0 -j ACCEPT $IPTABLES -A block -j DROP $IPTABLES -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu # Diese Tabelle wird nun aus 'INPUT' wie 'FORWARDING' angesprochen. # Der Effekt ist nun also, daß Verbindungsaufbauten auf den Router # (Tabelle Input) wie Verbindungsaufbauten über den Router hinweg # (Tabelle Forward) nur aus dem internen Netz geschehen können. # Antworten auf diese Verbindungen von außen werden aber durchgelassen. # Von außen können aber keine Verbindungen auf den Router aufgebaut # werden. # Nun muß nur noch wie zuvor das Masquerading eingeschaltet werden: $IPTABLES -t nat -A POSTROUTING -o eth1 -j MASQUERADE $IPTABLES -t nat -A POSTROUTING -o ppp0 -j MASQUERADE $IPTABLES -t nat -A POSTROUTING -o ppp2 -j MASQUERADE # Die zusätzliche Angabe des Input-Devices (-i eth0) ist hier # nur eine weitere Vorsichtsmaßnahme. ;; stop) $IPTABLES -F ;; *) echo "usage: $0 {start|stop}"; exit 0 ;; esac
Hallo, On Tue, 10 Dec 2002, Stefan Eggert wrote:
$IPTABLES -N block
[..diverse Regeln..]
$IPTABLES -A block -j DROP
Sehr schoen. Du legst also eine nette Tabelle 'block' an. Nur: Wo haengst du die ein? Ich hab nix gefunden. Du hast nirgends ein -A INPUT ... -j block -A OUTPUT ... -j block -A FORWARD ... -j block d.h. die Tabelle 'block' wird schlicht nie erreicht. Wenn ich's auf die schnelle richtig gelesen habe, machst du also genau garnix. Mach mal ein 'iptables -L | grep 'Chain block'. Da muesste in Klammern ein '(0 references)' stehen, was obige Diagnose bestaetigen wuerde. IMO willst du dich nochmal eingehend mit mindestens 'man iptables' beschaeftigen... -dnh -- On-line, adj.: The idea that a human being should always be accessible to a computer. -- BSD fortune file
Am Dienstag, 10. Dezember 2002 21:21 schrieb Stefan Eggert:
Ja, meine Firewall ist ein einfacher Iptable Script, zumindest auf der einen Seite (Server) auf der anderen (HomeOffices) stehen DSL Router, welche ein Portforwarding nutzen. Sie bauen einen Tunnel über vtun auf.
Vtun erstellt selber ein Device (z.B. ppp1) welches ich per NAT das Maskiere. Vom Client aus kann ich über diesen Tunnel routen, andersherum komme ich vom Server aber nicht ins Netz des Clients.
Auf der Clientseite hängt hinter dem DSL Router ein LinuxServer (für den Tunnel). Defaultroute ist der ISDN Router, außer in mein ServerNetz. Das wird auf ppp1 (tunnel) geroutet.
Die Verbindung steht wie gesagt, nur möchte ich gerne auch in mein Netz greifen, und genau an dieser Stelle hägt etwas, nämlich an der Clientseite.
Schauen wir uns das doch mal genauer an:
Mein Client Script: #!/bin/sh #
IPTABLES=/usr/sbin/iptables
INSMOD=/sbin/insmod
case "$1" in start) # Module für Connection-Tracking für Stateful-Filter laden:
#$INSMOD ip_conntrack #$INSMOD ip_conntrack_ftp
# Für die Filterung wird eine neue Tabelle 'block' angelegt. Dies # ermöglicht die Verwendung sowohl in der 'INPUT' wie in der # 'FORWARDING'-Tabelle.
# Datenpakete die zu bereits bestehenden Verbindungen gehören # (ESTABLISHED,RELATED) werden durchgelassen, ebenso Pakete die # eine neue Verbindung aufbauen und aus dem internen Netz (eth0) # kommen. Alle anderen Pakete werden durchgelassen.
$IPTABLES -N block
Aha, eine eigene Regelkette Namens "block". Nach deiner Beschreibung oben soll sie INPUT- und FORWARDING-Pakete blocken?
$IPTABLES -A block -m state --state ESTABLISHED,RELATED -j ACCEPT
Pakete zu bestehenden Verbindungen werden immer erlaubt. Gut.
# $IPTABLES -A block -s 172.23.1.0/24 -j ACCEPT
#$IPTABLES -A block -s 172.23.100.48 -j ACCEPT $IPTABLES -A block -m state --state NEW -i eth0 -j ACCEPT $IPTABLES -A block -m state --state NEW -i ppp0 -j ACCEPT $IPTABLES -A block -m state --state NEW -i ppp1 -j ACCEPT $IPTABLES -A block -m state --state NEW -i ppp2 -j ACCEPT
Eingehende Pakete neuer Verbindungen über eth0 und ppp1-3 werden erlaubt. Hm :-|
#$IPTABLES -A block -d 212.55.99.52/255.255.255.255 -i ppp0 -j ACCEPT $IPTABLES -A block -d 62.153.140.162/255.255.255.255 -i ppp0 -j ACCEPT
Eingehende Pakete an Host 62.153.140.162 über ppp0 werden erlaubt. Wer ist das?
#$IPTABLES -A block -d 0.0.0.0/0 -i eth0 -j ACCEPT
Lokal _alles_ erlauben. Gut, es ist ja dein Netz.
$IPTABLES -A block -j DROP
Alle anderen Pakete, die an die Regelkette "block" verwiesen werden, sperren (macht man besser mit $IPTABLES -P). Auch gut.
$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# Diese Tabelle wird nun aus 'INPUT' wie 'FORWARDING' angesprochen.
# Der Effekt ist nun also, daß Verbindungsaufbauten auf den Router # (Tabelle Input) wie Verbindungsaufbauten über den Router hinweg # (Tabelle Forward) nur aus dem internen Netz geschehen können.
# Antworten auf diese Verbindungen von außen werden aber durchgelassen. # Von außen können aber keine Verbindungen auf den Router aufgebaut # werden. # Nun muß nur noch wie zuvor das Masquerading eingeschaltet werden:
$IPTABLES -t nat -A POSTROUTING -o eth1 -j MASQUERADE $IPTABLES -t nat -A POSTROUTING -o ppp0 -j MASQUERADE $IPTABLES -t nat -A POSTROUTING -o ppp2 -j MASQUERADE # Die zusätzliche Angabe des Input-Devices (-i eth0) ist hier # nur eine weitere Vorsichtsmaßnahme.
Oups. Und welche Pakete werden an die eigene Regelkette "block" weitergeleitet? In deiner Firewall passiert außer Masquerading und die Paketanpassung in der FORWARD-Regel nichts.
;; stop) $IPTABLES -F ;; *) echo "usage: $0 {start|stop}"; exit 0 ;; esac
man iptables ! -- Gruß MaxX
participants (5)
-
David Haller
-
Matthias Houdek
-
Sebastian Wolfgarten
-
Stefan Eggert
-
Stefan Eggert