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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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???
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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:
Also --host "microsoft< >porno" kann nicht funktionieren. Da müsstest du wahrscheinlich exakt den Hostnamen der im HTTP-Header kommt eintragen, also wirklich "microsoft.com< >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< >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...
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
<Also --host "microsoft< >porno" kann nicht funktionieren. Da müsstest du wahrscheinlich exakt <den Hostnamen der im HTTP-Header kommt eintragen, also wirklich <"microsoft.com< >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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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:
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.
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.
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???
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.
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
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
------------------------------------------
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
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.
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.
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
Hi, Patrick
Funzt super mit webstr:
iptables -I FORWARD -s 192.168.1.4 -p tcp --dport 80 -m webstr --url "microsoft< >porno" -j REJECT --reject-with tcp-reset
allerdings muß zwischen der url das < > als leerzeichen und mit:
iptables -I FORWARD -s 192.168.1.4 -p tcp --dport 80 -m webstr --host "microsoft< >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
Also --host "microsoft< >porno" kann nicht funktionieren. Da müsstest du wahrscheinlich exakt den Hostnamen der im HTTP-Header kommt eintragen, also wirklich "microsoft.com< >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< >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...
<Also --host "microsoft< >porno" kann nicht funktionieren. Da müsstest du wahrscheinlich exakt <den Hostnamen der im HTTP-Header kommt eintragen, also wirklich <"microsoft.com< >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
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< >porno" -j DNAT --to-destination $DST_WEB_SERVER