時間間隔でインターネットへのユーザーのアクセスを制限する方法は?


12

ユーザーの1人(sudoersリストに含まれていない)が14:00から16:00まで、および17:00から18:30までインターネットにアクセスできるようにします。出来ますか?曜日ごとに異なる時間間隔を設定できますか?


システム自体ではなく、ルーターまたはゲートウェイの制御レベルでこれを行うのが最善です...私の知る限り、Ubuntuにはユーザーレベルでインターネットアクセスを制限する簡単なシステムはありません。
トーマス・ウォード

ルーターレベルで作成すると、すべてのユーザーが制限されます
...-cupakob

Afaik(および9.04以降、これに対する解決策を探していました)、これに対するソフトウェアソリューションはありません。私のネットでは、コンピューターごとにユーザーは1人だけであり、それらはすべてゲートウェイとして機能するサーバーボックスを介して接続します。そのボックスには、そのシステム上のすべてのインターネットアクセスをブロックし、後で削除するcrontabがあります。その後、毎日異なる時間に実行されます。好奇心から、なぜあなたはその厳しい期間へのアクセスを制限する必要があり、なぜあなたはそれをユーザーごとに行う必要があるのですか?
トーマスウォード

1台のPCが2人のユーザーによって使用されるため、ユーザーごとに必要です。2番目のユーザーはFacebookに留まらないようにもっと学ぶ必要があるので、アクセスを制限したいのですが:) crontabを使用したあなたのアイデアは良いです...アクセスをブロックするために何を使用していますか?ルーターをブロックすると、ユーザーに対しても同じことができます:)
cupakob

私のルーターとゲートウェイボックスは別々です-ゲートウェイボックスが他のボックスから静的アドレスを割り当てる(したがってデータを処理する)ため、iptablesを使用して静的に割り当てられたプライベートIPアドレスがアウトバウンドまたはインバウンドデータを送信するのをブロックします。ボックスへのすべてのインターネットトラフィックをブロックします。crontabはそれぞれ、スケジュールに従ってアイテムを削除するために、独自のiptablesコマンドを使用します。P:私はちょうど良い作品ルータ買うことができるので、不完全なシステムである
トーマス・ウォード

回答:


7

次のように、iptablesのowner拡張機能を使用して、ユーザーがネットにアクセスするのをブロックできます。

 sudo iptables -A OUTPUT -m owner --uid-owner user_you_want_to_block -j REJECT

これで、cronを使用してこれらのルールを追加または削除できます(既にiptableルールがある場合や、異なるユーザーに異なる時間にシェルスクリプトを追加する必要がある場合)。


ああ、私は存在することを知りませんでした:P @Florian:(a)これにはどのカーネルモジュールをロードする必要がありますか?(b)これは動作し-j REJECT --reject-with <argument>ますか?
トーマス・ウォード

(a)xt_ownerは自動的にロードされます。(b)--reject-withがこれで動作しないはずの理由はわかりませんが、試したことはありません。
フロリアンディーシュ

後でテストします:P所有者モジュールは、その使用法を詳述するために、iptablesのマンページに存在しますか?(サイドノート:カーネルがカスタムコンパイルされているため、どのカーネルモジュールを尋ねました:/)
トーマスウォード

私が探しているものを正確に見えます....私はそれを試さなければなりません:)
cupakob

@EvilPhoenix:はい、iptablesのマンページに記載されています
Florian Diesch

8
  1. ルートとしてログイン:

    須藤す

  2. ファイアウォールのステータスを確認します。

    ufw status
    

    ファイアウォールが非アクティブの場合、次を発行します。

    ufw enable
    
  3. 日曜日、火曜日、水曜日、金曜日のユーザーウィルヘルムインターネットアクセスを許可された時間間隔(14:00-16:00および17:00-18:30)に制限するため:

    iptables -I OUTPUT -p tcp -m owner --uid-owner wilhelm -m time --weekdays Su,Tu,We,Fr --timestart 00:00:01 --timestop 14:00:00 -j DROP 
    iptables -I OUTPUT -p tcp -m owner --uid-owner wilhelm -m time --weekdays Su,Tu,We,Fr --timestart 16:00:00 --timestop 17:00:00 -j DROP 
    iptables -I OUTPUT -p tcp -m owner --uid-owner wilhelm -m time --weekdays Su,Tu,We,Fr --timestart 18:30:00 --timestop 23:59:59 -j DROP 
    

    サイドノート:* コマンドのスイッチでは-Iなくスイッチの使用に注意してください。スイッチは、出力ルールチェーンの先頭(最上部)にはなく、チェーンの底に上述のルール(3)を挿入します。ルールは上から下に処理されるため、手動で追加されたルールを通常のファイアウォールポリシーの上に配置することが重要です。一番上の規則がパケットを受け入れる場合、チェーンOUTPUTは、パケットをドロップした可能性のある次の規則についてチェックされなくなります。-Aiptables-I

  4. ルールが実際に正しく入力されたことを確認してください。

    iptables -L OUTPUT
    

    不適切なルールを削除するためには、(上から1ベースのカウント規則第1号を、と言うiptables -v -L OUTPUT問題): iptables -D OUTPUT 1

  5. 次回の起動時に復元するためにiptablesを保存します。

    iptables-save > /etc/iptables.rules
    
  6. /etc/rc.localの行を追加します。

    iptables-restore < /etc/iptables.rules
    

やった

-

Ubuntu 11.10(oneiric)、ロケールでテスト済み:彼


1
完璧なソリューションを備えた素晴らしい答えです!しかし、すべての時間はUTCとして解釈されるため、現地時間のために手動でオフセットする必要があることに注意してください-私の場合central european summer time -2 hours
正確なペンギン

私はすべてのステップを実行し、それらは機能しました(インターネットアクセスが制限されていました)が、再起動後、インターネットは再びオンになりました。私は... iptablesの-lの出力をチェックし、私は追加のルールを見つけることができませんでした
Lawand

1
ufw後で使用しても有効にする理由は何iptablesですか?
バル

--kerneltzオプションで修正できる@PrecisePenguin (「UTCの代わりにカーネルタイムゾーンを使用する」)
-waldyrious
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.