Seperti yang saya pahami, firewall (dengan asumsi pengaturan default) menolak semua lalu lintas masuk yang sebelumnya tidak memiliki lalu lintas keluar yang sesuai.
Berdasarkan Reversing koneksi ssh dan SSH Tunneling Made Easy , reverse SSH tunneling dapat digunakan untuk mengatasi pembatasan firewall yang sial.
Saya ingin menjalankan perintah shell pada mesin jarak jauh. Mesin jarak jauh memiliki firewall sendiri dan berada di belakang firewall tambahan (router). Ini memiliki alamat IP seperti 192.168.1.126 (atau yang serupa). Saya tidak berada di belakang firewall dan saya tahu alamat IP mesin jarak jauh seperti yang terlihat dari Internet (bukan alamat 192.168.1.126). Selain itu, saya dapat meminta seseorang untuk mengeksekusi ssh (something)
sebagai root pada mesin remote terlebih dahulu.
Adakah yang bisa menjelaskan kepada saya, langkah demi langkah, bagaimana cara membalikkan SSH tunneling untuk menyiasati firewall (firewall mesin lokal dan jarak jauh dan firewall tambahan di antara mereka)?
Apa peran dari switch ( -R
, -f
, -L
, -N
)?
Jawaban:
Saya suka menjelaskan hal semacam ini melalui visualisasi. :-)
Pikirkan koneksi SSH Anda sebagai tabung. Tabung besar. Biasanya, Anda akan menjangkau melalui tabung ini untuk menjalankan shell di komputer jarak jauh. Shell berjalan di terminal virtual (tty). Tapi Anda sudah tahu bagian ini.
Pikirkan terowongan Anda sebagai tabung di dalam tabung. Anda masih memiliki koneksi SSH yang besar, tetapi opsi -L atau -R memungkinkan Anda mengatur tabung yang lebih kecil di dalamnya.
Setiap tabung memiliki awal dan akhir. Tabung besar, koneksi SSH Anda, dimulai dengan klien SSH Anda dan berakhir di server SSH yang Anda sambungkan. Semua tabung yang lebih kecil memiliki titik akhir yang sama, kecuali bahwa peran "mulai" atau "akhir" ditentukan oleh apakah Anda menggunakan
-L
atau-R
(masing-masing) untuk membuatnya.(Anda belum mengatakannya, tapi saya akan berasumsi bahwa mesin "remote" yang Anda sebutkan, yang ada di balik firewall, dapat mengakses Internet menggunakan Network Address Translation (NAT). Ini agak penting, jadi perbaiki asumsi ini jika salah.)
Saat Anda membuat terowongan, Anda menentukan alamat dan port yang akan dijawabnya, dan alamat serta port yang akan dikirimkannya. The
-L
pilihan memberitahu terowongan untuk menjawab di sisi lokal terowongan (host menjalankan klien Anda). The-R
pilihan memberitahu terowongan untuk menjawab di sisi remote (SSH server).Jadi ... Untuk dapat SSH dari Internet ke mesin di belakang firewall, Anda memerlukan mesin yang dimaksud untuk membuka koneksi SSH ke dunia luar dan menyertakan sebuah
-R
terowongan yang titik "masuknya" adalah sisi "jauh" dari koneksinya.Dari dua model yang ditunjukkan di atas, Anda ingin yang di sebelah kanan.
Dari host yang di-firewall:
Ini memberi tahu klien Anda untuk membuat terowongan dengan
-R
titik masuk emote. Apa pun yang melekat pada port 22222 di ujung terowongan akan benar-benar mencapai "localhost port 22", di mana "localhost" adalah dari sudut pandang titik keluar terowongan (yaitu klien ssh Anda).Pilihan lainnya adalah:
-f
memberitahu ssh ke latar belakang sendiri setelah diautentikasi, jadi Anda tidak perlu duduk menjalankan sesuatu di server jauh agar terowongan tetap hidup.-N
mengatakan bahwa Anda menginginkan koneksi SSH, tetapi Anda sebenarnya tidak ingin menjalankan perintah jarak jauh. Jika semua yang Anda buat adalah sebuah terowongan, maka memasukkan opsi ini menghemat sumber daya.-T
menonaktifkan alokasi pseudo-tty, yang sesuai karena Anda tidak mencoba membuat shell interaktif.Akan ada tantangan kata sandi kecuali Anda telah mengatur kunci DSA atau RSA untuk login tanpa kata sandi.
Perhatikan bahwa SANGAT disarankan untuk menggunakan akun yang dibuang (bukan login Anda sendiri) yang Anda siapkan hanya untuk terowongan / pelanggan / server ini.
Sekarang, dari shell Anda di yourpublichost , buat koneksi ke host firewall melalui terowongan:
Anda akan mendapatkan tantangan kunci host, karena Anda mungkin belum pernah mencapai host ini sebelumnya. Kemudian Anda akan mendapatkan tantangan kata sandi untuk
username
akun (kecuali jika Anda sudah menyiapkan kunci untuk masuk tanpa kata sandi).Jika Anda akan mengakses host ini secara teratur, Anda juga dapat menyederhanakan akses dengan menambahkan beberapa baris ke
~/.ssh/config
file Anda :Sesuaikan
remotehostname
danremoteusername
sesuai. Theremoteusername
lapangan harus sesuai nama pengguna pada remote server, tetapiremotehostname
dapat berupa nama host yang cocok untuk anda, itu tidak harus mencocokkan apa pun diatasi.(Untuk mengekspos titik akhir terbalik pada IP non-localhost , lihat posting ini )
sumber
Saya telah menggambar beberapa sketsa
Mesin, tempat perintah ssh tunnel diketik disebut »host Anda« .
pengantar
lokal:
-L Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.
ssh -L sourcePort:forwardToHost:onPort connectToHost
berarti: terhubung dengan ssh keconnectToHost
, dan meneruskan semua upaya koneksi ke port lokalsourcePort
keonPort
mesin yang dipanggilforwardToHost
, yang dapat dijangkau dariconnectToHost
mesin.terpencil:
-R Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.
ssh -R sourcePort:forwardToHost:onPort connectToHost
berarti: terhubung dengan ssh keconnectToHost
, dan meneruskan semua upaya koneksi ke port jarak jauhsourcePort
keonPort
mesin yang disebutforwardToHost
, yang dapat dijangkau dari mesin lokal Anda.Opsi tambahan
-f
memberitahu ssh ke latar belakang sendiri setelah diautentikasi, jadi Anda tidak perlu duduk menjalankan sesuatu di server jauh agar terowongan tetap hidup.-N
mengatakan bahwa Anda menginginkan koneksi SSH, tetapi Anda sebenarnya tidak ingin menjalankan perintah jarak jauh. Jika semua yang Anda buat adalah sebuah terowongan, maka memasukkan opsi ini menghemat sumber daya.-T
menonaktifkan alokasi pseudo-tty, yang sesuai karena Anda tidak mencoba membuat shell interaktif.Contoh anda
Gambar ketiga mewakili terowongan ini. Tetapi komputer biru yang disebut "host Anda" mewakili komputer tempat seseorang memulai ssh tunnel, dalam hal ini mesin yang dipasangi firewall.
Jadi, mintalah seseorang untuk memulai koneksi terowongan ssh ke mesin Anda. Perintah pada dasarnya akan terlihat seperti
Sekarang terowongan dibuka. Anda sekarang dapat terhubung melalui ssh ke mesin firewall melalui terowongan dengan perintah
yang akan terhubung ke Anda sendiri
localhost
(mesin Anda) pada port12345
, tetapi port12345
diteruskan melalui terowongan ke port 22 dari localhost dari komputer yang di-firewall (yaitu komputer yang di-firewall sendiri).sumber
tunneling ssh berfungsi dengan menggunakan koneksi ssh yang sudah ada untuk mengirim lalu lintas tambahan.
Ketika Anda terhubung ke server jauh, Anda biasanya hanya memiliki 1 saluran untuk interaksi pengguna normal (atau 3 saluran jika Anda menganggap STDIN / STDOUT / STDERR terpisah). Kapan saja, proses ssh lokal atau jarak jauh dapat membuka saluran tambahan pada koneksi yang ada. Saluran-saluran ini kemudian mengirim / menerima lalu lintas terowongan. Saat mengirim atau menerima lalu lintas apa pun, proses ssh hanya mengatakan "lalu lintas ini untuk saluran foobar".
Ini pada dasarnya bekerja seperti ini:
127.0.0.1
, tetapi dapat diubah).Proses ini sama persis untuk penerusan maju dan mundur (cukup tukar kata 'lokal' dan 'jauh' dalam prosedur di atas). Masing-masing pihak dapat memulai terowongan. Bahkan tidak harus ketika Anda pertama kali memulai ssh. Anda dapat membuka terowongan saat ssh sudah berjalan (lihat
ESCAPE CHARACTERS
, secara khusus~C
).Untuk peran
-R
,-f
,-L
, dan-N
, Anda benar-benar hanya harus berkonsultasi halaman manual, itu memberikan Anda penjelasan terbaik mungkin. Tapi saya akan menyebutkan-R
dan-L
.-R
memberitahu ssh jauh untuk mendengarkan koneksi, dan bahwa ssh lokal harus terhubung ke tujuan sebenarnya.-L
memberitahu ssh lokal untuk mendengarkan koneksi, dan ssh jarak jauh harus terhubung ke tujuan sebenarnya.Catatan, ini adalah deskripsi yang sangat kasar, tetapi seharusnya memberi Anda cukup info untuk mengetahui apa yang terjadi
sumber
Ini dijelaskan dalam manual SSH, terutama perbedaan antara
-L
(lokal) dan-R
(jarak jauh).-L
Contoh berikut terowongan sesi IRC dari mesin klien
127.0.0.1
(localhost
) menggunakan port 1234 ke server jauhserver.example.com
:Catatan:
-f
Opsi latar belakang ssh dan perintah jarak jauhsleep 10
ditentukan untuk memungkinkan sejumlah waktu untuk memulai layanan yang akan disetel.Contoh:
-N
Setelah Anda terhubung, tunggu saja di sana (Anda tidak akan mendapatkan shell prompt)-L 22000
Koneksi akan berasal dari port 22000 mesin L ocal pribadi Andalocalhost:11000
-remote.server.com
akan memastikan bahwa ujung terowongan adalahlocalhost
, port11000
Sumber: Panduan bergambar, tutorial, cara-cara, pada ssh tunneling .
-R
Contoh:
-N
Setelah Anda terhubung, tunggu saja di sana (Anda tidak akan mendapatkan shell prompt)-R
22000 Koneksi akan berasal dari port 22000 dari komputer R emote (dalam hal ini, remote.server.com)localhost:11000
komputer pribadi dan lokal Anda akan memastikan bahwa ujung terowongan adalahlocalhost
port11000
Sumber: Panduan bergambar, tutorial, cara-cara, pada ssh tunneling .
sumber