Menurut ssh.com dan Wikipedia, versi pertama dan implementasi protokol SSH dirilis pada 1995. Tugas penulis adalah mengembangkan alternatif yang aman untuk rlogin, telnet dan rsh, yang kemudian digunakan untuk administrasi jarak jauh. Sangat mengherankan bahwa kemunculan protokol SSH difasilitasi oleh insiden keamanan informasi, sebagai akibatnya penyerang mengumpulkan basis data nama pengguna / kata sandi dari server, hanya mendengarkan jaringan universitas dan mengekstraksi paket otentikasi (pasangan nama pengguna / kata sandi dikirimkan dalam bentuk yang tidak dienkripsi).
Protokol dengan cepat mendapatkan popularitas dan, setelah periode penyempurnaan dan perbaikan yang panjang, distandarisasi oleh IETF pada tahun 2006. Sejak itu, ia berhasil menjadi standar de facto untuk manajemen jarak jauh sistem konsol teks. Selain konsol teks itu sendiri, protokol menyediakan sejumlah fungsi berguna lainnya, seperti transfer file dan penerusan porta. Ini adalah tentang port forwarding dan aplikasi yang tidak terlalu jelas yang akan dibahas dalam artikel ini.
Protokol SSH menyediakan dua mode penerusan port - maju dan mundur. Mode langsung memungkinkan Anda untuk membuka port TCP yang mendengarkan di sisi klien SSH dan meneruskan semua koneksi ke port ini ke sisi server.

Misalnya, jika Remote Desktop Server (RDS) berjalan di server SSH kami, kami dapat menggunakan protokol SSH untuk terhubung ke server ini bahkan jika koneksi jaringan langsung tidak memungkinkan (misalnya, itu diblokir oleh firewall). Seperti ini:

Mode penerusan port kedua - mundur - memungkinkan Anda untuk menukar peran server dan klien SSH (sebagaimana diterapkan pada port yang diteruskan). Dalam mode terbalik, port TCP mendengarkan terbuka di sisi server SSH, dan aplikasi yang melayani port ini ada di sisi klien SSH. Ini sangat berguna jarang, tetapi, sebagai suatu peraturan, sangat tepat.

Menggabungkan dua mode ini dan contoh kita dengan server desktop jarak jauh, Anda bisa mendapatkan konfigurasi ini:

Sepintas, terlihat berlebihan. Tetapi bersama dengan redundansi yang jelas, kami mendapat dua properti penting:
- Satu-satunya hal yang diperlukan jaringan agar skema tersebut berfungsi dengan benar adalah memastikan alamat jaringan host tempat server SSH berada. Node yang menjalankan server RDS dan klien dapat mengubah alamat jaringan mereka setidaknya setiap menit (atau mereka bahkan dapat memiliki alamat di jaringan pribadi, kita hanya perlu NAT keluar, yang sering disebut sebagai kata-kata "koneksi Internet").
- Terlepas dari kenyataan bahwa bagi kami server RDS dapat diakses dari mana saja di Internet, pengguna lain tidak dapat terhubung ke sana (asalkan tidak ada kerentanan di server SSH). Dan karena protokol RDS memiliki kontrol aksesnya sendiri, bahkan dalam kasus serangan yang berhasil pada server SSH, penyerang juga perlu melakukan serangan terhadap RDS. Kemungkinan memiliki kerentanan server SSH dan kerentanan server RDS jauh lebih kecil daripada probabilitas untuk setiap komponen secara individual.
Jika Anda melihat lebih dekat, maka dalam diagram ini Anda dapat melihat dua jaringan komputer independen. One - transport - memungkinkan Anda membuat koneksi SSH. Lain - internal - digunakan untuk tujuan terapan. Kami akan mencoba menarik beberapa kesimpulan menarik dari pengamatan ini dalam artikel-artikel berikutnya, tetapi untuk sekarang, mari kita kembali ke eksperimen kami.
Sambungkan ke komputer di rumah Anda
Di halaman abad ke-21, pengiriman paket jaringan dari Siberia ke California membutuhkan 0,1 detik, seluruh dunia terjerat dalam jaringan komputer, dan TCP / IP bahkan dalam sikat gigi. Tampaknya dengan keterhubungan segalanya dengan segala sesuatu, kita seharusnya sudah lama dapat mengendalikan komputer tidak hanya melalui kehadiran fisik di dekat perangkat input, tetapi juga dari jarak jauh, melalui jaringan. Selain itu, ada banyak teknologi dan protokol untuk ini. Remote Desktop Microsoft, variasi VNC pada sistem * nix, solusi Citrix, ribuan di antaranya ... Meskipun demikian, beberapa dari kita dapat membanggakan kemampuan untuk terhubung ke komputer rumah kita dari mana saja di dunia menggunakan salah satu dari teknologi ini.
Ada dua alasan mengapa hanya sedikit yang bisa menyombongkan diri dengan menghubungkan ke komputer rumah mereka sendiri, dan mereka terhubung satu sama lain. Yang pertama adalah tidak adanya alamat komputer di rumah pada jaringan global. Akar keadaan ini kembali ke 1981, di mana standar IPv4 pertama kali dijelaskan, yang hingga hari ini digunakan (dengan sendirinya, dengan perubahan dan penambahan) untuk mengatasi sebagian besar situs di Internet. Penulis standar memutuskan bahwa ruang alamat dengan kapasitas 3,7 miliar alamat sudah cukup untuk semua perangkat di dunia, tetapi kenyataannya ternyata menjadi keras. Internet IPv4 diperkirakan tidak akan tersedia pada September 2019.
Selain itu, pengguna internet biasa yang tidak meng-host situs web dapat menikmati semua manfaat peradaban tanpa memiliki alamat di jaringan global, alih-alih dibatasi hanya pada alamat di jaringan pribadi dan penyedia NAT. Dengan kata lain, untuk sebagian besar pengguna Internet tidak ada perbedaan antara ada dan tidak adanya alamat IP global untuk peralatan mereka. Dalam keadaan seperti itu, jumlah mereka yang penyedia masalah alamat IP global dalam jaringan global menurun dengan cepat. Akibatnya, komputer rumahan tipikal terletak di jaringan pribadi, dan tidak memiliki alamat global. Bahkan jika penyedia masih menetapkan alamat peralatan pengguna di jaringan global, peralatan ini adalah router rumah yang melakukan NAT dari jaringan pribadi di rumah. Pengguna, tentu saja, dapat "meneruskan porta" pada router, tetapi bahkan dalam kasus terbaik ini, alamat global router dapat berubah dari hari ke hari. Ya, ada penyedia yang menyediakan layanan "IP Statis" dengan biaya sederhana, tetapi dalam praktiknya, pada saat ini, pengguna menyadari bahwa permainan tidak sepadan dengan lilin, dan jika Anda perlu melakukan sesuatu dengan komputer di rumah, Anda juga dapat menghubungi untuk memanggil.
Yang paling gigih dapat melalui pencarian ini sampai akhir dan menemukan alasan kedua mengapa membuka akses ke komputer mereka melalui Internet adalah hiburan hanya bagi mereka yang bersemangat. Alasan ini biasa - keamanan informasi. Jaringan global bersifat global, cepat atau lambat, seseorang dari ujung dunia dan dengan niat buruk akan mengetuk pintu Anda. Memindai port terbuka yang menjadi jawaban server desktop jarak jauh bukanlah tugas yang sangat sulit, dan, pastikan, cepat atau lambat, TCP SYN akan datang ke port super rahasia 32167 Anda dari desa Cina.
Kembali ke penerusan porta eksotis kami menggunakan SSH, Anda akan melihat bahwa fitur-fiturnya menghilangkan kedua alasan ini.
Bangun sendiri TeamViewer
Anda perlu melakukan reservasi segera bahwa TeamViewer adalah produk hebat dengan sejumlah besar kemampuan yang sangat berbeda. Sebagai bagian dari artikel ini, kami hanya akan mengumpulkan sendiri cara untuk terhubung dengan aman melalui Internet melalui protokol Remote Desktop ke komputer yang terletak di belakang NAT. Namun demikian, saya berani menyarankan bahwa itu adalah koneksi ke komputer mana pun dengan akses Internet yang merupakan fitur pembeda utama dari TeamViewer, yang karenanya produk ini sangat populer. Dan itu adalah koneksi yang tepat yang dapat kami implementasikan dengan tangan kami sendiri menggunakan konfigurasi SSH kami dari bagian pertama artikel.
Jadi, kondisi tugasnya: ada komputer di rumah dan laptop, keduanya menjalankan Windows 10. Hal ini diperlukan agar laptop dapat mengakses komputer di rumah menggunakan protokol Remote Desktop dari mana saja di dunia. Sistem kami akan mencakup server Remote Desktop komputer di rumah kami, laptop dengan klien Remote Desktop, dan server SSH. Server SSH adalah satu-satunya komponen yang memerlukan alamat IP global dan ketersediaan permanen. Opsi termudah untuk memenuhi persyaratan ini adalah meng-host server SSH di cloud. Yandex.Cloud hebat (terutama karena kebijakan penetapan harganya), jadi kami akan menggunakannya. Hasilnya seperti ini:

Mari kita mulai dengan menyiapkan komputer di rumah kita. Pertama, pastikan bahwa akses jarak jauh secara umum diperbolehkan. Ini dapat dilakukan melalui tab Remote Access di pengaturan sistem tambahan:

Mulai April 2018, Windows 10 sudah memiliki klien ssh di antara utilitas baris perintah. Ini akan membantu kita untuk tidak terlalu terganggu dengan menginstal perangkat lunak yang berbeda dan segera memulai bisnis. Pertama, kami membuat kunci untuk SSH. Buka shell PowerShell dan jalankan 'ssh-keygen'. Ketika kami ditanya tentang kata sandi untuk kunci tersebut, biarkan kosong. Setelah membuat kunci, tampilkan bagian yang terbuka di konsol dengan perintah 'cat $ HOME / .ssh / id_rsa.pub'. Hasil dari perintah ini berguna bagi kita untuk memulai server SSH di cloud. Anda harus mendapatkan sesuatu seperti ini:

Kita perlu menyalin bagian pribadi dari kunci SSH ke laptop. Bagian dari kuncinya terletak pada file '$ HOME / .ssh / id_rsa' (tanpa akhiran ".pub"), dan kita dapat menyalinnya sebagai file biasa. Misalnya, menggunakan USB flash drive (kami menganggap itu sudah terpasang sebagai drive F :)
copy $HOME/.ssh/id_rsa f:\
Sekarang jalankan server SSH kami. Buat mesin virtual (VM) di Yandex.Cloud. Untuk keperluan kami, Anda dapat memilih VM "ringan" dengan 1 vCPU dan 0,5 gigabytes RAM. Di bagian pengaturan jaringan, pilih jaringan default dengan alamat IP otomatis. Di bagian "akses", masukkan "rumah" sebagai login, di bidang input kunci SSH, salin apa yang ditampilkan di konsol kami pada langkah sebelumnya:

Klik "Buat VM" dan tunggu sampai selesai. Setelah pembuatan mesin virtual selesai, kita perlu mengetahui alamat IP-nya:

Kita akan memerlukan alamat IP dari mesin virtual kita untuk menjalankan klien SSH di komputer rumah dan laptop. Jalankan di komputer dengan cara ini (dalam perintah ini dan berikut ini Anda harus mengganti 84.201.141.36 dengan alamat IP VM Anda):
ssh -NR 3389:localhost:3389 home@84.201.141.36
Ketika ditanya tentang menghubungkan ke server yang tidak dikenal, kami menjawab "ya". Jika kemudian kita tidak melihat teks di konsol, maka semuanya berjalan dengan baik. Sekarang konfigurasikan laptop. Salin kunci pribadi dari flash drive kami:
mkdir -Force $HOME/.ssh copy f:\id_rsa $HOME/.ssh/id_rsa
Dan jalankan klien SSH:
ssh -NL 1025:localhost:3389 home@84.201.141.36
Sekarang Anda dapat menjalankan klien akses desktop jarak jauh (mstsc.exe) pada laptop, menentukan localhost: 1025 sebagai alamat koneksi. Hore, itu berhasil!
Atau hampir berhasil. Jika Anda menghentikan proses SSH di komputer di rumah Anda, itu akan menjadi tidak mungkin untuk terhubung. Kita perlu membuat proses ini secara otomatis mulai ketika sistem mulai, dan juga memulai kembali ketika koneksi terputus. Ini dapat dicapai, misalnya, dengan membuat skrip PowerShell dan mendaftarkannya sebagai keharusan untuk dijalankan dalam Kebijakan Grup saat startup komputer. Anda hanya perlu mempertimbangkan bahwa itu akan diluncurkan atas nama akun sistem, yang berarti Anda perlu memastikan bahwa kunci SSH kami tersedia untuk akun sistem.
Mari kita turun ke kunci dulu. Jalankan PowerShell sebagai administrator dan jalankan perintah berikut:
copy $HOME/.ssh/id_rsa "$(gwmi win32_userprofile | where {$_.SID -eq "S-1-5-18"} | select -ExpandProperty LocalPath)/rds_id_rsa" icacls "$(gwmi win32_userprofile | where {$_.SID -eq "S-1-5-18"} | select -ExpandProperty LocalPath)/rds_id_rsa" /reset
Pada saat yang sama, di jendela PowerShell yang sama, aktifkan eksekusi skrip:
Set-ExecutionPolicy RemoteSigned
Sekarang buat skrip yang sebenarnya. Mari kita buka editor teks favorit kita (Notepad juga cocok), dan tulis skrip ini (ingat untuk mengganti alamat IP server SSH dengan yang diberikan kepada Anda oleh Yandex):
while (1) { & $(get-command ssh |select -expandproperty Path) ` -i "$(gwmi win32_userprofile | where {$_.SID -eq "S-1-5-18"} | select -ExpandProperty LocalPath)/rds_id_rsa" ` -o StrictHostKeyChecking=accept-new -o ExitOnForwardFailure=yes ` -NR 3389:localhost:3389 home@84.201.141.36 Start-Sleep -Seconds 15 }
Simpan skrip ke direktori yang Anda suka. Akhirnya, daftarkan untuk autorun. Untuk melakukan ini, jalankan Editor Kebijakan Grup (Win + R → gpedit.msc), dan buka item "Konfigurasi Komputer" → "Konfigurasi Windows" → "Script (mulai / akhir)" → "Startup". Pada tab "Skrip PowerShell", gunakan tombol "Tambah" dan tunjukkan path ke skrip yang disimpan.

Kami akan melakukan hal yang sama pada laptop. PowerShell pertama sebagai administrator:
copy $HOME/.ssh/id_rsa "$(gwmi win32_userprofile | where {$_.SID -eq "S-1-5-18"} | select -ExpandProperty LocalPath)/rds_id_rsa" icacls "$(gwmi win32_userprofile | where {$_.SID -eq "S-1-5-18"} | select -ExpandProperty LocalPath)/rds_id_rsa" /reset Set-ExecutionPolicy RemoteSigned
Kemudian kami akan menyiapkan skrip dalam editor teks (sedikit berbeda dari yang sebelumnya, tetapi seperti sebelumnya, kami mengganti alamat IP dengan yang diberikan kepada Anda oleh Yandex):
while (1) { & $(get-command ssh |select -expandproperty Path) ` -i "$(gwmi win32_userprofile | where {$_.SID -eq "S-1-5-18"} | select -ExpandProperty LocalPath)/rds_id_rsa" ` -o StrictHostKeyChecking=accept-new -o ExitOnForwardFailure=yes ` -NL 1025:localhost:3389 home@84.201.141.36 Start-Sleep -Seconds 15 }
Non-end akan mendaftarkannya untuk memulai saat startup menggunakan "gpedit.msc". Nyalakan kembali komputer dan laptop (untuk memastikan semuanya dimulai dengan benar) dan voila! Sekarang komputer di rumah kami dan laptop kami selamanya terhubung satu sama lain (selama mesin virtual kami di Yandex.Cloud dihidupkan dan diakses).
Jadi apa
Bukankah itu bagus? Di kafe mana saja, di bandara mana pun, Anda dapat terhubung ke rumah Anda dan melihat foto-foto favorit Anda dengan kucing. Atau silakan pulang dengan memasukkan simfoni ke-5 Beethoven dengan volume penuh. Atau tertarik pada keberhasilan pertanian pertambangan Anda. Atau lihat apa yang terjadi di rumah dengan webcam. Tetapi berapa banyak aplikasi yang memiliki kesempatan untuk "teleport"? Tetapi solusi kami juga memiliki kelemahan.
Pertama, mengatur koneksi bukanlah proses yang termudah dan paling menyenangkan. Dan jika terjadi kesalahan, debugging sedikit lebih rumit daripada pengaturan awal. Tentu saja, masalah ini diselesaikan dengan ketekunan dan kesabaran, tetapi bahkan sejumlah kecil tenaga kerja yang perlu dihabiskan dapat menimbulkan keraguan tentang kelayakan upaya.
Kedua, mesin virtual di cloud membutuhkan biaya. Dalam kasus Yandex, minimum yang dapat Anda andalkan adalah 480 rubel per bulan. Ini, tentu saja, bukan uang yang selangit, tetapi tetap milik mereka sendiri, diperoleh dari keringat seseorang. Apakah pantas melihat gambar dengan kucing dari uang ini terserah kepada semua orang untuk memutuskan sendiri, tetapi mungkin saja semua keuntungan dari solusi kami akan dicoret oleh harganya.
Masalah harga dapat secara substansial dihilangkan dengan berbagi pengeluaran dengan teman dan orang yang berpikiran sama. Karena mesin virtual digunakan untuk tugas-tugas yang tidak memerlukan daya komputasi yang nyata, penurunan kinerja sangat tidak mungkin. Dan dampak ekonomi terlihat: jika Anda menyewa mesin virtual dengan sepuluh orang, maka setiap orang harus membayar hanya 48 rubel per bulan. Benar, dalam hal ini harmoni dapat dilanggar oleh pertanyaan kepercayaan: setiap orang yang berpikiran sama memiliki kesempatan untuk terhubung ke sesama komputer melalui server SSH. Dalam hal setiap orang memiliki kata sandi yang kuat di akun mereka, ini bukan masalah. Tapi, terus terang, kata sandi yang kuat untuk masuk ke komputer di rumah Anda lebih merupakan pengecualian daripada aturan.
Untuk dilanjutkan
Jadi, anggaplah kita mengumpulkan 10 orang yang berpikiran sama, mengatur semuanya seperti yang dijelaskan di atas, dan semuanya bekerja untuk semua orang. Klub pecinta gambar kami dengan kucing dengan aman mengambil kesempatan untuk pergi ke rumah mereka melalui internet hanya dengan 48 rubel sebulan tanpa mendaftar dan mengirim SMS, semua orang senang dan bahagia. Pertanyaannya adalah - apakah kemungkinan "teknologi" kami terbatas hanya untuk kucing dan apakah mungkin menggunakannya untuk sesuatu yang lebih serius?
Tentu saja bisa. Jika dalam alasan kami, kami mengganti "komputer rumah" dengan "membangun server di cloud" dan "laptop" dengan "komputer kerja di kantor", kami mendapatkan sesuatu yang layak dengan judul "sistem akses ke infrastruktur pembangunan". Dan jika kita memiliki kamera IP alih-alih membangun server, dan pos keamanan alih-alih komputer yang berfungsi, kita mendapatkan "sistem pengawasan video".
Namun dalam kedua kasus tersebut, perlu lebih diperhatikan masalah akses kontrol. Secara khusus, ketika berbagi server SSH oleh beberapa pengguna, saya ingin mengisolasi pengguna ini satu sama lain. Dan bahkan dengan pembagian ini, kami dipaksa untuk menetapkan setiap sumber daya yang terpisah dari setiap pengguna ke port TCP yang terpisah dan mengingat nomornya. Mengatasi dengan angka bisa segera menjadi sangat membosankan, jadi saya ingin dapat menetapkan nama yang bermakna untuk sumber daya. Tetapi kita akan berbicara tentang bagaimana memperbaiki situasi di artikel selanjutnya.
Sementara itu, terima kasih atas perhatian Anda dan silakan bagikan pendapat Anda dalam komentar.