Menu

Sperrungen

2008-10-28
2013-05-29
  • Nobody/Anonymous

    Hallo!
    Gibt es eigentlich eine Möglichkeit, dass man für bestimmte PCs im Netz diverse Ports bzw. Portbereiche sperren kann oder auch URLs, so wie es bspw. in der T-Com Original-Firmware möglich war? Und falls nicht, ist so etwas geplant einzubauen oder ist das zu aufwändig?
    Danke im Voraus.

     
    • Patrick Schmidt

      Patrick Schmidt - 2008-10-28

      Ist von unserer Seite nicht geplant und wäre auch recht aufwändig das per Web-Interface zu bedienen,
      aber sicher machbar. Für so etwas wurde auch die Plugin-Schnittstelle geschaffen, in der Hoffnung das Nutzer
      vielleicht selber mal was entwickeln. Ist aber bisher leider nichts passiert und wird wohl auch in Zukunft
      nichts passieren.

      Wie dem auch sei, du kannst das Ganze natürlich mittels custom_script konfigurieren und ab der nächsten Version dann über das Firewall-custom_script. Das Ganze würde in etwa so aussehen:
      ------------------------------------------
      PC_LIST="192.168.2.50 192.168.2.60"
      BLOCKED_PORTS="6500 3867"
      BLOCKED_RANGES="7890-7900 3456-3460"
      BLOCKED_STRINGS="hotporn.net www.microsoft www.myspace.com"

      for PC in $PC_LIST
      do

        #setup single ports
        for PORT in $BLOCKED_PORTS
        do
          iptables -A FORWARD -s $PC -p tcp || udp --dport $PORT -j DROP
        done
        #setup port ranges
        for RANGE in $BLOCKED_RANGES
        do
          iptables -A FORWARD -s $PC -p tcp || udp --dport $RANGE -j DROP
        done
        #setup strings in HTTP
        for STRING in $BLOCKED_STRINGS
        do
          iptables -A FORWARD -s $PC -p tcp --dport 80 -m string --string $STRING -j DROP
        done

      done
      ------------------------------------------

      Da hier nur in die Filter-table eingefügt wird, sollte das Ganze auch mit der aktuellen und früheren BS-Versionen problemlos funktionieren.

       
    • Nobody/Anonymous

      Hallo Patrick.
      Ich hab das Ganze mal in das custom_script reingeschrieben und entsprechend abgeändert, jedoch zeigt es keinerlei Wirkung. Der entsprechende PC kann immernoch alle Seiten aufrufen, obwohl in der iptables-Tabelle Einträge vorhanden sind. Muss da noch was extra eingegeben werden oder stimmt da irgendwas nicht???

       
    • Patrick Schmidt

      Patrick Schmidt - 2008-11-04

      Na hast du dein Skript mal manuell auf der Konsole ausgeführt um zu sehen ob es fehlerfrei durchläuft?
      Mach doch hinterher auch mal ein 'iptables -L -nv' um zu sehen ob die Regeln überhaupt eingefügt wurden.

       
    • Nobody/Anonymous

      also bei mir funzt das so auch nicht, siehe:

      0     0 DROP       tcp  --  *      *       192.168.1.4          0.0.0.0/0           tcp dpt:80 STRING match "http://www.microsoft.com"

      wird nicht gesperrt für den PC

       
    • Patrick Schmidt

      Patrick Schmidt - 2008-11-08

      Ja ja ist immer das gleiche Problem, hab einen Schreibfehler im obigen Skript drin. Aus dem "-A" muss natürlich ein "-I" gemacht werden, damit die Regeln oben eingefügt werden. Ansonsten werden die betreffenden Pakete natürlich schon vorher ACCEPTED und passieren die Regeln gar nicht. Auch hab ich grade festgestellt, das DROP nicht so geeignet ist und besser ein TCP-RST zurück kommen sollte. Dann lädt der Browser nicht ewig sondern zeigt sofort das die Seite nicht erreichbar ist.

      Also hier nochmal die überarbeitete Skriptvariante:

      ------------------------------------------
      PC_LIST="192.168.2.50 192.168.2.60"
      BLOCKED_PORTS="6500 3867"
      BLOCKED_RANGES="7890-7900 3456-3460"
      BLOCKED_STRINGS="hotporn.net http://www.microsoft http://www.myspace.com"

      for PC in $PC_LIST
      do

      #setup single ports
      for PORT in $BLOCKED_PORTS
      do
        iptables -I FORWARD -s $PC -p tcp || udp --dport $PORT -j REJECT --reject-with tcp-reset
      done
      #setup port ranges
      for RANGE in $BLOCKED_RANGES
      do
        iptables -I FORWARD -s $PC -p tcp || udp --dport $RANGE -j REJECT --reject-with tcp-reset
      done
      #setup strings in HTTP
      for STRING in $BLOCKED_STRINGS
      do
        iptables -I FORWARD -s $PC -p tcp --dport 80 -m string --string $STRING -j REJECT --reject-with tcp-reset
      done

      done
      ------------------------------------------

       
    • skrueger

      skrueger - 2008-11-10

      Hm...Nun Funzt es, aber kann man nicht iptables erweitern und das ganze um webstr erweitern? Weil dann könnte man Begriffe einsetzen die in der URL vorkommen! Kene ich so vom DD-WRT

      Mfg Sven

       
    • Patrick Schmidt

      Patrick Schmidt - 2008-11-11

      Ich habe 'webstr' schon jetzt mit der neuen Version 0.3.3 eingepflegt und getestet.
      Du kannst das Modul also benutzen, allerdings gibts noch kein Web-Frontend zum Konfigurieren, aber das werd ich vielleicht mit der nächsten Version nachlegen. Deshalb stehts auch nicht im Changelog, falls die Frage kommt.

      Benutze übrigens ab jetzt auch die custom_script-Schnittstelle für Firewall Regeln, da kannst du sicher sein, das die auch bei zyklischen Aktualisierungen der Regeln wieder neu eingefügt werden.

       
    • sonderprofil

      sonderprofil - 2008-11-11

      Hallo.
      Kann es sein, dass die folgende Regel nicht funktioniert?? (aus dem obigen Script)
      "iptables -I FORWARD -s $PC -p tcp || udp --dport $PORT -j REJECT --reject-with tcp-reset"
      Hab das ganze mal manuell eingegeben:
      "iptables -I FORWARD -s 192.168.2.99 -p tcp || udp --dport 80 -j REJECT --reject-with tcp-reset"
      Dann kommt bei "iptables -L -nv" folgendes:
         55  8808            tcp  --  *      *       192.168.2.99         0.0.0.0/0

         20  1036 TCPMSS     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0
      und mit dem PC kann ich munter weiter surfen.
      Wenn ich jetzt das "|| udp" rausnehme kommt folgendes:
         24  1248 REJECT     tcp  --  *      *       192.168.2.99         0.0.0.0/0
              tcp dpt:80 reject-with tcp-reset
        399 43447            tcp  --  *      *       192.168.2.99         0.0.0.0/0

         46  2300 TCPMSS     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0
      und der PC kann nicht mehr über Port 80 surfen, bsp Port 443 geht noch.
      Kommt die Regel mit dem tcp || udp irgendwie nicht klar, weil da bei iptables -L keine weiteren Argumente mehr auftauchen und diese wirkungslos ist? Muss man die tcp und udp getrennt sperren??
      Danke.

       
    • Patrick Schmidt

      Patrick Schmidt - 2008-11-11

      Na ist doch logisch daß das in dem Fall nicht funktioniert, wenn du auf ein UDP-Paket mit TCP-Reset antwortest. Hab ich natürlich beim Ändern in das Reject-Target nicht bedacht. Also entweder du schreibst:

      iptables -I FORWARD -s 192.168.2.99 -p tcp || udp --dport 80 -j DROP

      oder trennst die beiden

      iptables -I FORWARD -s 192.168.2.99 -p tcp --dport 80 -j REJECT --reject-with tcp-reset
      iptables -I FORWARD -s 192.168.2.99 -p udp --dport 80 -j DROP

       
    • skrueger

      skrueger - 2008-11-11

      Hi, Patrick

      Funzt super mit webstr:

      iptables -I FORWARD -s 192.168.1.4 -p tcp --dport 80 -m webstr --url "microsoft<&nbsp;>porno" -j REJECT --reject-with tcp-reset       

      allerdings muß zwischen der url das <&nbsp;> als leerzeichen und mit:

      iptables -I FORWARD -s 192.168.1.4 -p tcp --dport 80 -m webstr --host "microsoft<&nbsp;>porno" -j REJECT --reject-with tcp-reset

      geht dann auch garnix mehr!

      Hab ich hier gefunden: https://www.dd-wrt.com/phpBB2/viewtopic.php?p=164350&sid=4d0d67fe3bde0c711b174648b218e7ff

      Danke und MFG Sven

       
    • Patrick Schmidt

      Patrick Schmidt - 2008-11-12

      Also --host "microsoft<&nbsp;>porno" kann nicht funktionieren. Da müsstest du wahrscheinlich exakt den Hostnamen der im HTTP-Header kommt eintragen, also wirklich "microsoft.com<&nbsp;>hotporn.net". Wenn das an der Stelle überhaupt mit Leerzeichen funktioniert, könnte mir auch vorstellen dass man für jeden Hostnamen ne eigene Regel braucht.
      In dem Fall -m webstr --url "microsoft<&nbsp;>porno" sperrst du wahrscheinlich alle URL's die microsoft oder porno enthalten, also auch mal fiktiv "drivers.asus.com/boards/id=1019/microsoft_compliant/vista_64x_setup.exe".
      Das ist ja wahrscheinlich nicht Sinn der Sache nehm ich an...

       
    • skrueger

      skrueger - 2008-11-12

      <Also --host "microsoft<&nbsp;>porno" kann nicht funktionieren. Da müsstest du wahrscheinlich exakt <den Hostnamen der im HTTP-Header kommt eintragen, also wirklich <"microsoft.com<&nbsp;>hotporn.net". Wenn das an der Stelle überhaupt mit Leerzeichen funktioniert, <könnte mir auch vorstellen dass man für jeden Hostnamen ne eigene Regel braucht.

      Möglich, ka. ich habe es nur übernommen, ohne genau zu wissen wie das funzt aber dafür gibt es ja Leute wie dich die mich eines Bessern beleheren :)! Und werde es wider raus nehmen...

      <also auch mal fiktiv "drivers.asus.com/boards/id=1019/microsoft_compliant/vista_64x_setup.exe".
      <Das ist ja wahrscheinlich nicht Sinn der Sache nehm ich an...

      damit hast du Recht (und auch teilweise gewollt) und ich habe microsoft auch nur als Beispiel mit drin, sind natürlcih andere URL`s gesperrt und man muß natürlcih genau überlegen welche worte mal wählt!
      Aber für mich ist diese Metohde einfacher als jede URL alleine zu sperren, denke dafür ist das Modul auch gemacht und man muß bedacht damit umgehen

      Andere Sache, wo wir dabei sind, kann man anstatt -j REJECT --reject-with tcp-reset keinen Reset sondern eine Weiterleitung zu einer anderen Seite anstoßen? So in etwa "nix da, darft du noch nicht hinsurfen" ?

      Danke und MFG Sven

       
    • Patrick Schmidt

      Patrick Schmidt - 2008-11-13

      Na mit der Firewall könntest du natürlich die Ziel-IP ändern und somit auf nen anderen Webserver umleiten. Das ist aber eigentlich nicht ganz korrekt, weil sich dadurch der HTTP-Header nicht ändert. Musst du mal versuchen und schauen was der Webserver und der Browser dazu sagen.
      Um die Ziel-IP zu ändern, muss die betreffende Regel aus der FOWARD-chain in die PREROUTING-chain. Könnte dann beispielsweise so aussehen:

      DST_WEB_SERVER="99.88.77.66"

      iptables -t nat -I PREROUTING -s 192.168.1.4 -p tcp --dport 80 -m webstr --url "microsoft<&nbsp;>porno" -j DNAT --to-destination $DST_WEB_SERVER

       

Log in to post a comment.

MongoDB Logo MongoDB