Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Iptables und Port- Forwarding

  1. #1
    Neuer Benutzer
    Registriert seit
    19.10.2005
    Beiträge
    3

    Iptables und Port- Forwarding

    Hallo Leute,

    ich habe wieder mal eine bestimmt schon tausendmal gestellte Frage zu iptables, aber ich komm leider nicht weiter ;(

    Also folgendes Szenario,

    Ich habe einen Rechner mit Inet-Verbindung und 2 Netzwerkkarten, auf dem auch noch ein Squid-Proxy läuft und einen zweiten Rechner mit einem Webserver (Apache)

    Ich möchte nun gerne per Inet auf den Webserver im LAN über den Inetrechner zugreifen können, also Port-Forwarding, bin aber bis jetzt kläglich gescheitert.

    Folgende Konfiguration:
    eth0 --> interne Nic mit 192.168.0.1
    eth1 --> externe Nic hat ber auch intern eine IP 192.168.0.4
    Webserver --> 192.168.0.2

    Folgendes habe ich bisher versucht:

    I
    Code:
    iptables -A FORWARD -p tcp -d 192.168.0.2 --dport 80 -i ppp0 -o eth0 -j ACCEPT
    Code:
    iptables -A FORWARD -p tcp -s 192.168.0.2 --sport 80 -i eth0 -o ppp0 -j ACCEPT
    Es will aber einfach nicht klappen, habe auch schon statt ppp0 eth1 etc. gesetzt.

    Hat irgendjemand eine Idee ??

  2. #2
    Erfahrener Benutzer
    Registriert seit
    20.06.2003
    Beiträge
    689
    Probier mal folgenden Befehl:
    Code:
    iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.2:80

  3. #3
    Neuer Benutzer
    Registriert seit
    19.10.2005
    Beiträge
    3
    fuktioniert leider auch nicht, X(

    habe mir mal mit iptables -t nat -L
    meine Nat-Table angeschaut und kriege folgendes
    Code:
    MASQUERADE  all  --  localhost            anywhere
    Das sieht auch nicht korrekt aus

  4. #4
    Erfahrener Benutzer
    Registriert seit
    05.07.2004
    Beiträge
    142
    iface_eth0="192.168.1.0 broadcast 192.168.0.255 netmask 255.255.255.0"
    iface_eth1="192.168.0.1 broadcast 192.168.0.255 netmask 255.255.255.0"

    wobei eth0 mit de, ethernetmodem verbunden ist...und eth1 mit dem anderen rechner halt...

    dann habe ich:

    bash#echo 1 > /proc/sys/net/ipv4/ip_forward

    bash#iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

    ausgeführt und es ging..
    Wie dem auch sei ....tschönen gruss

  5. #5
    Neuer Benutzer
    Registriert seit
    19.10.2005
    Beiträge
    3
    was soll ich daraus entnehmen ????

  6. #6
    Erfahrener Benutzer
    Registriert seit
    23.08.2005
    Beiträge
    352
    So Dickerchen ...
    hier mal zwei Beispiele für das sogenannten Prerouting ... bzw. Portforwarding ...
    Code:
    # Prerouting
    iptables -t nat -A PREROUTING -j DNAT -p tcp -s 0/0 --dport 4662 --to-destination 192.168.2.20 -i ppp0
    iptables -A FORWARD -j ACCEPT -m state --state NEW,ESTABLISHED,RELATED -p tcp -s 0/0 -d 192.168.2.20 --dport 4662 -i ppp0
    
    iptables -t nat -A PREROUTING -j DNAT -p udp -s 0/0 --dport 4672 --to-destination 192.168.2.20 -i ppp0
    iptables -A FORWARD -j ACCEPT -m state --state NEW,ESTABLISHED,RELATED -p udp -s 0/0 -d 192.168.2.20 --dport 4672 -i ppp0
    Diese leiten die Ports an die ensprechene IP weiter ...

    Zurück gehts dann mit ...
    Code:
    iptables -A FORWARD -i $IIF -o $OIF -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    So hab ichs auf meinem Router ...

    Greetz MicroOne
    Wenn ein Linuxaner auf einen Windowsaner trifft, kann es nur zum Streit kommen. (Spruch, Ausbilder)

  7. #7
    Erfahrener Benutzer
    Registriert seit
    02.11.2003
    Beiträge
    1.071
    Sieht soweit, wenn auch in meinen Augen recht durcheinander, recht gut aus.

    Ein kleiner Tipp noch. Oder, wenn du es plausibel erklären kannst, ein Tipp für mich.

    Auf einem Clienten sollten normalerweise nur Pakete ankommen, die das Flag RELATED oder ESTABLISHED gesetzt haben. Ersteres ist das erste Antwortpaket eines Servers, dass er mit der Verbindungsaufnahme einverstanden ist. Und zweiteres ist ein Paket einer bestehenden Verbindung.
    Demzufolge sollten auf dem externen Interface des Routers nur RELATED und ESTABLISHED Pakete an den Clienten weitergeleitet werden.

    Auf dem internen Interface des Routers werden dagegen die Pakete des Clienten an den Server ankommen und sollten demzufolge weitergeleitet werden. Dies wären Pakete mit den Flags NEW und ESTABLISHED.
    Auf dem internen Interface reicht es also rein technisch gesehen vollkommen aus, wenn dort Pakete mit Flag NEW oder ESTABLISHED weitergeleitet werden.

    Ausnahmen bilden interne Rechner, die in einer DMZ als Server arbeiten. Die empfangen, da sie Server sind, natürich NEW und ESTABLISHED Pakete und versenden ESTABLISHED und RELATED Pakete. Aber das nur am Rande.

    cu

    disaster

    P.S.: Ich würde die Zeilen also so aufbauen:
    Code:
    # Prerouting
    iptables -t nat -A PREROUTING -i ppp+ -p tcp -s 0/0 --dport 4662 -j DNAT --to-destination 192.168.2.20
    iptables -A FORWARD -i ppp+ -m state --state RELATED,ESTABLISHED -p tcp -s 0/0 -d 192.168.2.20 --dport 4662 -j ACCEPT
    
    iptables -t nat -A PREROUTING -i ppp+ -p udp -s 0/0 --dport 4672 -j DNAT--to-destination 192.168.2.20
    iptables -A FORWARD -i ppp+ -m state --state RELATED,ESTABLISHED -p udp -s 0/0 -d 192.168.2.20 --dport 4672 -j ACCEPT
    
    #Client -> Server
    iptables -A FORWARD -i $INT -o $EXT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT

  8. #8
    Erfahrener Benutzer
    Registriert seit
    23.08.2005
    Beiträge
    352
    Hi disaster,

    also deine Zeilen sind soweit i.O. aber beim Prerouting müssen 3 Zeilen geschrieben werden ... eigentlich ... warum? Das kann ich dir erklären.

    Die erste Zeile mit dem DNAT ist in Ordnung, jedoch muss dann noch eine FORWARD Regel geschrieben werden ...
    Code:
    iptables -A FORWARD -i $EF -o $IF -p $PR1 --sport 1024:65535 --dport 80 -d $HTTPSRV -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    Wenn diese Zeile bei mir fehlt, funktioniert die Weiterleitung nicht richtig, denn diese sagt nichts anderes: Leite Ankommende Pakete von den Ports "bla", welche für die IP "ble" bestimmt sind und auf den Port "x" zugreifen wollen, weiter ....

    Umgekehrt kann man dann schreiben ...
    Code:
    iptables -A FORWARD -i $IF -o $EF -p tcp --sport 80 --dport 1024:65535 -s $HTTPSRV -m state --state ESTABLISHED,RELATED -j ACCEPT
    Diese Regel sagt dem Router:
    Pakete, bei welcher eine Verbindung zur IP $HTTPSRV besteht und von Port 80 kommen, an den Ursprung zurücklassen.

    Oder wenn mans ganz einfach haben will:
    Code:
    iptables -A FORWARD -i $IF -o $EF -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    So sieht z.B. meine Regel für das Netzwerk aus. Diese sagt nichts anderes, als das alles auf den tcp-Ports nach außen kann ... auch bestehende Verbindungen.

    Da z.B. mein Schwager im Internet zockt und ich z.B. nicht weiß welche Ports CoD2 nutzt, hab ich keinen Bock lange zu suchen und zich Ports einzeln freizugeben ...
    Anders herum hab ich natürlich nur bestimmte Ports offen ... oder sagen wir mal nur 2 aber welche, sag ich nicht :-P
    Soll ja keiner wissen das ich den Esel nutze ... mißt verraten

    Naja, wenn was falsch sein sollte oder du/ihr noch fragt hast/habt, dann einfach schreien

    Gruß
    Christian Alias MicroOne
    Wenn ein Linuxaner auf einen Windowsaner trifft, kann es nur zum Streit kommen. (Spruch, Ausbilder)

  9. #9
    Erfahrener Benutzer
    Registriert seit
    02.11.2003
    Beiträge
    1.071
    Hmm...
    Eigentlich ging es mir lediglich um die TCP-Flags.
    An den Regelen an sich hab ich nicht im mindesten rumgemäkelt....

    Die Geschichte mit dem Zocken ist auch relativ einfach zu regeln. Man stellt die Policy der FORWARD-Chain einfach auf ACCEPT.

  10. #10
    Neuer Benutzer
    Registriert seit
    19.07.2006
    Beiträge
    3
    Hallo

    Hab mir gerade mal diesen Thread durchgelesen und auch einiges bei mir ausprobiert aber irgendwie klappt mein Port Forwarding nicht. Hier mal meine Konfiguration:
    Rechner1 bekommt packete auf Port 5000 und soll diese nach Rechner2 auf Port 4010 weiterleiten.

    Die POLICIES stehen Standardmäßig auf DROP

    Jetzt habe ich eine PREROUTING regel angelegt die wie folgt aussieht.

    iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 5000 -j DNAT --to-destination Rechner2:4010

    als nächstes füge ich die FORWARD regel hinzu:
    iptables -I FORWARD 1 -p tcp -i eth0 -o eth1 --dport 4010 -j ACCEPT

    für den Rückweg habe ich ebenfalls eine FORWARD Regel angelegt
    iptables -A FORWARD -p tcp -i eth1 -o eth0 --sport 4010 -j ACCEPT

    ich habe vor jeder einzelnen Regel auch noch ein -j LOG hinzugefügt.
    Das Log bringt mir auch das "ACCEPT der PREROUTING" regel aber danach hört es auf und die weiterleitung klappt auch nicht.
    Wo liegt mein Fehler. Muss das -m state --state NEW,ESTABLISHED,RELATED unbedingt enthalten sein.
    Vielen Dank

    dj-marty

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •