Bagaimana cara membatasi akses pengguna ke internet untuk interval waktu?

12

Saya ingin salah satu pengguna (tidak ada dalam daftar sudoers) memiliki akses Internet dari pukul 14:00 hingga 16:00 dan dari 17:00 hingga 18:30. Apa itu mungkin? Dapatkah saya mengatur interval waktu yang berbeda untuk hari kerja yang berbeda?

cupakob
sumber
Anda sebaiknya melakukan ini pada tingkat kontrol router atau gateway, daripada pada sistem itu sendiri ... sejauh yang saya tahu, tidak ada sistem yang mudah di dalam Ubuntu untuk membatasi akses internet di tingkat pengguna.
Thomas Ward
Ketika saya membuatnya di tingkat router, maka semua pengguna akan dibatasi ...
cupakob
Afaik (dan saya sudah mencari solusi untuk ini sejak 9.04), tidak ada solusi perangkat lunak untuk ini. Memang, di jaring saya, hanya ada satu pengguna per komputer, dan mereka semua terhubung melalui kotak server yang bertindak sebagai gateway. Kotak itu memiliki crontab yang memblokir semua akses internet pada sistem itu kemudian menghapusnya di lain waktu; selanjutnya itu juga berjalan pada waktu yang berbeda setiap hari. Karena penasaran, mengapa Anda perlu membatasi akses ke periode waktu yang ketat itu, dan mengapa Anda perlu melakukannya oleh pengguna?
Thomas Ward
saya membutuhkannya oleh pengguna, karena satu pc digunakan oleh dua pengguna. dan saya ingin membatasi akses, karena pengguna kedua harus belajar lebih banyak dan tidak tinggal di facebook :) tetapi ide Anda dengan crontab baik .... apa yang Anda gunakan untuk memblokir akses? Saya dapat membuat hal yang sama untuk pengguna, ketika saya memblokir router :)
cupakob
Router dan kotak gateway saya terpisah - karena kotak gateway memberikan alamat statis (dan dengan demikian menangani data) dari kotak lain, saya menggunakan iptables untuk memblokir alamat IP pribadi yang ditugaskan-statis dari mengirimkan data keluar atau masuk, yang dengan demikian memblokir SEMUA lalu lintas internet ke kotak. Setiap crontab menggunakan perintah iptables mereka sendiri untuk menghapus item pada jadwal. Ini adalah sistem yang tidak sempurna, karena saya hanya bisa membeli router yang berfungsi lebih baik: P
Thomas Ward

Jawaban:

7

Anda dapat menggunakan ownerekstensi iptables untuk memblokir pengguna agar tidak mengakses internet

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

Sekarang Anda dapat menggunakan cron untuk menambah atau menghapus aturan-aturan itu (yang mungkin memerlukan sedikit skrip shell jika Anda sudah memiliki beberapa aturan iptable atau menginginkannya untuk pengguna yang berbeda di waktu yang berbeda).

Florian Diesch
sumber
Ooh, saya tidak tahu itu ada: P @Florian: (a) modul kernel apa yang perlu dimuat untuk ini? (B) apakah ini bekerja -j REJECT --reject-with <argument>?
Thomas Ward
(a) xt_owner dimuat secara otomatis. (B) Saya tidak melihat alasan mengapa - menolak-seharusnya tidak bekerja dengan ini tetapi tidak pernah mencobanya.
Florian Diesch
Saya akan menguji ini nanti: P Apakah modul pemilik ada di halaman iptables, untuk merinci penggunaannya? (Catatan Samping: Saya bertanya modul kernel apa karena kernel saya dikompilasi khusus: /)
Thomas Ward
terlihat persis apa yang saya cari .... saya harus mencobanya :)
cupakob
@EvilPhoenix: Ya, ini didokumentasikan di halaman iptables
Florian Diesch
8
  1. login sebagai root:

    sudo su

  2. periksa status firewall Anda:

    ufw status
    

    jika firewall tidak aktif , masalah:

    ufw enable
    
  3. untuk membatasi pengguna wilhelm akses internet pada hari Minggu, Selasa, Rabu dan Jumat untuk interval yang diizinkan Waktu (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 
    

    catatan samping : * harap perhatikan penggunaan -Isakelar alih-alih -Asakelar iptablesperintah. yang -Iberalih menyisipkan aturan tersebut (3.) di awal (atas) dari OUTPUT rantai aturan daripada di bagian bawah rantai. menempatkan aturan yang ditambahkan secara manual di atas kebijakan firewall biasa adalah penting karena aturan diproses dari atas ke bawah. jika sebagian besar aturan MENERIMA sebuah paket, rantai, OUTPUT, tidak lagi diperiksa untuk aturan berikut yang mungkin telah MENGHENTIKAN paket.

  4. harap pastikan bahwa aturan itu dimasukkan dengan benar:

    iptables -L OUTPUT
    

    untuk menghapus aturan yang tidak pantas, mengatakan (count 1 berbasis dari atas kekuasaan No 1, iptables -v -L OUTPUT) masalah: iptables -D OUTPUT 1.

  5. simpan iptables untuk memulihkan pada boot berikutnya:

    iptables-save > /etc/iptables.rules
    
  6. di /etc/rc.localtambahkan baris:

    iptables-restore < /etc/iptables.rules
    

selesai

-

diuji di Ubuntu 11.10 (oneiric), lokal: he

pengguna56231
sumber
1
Jawaban yang bagus dengan solusi sempurna! Tetapi perhatikan bahwa semua waktu ditafsirkan sebagai UTC , jadi orang mungkin harus mengimbanginya secara manual untuk waktu setempat - dalam kasus saya central european summer time -2 hours.
Precise Penguin
Saya melakukan semua langkah dan mereka bekerja (akses internet terbatas) tetapi setelah restart, internet kembali hidup. Saya memeriksa iptables -L OUTPUT dan tidak menemukan aturan yang saya tambahkan ...
Lawand
1
Apa alasan Anda mengaktifkannya ufwmeskipun nanti Anda gunakan iptables?
balu
@PrecisePenguin yang dapat diperbaiki dengan --kerneltzopsi ("Gunakan zona waktu kernel bukan UTC")
waldyrious