Może opisze co i jak. Zakładając że syn to np. Kacper a córka to powiedzmy Natalia
Na początek katalogi /www/ruter_SH/zapora
W katalogu ruter_SH mam jeszcze inne pliki wykonawcze ale w nim umieściłem katalog /zapora i to o niego nam chodzi.
Więc na początek robimy katalogi a w katalogu /zapora robimy pliki:
kacper_tmp: w tym pliku zapisywany jest czas jaki Kacper przesiedział przy telefonie, kompie czy co tam ma do dyspozycji
Natalia_tmp: tak jak wyżej tylko dla córki
kacper_mac: w tym pliku wypisane są wszystkie adresy MAC jeden pod drugim jakie Kacper posiada do dyspozycji.
Natalia_mac: tak jak wyżej tylko dla córki
Czas: w tym pliku wypisany jest czas przyznany aktualnie do wykorzystania np. 480 czyli 8 godzin na dobę
kacper.sh: Plik uruchamiany co minutę. Odczytywany jest przyznany czas z pliku "Czas" i zapisywany jest zużyty czas do pliku kacper_tmp
Jeżeli czas wykorzystany jest większy niż zezwolono to następuje zablokowanie internetu i przekierowanie na stronę routera gdzie jest informacja o wykorzystanym limicie.
Zawartość pliku kacper.sh wygląda następująco:
#!/bin/sh
DEVICES=/www/ruter_SH/zapora/kacper_mac # a w nim poszczególne MACi dzieciaków w kolejnych liniach
LIMITFILE=/www/ruter_SH/zapora/Czas
TIMEFILE=/www/ruter_SH/zapora/kacper_tmp # tworzony co restart, przy założeniu, że 'dzieciaki' nie restartują : )
USEDTIME=$(cat $TIMEFILE)
LIMIT=$(cat $LIMITFILE)
for device in $(cat $DEVICES); do
if [ ! -z "$(iw dev wlan0 station dump | grep $device)" ]; then
if [ "$(iw dev wlan0 station dump | grep -e $device -e inactive | tail -1 | awk '{print $3}')" -lt 60000 ]; then
# ignorowanie nieaktywnego połączenia, żeby było 'sprawiedliwie'
# z obserwacji - dotyczy np telefonu rzuconego w kąt, który podtrzymuje dzierżawę, ale niedotykany pozostaje 'inactive'
let USEDTIME=$USEDTIME+1
echo $USEDTIME > $TIMEFILE
fi
fi
done
if [ $USEDTIME -gt $LIMIT ]; then
iptables -I FORWARD 1 -p tcp -s 192.168.1.101 -j REJECT; iptables -A PREROUTING -t nat -p tcp -s 192.168.1.101 -j DNAT --to 192.168.1.1:80
iptables -I FORWARD 1 -p tcp -s 192.168.1.108 -j REJECT; iptables -A PREROUTING -t nat -p tcp -s 192.168.1.108 -j DNAT --to 192.168.1.1:80
fi
Zawartość pliku Natalia.sh wygląda następująco:
#!/bin/sh
DEVICES=/www/ruter_SH/zapora/Natalia_mac # a w nim poszczególne MACi dzieciaków w kolejnych liniach
LIMITFILE=/www/ruter_SH/zapora/Czas
TIMEFILE=/www/ruter_SH/zapora/Natalia_tmp # tworzony co restart, przy założeniu, że 'dzieciaki' nie restartują : )
USEDTIME=$(cat $TIMEFILE)
LIMIT=$(cat $LIMITFILE)
for device in $(cat $DEVICES); do
if [ ! -z "$(iw dev wlan0 station dump | grep $device)" ]; then
if [ "$(iw dev wlan0 station dump | grep -e $device -e inactive | tail -1 | awk '{print $3}')" -lt 60000 ]; then
# ignorowanie nieaktywnego połączenia, żeby było 'sprawiedliwie'
# z obserwacji - dotyczy np telefonu rzuconego w kąt, który podtrzymuje dzierżawę, ale niedotykany pozostaje 'inactive'
let USEDTIME=$USEDTIME+1
echo $USEDTIME > $TIMEFILE
fi
fi
done
if [ $USEDTIME -gt $LIMIT ]; then
iptables -I FORWARD 1 -p tcp -s 192.168.1.102 -j REJECT; iptables -A PREROUTING -t nat -p tcp -s 192.168.1.102 -j DNAT --to 192.168.1.1:80
iptables -I FORWARD 1 -p tcp -s 192.168.1.103 -j REJECT; iptables -A PREROUTING -t nat -p tcp -s 192.168.1.103 -j DNAT --to 192.168.1.1:80
fi
Czyli zliczany i blokowany jest czas z telefonu i komputera. Takie numery IP są przydzielone do numerów MAC w konfiguracji routera DHCP
Oczywiście trzeba jeszcze ustawić w konfiguracji zapory routera jakie numery MAC mogą korzystać z internetu bo cwany syn może zmienić MAC po zakończeniu limitu.
Oraz zabronić dostępu w konfiguracji routera DHCP "Blokuj adresy MAC ze zmienionym adresem IP." zaznaczając.
Teraz należy utworzyć plik
zapora_start.sh: a w nim
#!/bin/sh
/www/ruter_SH/zapora/kacper.sh
/www/ruter_SH/zapora/Natalia.sh
oraz zapora_restart.sh:a w nim
#!/bin/sh
echo 0 > /www/ruter_SH/zapora/kacper_tmp; echo 0 > /www/ruter_SH/zapora/Natalia_tmp; /etc/init.d/firewall restart
No i na koniec dodać dwa pliki zapora_start.sh i zapora_restart.sh do cron żeby uruchamiał się co minutę. Więc w pliku /etc/crontabs/root dopisujemy:
*/1 * * * * /www/ruter_SH/zapora/zapora_start.sh
0 23 * * * /www/ruter_SH/zapora/zapora_restart.sh
Mam jeszcze dodatkowe zakładki do konfiguracji tego poprzez stronę www
oraz możliwość ustawienia innego czasu dla każdego dzieciaka z osobna i w każdy dzień inaczej.
Na koniec do pliku /www/login.sh
Dodałem pomiędzy </script> a <fieldset>
<fieldset>
<legend class="sectionheader">Status czasu (Włącz blokady)</legend>
<table>
<tr>
<td>Kacper wyczerpał <% cat /www/ruter_SH/zapora/kacper_tmp %>minut z <% cat /www/ruter_SH/zapora/Czas %> minut</td>
</tr>
<tr>
<td>Natalia wyczerpała <% cat /www/ruter_SH/zapora/Natalia_tmp %>minut z <% cat /www/ruter_SH/zapora/Czas %> minut</td>
</tr>
</table>
</fieldset>
Mam odczyt kto ile siedział w necie i dzieciaki widzą co się stało jak limit się skończy
Wszystkie pliku sh muszą mieć chmod 0755