Bagaimana cara mengontrol akses internet untuk setiap program?

60

Saya ingin menggunakan perangkat lunak untuk mengontrol program mana yang dapat terhubung ke internet. Saya tahu bahwa perilaku ini dikaitkan dengan kata "firewall", tetapi beberapa pengguna Linux sangat marah jika seseorang menuntut Personal Firewall. Saya tidak ingin mengecewakan Anda dengan permintaan program semacam itu.
Saya tidak ingin "mengamankan port" atau hal-hal lain yang dijanjikan Personal Firewall di Windows. Saya melihat ke dalam iptablestetapi tidak sesuai dengan kebutuhan saya.

Saya melihat jawaban yang sangat baik di sini ( "Cara memblokir akses internet untuk aplikasi anggur" ) tetapi sangat tidak nyaman untuk mengatur ini.

Apakah ada perangkat lunak yang meminta setiap program jika dapat mengakses internet?

guerda
sumber
pada mac ada perangkat lunak bernama snitch kecil yang melakukan ini. Saya pikir ada versi windows juga ...
Alvar

Jawaban:

6

Ada skrip Perl di forum Ubuntu Jerman ( Google-diterjemahkan ke Bahasa Inggris ) yang tampaknya melakukan itu. Saya tidak pernah mencobanya dan saya tidak melihat lebih dekat pada skrip, tapi mungkin itu berhasil untuk Anda. Deskripsi ini hanya tersedia dalam bahasa Jerman sehingga Anda mungkin memerlukan layanan terjemahan (seperti Google Translate; lihat di atas).

Florian Diesch
sumber
Saya akan melihatnya. Sangat menarik dan mungkin alat yang tepat. Sayangnya, tidak ada gui, tetapi seharusnya tidak menghentikan saya :)
guerda
35

Jika Anda masih mencari aplikasi semacam ini, saya saat ini sedang mengembangkan aplikasi itu: http://douaneapp.com/ https://gitlab.com/douaneapp/Douane

Aplikasi saya memblokir semua aplikasi yang tidak dikenal (versi baru dari aplikasi resmi diblokir) dan menanyakan apakah Anda Mengizinkan atau Menolak lalu lintasnya.

Lihatlah situs webnya ;-)

tangkapan layar

ZedTuX
sumber
Keren! Saya juga melihat ppa tetapi tidak ada paket di sana meskipun aplikasi dibuat di sana. Juga saya bertanya-tanya apakah itu bisa menunjukkan ip diselesaikan ke nama situs yang dapat dibaca? Dan, saya akan mengikuti instruksi kompilasi, saya melihat banyak tips untuk paket-paket dep ubuntu di sana, dan saya akan menggunakan checkinstall untuk membuat salinan lokal dari paket-paket .deb untuk mengelola pembaruan dengan mudah (hapus / instal). Mungkin checkinstall dapat digunakan untuk membuat distribusimu juga, kurasa.
Aquarius Power
Anda dapat membuka permintaan fitur di Github ( github.com/Douane/Douane/issues ) :)
ZedTuX
2
eh, sepertinya persis apa yang saya butuhkan !! Tetapi saya tidak dapat menemukan paket untuk menginstalnya di Ubuntu.
azerafati
Masih belum paket untuk Ubuntu?
Anwar
1
Douaneapp.com kembali! :)
ZedTuX
26

Saya menemukan solusi mudah yang menyelesaikan masalah. Anda membuat grup yang tidak pernah diizinkan untuk menggunakan internet dan memulai program sebagai anggota grup ini.

  1. Buat grup no-internet. Jangan tidak bergabung dengan grup ini

    sudo addgroup no-internet
    
  2. Menambahkan aturan ke iptables yang mencegah semua proses milik grup no-internetmenggunakan jaringan (gunakan ip6tablesjuga untuk mencegah lalu lintas IPv6)

    sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
    
  3. Jalankan sudo -g no-internet YOURCOMMANDbukannya YOURCOMMAND.

Anda dapat dengan mudah menulis skrip pembungkus yang menggunakan sudo untuk Anda. Anda dapat menyingkirkan prompt kata sandi dengan menambahkan

%sudo     ALL=(:no-internet)      NOPASSWD: ALL

atau, sesuatu yang mirip dengan sudo visudo

Gunakan iptables-savedan iptables-restoreuntuk tetap aturan firewall.

Tim
sumber
1
Saya mencoba panduan Anda, sudo -g no-internet firefoxmenghubungkan lebih cepat daripada yang standar. Itu tidak bekerja.
kenn
1
@kenn Saya hanya bisa mengatakan itu bekerja dengan baik di sini. Saya kira Anda melakukan sesuatu yang salah saat membuat aturan. Tidak menyimpan aturan, tidak membuat skrip dapat dieksekusi atau semacamnya.
Tim
Saya reboot dan menerapkan aturan di atas lagi tanpa hasil
kenn
1
bekerja dengan baik untuk saya, bahkan dengan firefox. Terima kasih!
Kostanos
1
Ini sepertinya tidak bekerja untuk saya juga, di Ubuntu 19.04. Saya memang harus menginstal iptables-persistent untuk memungkinkan perubahan disimpan di antara reboot. (Jadi, Anda mungkin ingin menambahkan itu ke solusi di atas). Namun, sudo -g no-internet firefox tidak membatasi Firefox untuk mengakses internet. Secara konseptual, solusi ini sepertinya berhasil. Apakah ada sesuatu yang mendasar yang diabaikan? Sebagai contoh apakah kita perlu mengatur KEDUA ipv4 dan ipv6 untuk membuat ini berfungsi?
PJ Singh
5

Sudah ada firewall di Ubuntu ufw, tetapi dinonaktifkan secara default. Anda dapat mengaktifkan dan menggunakannya melalui baris perintah atau antarmuka, gufw , yang dapat diinstal langsung dari Pusat Perangkat Lunak Ubuntu.

Jika Anda perlu memblokir akses internet ke aplikasi tertentu, Anda dapat mencoba LeopardFlower , yang masih dalam versi beta dan itu tidak tersedia di Pusat Perangkat Lunak Ubuntu:

heiko81
sumber
4

Menjalankan program di bawah pengguna lain akan menggunakan file konfigurasi untuk pengguna itu dan bukan milik Anda.

Berikut adalah solusi yang tidak memerlukan modifikasi aturan firewall, dan berjalan di bawah pengguna yang sama (via sudo) dengan lingkungan yang dimodifikasi, di mana pengguna Anda berada my_userdan aplikasi yang ingin Anda jalankan adalah my_app:

# run app without access to internet
sudo unshare -n sudo -u my_user my_app

Untuk lebih jelasnya lihat man unsharedan jawaban ini .

Linux GUI firewall

Jika Anda mencari firewall GUI, saya sudah mendapatkan hasil yang baik dengan OpenSnitch - belum ada di repo ubuntu dan saya tidak akan menyebutnya tingkat produksi, tetapi mengikuti langkah-langkah pembuatan dari halaman github bekerja untuk saya.

ccpizza
sumber
3

@psusi: Saya benar-benar berharap orang tidak akan menjajakan informasi yang buruk dan tidak berguna. IPTables memungkinkan seseorang untuk melakukan ini, jadi saya tidak akan menganggapnya "bodoh". Hanya mengatakan "TIDAK" tanpa memahami use case agak sempit. http://www.debian-administration.org/article/120/Application_level_firewalling

Sunting bodhi.zazen

CATATAN - PILIHAN INI DIHAPUS DARI IPTABEL 2005, 8 TAHUN SEBELUM JAWABAN INI DIKIRIM

LIHAT - http://www.spinics.net/lists/netfilter/msg49716.html

commit 34b4a4a624bafe089107966a6c56d2a1aca026d4 Penulis: Christoph Hellwig Tanggal: Minggu 14 Agustus 17:33:59 2005 -0700

[NETFILTER]: Hapus penyalahgunaan tasklist_lock di ipt {, 6} pemilik

Hapus pencocokan cmd / sid / pid karena itu tidak dapat diperbaiki rusak dan menghalangi penguncian perubahan ke tasklist_lock.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Patrick McHardy <kaber@xxxxxxxxx>
Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
pengguna141987
sumber
2
Bagi siapa pun yang mempertimbangkan menandai ini: Ini seharusnya bukan komentar, itu menjawab pertanyaan yang diajukan . @ user141987 Saya merekomendasikan untuk memperluas ini untuk memberikan informasi lebih lanjut tentang cara mengatur iptablesuntuk menerapkan pembatasan per-aplikasi. Saya sarankan menyertakan informasi penting dalam jawaban Anda (dan masih memberikan tautan, untuk referensi).
Eliah Kagan
2
iptables TIDAK memfilter menurut aplikasi.
Panther
Artikel itu tampaknya salah informasi karena tidak ada opsi seperti itu. Alasan mengapa permintaan untuk membuat opsi semacam itu di masa lalu ditolak adalah karena itu akan secara inheren tidak dapat diandalkan; suatu aplikasi dapat dengan mudah mengubah namanya.
psusi
3
@psusi Apakah Anda mengatakan "Jika kernel Anda dikompilasi dengan CONFIG_IP_NF_MATCH_OWNER maka Anda dapat mengonfigurasi firewall iptables Anda untuk mengizinkan atau menolak paket berdasarkan per-perintah" tidak benar? Atau hanya karena sebagian besar kernel tidak menyertakan opsi? Jika ini salah, adakah sumber informasi yang membantahnya? (Juga, harap dicatat bahwa tujuan utama pembatasan firewall per-aplikasi bukanlah untuk mencoba membuatnya sangat aman untuk menjalankan aplikasi yang tidak dipercaya. Tujuan utamanya adalah untuk memberikan pengguna ukuran kontrol di luar opsi konfigurasi bawaan aplikasi. )
Eliah Kagan
Opsi ini telah dihapus dari kernel pada tahun 2005, 8 tahun sebelum jawaban ini diberikan - spinics.net/lists/netfilter/msg49716.html dan meskipun klaim sebaliknya tidak akurat, Anda TIDAK dapat mengaplikasikan filter dengan iptables.
Panther
3

Pilihan lain adalah firejail . Ini menjalankan aplikasi di dalam kotak pasir di mana Anda mengontrol jika aplikasi bisa melihat jaringan:

firejail --net=none firefox

Perintah ini akan memulai browser Firefox tanpa akses internet. Perhatikan bahwa distribusi firejail di repo Ubuntu sudah usang - lebih baik unduh versi LTS terbarunya dari halaman beranda firejail.

Dimitar II
sumber
2

Saya telah menemukan solusi yang diposting di sini bagus. Ini melibatkan pembuatan grup pengguna yang memungkinkan akses internet , dan mengatur aturan firewall untuk mengizinkan akses hanya untuk grup ini. Satu-satunya cara bagi aplikasi untuk mengakses internet adalah jika dijalankan oleh anggota grup ini. Anda dapat menjalankan program di bawah grup ini dengan membuka shell with sudo -g internet -s.

Untuk merangkum apa yang ada di pos yang saya tautkan di atas:

  1. Buat grup "internet" dengan mengetik berikut ini ke dalam shell: sudo groupadd internet

  2. Pastikan bahwa pengguna yang akan menjalankan skrip di bawah ditambahkan ke sudogrup di /etc/group. Jika Anda akhirnya memodifikasi file ini, maka Anda harus keluar dan kembali sebelum skrip di bawah ini berfungsi.

  3. Buat skrip yang berisi berikut ini, dan jalankan:

    #!/bin/sh
    # Firewall apps - only allow apps run from "internet" group to run
    
    # clear previous rules
    sudo iptables -F
    
    # accept packets for internet group
    sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
    
    # also allow local connections
    sudo iptables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT
    sudo iptables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT
    
    # reject packets for other users
    sudo iptables -A OUTPUT -p tcp -j REJECT
    
    # open a shell with internet access
    sudo -g internet -s
    
  4. Dengan menjalankan skrip di atas, Anda akan memiliki shell di mana Anda dapat menjalankan aplikasi dengan akses internet.

Perhatikan bahwa skrip ini tidak melakukan apa pun untuk menyimpan dan mengembalikan aturan firewall Anda. Anda mungkin ingin memodifikasi skrip untuk menggunakan perintah iptables-savedan iptables-restoreshell.

Menandai
sumber
1

Baik atau buruk, Linux menggunakan pendekatan yang berbeda. Tidak ada antarmuka grafis sederhana untuk menawarkan fungsi ini. Ada banyak diskusi tentang topik ini di internet dan Anda dapat menemukan diskusi yang menarik jika Anda mencari di Google. Walaupun debatnya menarik, sampai saat ini belum ada kelompok programmer yang berdedikasi yang ingin menulis dan memelihara fungsi ini.

Alat yang menawarkan fungsi ini di Linux adalah Apparmor, Selinux, dan Tomoyo.

Tidak satu pun dari alat-alat ini yang terlalu mudah dipelajari dan semuanya memiliki kelebihan dan kekurangan. Secara pribadi saya lebih suka SELinux, meskipun SELinux memiliki kurva belajar yang lebih curam.

Lihat:

http://www.linuxbsdos.com/2011/12/06/3-application-level-firewalls-for-linux-distributions/

Sudah ada aplikasi yang telah dirujuk, bunga macan tutul. Saya tidak yakin dengan status / perawatannya.

Harimau kumbang
sumber
0

Tidak, itu tidak mungkin. Ini juga bukan bagian dari definisi tradisional firewall. Ini adalah sesuatu yang muncul dengan Microsoft baru-baru ini dalam upaya untuk mengatasi masalah keamanan OS yang rusak secara fundamental. Ini dianggap bodoh dan tidak bisa dijalankan di komunitas Linux karena satu program yang tidak diizinkan dapat dengan mudah menjalankan program lain dan mendapatkan akses seperti itu.

Jika Anda tidak suka apa yang dilakukan program di jaringan saat Anda menjalankannya, maka jangan jalankan program itu.

psusi
sumber
7
Firewall Microsoft bukanlah firewall besar pertama yang menawarkan fungsi ini. Itu bahkan bukan firewall Windows pertama yang menawarkannya. BlackIce Defender, ZoneAlarm, dan berbagai firewall perangkat lunak lain untuk Windows sebelum pengenalan Firewall Sambungan Internet Windows selama bertahun-tahun. Lebih jauh, tidak ada konsensus seperti itu di komunitas Linux. Kami sering menggunakan AppArmor (atau SELinux) untuk membatasi perilaku aplikasi (dan saya ingin tahu apakah AppArmor dapat disesuaikan dengan tujuan ini ...). Tidak ada alasan itu "salah" untuk ingin mengontrol aplikasi apa yang dapat mengakses Internet.
Eliah Kagan
Dan, karena beberapa jawaban lain dapat membuktikan, pembatasan firewall per-aplikasi sangat mungkin ; fungsi ini dibangun ke iptables / netfilter!
Eliah Kagan
Tidak, netfilter atau iptables tidak dapat menyaring per aplikasi. Mereka dapat memfilter menurut pengguna dan port tetapi tidak per aplikasi.
Panther
"Cukup jalankan yang lain" ???? Maka jelas pencipta program seperti itu yang tidak menghalangi proses anak dari program target sangat cacat.
trusktr