[GELÖST] iptables

  • Hi,


    ich hab eine Frage und zwar bräuchte ich untersützung bei der Erstellung von iptables.


    Hintergrund:
    Ich hab nach Wohnungswechsel bei mir IPv6 und komm somit nicht mehr von unterwegs auf meine Dreambox/ Heimnetz.


    Um das zu umgehen kann man bei portunity.net sich ein VPN Tunnel zu einer öffentlich IPv4 Adresse kaufen...gemacht getan...


    man installiert sich noch openvpn auf die box und alles funzt...


    Jetzt komm ich zumindest von unterwegs auf meine box drauf aber ich würde dann gern weiter in mein Heimnetz durch dringen und dazu brauch man ja iptables?! um Portforwarding zumachen....


    ich hab bereits alle iptable Module installiert:
    root@dm7020hd:/sys/module# opkg list |grep iptable
    Fast, scriptable ping
    kernel-module-iptable-filter - 3.2-r12.51-bsp0 - Linux Kernel
    iptable-filter kernel module; iptables filter table
    kernel-module-iptable-mangle - 3.2-r12.51-bsp0 - Linux Kernel
    iptable-mangle kernel module; iptables mangle table
    kernel-module-iptable-nat - 3.2-r12.51-bsp0 - Linux Kernel
    iptable-nat kernel module
    kernel-module-iptable-raw - 3.2-r12.51-bsp0 - Linux Kernel
    iptable-raw kernel module
    root@dm7020hd:/sys/module#


    jedoch bekomm ich folgende Meldung:


    root@dm7020hd:/sys/module# iptable --help
    -sh: iptable: not found


    ???!?! Kann mir jmd bitte helfen?


    Danke und Gruß

  • Wenn ich mich nicht irre, heißt der Befehl "iptables" mit s am Ende...

    Meine Boxen:
    [list=1][*]1 mal Dreambox 500hd
    [*]4 mal Dbox2 Sagem1i (davon 2 mit sonderbarem Defekt)
    [*]1 mal DVBS-Karte
    [/list=1]

  • da kommt das gleiche..


    ich hab inzwischen rausgefunden das man mit modprobe ip_tables das Modul lädt aber wie man die regeln erstellt ist mir noch nicht klar

  • Zitat

    Original von beck51
    ich hab inzwischen rausgefunden das man mit modprobe ip_tables das Modul lädt aber wie man die regeln erstellt ist mir noch nicht klar


    erstelle dir unter:
    /etc/modules-load.d/
    eine neue Datei bspw. "iptables.conf"
    mit dem Inhalt:

    Code
    ip_tables


    dannach führst du "update-modules" auf der Konsole aus.
    und startest dein System neu.
    Nun sollte IP Tables aktiv sein :)

  • leider ohne erfolg



    root@dm7020hd:/etc/modules-load.d# update-modules
    /etc/modules-load.d/iptables.conf: line 1: ip_tables: not found
    Error while executing /etc/modules-load.d/iptables.conf, aborting

    • Offizieller Beitrag

    Hmm eigentlich kannst du hier jedem Linux Tutorial folgen.
    Da wird nicht viel abweichen wenn du eine Dream einstetzt und die entsprechenden Pakete am Start hast.


    Hast du iptables überhaupt installiert, also nicht nur die Module?
    Was gibt ein...


    iptables --help

  • Zitat

    Original von beck51
    ich hab bereits alle iptable Module installiert:
    root@dm7020hd:/sys/module# opkg list |grep iptable


    Hast Du wirklich alle nötigen Module für iptables installiert? Denn "opkg list" zeigt alle mögliche Pakete an, aber nicht die installierten. "opkg list-installed | grep iptable" wäre der richtige Befehl um alle installierten Pakete für iptables anzuzeigen.


    Falls der Befehl iptables funktioniert, Regeln erstellt man in dem man den iptables Befehl mit geeigneten Parametern aufruft. Da helfen die Manualseiten und Google weiter. Diese kann man dann auch in ein Skript schreiben, das beim Start des Servers (Dreambox) ausgeführt wird.


    Ich verwende iptables großteils als Firewall, um Zugriff auf gewisse Ports nur von bestimmten IP-Adressen aus zu erlauben, wobei diese auch durch einloggen auf einer Webseite freigeschaltet werden können. Weiters auch zum Portforwarding auf andere Computer.


    Hier ein Beispiel einer Weiterleitung, die bei einem von mir administrierten Server im Einsatz ist:
    iptables -t nat -A PREROUTING -p tcp -d 10.1.1.2 --dport 51699 -j DNAT --to 10.1.1.10:5900
    iptables -t nat -A POSTROUTING -o eth0 -d 10.1.1.10 -j SNAT --to-source 10.1.1.2


    alle Verbindungen die zu Port 51699 des Servers 10.1.1.2 aufgebaut werden, werden transparent zum Computer 10.1.1.10 an Port 5900 (VNC) weitergeleitet. eth0 ist die Netzwerkkarte, über die die Pakete den Server verlassen, also an das Netzwerkdevice der DM anpassen. Als IP des Servers (hier 10.1.1.2) mußt Du vermutlich die lokale Adresse des VPN-Tunnels einsetzen, nicht die im fremden Netz.


    Wenn man wüßte, was Du genau brauchst, könnte man besser helfen. Sonst hilft Google sehr.


    ptha


    edit: und das Kernel-Modul heisst leider ip-tables und wird daher mit obigem opkg Befehl gar nicht gefunden. Für das Kernel-Modul ist er "opkg list-installed | grep ip-table".

  • Hi ptha,


    danke für eine Anleitung, leider funktioniert es bei mir dennoch nicht:


    root@dm7020hd:~# opkg list-installed | grep ip-table
    kernel-module-ip-tables - 3.2-r12.51-bsp0
    root@dm7020hd:~# iptables
    -sh: iptables: not found


    root@dm7020hd:~# opkg list-installed | grep ip
    enigma2-plugin-extensions-pipzap - 3.999+git4844+5ef12cc-r0
    geminiplugin - 0.80-r9
    initscripts - 1.0-r134-dream6
    kernel-module-ip-tables - 3.2-r12.51-bsp0
    kernel-module-iptable-filter - 3.2-r12.51-bsp0
    kernel-module-iptable-mangle - 3.2-r12.51-bsp0
    kernel-module-iptable-nat - 3.2-r12.51-bsp0
    kernel-module-iptable-raw - 3.2-r12.51-bsp0
    kernel-module-nf-conntrack-ipv4 - 3.2-r12.51-bsp0
    kernel-module-nf-defrag-ipv4 - 3.2-r12.51-bsp0
    modutils-initscripts - 1.0-r6

  • geilomat...


    jetzt funzt es auch :winking_face: DANKE


    ich versuch mich schon mal selber ran, aber vllt. kannst du mir auch die schnelle weiter helfen..


    ich versuch mit den iptables portforwarding zu machen


    sprich ich hab statische IPv4 adresse von portunity
    -> per openvpn hab ich meine dreambox verbunden nun will ich,wenn ich meine öffentl. IPv4 auf Port xxx aufrufe, auf meine fritzboc gelangen oder auf mein gerät xy im heimnetz


    vielend dank schon mal im vorraus


    wie gesagt ich probiere mich selber mal dran, aber manchmal ist einfacher wenn es eh jmd weiß

  • Hier mal die wichtigsten iptables Befehle um mit der NAT-Tabelle experimentieren zu können. Die Angabe der Tabelle (-t nat) ist nötig, da sonst die FILTER-Tabelle verwendet wird.


    iptables -t nat -L zeigt alle Regeln in der NAT-Tabelle an
    iptables -t nat -F löscht alle Regeln der NAT-Tabelle
    iptables -t nat -A ...... fügt eine Regel zur NAT-Tabelle hinzu


    Die beiden iptables Befehle für eine Portweiterleitung habe ich schon gepostet. Du mußt sie nur an Deine Konstellation anpassen. Zwei Regeln sind für eine Portweiterleitung nötig:


    iptables
    -t nat
    -A PREROUTING
    -p tcp
    -d [IP über die die Verbindung hereinkommt] vermutlich lokale IP des VPN-Tunnels
    --dport [Port über den die Verbindung hereinkommt]
    -j DNAT
    --to [IP+Port des Ziels der Weiterleitung]


    damit die Datenpakete auch zurückfinden
    iptables
    -t nat
    -A POSTROUTING
    -o eth0 Netzwerkdevice mit dem die DM mit dem LAN verbunden ist
    -d [IP des Ziels der Weiterleitung]
    -j SNAT
    --to-source [IP über die die Verbindung hereinkommt] vermutlich lokale IP des VPN-Tunnels

    Die Befehle müssen klarerweise in einer Zeile geschrieben werden.


    Die Daten für den Befehl bekommst Du bis auf das Weiterleitungsziel aus der Ausgabe des ifconfig Befehls. Deshalb solltest Du diese bei weiteren Fragen posten. Die externe statische IP von Portunity solltest Du nicht angeben und ist auch nicht nötig.


    ptha

  • Hi, so nun meld ich mich mal wieder.


    also die beiden Kommandos gebe ich ein


    xxxx: meine öffentliche IP von OpenVPN mit der ich von außen an die Box komme
    yyyy: dort wo ich nach der Box hin will


    iptables -t nat -A PREROUTING -p tcp -d xxxx --dport 8001 -j DNAT --to yyyyy:80
    Fehlermeldung: iptables: No chain/target/match by that name.


    iptables -t nat -A POSTROUTING -o eth0 -d yyyy -j SNAT --to-source xxxx
    --> wenn ich das eingebe, komm ich mit der Box nicht mehr ins Internet



    Daher folgende Fragen
    - was mach ich beim ersten Befehl falsch?
    - Wie komme ich dann weiterhin mit der Box ins Internet?


    Ich will einfach später mal folgende Seite angeben und an meine Fritzbox kommen
    [IP von OpenVPN]:8001


    Vielen Dank und viele Grüße,
    Beck51

  • xxxx ist nicht die öffentliche IP des Providers sondern die interne des VPN-Tunnels. Bei aktivem VPN-Tunnel steht sie unter anderem in der Ausgabe des ifconfig Befehls, vermutlich unter ppp0.


    Aber das erste Kommando versagt mit der Fehlermeldung "No chain/target/match by that name", dem sollte man nachgehen. Gibt es die Tabelle "nat" nicht, oder ist die chain "PREROUTING" unbekannt.


    iptables -t nat -L sollte alle chains der NAT-Tabelle anzeigen. Funktioniert das ohne Fehlermeldung? Welche chains werden angezeigt? Es sollten PREROUTING, INPUT, OUTPUT und POSTROUTING sein. Vergleiche die Ausgabe mit der Ausgabe von "iptables -L".


    Mit "cat /proc/net/ip_tables_names" kann man alle verfügbaren Tabellen anzeigen. Es sollte mindestens "filter" und "nat" sein, eventuell auch "mangle".


    Ich habe jetzt Deine Aufgabenstellung auf zwei Linux-Servern (Debian) nachgestellt und es hat funktioniert. Statt OpenVPN habe ich eine PPTP (über SSH) Verbindung zwischen den Servern verwendet, das sollte aber fast gleich sein.


    Dabei habe ich bemerkt, dass das Forwarding oft deaktiviert ist. Wenn "cat /proc/sys/net/ipv4/ip_forward" statt "1" eine "0" ausgibt, dann muß das Forwarding mit "echo 1 > /proc/sys/net/ipv4/ip_forward" aktiviert werden. Am besten in das Skript schreiben, das die Forwarding-Regeln setzt.


    Code
    Ausgabe von "ifconfig":
    eth0      Link encap:Ethernet  Hardware Adresse 00:19:bb:4c:29:63  
              inet Adresse:10.16.127.28  Bcast:10.16.127.255  Maske:255.255.255.0
              ....
    ppp0      Link encap:Punkt-zu-Punkt-Verbindung  
              inet Adresse:192.168.0.2  P-z-P:192.168.0.1  Maske:255.255.255.255
              ....

    10.16.127.28 ist die IP-Adresse der Dreambox im lokalen Netz.
    192.168.0.2 ist die IP-Adresse der Dreambox vom VPN-Tunnel aus gesehen. Das ist nicht die externe IP vom OpenVPN Provider!!!


    10.16.87.40:80 ist das Weiterleitungsziel
    8001 ist der Port der dorthin weitergeleitet werden soll


    Code
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A PREROUTING -p tcp -d 192.168.0.2 --dport 8001 -j DNAT --to 10.16.87.40:80
    iptables -t nat -A POSTROUTING -o eth0 -d 10.16.87.40 -j SNAT --to-source 10.16.127.28

    Beim POSTROUTING Befehl war ein Fehler drin, es muß die IP der Dreambox im lokalen Netz und nicht die IP der Dreambox vom VPN-Tunnel verwendet werden.


    Die öffentliche IP des Providers, [IP von OpenVPN], wird nirgends gebraucht, alle anderen (lokalen) IP's kannst Du ruhig posten. Achte darauf, daß die iptables Befehle keine Fehlermeldungen produzieren und überprüfe die Regeln in der NAT-Tabelle mit "iptables -t nat -L".


    ptha

  • Hi,


    erstmal vielen Dank das du/ihr euch solch eine Mühe macht.


    Hier nun meine Befehle:



    --> PREROUTING und POSTROUTING gibt es



    192.168.10.4 --> IP der Dreambox
    192.168.10.1 --> IP der Fritzbox
    188.xxx.xxx.xxx --> Öffentliche IP die ich von Provider von OpenVPN bekommen habe


    Bei tun0 ist inet addr. und P-t-P gleich


    Zitat


    iptables -t nat -A PREROUTING -p tcp -d 188.xxx.xxx.xxx --dport 8001 -j DNAT --to 192.168.10.1:80


    --> den bekannten Fehler
    iptables: No chain/target/match by that name.


    Zitat


    iptables -t nat -A POSTROUTING -o eth0 -d 192.168.10.1 -j SNAT --to-source 192.168.10.4


    --> Funzt


    Gruß,
    Beck51

  • Zum Testen habe ich iptables inzwischen auch auf meiner DM8000 installiert. Nachdem es immer den gleichen Fehler beim "Destination NAT" Kommando gab, habe ich recht viele vielleicht passende Kernel-Module installiert, aber bis gestern ohne Erfolg. Da der Befehl ohne dem Parameter --dport ohne Fehlermeldung funktioniert, habe ich

    Code
    iptables dport "No chain/target/match by that name"

    bei Google gesucht und gleich der erste Treffer brachte die Lösung. Es fehlte noch ein Kernel-Modul.

    Code
    opkg install kernel-module-xt-tcpudp

    Jetzt funktioniert bei mir Portforwarding über die Dreambox. Da ich recht viele andere iptables betreffende Kernelmodule zusätzlich installiert habe, weiß ich natürlich nicht, ob auch eines von diesen nötig ist, aber ich hoffe nicht.


    Jetzt sollte es mit

    Code
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A PREROUTING -p tcp -d 188.x.x.x --dport 8001 -j DNAT --to 192.168.10.1:80
    iptables -t nat -A POSTROUTING -o eth0 -d 192.168.10.1 -j SNAT --to-source 192.168.10.4

    funktionieren.


    Zum testen kannst Du die 188.x.x.x im DNAT Kommando durch 192.168.10.4 ersetzen. Dann kannst Du im Webbrowser vom PC aus mit http://192.168.10.4:8001 die Webseite der Fritzbox erreichen.


    Mit "iptables -t nat -F" kannst Du alle Regeln in der nat Tabellle wieder löschen. Das kann man auch in dem Skript, das das Portforwarding und andere Firewallregeln setzt, an den Anfang schreiben, so daß ein mehrmaliges aufrufen des Skripts nicht die gleiche Regel öfter in die NAT-Tabelle schreibt.


    Falls es funktioniert, dann kannst Du die drei Zeilen in ein Skript einbauen zB. unter /etc/init.d/scriptname und für den automatischen Start unter /etc/rc3.d/S50scriptname einen symbolischen Link darauf anlegen. Das Skript muß mindestens die Kommandos start und stop unterstützen, schau Dir dafür die anderen Skripts unter /etc/init.d/ an.


    ptha


    edit: Ich habe alle unnötigen Pakete wieder deinstalliert, hier eine Liste der nötigen für Portforwarding mit iptables

    Die nötigen/geladenen Kernelmodule bei aktiver Portweiterleitung sieht man auch mit dem Befehl "lsmod".
    Es war nie nötig den Befehl modprobe von der Konsole aus auszuführen, noch ein Skript unter /etc/modules-load.d/ anzulegen. Auch ein Reboot war nie nötig.


    edit:
    Da die Box über OpenVPN und portunity vermutlich ungeschützt im Internet hängt, solltest Du mittels iptables und der "filter" Tabelle Firewallregeln aufstellen, die den Zugriff aus dem Internet auf wenige Ports limitieren und auf bestimmte IP-Adressbereiche von Providern einschränken.

  • Also welche Pakete benötige ich denn das zeigt mir die DM an


    opkg list | grep iptable*
    iptables - 1.4.21-r0 - Tools for managing kernel packet filtering capabilities
    iptables is the userspace command line program used to configure and
    kernel-module-iptable-filter - 3.14.2-r12.06 - iptable-filter kernel module
    iptable-filter kernel module; iptables filter table

    -------------------------------------------------------------
    DM8000
    1500GB Seagate ST31500341AS