Bagaimana cara membuat rantai SOCKS proxy?

10

Pendahuluan: Apa yang saya cari adalah instruksi eksplisit, dalam format yang sama seperti di atas. Artinya, seperti menjalankan: "... jalankan perintah X pada mesin A, lalu perintah Y pada mesin B ..."

Saya memiliki proxy kaus kaki yang berfungsi dari laptop saya (mesin A) ke mesin B:

[A]$ ssh -ND 8888 B

Saya dapat mengatur Firefox untuk menggunakan proxy SOCKS pada port lokal A 8888, dan menjelajah pada karya A. Sejauh ini bagus.

Tapi saya juga punya proxy kaus kaki antara mesin B dan C:

[B]$ ssh -ND 8157 C

Jadi saya bisa browsing di B seolah-olah saya berada di C, mengatur proxy kaus kaki Firefox B ke 8157.

Apakah ada cara untuk menghubungkan kedua proksi agar saya dapat menggunakan Firefox secara lokal (pada A) saat menggunakan koneksi ke C?

Yaitu, entah bagaimana meneruskan semua permintaan kaus kaki Firefox dari A hingga C. A dan C tidak dapat saling melihat secara langsung, tetapi saya memiliki akses SSH root penuh di mana-mana. Semua mesin adalah Debian.

Perhatikan bahwa saya tidak ingin meneruskan satu port seperti port 80 tetapi saya ingin proksi SOCK sepenuhnya dirantai .

pengguna124114
sumber
tidakkah seharusnya Anda hanya melakukan -L 8888:B:8157pada [A]?
bdecaf
@bdecaf Selain perintah yang diberikan? Sebagai gantinya? Tidak ada perubahan pada pengaturan FireFox?
user124114
Hanya untuk [A]. Sisanya seperti yang Anda gambarkan.
bdecaf
ssh -L 8888:B:8157gagal, memerlukan parameter nama host. Bisakah Anda memberikan jawaban yang lebih lengkap, dari ujung ke ujung? Jika berhasil, saya akan menerimanya.
user124114
apakah B benar-benar nama mesin Anda?
bdecaf

Jawaban:

12

Baru saja mengkonfirmasi ini berfungsi dengan beberapa VM:

[A]$ ssh -tt -v -L8888:localhost:8157 user@B ssh -t -D 8157 user@C

Dari A , Anda membuka port ke depan terowongan dari 8888 secara lokal untuk 8157 di B -L8888:localhost:8157 . Setelah Anda menetapkan koneksi ke B, perintah jarak jauh ssh -t -D 8157 user@Cdijalankan, yang menyediakan SOCKS proxy Anda melalui C . Dari apa yang saya baca, '-t' tampaknya diperlukan, meskipun saya masih harus mencari tahu alasannya.

Catatan, ini adalah salah satu perintah pada host pertama yang memanggil ssh dua kali, dari A-> B dan dari B-> C . Anda juga dapat memecah ini menjadi perintah terpisah, seperti yang dijelaskan di bawah ini.

Bonus: untuk merantai tiga proksi ...

Yaitu A->B->C->D->Internet

[hostA]$ ssh -2 -C -D 55557 -L 55556:127.0.0.1:55556 -L 55555:127.0.0.1:55555 user@B
[hostB]$ ssh -2 -C -D 55556 -L 55555:127.0.0.1:55555 user@C
[hostC]$ ssh -2 -C -D 55555 user@D

Perhatikan bahwa untuk setiap hop, Anda memerlukan forwarder pencocokan tambahan -Lpada host sebelumnya di rantai.

Referensi:

Glallen
sumber
Terjemahan, baris demi baris: - 1. Buat maju Dynamic port dari host B pada 57, Ekspos port 56 dari B, ekspos port 55 dari B. - 2. Buat dinamis port forward pada port 56 dari host C, Ekspos port 55 Dari C - 3. Buat port Dynamic pada port 55 dari host D - Hasil akhirnya adalah proxy Socks dari Setiap host, melalui SSH di setiap langkah. Ports 57 hingga 55 akan berisi proxy dengan titik akhir di B, C dan D.
Ray Foss
Apakah Anda memiliki proxy ssh gratis? Saya belum menemukan.
aemonge
4

glallen jawaban luar biasa memanfaatkan SSH akan menyelesaikan pekerjaan. Namun, cara yang tepat untuk mencapai ini adalah dengan menggunakan proxychainsprogram ini. ProxyChains adalah alat yang ampuh yang memungkinkan Anda untuk dengan mudah memanfaatkan beberapa server proxy secara bersamaan. Misalnya, ini digunakan oleh peretas untuk menyembunyikan identitas mereka saat melakukan serangan internet - dengan merantai sekelompok proxy di seluruh dunia bersama-sama, menjadi mustahil bagi penyelidik forensik untuk melacak lalu lintas sepanjang jalan kembali ke mereka. Bukan untuk mengatakan bahwa Anda adalah peretas jahat - ini akan bekerja untuk banyak kasus penggunaan yang berbeda. ;)

ProxyChains diinstal secara default pada beberapa distribusi Linux (seperti Kali Linux). Di Ubuntu / Debian, misalnya, Anda dapat dengan mudah menginstalnya dengan melakukan:

  • sudo apt-get install proxychains

Proxychains mencari file konfigurasi di /etc/proxychains.conf. Setelah Anda menginstalnya, buat cadangan file konfigurasi Proxychains yang ada (jika ada) dan buat yang baru:

  • mv /etc/proxychains.conf /etc/proxychains-backup.conf
  • nano /etc/proxychains.conf

Sekarang, rekatkan dalam konfigurasi contoh ini yang telah saya tulis untuk Anda:

strict_chain

proxy_dns

tcp_read_time_out 15000
tcp_connect_time_out 8000

[ProxyList]
socks4          192.168.1.1     8888
socks4          192.168.1.2     8157
socks4          192.168.1.3     6969

Dalam contoh ini, 192.168.1.1adalah alamat IP dari server proxy SOCKS pertama, 8888adalah port yang didengarkan oleh proxy SOCKS pertama, 192.168.1.2adalah alamat IP dari server proxy SOCKS kedua, 8157adalah port yang didengarkan oleh proxy SOCKS kedua, Dan seterusnya.

Sekarang, manfaatkan rantai proxy dengan melakukan proxychains firefoxdari baris perintah untuk meluncurkan Firefox. (Pastikan Firefox ditutup terlebih dahulu.) Sekarang, setiap kali Firefox membuat koneksi keluar, program proxychaps akan merangkum lalu lintas sehingga akan diproksikan melalui semua server yang Anda tentukan dalam file konfigurasi ini. Agar jelas, dalam preferensi Firefox Anda, Anda tidak boleh menentukan server proxy APAPUN - proxychains akan mengurus semuanya di belakang layar.

Perhatikan bahwa, untuk tujuan pemecahan masalah, Anda mungkin harus mencoba membuatnya berfungsi menggunakan 1 proksi sekaligus sebelum mencoba semua 3.;)

Referensi:

James
sumber
Apakah rantai proxy mengatur proxy untuk Anda juga? atau hanya membantu Anda terhubung ke proksi yang ada?
Glallen
Proxychains hanya akan terhubung ke server proxy yang ada.
James
Jika itu masalahnya, maka saya tidak setuju dengan frasa "cara yang tepat untuk ..." karena pertanyaannya secara khusus berbicara tentang menyiapkan proxy untuk rantai pada beberapa mesin, tidak hanya mengarahkan firefox ke proxy yang ada. Mungkin - "metode alternatif, begitu proksi sudah ada" akan informatif, tanpa menyiratkan bahwa menggunakan ssh lurus entah bagaimana tidak tepat . Info latar belakang tambahan yang bagus. Terima kasih. Edit dan Anda akan mendapatkan upvote saya.
Glallen