私は息子の端末から時々インターネットにアクセスできるようにするためにこれを行います(デフォルトでは無効になっています)。
./unblockinternet.sh
<enter password>
次のスクリプトを使用してください。
su -c "iptables -D OUTPUT -m owner --uid-owner son -j REJECT"
1時間後にネットワークを自動的に再ブロックするにはどうすればよいですか?(すでに再起動後にユーザーに対して再ブロックしていますが、son
3600秒後もブロックしたいと思います。)
su -c "iptables -A OUTPUT -m owner --uid-owner son -j REJECT"
より正確には、パスワードを入力せずに3600秒後に実行するようにタイマーを追加するにはどうすればよいですか?どうやら私はしません。正確に3600秒後、彼の端末が現れた。
答え1
使用できるat
:
sudo at next hour -f myiptablesscript
アクセスを無効にするコマンドはどこにmyiptablescript
ありますか?または、次の行にあります。
sudo at next hour -f /dev/stdin <<< "iptables -A OUTPUT -m owner --uid-owner son -j REJECT"
組み合わせることができますやるそしてブロックする2行のスクリプトで書かれています:
#!/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"
実行権限を使用してこのスクリプトを保存すると、unblockinternet
次のように呼び出すことができます。
sudo ./unblockinternet
これにより、ブロックルールがすぐに削除され、復元されるまで1時間待機します。
答え2
systemdがある場合は、/etc/systemd/system/unblockinternet.service
次のような小さな単位ファイルを作成できます。
[Unit]
Description=unblock internet 1 hour
[Service]
Type=simple
ExecStartPre=/usr/sbin/iptables ...
ExecStart=/usr/bin/sleep 3600
ExecStop=/usr/bin/iptables ...
開始するには、これを入力するsystemctl restart unblockinternet
と、rootとして認証するように求められます。
答え3
ipsetも使用できます。これはやや複雑ですが、タイムアウトは完全にカーネルによって処理されます。 1つの利点は、待機中のコマンドのキャンセルを心配することなくタイムアウトを更新できることです。
セットを作成し、対応するiptablesルールを追加します。
ipset create son_allowed hash:net timeout 3600
iptables -A OUTPUT -m owner --uid-owner son -m set --match-set son_allowed dst -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner son -j REJECT
ブロック解除スクリプトはすべてのIPをコレクションに追加します。
ipset add son_allowed 0.0.0.0/1 -exist
ipset add son_allowed 128.0.0.0/1 -exist
(注:残念ながら、0.0.0.0/0
hash:net型のコレクションに追加することは不可能であるため、2つの項目が必要です。optionsを追加してタイムアウトをカスタマイズすることもできます。timeout SECONDS
)
IPv6を使用している場合は、フラグを使用して別のipsetを作成し、iptablesfamily inet6
ルールを追加してから、ブロック解除スクリプトからセットに追加します。::/1
8000::/1