iptables 规则解锁互联网访问,并在 3600 秒后再次阻止

Bas*_*asj 4 scheduling iptables su shell-script time

我这样做,从我儿子的终端,有时给他互联网访问(默认禁用):

./unblockinternet.sh
<enter password>
Run Code Online (Sandbox Code Playgroud)

使用这个脚本:

su -c "iptables -D OUTPUT -m owner --uid-owner son -j REJECT"
Run Code Online (Sandbox Code Playgroud)

如何使它再次自动阻止网络,例如,1 小时后?(它已经son在重新启动后再次阻止用户,但我也想在 3600 秒后阻止它)

更准确地说,如何添加一个计时器来做su -c "iptables -A OUTPUT -m owner --uid-owner son -j REJECT"3600 秒后,此时无需输入密码?显然,我不会正好在 3600 秒后正好在他的终端上。

use*_*274 5

你可以使用at

sudo at next hour -f myiptablesscript
Run Code Online (Sandbox Code Playgroud)

哪里myiptablescript有禁用访问的命令,或者像这样的一行

sudo at next hour -f /dev/stdin <<< "iptables -A OUTPUT -m owner --uid-owner son -j REJECT"
Run Code Online (Sandbox Code Playgroud)

您可以将解除阻塞阻塞组合成一个两行脚本:

#!/bin/bash
iptables -D OUTPUT -m owner --uid-owner son -j REJECT
at next hour -f /dev/stdin <<< "iptables -A OUTPUT -m owner --uid-owner son -j REJECT"
Run Code Online (Sandbox Code Playgroud)

如果您将此脚本保存为unblockinternet具有执行权限,则可以将其调用为

sudo ./unblockinternet
Run Code Online (Sandbox Code Playgroud)

这将立即删除阻止规则;并排队等待一小时后恢复。