On Sat, Aug 6, 2016 at 3:43 AM Brian <a...@cityscape.co.uk> wrote:
> On Fri 05 Aug 2016 at 15:49:28 +0000, Mark Fletcher wrote: > > > On Fri, Aug 5, 2016 at 11:04 PM Brian <a...@cityscape.co.uk> wrote: > > > > > Sticking with the idea of using a systemd service file, the script it > > > runs would check the time and alter the routing table when necessary. > > > Neither cron nor iptables need come into the picture. > > > > > Thanks Brian. My thinking was that although this machine won't be on all > > the time, it will be started and stopped at unpredictable times. I wanted > > to have a situation where if it is brought up during allowed hours, the > > internet works. If it is brought up during not-allowed hours, it doesn't, > > until 9am arrives, at which point it starts working. So if my son gets > out > > of bed at 3am and fires up the computer, he gets nowhere (at least until > he > > figures out how to hack into my own machine and run an ssh session with X > > forwarding... but if he figures that out without my help I'm almost > > inclined to reward him by turning a blind eye :-) ) > > > > Similarly, if he is surfing away on it at 9pm, well by then he is > supposed > > to be at least in the bath if not in bed, so the computer's internet > > connection sets an example by going to sleep... > > > > If he leaves it on, I want it to connect and disconnect automatically at > > the appropriate times, and if he doesn't, I want it to come up in the > right > > state. If I leave a hole in this that can be exploited without strong > > technical skills, I'm confident he'll find it... > > Without the root password or sudo he should be unable to influence the > routing. The machine will always come up with a route to the internet > because you are using DHCP. But that shouldn't last for more thn thirty > seconds if we can get systemd to do its stuff. > > We'll forget about a fixed IP. DHCP gets you an address and a default > route when it boots. Check the latter with 'ip route'. You want a > default route to the internet between 9am and 9pm but not otherwise. > Consider this script > > #!/bin/bash > while : > do > HOUR=$(date +%H) > if ((9 <= $HOUR && $HOUR <= 21)); then > echo "Help with the washingup, tidy your room, make yourself useful." > else > echo "Have a bath. Go to bed." > fi > sleep 30 > done > > The first echo line would be replaced with > > ip route add default via <gateway IP> dev <interface> > > You need this in the event the machine is left on overnight and the > second echo line > > ip route del default via <gateway IP> dev <interface> > > is in force. > > The script would go in /user/local/bin and be run by a systemd service > file with its Exec directive. You should run the script first and check > that it does do what you want. Altering the "9" and the "21" will help. > You probably want a "one-shot" service file. You're ok with devising > that? > > > I could give the box a fixed IP but I have always used DHCP on my local > > network and don't want to disturb my habits more than necessary for this. > > It wasn't a important suggested change. > > > Also this would get rid of the need for DHCP but wouldn't get rid of NTP > > calls, and then I'd get them vomiting all over the logs when they fail to > > connect. Not a big problem, certainly, but an elegant solution would > avoid > > it. > > Have the script stop and start the NTP service. Elegant enough? > > > I didn't mention earlier, and I'm not sure if it is relevant, but the > > computer connects via WiFi to my access point, which is also my network's > > internet gateway -- with an LFS box between it and the cable modem as a > > dedicated firewall. I don't trust the non-free firewall in the AP, > although > > WiFi or cable shouldn't be a concern. Both set up routing in the same way. > > > I have left it on. The rest of my network is not to be subject to this > 9pm > > curfew. And I would ideally like connectivity between this machine and > the > > rest of my local network to remain even when the internet is denied to > this > > machine, so I can do remote maintenance when he's not using the machine, > > for example. If I monkey around with the default routing as you are > > suggesting, does that have any negative implications for connectivity to > > the rest of my local network? > > It shouldn't do because you will only be adjusting the route to get off > your network. But that's where testing comes in. > > Finally, I am afraid I did not understand > the > > point you made about how cron can be avoided. If the machine's up when > 9pm > > arrives, I want internet connectivity to die so I can prise him off the > > computer and get him to bed. In your idea, how can I make that happen > > without a cron job? > > The script run by systemd takes care of what happens at a particular > time. A cron-only solution is possible but I think the systemd way seems > more flexible because the script can be adjusted. > > You are after an all-or-nothing solution and iptables is intended for > more finely-grained routing issues. It would probably do the job but > there is more work involved and it's a bugger to debug if the rules are > not quite right. > > Thanks for this Brian.