hanya dengan SSH: membalikkan akses web terowongan melalui ssh SOCKS proxy

15

Sesekali saya harus terhubung ke server di mana akses sangat dibatasi.
Hanya SSH masuk yang diizinkan oleh firewall DMZ.
Koneksi HTTP keluar diblokir.

Saya mencari cara mudah untuk mengakses terowongan melalui sesi SSH saya, sehingga saya dapat menginstal pembaruan dan perangkat lunak melalui yum / apt-get. Idealnya, saya ingin menghindari menginstal perangkat lunak / layanan tambahan di kawasan lindung.

Apa yang Anda lakukan dalam situasi seperti itu?

SSH memiliki -D <port>opsi proxy SOCKS. Namun sayangnya itu hanya satu arah dari klien ke server dan tidak ada opsi sebaliknya.

Kaii
sumber

Jawaban:

26

Saya akhirnya berhasil mencapai ini sshhanya dengan :

  1. mulai proxy SOCKS lokal di mesin klien Anda (menggunakan ssh -D)
  2. terhubung ke server jarak jauh dan atur port reverse forwarding ( ssh -R) ke proksi SOCKS lokal Anda
  3. konfigurasikan perangkat lunak server untuk menggunakan proxy yang diteruskan

1. Mulai proksi kaus kaki lokal di latar belakang

Terhubung ke localhost melalui SSH dan buka proxy SOCKS pada port 54321.

$ ssh -f -N -D 54321 localhost

-f menjalankan SSH di latar belakang.

Catatan: Jika Anda menutup terminal tempat Anda memulai perintah, proses proxy akan dimatikan. Ingat juga untuk membersihkan setelah diri Anda dengan menutup jendela terminal ketika Anda selesai atau dengan membunuh proses sendiri!

2. terhubung ke server jarak jauh dan atur reverse port forwarding

Bind port jarak jauh 6666 ke port lokal 54321. Ini membuat proxy kaus kaki lokal Anda tersedia untuk situs jarak jauh di port 6666.

$ ssh root@target -R6666:localhost:54321

3. konfigurasikan perangkat lunak server untuk menggunakan proxy yang diteruskan

Cukup konfigurasikan yum, apt, curl, wget atau alat lain yang mendukung SOCKS untuk menggunakan proxy 127.0.0.1:6666.

Voa! Selamat tunneling!


4. opsional: konfigurasikan perangkat lunak server untuk menggunakan proxy yang diteruskan

Saya menemukan bahwa menginstal proxychainspada server target membuat banyak hal lebih mudah.

Ini memungkinkan perangkat lunak apa pun untuk menggunakan proxy SOCKS (datar telnet), dengan menggunakan LD_PRELOADtrik untuk mengarahkan kembali permintaan TCP dan DNS dari perintah sewenang-wenang ke dalam proxy.

Pengaturan /etc/proxychains.confuntuk menggunakan proxy kaus kaki yang diteruskan:

[ProxyList]
# SSH reverse proxy
socks5  127.0.0.1 6666

Tunnel arbitrary tools (yang menggunakan TCP) dengan proxychains:

$ proxychains telnet google.com 80
$ proxychains yum update
$ proxychains apt-get update
Kaii
sumber
3

Versi SSH yang lebih baru memungkinkan untuk menggunakan opsi yang sangat sederhana ssh-R <[bind_address:]port>. Hanya menggunakan port pada host dan mungkin alamat bind, tetapi tidak menentukan port sisi klien akan membuat proxy SOCKS terbalik.

Ini juga dinyatakan di halaman manual versi SSH yang lebih baru:

[...] jika tidak ada tujuan eksplisit yang ditentukan, ssh akan bertindak sebagai proxy SOCKS 4/5 dan meneruskan koneksi ke tujuan yang diminta oleh klien SOCKS jarak jauh.

Anda dapat menguji ini dengan curl menghubungkan ke "beri saya IP saya" sederhana -API seperti http://ifconfig.io .

$ curl ifconfig.io

vs.

$ curl --socks5 localhost:<PORT> ifconfig.io

Richard Metzler
sumber
2
Akan bermanfaat untuk menyebutkan nomor versi mana yang diperkenalkan fitur.
kasperd
jauh lebih sederhana, thanx!
Kaii
1
@kasperd: OpenSSH 7.6 , dirilis pada 2017-10-03. Periksa poin ke-3 di bawah Fitur Baru
MestreLion