Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 22

Thema: weiterleitung

  1. #1
    Registrierter Benutzer
    Registriert seit
    Sep 2002
    Ort
    Köln
    Beiträge
    241

    weiterleitung

    weiterleitung
    Hi

    Ich moechte eine Port und IP weiterleitung einstellen. Es soll auch von aussen funktionieren.
    z.B

    http://IP

    weiterleitung im localen Netz auf 192.168.0.1
    und http://IP:70
    weiterleitung auf 192.168.0.4:70
    wie mache ich das?

    Ich habe mal so einbisschen rumprobiert. Hab´s aber nicht hinbekommen. Ich habe das komando

    intables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to 192.168.0.1:80

    aber dann funktionierte der Rechner nicht mehr als rooter und mann koennte von den Clients nicht mehr ins internet und die weiterleitung ging auch nicht.

    gruss
    vlad

  2. #2
    Moderator
    Registriert seit
    May 2002
    Ort
    Dortmund
    Beiträge
    1.407
    Hallo,

    Du bist schon auf einem guten Weg mit Deiner Vorgehensweise jedoch im Detail stimmt es noch nicht ganz.
    Versuch' es mal mit den folgenden Zeilen:
    Code:
    IP=[Deine externe IP]
    INET_IF=[Dein externes Netzinterface]
    iptables -t nat -A PREROUTING -i $INET_IF -p tcp -d $IP --dport 80 -j DNAT --to 192.168.0.1
    iptables -t nat -A PREROUTING -i $INET_IF -p tcp -d $IP --dport 70 -j DNAT --to 192.168.0.1
    Das Redirecting, welches Du konfiguriert hattest, wird nur dann benutzt, wenn Du Pakete vom Zielport A Deines Rechners auf denselben Rechner an den Port B umleiten willst. Möchtest Du eine Weiterleitung auf einen anderen Rechner konfigurieren, dann muß das Target DNAT sein.

    Harry
    Wer einen Fehler findet, der darf ihn gerne behalten ;)
    http://harry.homelinux.org - iptables Generator & mehr

  3. #3
    Registrierter Benutzer
    Registriert seit
    Sep 2002
    Ort
    Köln
    Beiträge
    241

    Unhappy

    Danke erstmal,

    aber dazu habe ich direkt mal eine Frage.

    Ich habe keine Feste IP Adresse, was mache ich dann? Muss ich jedesmal wenn meine IP Adresse sich ändert auch den Script ändern?

    Und erkläre mir bitte was ein externes Netzinterface ist und wo ich das nachgucken kann.

    grusse
    vlad

  4. #4
    Moderator
    Registriert seit
    May 2002
    Ort
    Dortmund
    Beiträge
    1.407
    Hallo,

    wenn sich Deine IP jedesmal ändert, dann lasse den Part "-d $IP" in den beiden Regeln einfach weg. Dieser Parameter ist in diesem speziellen Falle eigentlich eh überflüssig.

    Mit "externes Netzinterface" meine ich die Bezeichnung des Modem-, ISDN- oder DSL-Netzwerkinterfaces in Richtung Internet, also ppp0 oder ippp0.

    Harry
    Wer einen Fehler findet, der darf ihn gerne behalten ;)
    http://harry.homelinux.org - iptables Generator & mehr

  5. #5
    Registrierter Benutzer
    Registriert seit
    Sep 2002
    Ort
    Köln
    Beiträge
    241
    Hi,

    hab jetzt folgendes eingegeben:

    iptables -t nat -A PREROUTING -i $ppp0 -p tcp -d --dport 80 -j DNAT --to 192.168.0.1


    und als fehlermeldung folgendes rausbekommen:
    Warning: wierd character in interface -p No aliases, :,!or*
    Try iptables -h

    Hast du eine Idei

  6. #6
    kleiner bruder von ruth Avatar von HangLoose
    Registriert seit
    Aug 2002
    Ort
    Old Europe
    Beiträge
    3.894
    hi

    mit $ppp0 setzt du eine variable ein, welche aber nicht deklariert wurde. nimm mal das $ vor ppp0 weg und ruf das script nochmal auf.

  7. #7
    Registrierter Benutzer Avatar von [WCM]Manx
    Registriert seit
    Dec 2001
    Ort
    Niederösterreich
    Beiträge
    1.592
    Hi!

    Wenn Du eine dynamische IP hast, geht's natürlich auch.
    INET_IF=[Dein externes Netzinterface] z.B eth0, ppp0
    IP=`ifconfig $INET_IF | grep inet | cut -d : -f 2 | cut -d \ -f 1`

    Grüße

    Manx

  8. #8
    Moderator
    Registriert seit
    Dec 1999
    Ort
    Stuttgart
    Beiträge
    1.466
    Hi,

    Original geschrieben von vladonline
    iptables -t nat -A PREROUTING -i $ppp0 -p tcp -d --dport 80 -j DNAT --to 192.168.0.1
    Da hat sich wohl ein kleiner Tippfehler eingeschlichen
    Das vorangestellte $-Zeichen vor einem Namen kennzeichnet eine Variable. Der Variablenname wird dann an dieser Stelle durch ihren Inhalt ersetzt. Da Du aber nirgends eine Variable ppp0 initialisiert hast, ist sie leer.
    Das heisst, es sieht folgendermaßen aus:

    Code:
    iptables -t nat -A PREROUTING -i -p tcp -d --dport 80 -j DNAT --to 192.168.0.1
    Wie Du siehst, ist jetzt der Parameter für -i nicht ppp0, sondern -p, was zu der Fehlermeldung führt:

    Warning: wierd character in interface (-i) -p No aliases, :,!or*

    Entweder Du entfernst das $-Zeichen, oder wenn Du das Interface öfters in dem Script benötigst, initialisierst Du ne Variable mit ppp0, wie von Harry beschrieben.

    Code:
    INET_IF="ppp0"
    iptables -t nat -A PREROUTING -i $INET_IF -p tcp --dport 80 -j DNAT --to 192.168.0.1
    Gruß micha
    IRC: irc.euirc.net #tux

  9. #9
    Registrierter Benutzer
    Registriert seit
    Sep 2002
    Ort
    Köln
    Beiträge
    241
    Danke fuer schnelle Antworten,
    das lätzte Skript weist keine Fehler auf, leitet es aber nicht weiter.

    Hintergrund:
    Ich habe ein Windows Server mit ASP Webseiten laufen. Linux Server ist als Rooter kofiguriert. Ich moechte halt, daß wenn auf den Linux Server von aussen jemand zugreift (http. Leitet er auf den Windows Rechner um. Später werde ich nur bestimmte ports weiterleiten. Vieleicht muss man da noch ihrgend was einstellen? Firewall ist zurzeit deaktiviert.
    Nocheine Idei?
    Geändert von vladonline (15.10.02 um 22:00 Uhr)

  10. #10
    kleiner bruder von ruth Avatar von HangLoose
    Registriert seit
    Aug 2002
    Ort
    Old Europe
    Beiträge
    3.894
    hi

    versuch das mal

    iptables -t nat -A PREROUTING -i ppp0 -p tcp --sport 1024:65565 --dport 80 -j DNAT --to 192.168.0.1
    iptables -A FORWARD -i ppp0 -o eth0 -d 192..168.0.1 -m state --state NEW,ESTABLISHED,RELATED\
    -p tcp --sport 1024:65656 --dport 80 -j ACCEPT


    eth0 eventuell ändern, falls dein lan-netzwerkkarte eth1 ist


    @harry

    hab ich aus meinem schlauen buch, also nicht gleich schlagen, falls das verkehrt ist


    Gruß HangLoose
    Geändert von HangLoose (15.10.02 um 22:31 Uhr)

  11. #11
    Moderator
    Registriert seit
    May 2002
    Ort
    Dortmund
    Beiträge
    1.407
    Original geschrieben von HangLoose
    @harry

    hab ich aus meinem schlauen buch, also nicht gleich schlagen, falls das verkehrt ist
    Nöööö - hier wird doch niemand verhauen

    Ich stehe gerade mit NAT ein bisserl im Klinsch. Wenn ich mir die Anforderungen von vlad so recht durchdenke, dann benötigt er zunächst einmal DNAT zum Umlenkung der IP-Datagramme vom Router -> Webserver.

    Die Datagramme vom Webserver -> Router -> Client werden vom Webserver zunächst an den Router adressiert; dieser müßte sie dann per SNAT wiederum umadressieren und zwar auf seine Absender-Adresse (die externe!). D.h. vlad benötigt neben der DNAT-Regel eine referenzierende SNAT-Regel, die jedoch bei einer dynamischen Dial-Up-Verbindung ebenso dynamisch ist und daher nicht dauerhaft eingerichtet werden kann.

    Also da müßte irgendwas her in der Art wie:
    Code:
    #!/bin/bash
    
    INET_IF=ppp0
    LOCALNET=192.168.0.0/24
    EXT_IP=$(ifconfig $INET_IF | grep inet | cut -d: -f 2 | cut -d" " -f 1)
    
    # DNAT
    iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1
    # SNAT
    iptables -t nat -A POSTROUTING -i eth0 -p tcp -s 192.168.0.1 --sport 80 \
      -d ! $LOCALNET -j SNAT --to $EXT_IP
    #
    # FORWARDING - nur wenn Forwarding intern sonstwie mit iptables gesperrt ist
    iptables -A FORWARD -i $INET_IF -o eth0 -d 192..168.0.1 -m state --state NEW \
     -p tcp --sport 1024:65656 --dport 80 -j ACCEPT
    iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    Ich hab mir einige Anleihen aus Manx's Skript und von Dir gemacht

    Aber ernsthaft: Die Datagramme, die vom internen Webserver über den Router nach außen müssen, müssen ja auch wieder umadressiert werden; diesmal halt die Absenderadresse. Ich bin mir da jetzt (ist auch irgendwie spät) nicht ganz sicher, ob das automagisch auch durch ein evtl. eingerichtetes MASQUERADING erschlagen wird, so dass man dann die SNAT-Regel nicht bräuchte.
    Also eventuell ersetzt die Regel "iptables -t nat -A POSTROUTING -o $INET_IF -j MASQUERADE" die zweite Regel komplett.

    Kann mal jemand genaueres zu dem Verhalten von iptables in diesem Falle sagen? Ansonsten werde ich mal schauen, ob ich morgen die Zeit habe, das auszutesten.

    btw: Zeit für die Heia

    Harry
    Wer einen Fehler findet, der darf ihn gerne behalten ;)
    http://harry.homelinux.org - iptables Generator & mehr

  12. #12
    kleiner bruder von ruth Avatar von HangLoose
    Registriert seit
    Aug 2002
    Ort
    Old Europe
    Beiträge
    3.894
    moin harry

    als ich versteh das so, das er seine(n) webserver im lan stehen hat und nun mochte, das man vom i-net drauf zu greifen kann.


    aber du sagst es, es ist schon spät


    Gruß HangLoose

  13. #13
    kleiner bruder von ruth Avatar von HangLoose
    Registriert seit
    Aug 2002
    Ort
    Old Europe
    Beiträge
    3.894
    hi

    ich nochmal


    Aber ernsthaft: Die Datagramme, die vom internen Webserver über den Router nach außen müssen, müssen ja auch wieder umadressiert werden; diesmal halt die Absenderadresse. Ich bin mir da jetzt (ist auch irgendwie spät) nicht ganz sicher, ob das automagisch auch durch ein evtl. eingerichtetes MASQUERADING erschlagen wird, so dass man dann die SNAT-Regel nicht bräuchte. Also eventuell ersetzt die Regel "iptables -t nat -A POSTROUTING -o $INET_IF -j MASQUERADE" die zweite Regel komplett.
    das die wieder rausgehenden pakete wieder um adressiert werden müßen, seh ich auch. das ganze geschieht meiner meinung nach, durch die von dir genannte regel.

    iptables -t nat -A POSTROUTING -o $INET_IF -j MASQUERADE
    ich bin jetzt aber davon ausgegangen, das vladonline schon ein firewallscript besitzt und ihm nur der part für den webserver fehlt.

    ich zitiere jetzt mal ein wenig *freihändig* aus "Das Firewall Buch"

    folgende regel läßt pakete, die zu einer eingehenden, bereits bestehenden verbindung gehören, wieder hinaus:

    Code:
    #rückkanal: serverdienste
    iptables -A FORWARD -i eth0 -o ppp0 -s 192.168.0.1 -m state --state ESTABLISHED,RELATED -j ACCEPT
    als nächstes wird ein regel für eingehende pakete inklusive verbindungsaufbau benötigt.da aber nur eine öffentl ip-adresse vorhanden ist, welche schon durch den router *belegt* ist, müssen eingehende verbindungen an den eigentlichen webserver im lan weitergeleitet werden. das geschieht durch Destination NAT.

    Code:
    #Eingehende HTTP-Verbindung, DNAT
    iptables -t nat -A PREROUTING -i ppp0 -p tcp --sport 1024:65565 --dport 80 -j DNAT --to 192.168.0.1
    eingehende pakete auf dem interface ppp0 werden an den webserver weitergereicht. die zieladresse des paketes wird dabei umgeschrieben. das ist allerdings noch keine filterregel, die das eingehende http-paket durchläßt. die muß extra gesetzt werden. der routingmechanismus des netfilter-frameworks sorgt dafür, das man dabei direkt die regel so setzen kann, als gäbe es kein nat. ziel-ip ist die tatsächlich vorhandene (hier 192.168.0.1) ohne rücksicht auf nat und private ip-adressen.

    Code:
    #Eingehende HTTP-Verbindung, Paketfilterregel
    iptables -A FORWARD -i ppp0 -o eth0 -d 192..168.0.1 -m state --state NEW,ESTABLISHED,RELATED -p tcp --sport 1024:65656 --dport 80 -j ACCEPT

    gute nacht


    Gruß HangLoose

  14. #14
    Moderator
    Registriert seit
    May 2002
    Ort
    Dortmund
    Beiträge
    1.407
    Hallo,

    ein neuer Tag und wir können wieder klarer denken

    Ich habe die Problematik soeben verifiziert und bin zu folgender Lösung gelangt. Wenn auf dem Gateway bereits Masquerading eingerichtet ist, dann wird in der Tat nur noch die eine DNAT-Regel für die Weiterleitung der Datagramme Client -> NAT-Router -> Webserver auf dem Router benötigt. Die Datagramme, die vom Webserver -> NAT-Router -> Client gesendet werden, werden auf dem Rückweg automagisch durch die MASQUERADE-Regel korrekt bearbeitet, so dass hier eine separate SNAT-Regel entfallen kann.
    Tja, so schlau ist iptables halt und ich hatte die Befürchtung, dass die MASQUERADE-Regel bei ausgehenden Datagrammen ein erneutes Portmapping durchführen würde. Dem scheint in diesem Falle jedoch nicht so zu sein und daher funktioniert das reibungslos mit MASQUERADING auf dem Rückweg.
    Voraussetzung dafür ist jedoch, dass der NAT-Router auf dem internen Webserver als Default-Gateway eingetragen ist, dass Forwarding insgesamt auf dem NAT-Router aktiviert ist und dass durch dieses Forwarding zumindestens die gewünschten Datagramme durchkönnen.

    Ich schreibsel da jetzt einfach mal ein Code-Snippet für den NAT-Router hin, welches dieses eine Problem vollständig lösen sollte.
    Code:
    LAN_IF=eth0
    INET_IF=ppp0
    LOCALNET=192.168.0.0/24
    
    # Forwarding aktivieren
    echo 1 > /proc/sys/net/ipv4/ip_forwarding
    
    # Default-Policies für Chains der Table filter setzen
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP
    
    # Tables flushen
    iptables -F
    iptables -t nat -F
    
    # INVALID Datagramme droppen
    iptables -A INPUT -m state --state INVALID -j DROP
    iptables -A OUTPUT -m state --state INVALID -j DROP
    iptables -A FORWARD -m state --state INVALID -j DROP
    
    # ESTABLISHED,RELATED zulassen
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    
    # Masquerading einrichten
    iptables -t nat -A POSTROUTING -o $INET_IF -j MASQUERADE
    
    # DNAT-Regel für Weiterleitung auf internen Webserver
    iptables -t nat -A PREROUTING -i $INET_IF -p tcp --dport 80 -j DNAT --to 192.168.0.1
    
    # Eingehende Verbindungen aus LAN erlauben
    iptables -A INPUT -i $LAN_IF -m state --state NEW -j ACCEPT
    
    # Ebenso ausgehende Verbindungen aus dem LAN in das Internet zulassen
    iptables -A FORWARD -i $LAN_IF -m state --state NEW -j ACCEPT
    
    # Und natürlich die umgeleiteten HTTP-Verbindungen zunächst als INPUT und dann auch als
    # FORWARD zulassen
    iptables -A INPUT -i $INET_IF -p tcp --dport 80 -m state --state NEW -j ACCEPT
    iptables -A FORWARD -i $INET_IF -p tcp --dport 80 -d 192.168.0.1 -m state --state NEW -j ACCEPT
    
    # Zu guter Letzt - schöner ist es, wenn man die Default-Policies durch ein REJECT "ersetzt"
    iptables -A INPUT -j REJECT
    iptables -A FORWARD -j REJECT
    iptables -A OUTPUT -j REJECT
    Ich denke, so sollte es laufen und noch ein gutes Maß an Sicherheit auf dem NAT-Router mitbringen.

    Harry
    Wer einen Fehler findet, der darf ihn gerne behalten ;)
    http://harry.homelinux.org - iptables Generator & mehr

  15. #15
    kleiner bruder von ruth Avatar von HangLoose
    Registriert seit
    Aug 2002
    Ort
    Old Europe
    Beiträge
    3.894
    moin harry

    ich hätte da mal ne frage und zwar, folgende regel von dir

    Code:
    iptables -A INPUT -i $INET_IF -p tcp --dport 80 -m state --state NEW -j ACCEPT
    *öffnet* bzw. akzeptiert einen verbindungsaufbau auf dem router an port 80 (input). *benötigt* wird der port jedoch auf dem webserver im lan. was ja durch folgende regel

    Code:
    iptables -A FORWARD -i $INET_IF -p tcp --dport 80 -d 192.168.0.1 -m state --state NEW -j ACCEPT
    erreicht wird. ist von daher die erste regel überhaupt nötig und zweitens ist es überhaupt möglich einen port praktisch 2 mal zu *vergeben*?

    thx für eine aufklärung


    Gruß HangLoose

Lesezeichen

Berechtigungen

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