GNU/Linux >> Belajar Linux >  >> Linux

Blokir akses jaringan dari suatu proses?

Dengan Linux 2.6.24+ (dianggap eksperimental hingga 2.6.29), Anda dapat menggunakan ruang nama jaringan untuk itu. Anda harus mengaktifkan 'ruang nama jaringan' di kernel Anda (CONFIG_NET_NS=y ) dan util-linux dengan unshare alat.

Kemudian, memulai proses tanpa akses jaringan semudah:

unshare -n program ...

Ini menciptakan ruang nama jaringan kosong untuk proses tersebut. Yaitu, dijalankan tanpa antarmuka jaringan, termasuk tanpa loopback . Dalam contoh di bawah ini kami menambahkan -r untuk menjalankan program hanya setelah ID pengguna dan grup efektif saat ini telah dipetakan ke pengguna super (hindari sudo):

$ unshare -r -n ping 127.0.0.1
connect: Network is unreachable

Jika aplikasi Anda memerlukan antarmuka jaringan, Anda dapat menyiapkan yang baru:

$ unshare -n -- sh -c 'ip link set dev lo up; ping 127.0.0.1'
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=32 time=0.066 ms

Perhatikan bahwa ini akan membuat yang baru, lokal loopback. Artinya, proses yang dihasilkan tidak akan dapat mengakses port terbuka dari 127.0.0.1 host .

Jika Anda perlu mendapatkan akses ke jaringan asli di dalam namespace, Anda dapat menggunakan nsenter untuk masuk ke ruang nama lain.

Contoh berikut menjalankan ping dengan ruang nama jaringan yang digunakan oleh PID 1 (ditentukan melalui -t 1 ):

$ nsenter -n -t 1 -- ping -c4 example.com
PING example.com (93.184.216.119) 56(84) bytes of data.
64 bytes from 93.184.216.119: icmp_seq=1 ttl=50 time=134 ms
64 bytes from 93.184.216.119: icmp_seq=2 ttl=50 time=134 ms
64 bytes from 93.184.216.119: icmp_seq=3 ttl=50 time=134 ms
64 bytes from 93.184.216.119: icmp_seq=4 ttl=50 time=139 ms

--- example.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 134.621/136.028/139.848/2.252 ms

Linux memiliki fitur yang disebut ruang nama jaringan yang memungkinkan Anda memiliki banyak tumpukan jaringan pada mesin yang sama, dan menetapkan satu ke program saat menjalankannya. Ini adalah fitur yang biasanya digunakan untuk penampung, tetapi Anda juga dapat menggunakannya untuk mencapai apa yang Anda inginkan.

ip netns subperintah mengelolanya. Membuat namespace jaringan baru tanpa akses ke apa pun itu mudah, ini adalah status default namespace baru:

[email protected]:~# ip netns add jail

Sekarang, jika Anda beralih ke namespace tersebut, Anda dapat mengonfigurasinya dengan cukup mudah. Anda mungkin ingin membuka lo di dalamnya, dan hanya itu:

[email protected]:~# ip netns exec jail /bin/bash
[email protected]:~# ip addr add 127.0.0.1/8 dev lo
[email protected]:~# ip link set dev lo up
[email protected]:~# exit

Sekarang ketika Anda ingin menjalankan perintah Anda tanpa jaringan, Anda tinggal menjalankannya di penjara itu:

[email protected]:~# ip netns exec jail su user -c 'ping  8.8.8.8'
connect: Network is unreachable

Jaringan, seperti yang diinginkan, tidak dapat dijangkau. (Anda dapat melakukan segala macam hal menarik karena tumpukan jaringan terpisah menyertakan iptables aturan, dll.)


Anda dapat menggunakan iptables dan memindahkan proses tersebut ke dalam cgroup:

mkdir /sys/fs/cgroup/net_cls/block
echo 42 > /sys/fs/cgroup/net_cls/block/net_cls.classid

iptables -A OUTPUT -m cgroup --cgroup 42 -j DROP

echo [pid] > /sys/fs/cgroup/net_cls/block/tasks

Linux
  1. Memblokir akses melalui file .htaccess

  2. Linux – Blokir Akses Jaringan Suatu Proses?

  3. Linux – Bagaimana Cara Berhenti Berbagi Jaringan Untuk Proses Saat Ini?

  1. Proses Keturunan?

  2. Linux – Perintah Untuk Menjalankan Proses Anak “offline” (tanpa Jaringan Eksternal) Di Linux?

  3. Cara Mengakses Namespace Jaringan Docker Container dari Host

  1. Kesalahan Akses ditolak membutuhkan hak PROSES [MySQL]

  2. 'jaringan' Layanan OS Linux

  3. Izinkan proses non-root untuk mengikat ke port 80 dan 443?