
Segala sesuatu yang dijelaskan dalam artikel diimplementasikan sebagai alat Toroksi yang tersedia di GitHub
Baru-baru ini, anonimitas online telah menjadi bahan perdebatan sengit. Bukan rahasia lagi bahwa data kunjungan ke sumber daya Internet dari perangkat lokal dapat dikumpulkan pada tingkat yang berbeda untuk membangun "model" pengguna, yang nantinya dapat digunakan untuk melawannya (atau
bisa ). Oleh karena itu, tidak mengherankan bahwa semakin banyak pengguna Internet aktif semakin yakin akan perlunya mekanisme proxy dan anonimisasi. Dalam hal ini, ada semakin banyak klien VPN baru, tetapi, seperti yang diperlihatkan oleh praktik, tidak semuanya benar-benar dapat dipercaya: apakah tidak semuanya berjalan dengan baik, maka hanya lalu lintas HTTP yang dianonimkan, kemudian kualitas implementasinya lemah, atau dan pengembang melakukan dosa dengan menggabungkan data tentang pengguna mereka.
Pada artikel ini, kami akan mencoba untuk merakit alat kami sendiri dengan UI dari sejumlah komponen perangkat lunak, yang akan memungkinkan kami untuk sepenuhnya menganonimkan lalu lintas sistem lokal dan mencegah kebocoran pada saluran "mendengarkan" pada setiap tahap pekerjaan.
Tujuan utama kami adalah untuk βmembangunβ utilitas yang andal dari alat yang sudah jadi. Jelas, gagasan untuk membuat alat berkualitas tinggi dari awal dalam waktu yang wajar penuh dengan kesalahan, dan karena itu akan lebih cepat dan lebih dapat diandalkan untuk memilih komponen yang sudah jadi, dan kemudian menghubungkannya dengan benar!
Apa yang harus dilakukan alat?
- Alihkan semua lalu lintas dari sistem target ke node perantara (lebih disukai beberapa) untuk secara aman menutupi sumbernya
- Lacak kemungkinan pelanggaran anonimitas, perbaiki dan laporkan menggunakan notifikasi UI
Komponen yang dipilih untuk membuat alat:
- untuk
- iptables
- python3
- systemd
Dengan mencampur semua komponen dalam sebuah shell yang disebut "Linux", kita pasti bisa mendapatkan sesuatu yang berharga yang akan membantu mencapai tujuan akhir.
Komponen # 1: Tor
Di sekitar komponen inilah infrastruktur alat sisanya akan dibangun. Tor menyediakan mekanisme yang merupakan bagian dari klien VPN - mekanisme untuk membungkus lalu lintas melalui node perantara anonim ke pengamat eksternal (dalam konfigurasi standar node 3 seperti itu).
Secara default, klien Tor dari repositori batch standar setelah instalasi mulai mendengarkan port 9050, yang menerima klien apa pun yang dapat kaus kaki. Masalahnya adalah bahwa selain kaus kaki-lalu lintas dalam sistem kami, mungkin ada banyak lalu lintas lain dari aplikasi yang tidak berfungsi pada protokol ini. Dalam hal ini, pertama-tama, dalam sistem lokal, Anda harus memotong jendela ke dalam jaringan Tor untuk koneksi jaringan baru. Ini dilakukan cukup sederhana dengan menaikkan
proxy transparan di konfigurasi
torrc :
/etc/tor/torrc ... TransPort 9040 # python ControlPort 9051 ...
Perhatian khusus harus diberikan pada lalu lintas UDP. Faktanya adalah bahwa prinsip routing bawang didasarkan pada konsep "aliran", yang, seperti yang Anda tahu, hanya ada di TCP. Dengan mengirimkan paket UDP melalui Tor, sistem target tidak akan dapat menerima respons, karena paket respons tidak akan menemukan jalur pengembalian. Namun terlepas dari kekhasan ini, kami masih memiliki kesempatan untuk menganonimkan permintaan DNS, yang diketahui dilakukan melalui UDP, dan pada saat yang sama termasuk resolusi .onion:
/etc/tor/torrc ... AutomapHostsOnResolve 1 DNSPort 53 ...
Pada ini, akses ke Tor terbuka di dalam loopback.
Komponen # 2: Iptables
Karena tugas kita adalah untuk menyembunyikan sumber lalu lintas yang sebenarnya dari pengamat eksternal di dalam seluruh sistem, dan jendela di Tor sudah terbuka, itu hanya untuk membungkus semua lalu lintas di jendela ini. Firewall sistem yang dibundel dengan kernel Linux akan membantu kami dalam hal ini:
# tcp iptables -t nat -A OUTPUT -p tcp --syn -j REDIRECT --to-ports $TRANS_PORT # udp (dns only) iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 53 iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # iptables -A OUTPUT -j REJECT ip6tables -A OUTPUT -j REJECT
Pada tahap ini, kita mendapatkan utilitas kerja yang andal menyamarkan semua lalu lintas keluar, tetapi ini hanya setengah dari pekerjaan.
Komponen # 3: python + Desktop Evironment UI
Setiap kali, konfigurasi manual dari konsol (bahkan jika itu akan menjadi peluncuran skrip bash) akan cukup melelahkan, jadi inilah saatnya untuk mulai menulis utilitas kecil yang membantu kami secara khusus dalam hal berikut:
- Konfigurasi otomatis
- Ubah identitas Anda di dalam Tor kapan saja
- Memonitor iptables mengatur integritas dan penulisan ulang jika dilanggar
- Melacak identitas Anda saat ini (IP)
- Pemberitahuan dua paragraf sebelumnya dengan pemberitahuan grafis
Pada permulaan pertama, utilitas akan mengunduh sendiri semua
komponen yang diperlukan , dan pada permulaan berikutnya ia akan mengkonfigurasi Tor bersama dengan iptables, seperti dijelaskan di atas.
Jika Anda ingin mengubah alamat IP eksternal Anda, Anda akan berinteraksi dengan port layanan Tor - 9051, yang terbuka di awal untuk mengotomatiskan perubahan IP:
with Controller.from_port(port = 9051) as controller: controller.authenticate() controller.signal(Signal.NEWNYM)
Pelacakan integritas dapat diimplementasikan dengan cukup biasa (kami melakukannya dengan lutut) dengan membaca secara berkala struktur aturan iptables dan memeriksa jumlah SHA256 mereka:
def rulesOk(self): RULES_CHECKSUM_CMD = "{ iptables-save && ip6tables-save; } | sed s/\-\-uid\-owner\\\\s[0-9]\\\\+\\\\s//g | grep -viE '^#' | grep -viE '^\:' | sort | uniq | sha256sum | cut -d' ' -f 1" checkSum = getoutput(RULES_CHECKSUM_CMD).strip() alright = checkSum == Strings.RULES_CHECKSUM_CORRECT_HASH if not alright: rules = getoutput('iptables-save && ip6tables-save') self.lastSnapshotFileName = "/tmp/broken-rules-%s.log" % time.strftime("%d-%m-%Y_%I-%M-%S") open(self.lastSnapshotFileName, "w").write(rules) return False else: return True
Juga, jika ada ketidakkonsistenan dengan checksum yang diharapkan, Anda dapat menyimpan dump aturan iptables di
/tmp/broken-rules-%d-%m-%Y_%I-%M-%S.log
untuk proses lebih lanjut. Jika ternyata itu
rulesOk() == False
ini akan memulai penulisan ulang tabel aturan iptables.
Pemantauan IP saat ini akan terjadi dengan terus-menerus mengakses beberapa sumber daya eksternal yang menyediakan klien IP - misalnya,
ident.me
.
Yah, akhirnya, kita akan menggunakan DE UI untuk melaporkan masalah dengan aturan atau perubahan IP. Setiap lingkungan grafis unik dalam beberapa hal, terutama ketika menggunakan UI dari proses daemon, tetapi pada kebanyakan sistem Linux, kode bash yang dipanggil dari Python akan berhasil menampilkan pemberitahuan:
Dengan menggabungkan semua ini dalam skrip Python 200-baris, kami mendapatkan apa yang kami capai. Di sini, misalnya, seperti apa notifikasi akan terlihat bahwa identitas kita telah diperbarui:

Dan ini adalah bagaimana notifikasi akan terlihat seperti bahwa integritas aturan Iptables telah dilanggar yang mengindikasikan dump dump yang berisi pelanggaran:

Komponen # 4: systemd
Dan akhirnya, kami pasti ingin membuat pengaturan satu kali dan tidak memikirkan keselamatan kami di masa depan, dan karena itu autorun dan layanan datang untuk menyelamatkan. Linux memiliki beberapa subsistem manajemen daemon standar: systemd, sysV, init. Dalam kasus kami, pilihan jatuh pada systemd karena fleksibilitas konfigurasinya.
Misalkan skrip python yang ditulis pada langkah sebelumnya disebut "toroxy" dan terletak di
/usr/bin/
, maka autorun dan pemantauan selanjutnya dengan fleksibilitas tertentu untuk mengendalikan daemon akan seperti ini:
[Unit] Description=Toroxy After=network.target StartLimitIntervalSec=0 [Service] Type=simple Restart=always RestartSec=1 User=root # service toroxy start ExecStart=/usr/bin/toroxy service # service toroxy stop ExecStop=/usr/bin/toroxy stop # service toroxy reload ExecReload=/usr/bin/toroxy switch [Install] # init 3, UI Tor WantedBy=multi-user.target
Hampir semuanya siap untuk operasi "industri". Sentuhan terakhir yang ingin saya tambahkan ke alat untuk menambah keandalan adalah inisialisasi otomatis aturan iptables pada startup sistem (seperti yang Anda tahu, aturan iptables diatur ulang saat me-reboot) menggunakan iptables-persistent:
iptables-save > /etc/iptables/rules.v4 ip6tables-save > /etc/iptables/rules.v6 netfilter-persistent start && netfilter-persistent save
Kesimpulan
Jadi kami telah mengumpulkan alat kami sendiri dari kombinasi berbagai komponen, yang dengan tingkat keandalan yang cukup tinggi mampu memberikan anonimitas terus menerus dari pengguna Linux di jaringan. Sebagai kesimpulan, harus dikatakan bahwa semua yang dijelaskan dalam artikel diimplementasikan sebagai alat
Toroksi yang tersedia di GitHub.