home
erste Version am 19.03.2015
letzte Änderung am 19.03.2015

Kinderbremse (für die Gateway-VM)

Wenn die eigenen oder Nachbars Kinder das offene [W]LAN hemmungslos nutzen und dabei ihre eigentlichen Pflichten vernachlässigen, nützt es unmittelbar erstmal wenig, wenn man sich einredet, dass sie ja schließlich Medienkompetenz aufbauen bzw. erlernen müssen.
Ist der jüngste Sohnemann z.B. immer schon wach, wenn man ihn um 06:10 Uhr wecken will und liegt iPod-touch spielend im Bett, dann sieht man sich irgendwann vielleicht mal die Internet-Nutzung im Traffic-Monitor an. Sieht man dann, dass er die ganze Woche über schon regelmäßig ab 04:00 Uhr mit seinem iPod online und aktiv war, dann redet man sicher erstmal mit ihm. Ändert sich nix, redet man nochmal mit ihm. Zeigt das nun immer noch keine Wirkung, greift man halt zu einer technischen Regel-Durchsetzungs-Variante.



Version 1

Im ersten Ansatz wird ein Teil der Funktionalität der Fritzbox-Kindersicherung auf der Gateway-VM nachgebildet.
Will heißen: für ausgewählte IP-Adressen gibt es Internet nur zu bestimmten Zeiten.

Hier mal am Beispiel von Sohnemanns iPod.
Zunächst muss der iPod eine feste IP-Adresse bekommen.
Dazu ist die MAC-Adresse des iPods zu ermitteln und eine entsprechende Reservierung auf dem DHCP-Server in der Datei /etc/dnsmasq.conf vorzunehmen.
dhcp-host=28:37:37:e3:94:12,    IPod,           192.168.42.67,  3h

Dann sind zwei Shell-Scripte im ~/bin-Verzeichnis anzulegen und mit chmod +x als ausführbar zu kennzeichnen.

Die erste Datei ~/bin/ipodblock.sh blockiert Kommunikation.
sudo iptables -I FORWARD -p tcp -s 192.168.42.67/32 -j DROP
sudo iptables -I FORWARD -p udp -s 192.168.42.67/32 -j DROP

Die zweite Datei ~/bin/ipodunblock.sh hebt die Blockade wieder auf.
sudo iptables -D FORWARD -p tcp -s 192.168.42.67/32 -j DROP
sudo iptables -D FORWARD -p udp -s 192.168.42.67/32 -j DROP

Als letzter Schritt sind die Zeiten in der crontab einzustellen. Aufruf mit:
crontab -e
und Einstellen der Zeiten:
0  16 * * *   $HOME/bin/ipodunblock.sh
0  21 * * *   $HOME/bin/ipodblock.sh

Hier also an jedem Tag der Woche Internet von 16:00 bis 21:00 Uhr für den iPod.

...was war der Große sauer auf den Kleinen, dass er Papa genötigt hat, sowas zu bauen.
Ihm war sofort klar, dass das natürlich auch ganz schnell für seine Devices eingesetzt werden kann ... immerhin :-)



Version 2

Diese Version existiert bisher nur halbfertig in meinem Kopf und stellt sich etwas komplexer dar.
Ich habe sie dem Großen für seinen PC angedroht .... ääh nein .... nicht angedroht .... soll man ja nicht .... als Alternative vorgestellt.

Mit seinem Windows-PC soll er auch Hausaufgaben machen können - und zwar notfalls rund um die Uhr.
Was er nicht soll, ist, den PC quasi ausschließlich zum YouTube-glotzen und Battlefield-spielen einsetzen.
Eine einfache Zeitsperre würde nur dazu führen, dass er sich regelmäßig bei meiner gutmütigen Frau beklagt, dass er ja leider keine Hausaufgaben machen könne, weil das dafür so unverzichtbar notwendige Internet [noch] blockiert ist.
Und dann bekäme ich von meinem Weib mindestens jeden zweiten Tag zu hören, dass das arme Kindlein jetzt sofort Internet braucht.

Könnte er allerdings zumindest Web-surfen, sollten die üblichen Hausaufgaben damit machbar sein.
Dafür braucht er also die Ports 80 (http) und 443 (https) offen. Ebenfalls sollten 53 (DNS), 68 (DHCP) und 123 (NTP) erreichbar sein.
Vielleicht noch ein/zwei mehr. Aber überschaubar viele.
Siehe dazu auch die Liste der WellKnownPorts.

Das sollte sich mit einem iptables-Script realisieren lassen, das für seinen PC mit der IP-Adresse 192.168.42.68 ungefähr folgendermaßen aussehen könnte:
sudo iptables -I FORWARD -p tcp -s 192.168.42.68/32             -j DROP
sudo iptables -I FORWARD -p udp -s 192.168.42.68/32             -j DROP

sudo iptables -I FORWARD -p tcp -s 192.168.42.68/32 --dport 53  -j ACCEPT
sudo iptables -I FORWARD -p udp -s 192.168.42.68/32 --dport 53  -j ACCEPT
sudo iptables -I FORWARD -p udp -s 192.168.42.68/32 --dport 68  -j ACCEPT
sudo iptables -I FORWARD -p tcp -s 192.168.42.68/32 --dport 80  -j ACCEPT
sudo iptables -I FORWARD -p udp -s 192.168.42.68/32 --dport 123 -j ACCEPT
sudo iptables -I FORWARD -p tcp -s 192.168.42.68/32 --dport 443 -j ACCEPT


Durch den Parameter -I landen die zuletzt angegebenen Regeln ganz oben.
Also kommen die Ports 53, 68, 123, 80 und 443 nach draußen, alles andere landet danach in der DROP-Regel.

Sofern YouTube seine Videos auch via 80 oder 443 ausliefert, könnte temporär entweder die Bandbreite auf ISDN-Geschwindigkeit gedrosselt oder youtube.com auf localhost gelegt werden.
Wobei...für den simplen localhost-Trick ist er wahrscheinlich schon zu alt.
Um die Bandbreite für eine einzelne IP-Adresse zu drosseln, bietet sich wohl tc an. Scheint nicht ganz trivial zu sein... Hier gibts was dazu. Oder hier.
Aber die Anzahl der Pakete pro Sekunde kann leicht mit iptables-Bordmitteln limitiert werden:
sudo iptables -I FORWARD -s 192.168.42.68/32 -j DROP
sudo iptables -I FORWARD -s 192.168.42.68/32 -m limit --limit 10/sec -j ACCEPT

Oder etwas hübscher lesbar:
sudo iptables -I FORWARD 1 -s 192.168.42.68/32 -m limit --limit 10/sec -j ACCEPT
sudo iptables -I FORWARD 2 -s 192.168.42.68/32 -j DROP


Könnte so klappen....muss aber nicht.
Bisher reicht bei Sohnemann das Wissen, dass ich so ein Script schon irgendwie bauen könnte.
Und mir bleibt die Hoffnung, dass er es lieber nicht darauf ankommen lassen wird, mir den diesbezüglichen Kragen platzen zu lassen.