Netzwerkzugriff auf Subnetz beschränken

  • Liebe Forengemeinde,


    zu erst einmal hallo von meiner Seite. Ich bin Neuling hier und auch bei Debian erst einmal nur grundsätzlich zu allen Dingen imstande. Ich betreibe an der Uni einen 3D - Drucker in meinem Fachgebiet, der so weit ab vom eigentlichen Ort des Geschehens steht, dass wir uns entschieden haben, ihn an das Netzwerk via Octoprint anzubinden. Dafür nutze ich einen Raspberry Pi 3 Model B+.

    Wichtig für die Einrichtung ist, dass dem Pi vom Rechenzentrum immer dieselbe IP zugewiesen wird, was natürlich für das Erreichen des Druckers sehr günstig ist. Allerdings lässt sich der Pi auch außerhalb des Uni-Netzes anpingen und die OctoPrint Oberfläche ist auch problemlos erreichbar, womit ich etwas Bauchweh habe. Ich nutze für die Netzwerkkonfiguration den networking dienst, da dhcpcd nicht funktioniert hat. Das Port-Forwarding wird global vom Rechenzentrum geregelt, darauf habe ich also keinen Einfluss.

    Meines Wissens nach sollte man mit iptables grundsätzlich in der Lage sein, den Zugang auf das Subnetz der Uni zu begrenzen. Ich wäre also froh, wenn der Pi auf Pings und Anfragen von Außerhalb schlicht nicht antwortet. Nun habe ich im Internet auf verschiedenen Wegen danach gesucht, wie ich diese Restriktionen programmieren kann und fand heraus, dass in iptables der Ausschluss spezifischer Subnetze möglich ist; ich möchte aber nun alle bis auf ein Subnetz ausschließen.

    Hat jemand eine Ahnung, wie das funktioniert bzw. eine Anlaufstelle, an der ich mich dazu belesen kann? Seid bitte milde mit den Antworten. Ich bin wirklich noch frisch in der Sache und will noch viel lernen. :)


    Tausend Dank Euch allen schon vorab,

    mit liebem Gruß,

    Philipp.

  • Allerdings lässt sich der Pi auch außerhalb des Uni-Netzes anpingen ...

    Was genau meinst Du mit "außerhalb des Uni-Netzes"?

    Hat dein PI evtl. eine öffentliche IPv4-Adresse oder eine IPv6-Adresse zugewiesen bekommen, mit der der PI so erreichbar ist?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Hat dein PI evtl. eine öffentliche IPv4-Adresse oder eine IPv6-Adresse zugewiesen bekommen, mit der der PI so erreichbar ist?

    Hallo rpi444,


    ja genau. Ich hoffe, ich verwechsle nichts, aber er hat eine ipv4 erhalten. also Nur Ziffern XXX.XX.XXX.XXX . Mit dieser IP ist er von überall erreichbar.

  • ..., aber er hat eine ipv4 erhalten. also Nur Ziffern XXX.XX.XXX.XXX . Mit dieser IP ist er von überall erreichbar.

    Ist das eine feste IPv4-Adresse (d. h. sie ändert sich nie)? Wenn ja, und der Zugriff Uni-Netz erfolgt aus einem ( oder mehreren) immer bekannten Subnetz, könnte man z. B. mit iptables nur diese Zugriffe zulassen.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Ist das eine feste IPv4-Adresse (d. h. sie ändert sich nie)? Wenn ja, und der Zugriff Uni-Netz erfolgt aus einem ( oder mehreren) immer bekannten Subnetz, könnte man z. B. mit iptables nur diese Zugriffe zulassen.

    Ganz genau so ist es. Dahin führt ja auch meine Fragestellung. Alles, was ich eigentlich nur tun will, ist in iptables definieren, dass er nur das Subnetz der Uni für eingehende Anfragen zulässt (Zugang über VPN ist ja dann auch möglich). Ich habe schlichtweg keine Ahnung, wie ich das in der dafür nötigen Syntax definiere. :(

  • Ich habe schlichtweg keine Ahnung, wie ich das in der dafür nötigen Syntax definiere. :(

    Teste erstmal mit nicht persistenten iptables-Regeln:

    Code
    sudo iptables -I INPUT 1 -i <input-Interface> -p tcp ! -s <Uni-Netz-mit-der-richtigen-Syntax> -m state --state NEW,INVALID -j DROP
    
    sudo iptables -I INPUT 2 -i <input-Interface> -p icmp ! -s <Uni-Netz-mit-der-richtigen-Syntax> -j DROP

    Nach einem reboot sind diese Regeln nicht mehr aktiv. Vorsicht mit iptables, damit Du dich nicht vom PI aussperrst.


    Wenn es zu deiner Zufriedenheit funktioniert, kannst Du z. B. iptables-persistent benutzen. Siehe z. B. die Ausgabe von:

    Code
    apt-cache policy iptables-persistent netfilter-persistent

    Welches OS/Version hast Du auf dem PI installiert?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Teste erstmal mit nicht persistenten iptables-Regeln:

    Code
    sudo iptables -I INPUT 1 -i <input-Interface> -p tcp ! -s <Uni-Netz-mit-der-richtigen-Syntax> -m state --state NEW,INVALID -j DROP
    
    sudo iptables -I INPUT 2 -i <input-Interface> -p icmp ! -s <Uni-Netz-mit-der-richtigen-Syntax> -j DROP

    Nach einem reboot sind diese Regeln nicht mehr aktiv. Vorsicht mit iptables, damit Du dich nicht vom PI aussperrst.

    Vielen Dank für die schnelle Hilfe. Ist <input-Interface> hier auch ein Platzhalter? Was müsste ich da eintragen?


    ich weiß nicht, ob das hilfreich zur OS-Frage ist, aber der Pi gibt bei uname -a folgende Info:


    Linux octopi 4.19.58-v7+ #1245 SMP Fri Jul 12 17:25:51 BST 2019 armv7l GNU/Linux

  • Vielen Dank für die schnelle Hilfe. Ist <input-Interface> hier auch ein Platzhalter? Was müsste ich da eintragen?

    Ja, das ist ein Platzhalter. Siehe die Ausgabe von:

    Code
    ip a

    Evtl. eth0 oder wenn per WLAN, dann evtl. wlan0, als input-Interface. Alles ohne spitze Klammern.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Vielen Dank für die Info!


    Ich werde es morgen gleich ausprobieren. Im Moment läuft noch ein Druck, den ich nur ungern unterbrechen möchte. Ich melde mich dann zurück, ob und wie es klappt. :)

  • Hallo nochmal,


    ich habe mich heute mal am vorgeschlagenen Code probiert. Offenbar mache ich aber was falsch. Ich habe die Subnetzmaske vom Uni-Netz eingetragen. Nach der ersten Zeile konnte ich den Pi innerhalb des Uni-Netzes noch anpingen, aber schon die Weboberfläche nicht mehr erreichen. Nach der zweiten Zeile war er dann ganz dicht.


    Also entweder bewirkt der Code nicht das, was ich will, oder ich mache es falsch, und ich gehe von Letzterem aus. "Uni-Netz-mit-der-richtigen-Syntax" heißt wahrscheinlich, dass ich keine IP à la 123.456.789.0 angeben kann, oder?


    Danke vorab, vor allem für die Geduld mit so einer IT-Gurke :(

  • "Uni-Netz-mit-der-richtigen-Syntax" heißt wahrscheinlich, dass ich keine IP à la 123.456.789.0 angeben kann, oder?

    Du kannst ein Subnetz/netmask oder eine einzelne IP-Adresse oder (mit der richtigen) Syntax) auch nur eine IP-Range (für die IP-Adressen), in der iptables-Regel verwenden.


    Hast Du "!" benutzt bzw. erkannt was das "!" in der iptables-Regel bewirkt?

    Wie hast Du die netmask des Uni-Netzes ermittelt oder mitgeteilt bekommen?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Hello again,


    ich habe die Subnetzmaske in den Netzwerkeinstellungen meines Arbeitsrechners eingesehen. 255.255.255.0/24


    So habe ich sie eingegeben, mit dem Ergebnis, dass der Pi die Verbindung vom Arbeitsrechner aus verweigert hat. Ich habe versucht, das, was Du geschrieben hast, zu verstehen. Wie gesagt: ich hab bis jetzt nie etwas in dieser Syntax formuliert. Soweit habe ich auch den Großteil begriffen, bis auf das "!".

    Aus gängigen anderen Programmsprachen verstehe ich das "!" als NOT. Vermutlich ist das aber nicht so gemeint.

  • ich habe die Subnetzmaske in den Netzwerkeinstellungen meines Arbeitsrechners eingesehen. 255.255.255.0/24


    Soweit habe ich auch den Großteil begriffen, bis auf das "!".

    Aus gängigen anderen Programmsprachen verstehe ich das "!" als NOT. Vermutlich ist das aber nicht so gemeint.

    Ich weiß aus deinem Beispiel (255.255.255.0/24) jetzt nicht, ob Du das Uni-Netz, in die iptables-Regel richtig eingetragen/formuliert hast.


    Ja, das "!" hat hier in den iptables-Regeln auch die Funktion NOT.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Eingetragen habe ich folgende Zeilen:


    Code
    sudo iptables -I INPUT 1 -i eth0 -p tcp ! -s 255.255.255.0/24 -m state --state NEW,INVALID -j DROP
    sudo iptables -I INPUT 2 -i eth0 -p icmp ! -s 255.255.255.0/24 -j DROP

    Ich fürchte, dass das nicht korrekt ist.

  • Eingetragen habe ich folgende Zeilen:


    Code
    sudo iptables -I INPUT 1 -i eth0 -p tcp ! -s 255.255.255.0/24 -m state --state NEW,INVALID -j DROP

    Das (255.255.255.0/24) kann m. E. nicht das Uni-Netz sein, denn 255.x.x.x ist für Netzmasken reserviert:

    Code
    :~$ ipcalc --nocolor 255.255.255.0/24 | grep -i class
    Hosts/Net: 254                   Class invalid

    Gibt es keinen Netzwerk-admin an der Uni, den Du nach dem Uni-Netz fragen kannst?

    Wie ist die richtig anonymisierte Ausgabe von:

    Code
    ifconfig
    ip a

    ?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • 255.x.x.x ist für Netzmasken reserviert

    Eine Netzmaske ist eine Netzmaske und keine IP-Adresse /-Netzwerk. Lediglich 255.255.255.255 ist eine für Broadcast reservierte IP-Adresse.

    Menschen die keine Ironie verstehen finde ich super!

    Edited once, last by llutz ().

  • ich habe die Subnetzmaske in den Netzwerkeinstellungen meines Arbeitsrechners eingesehen. 255.255.255.0/24

    Richtig, 255.255.255.0 ist eine Netzmaske, auch /24 geschrieben.

    Das ist nicht die IP oder das Subnet.

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?


    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Wie ist die richtig anonymisierte Ausgabe von:

    Code
    ifconfig
    ip a

    ?

    Ich könnte bei uns im Rechenzentrum fragen, aber da ist die Abfertigung solcher Anliegen meist etwas schwierig.

    Auch auf die Gefahr hin, dass ich die Ausgabe nicht richtig anonymisiere: hier das, was der Pi bei Eingabe der Befehle auswirft...



    Ich hoffe, das hilft bei dem Problem weiter. Ich dachte ja schon fast, die Broadcast-IP sei jetzt die richtige, aber doch nicht. Bitte entschuldigt, dass sich das Problem so zieht. Ich bin leider wirklich nicht sehr fit in derlei Dingen.


    Dennoch tausend Dank!

  • ... hier das, was der Pi bei Eingabe der Befehle auswirft...



    Code
    pi@octopi:~ $ ifconfig
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 111.22.333.444  netmask 255.255.255.0  broadcast 111.22.333.255

    Versuch mal mit:

    Code
    111.22.333.0/24

    oder (andere Schreibweise) mit:

    Code
    111.22.333.0/255.255.255.0

    , in den iptables-Regeln.


    EDIT:


    BTW: Statt der netmask kannst Du auch iprange in der iptables-Regel benutzen. Z. B.:

    Code
    sudo iptables -I INPUT 1 -i eth0 -p tcp -m iprange ! --src-range 111.22.333.0-111.22.333.255 -m state --state NEW,INVALID -j DROP

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Edited 2 times, last by rpi444 ().

  • Es sieht so aus, als würde die Range-Variante funktionieren. Ich werde heute Abend mal von zu Hause auf den Pi zuzugreifen versuchen und euch berichten. :)


    Vielen lieben Dank für die ganze Hilfe bis jetzt!