Saya memiliki program yang ingin saya uji dalam mode offline tanpa mencatat jaringan saya yang sebenarnya. Program ini masih perlu terhubung ke soket lokal, termasuk soket domain unix dan loopback. Itu juga perlu mendengarkan pada loopback dan terlihat oleh aplikasi lain.
Tetapi upaya untuk terhubung ke mesin jarak jauh harus gagal.
Saya ingin memiliki utilitas yang berfungsi seperti strace
/ unshare
/ sudo
dan hanya menjalankan perintah dengan Internet (dan LAN) disembunyikan dan semuanya masih berfungsi:
$ offline my-program-to-test
Pertanyaan ini memiliki petunjuk pada jawabannya: Memblokir akses jaringan dari suatu proses?
Ada beberapa saran di sana, seperti dijalankan sebagai pengguna lain kemudian memanipulasi iptables, atau unshare -n
. Tetapi dalam kedua kasus saya tidak tahu mantera untuk mendapatkan soket domain unix dan loopback untuk dibagikan dengan sistem utama - jawaban untuk pertanyaan itu hanya memberi tahu saya cara untuk tidak berbagi seluruh jaringan.
Program yang saya uji masih perlu terhubung ke X server dan dbus saya dan bahkan dapat mendengarkan di loopback untuk koneksi dari aplikasi lain pada sistem.
Idealnya saya ingin menghindari membuat chroot atau pengguna atau VM atau sejenisnya, karena itu sama menjengkelkannya seperti mencabut kabel jaringan. yaitu titik pertanyaannya adalah bagaimana saya bisa membuat ini sesederhana a sudo
.
Saya suka proses menjalankan 100% secara normal kecuali bahwa panggilan jaringan menentukan alamat non-lokal akan gagal. Idealnya menjaga uid yang sama, homedir yang sama, pwd yang sama, semuanya sama kecuali ... offline.
Saya menggunakan Fedora 18, jadi jawaban Linux yang tidak dapat diputar baik-baik saja (diharapkan, bahkan).
Saya bahkan senang menyelesaikan ini dengan menulis program C, jika itu yang terlibat, jadi jawaban yang melibatkan penulisan C baik-baik saja. Saya hanya tidak tahu syscalls apa yang perlu dibuat oleh program C untuk mencabut akses jaringan eksternal sambil menjaga jaringan lokal.
Pengembang mana pun yang mencoba mendukung "mode offline" mungkin akan menghargai utilitas ini!
sumber
Ini juga bisa dicapai dengan cgroup yang cocok dengan aturan iptables. Saya menulis alat untuk abstrak langkah-langkahnya. Meskipun memerlukan izin root untuk pengaturan awal dan sebaliknya merupakan setary binary, saya pikir ini menawarkan cara yang cukup mudah untuk menangani masalah dalam pertanyaan. Ini membutuhkan versi iptables yang cukup baru dan modul netfilter yang tepat tersedia.
https://github.com/quitesimpleorg/qsni
sumber
Saya belum menggunakannya, tapi saya pikir Anda berpotensi menggunakan Comcast:
https://github.com/tylertreat/Comcast
set ke paket loss 100%
Sekali lagi, saya belum menguji ini, tetapi secara teoritis, dimodifikasi dari readme mereka yang dapat Anda lakukan:
Linux
Di Linux, Anda dapat menggunakan
iptables
untuk menjatuhkan paket yang masuk dan keluar.Atau, Anda dapat menggunakan
tc
yang mendukung beberapa opsi tambahan.Untuk mengatur ulang:
sumber