Bagaimana cara menggunakan ssh di http atau https?

42

Saya memiliki laptop klien fedora21 linux di belakang firewall perusahaan (yang memungkinkan melalui port http dan https tetapi tidak ssh 22) dan saya memiliki server fedora21 linux di rumah di belakang router saya sendiri. Menjelajah dengan https berfungsi ketika saya menentukan alamat IP publik server rumah saya (karena saya mengkonfigurasi router rumah saya)

Apakah mungkin untuk ssh (remote shell) ke server rumah saya melalui port http / s?

Saya melihat alat yang disebut corkscrew. akankah itu membantu?

opensshddan httpdjalankan di server rumah. Apa lagi yang perlu konfigurasi?

MMM
sumber
1
letakkan sshd Anda di rumah untuk mendengarkan di port 443, tetapi Anda harus menonaktifkan port 443 di httpd rumah Anda.
taliezin
Saya tidak bisa memikirkan itu. Saya perlu httpd (s) untuk git mendorong juga. jadi saya harus mendengarkan httpd di 443.
MMM
coba httptunnel - yum pasang httptunnel http://www.nocrew.org/software/httptunnel.html , atau seperti yang Anda sebutkan dalam pertanyaan Anda: pembuka botol.
taliezin
Either way, sshd akan mendengarkan 22, dan httpd ke 80/443 dan httptunnel atau pembuka botol akan meneruskan lalu lintas yang diterima httpd ke sshd?
MMM
Iya nih. Itu tidak harus mengubah porta layanan Anda.
taliezin

Jawaban:

42

Apa yang mungkin tergantung pada apa yang memungkinkan firewall.

Jika firewall memungkinkan lalu lintas sewenang-wenang di port 443

Beberapa firewall mengambil jalan keluar sederhana dan mengizinkan apa pun di port 443. Jika itu masalahnya, cara termudah untuk mencapai server rumah Anda adalah dengan membuatnya mendengarkan koneksi SSH pada port 443. Jika mesin Anda terhubung langsung ke Internet, cukup tambahkan Port 443ke /etc/ssh/sshd_configatau /etc/sshd_configtepat di bawah baris yang mengatakan Port 22. Jika mesin Anda berada di belakang router / firewall yang mengarahkan kembali koneksi masuk, buatlah mengarahkan koneksi masuk ke port 443 ke port server 22 Anda dengan sesuatu seperti

iptables -t nat -I PREROUTING -p tcp -i wan0 --dport 443 -j DNAT --to-destination 10.1.2.3:22

di mana wan0antarmuka WAN pada router Anda dan 10.1.2.3 adalah alamat IP server Anda di jaringan rumah Anda.

Jika Anda ingin memperbolehkan server rumah Anda mendengarkan koneksi HTTPS dan koneksi SSH pada port 443, itu mungkin - lalu lintas SSH dan HTTPS dapat dengan mudah dibedakan (di SSH, server berbicara terlebih dahulu, sedangkan dalam HTTP dan HTTPS, klien berbicara pertama). Lihat http://blog.stalkr.net/2012/02/sshhttps-multiplexing-with-sshttp.html dan http://wrouesnel.github.io/articles/Setting%20up%20sshttp/ untuk tutorial tentang cara mengatur ini dengan sshttp , dan Juga Memiliki SSH pada port 80 atau 443 saat server web (nginx) berjalan pada port ini

Jika Anda memiliki proxy web yang memungkinkan tunnel CONNECT

Beberapa firewall memblokir semua koneksi keluar, tetapi memungkinkan menjelajah web melalui proxy yang memungkinkan metode HTTPCONNECT untuk secara efektif menembus lubang di firewall. The CONNECTMetode dapat dibatasi pada port tertentu, sehingga Anda mungkin perlu untuk menggabungkan ini dengan mendengarkan pada port 443 seperti di atas.

Untuk membuat SSH melalui proxy, Anda dapat menggunakan alat seperti pembuka botol . Di Anda ~/.ssh/config, tambahkan ProxyCommandbaris seperti di bawah ini, jika proxy web Anda adalah http://web-proxy.work.example.com:3128:

Host home
HostName mmm.dyndns.example.net
ProxyCommand corkscrew web-proxy.work.example.com 3128 %h %p

Membungkus SSH dalam HTTP (S)

Beberapa firewall tidak mengizinkan lalu lintas SSH, bahkan pada port 443. Untuk mengatasinya, Anda perlu menyamarkan atau menyalurkan SSH menjadi sesuatu yang dibiarkan firewall. Lihat http://dag.wiee.rs/howto/ssh-http-tunneling/ untuk tutorial tentang melakukan ini dengan proxytunnel .

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Trik 443 berhasil! Saya terkejut ini bekerja :) - ada pemandangan sysadmin mengapa ini tampaknya terjadi pada kebanyakan firewall?
AK_
@AK_ Karena walaupun dimungkinkan oleh firewall untuk membedakan TLS dari SSH, ini merupakan langkah konfigurasi tambahan dan biaya lebih banyak dalam kinerja, tanpa manfaat nyata ketika datang ke koneksi keluar (karena apa pun bisa menjadi terowongan di TLS).
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles, Apakah bahkan ada server proxy yang memblokir HTTPS namun mengizinkan HTTP CONNECT HTTPS?
Pacerier
1
@ Paser Banyak dari mereka. Bukannya proxy memblokir HTTPS - proxy tidak memblokir koneksi yang memintas proxy - itu adalah koneksi langsung yang diblokir, tetapi proxy memungkinkan CONNECT dengan lalu lintas apa pun asalkan ke port 443. Lagi pula tidak ada cara nyata untuk memfilter HTTPS , pendek dari akar kepercayaan dan penulisan ulang sertifikat yang merupakan ide yang sangat buruk.
Gilles 'SANGAT berhenti menjadi jahat'
Catatan Anda juga dapat menggunakan netcat-openbsd alih-alih pembuka sumbat dalam perintah proxy:ProxyCommand nc -X connect -x __proxy_IP__:__port__ %h %p
Paul Rougieux
1

Anda dapat menggunakan sslh jika Anda ingin menjalankan KEDUA server HTTPS dan server SSHd pada port 443 yang sama.

teknopaul
sumber