Batas waktu koneksi untuk server ssh

11

Saya mencoba men-setup openssh-server, tetapi saya mengalami beberapa masalah koneksi. Saya mengubah port menjadi sesuatu yang tidak standar (57757) dan kemudian mengatur router saya untuk meneruskan ke port itu. Di LAN saya, saya dapat ssh ke mesin saya dengan baik menggunakan port 57757, tetapi tidak dapat melakukannya pada WAN.

Jika saya berada di luar LAN, dan saya mencoba mengakses mesin saya dengan port yang salah, saya langsung mendapatkan pesan "koneksi ditolak". Namun, dengan port yang benar hanya hang dan kemudian timeout.

Apa yang bisa saya coba debug masalah ini? Saya mencoba traceroute, tetapi tidak memberi tahu saya apa pun yang berguna.

EDIT: Saya menyadari bahwa masalah saya adalah router saya tidak mendukung mengaksesnya oleh WAN IP secara internal. Saya ssh keluar ke server yang berbeda dan kembali dan bekerja dengan baik.

Ci3
sumber
Apakah Anda mengubah apa pun di samping port yang didengarnya?
guntbert
@ guntbert Nggak. Mungkinkah itu masalah dengan loopback?
Ci3
loopback? apakah Anda hanya mencoba dari mesin itu sendiri? apakah Anda memiliki perangkat lain di dalam LAN untuk diuji?
guntbert
@ Guntbert Saya mencobanya dengan komputer lain dan tidak ada masalah di dalam LAN.
Ci3
Gagasan saya tentang "upaya terakhir": sudo apt-get purge openssh-serverkemudian pasang kembali (jadi kami menyingkirkan apa pun yang mungkin cocok dengan konfigurasi) dan mengkonfigurasi ulang router Anda untuk meneruskan 22-> 22.
guntbert

Jawaban:

11

Biasanya ini berarti Anda telah meneruskan port ke alamat IP yang salah pada LAN.

Router NAT Anda menerima lalu lintas masuk pada port 57757, dan mengirimkannya ke alamat IP dan port tertentu di LAN.

Secara default, Ubuntu tidak memfilter upaya koneksi masuk dengan firewall. Jadi kecuali Anda telah mengubah pengaturan firewall di Ubuntu, upaya untuk membuka koneksi ke port TCP apa pun, 1 hingga 65535, akan:

  • terima koneksi, jika port terbuka
  • tolak upaya koneksi, jika port ditutup

Jika port difilter oleh firewall, maka Anda akan mendapatkan apa yang Anda lihat - tidak ada respons terhadap upaya koneksi. Tapi:

  • kecuali Anda telah mengubah pengaturan firewall (mis. ufw, iptables), tidak ada port yang difilter, dan
  • dalam hal apa pun, Anda dapat terhubung ke port 22 di LAN, jadi terbuka.

Ketika Anda meneruskan port ke mesin yang tidak ada dengan router NAT, itu mengirimkan lalu lintas masuk pada port itu ke mesin yang tidak ada, yang mengatakan bahwa ia mengirimnya ke lubang hitam ; itu secara efektif dijatuhkan.

Itu menyebabkan persis situasi yang Anda gambarkan. Jadi Anda kemungkinan besar dapat memperbaikinya dengan memastikan port sedang diteruskan ke alamat IP yang benar pada LAN.

Jika itu ternyata tidak menjadi masalah ...

... maka Anda harus melakukan beberapa pemecahan masalah.

  1. Apakah port yang ditentukan untuk sisi LAN benar? Artinya, dengan asumsi Anda belum mengubah konfigurasi server SSH, apakah port 57757 di sisi WAN diatur untuk meneruskan ke port 22 di server OpenSSH? (Anda mungkin ingin memeriksa ulang ini.)

  2. Mungkin ada beberapa masalah dengan port spesifik yang Anda pilih (57757). Coba yang lain dan lihat apakah itu bekerja lebih baik.

    (Jika tidak, dan Anda melanjutkan dengan petunjuk ini, ubah kembali atau ganti "57757" di bawah dengan nomor baru.)

  3. Coba mulai ulang server OpenSSH. Itu dapat membantu jika ada masalah jaringan. Jika itu tidak membantu, coba mulai ulang perute dan modem kabel / DSL / ISDN juga.

    Jika karena alasan tertentu Anda tidak dapat me-restart ketiga perangkat, saya sarankan memulai kembali apa pun yang Anda bisa. Jika Anda tidak dapat memulai kembali layanan OpenSSH, setidaknya Anda dapat memulai kembali layanan dan (lebih mungkin untuk memperbaikinya) menurunkan antarmuka dan membawanya lagi.

    Untuk me-restart server OpenSSH:

    sudo restart ssh
    

    Untuk menurunkan antarmuka jaringan, cari tahu dulu antarmuka apa yang ada di dalamnya:

    ifconfig
    

    Biasanya, untuk mesin dengan kartu Ethernet tunggal dan / atau kartu nirkabel tunggal, Ethernet adalah eth0dan nirkabel wlan0.

    Jika koneksi Ethernet kabel adalah apa yang ingin Anda hilangkan dan mulai kembali, jalankan:

    sudo ifdown eth0
    

    Lalu lari:

    sudo ifup eth0
    

    Atau, Anda dapat menjalankan:

    sudo ifconfig eth0 down
    

    Diikuti oleh:

    sudo ifconfig eth0 up
    

    Jika mesin menggunakan NetworkManager untuk mengelola antarmuka yang menjalankan server OpenSSH, saya masih menyarankan mencoba cara-cara di atas, tetapi Anda juga dapat mencoba melepaskan dan menghubungkan kembali di NetworkManager.

    Untuk koneksi Ethernet, coba juga mencabut kabel dan memasangnya kembali. Untuk koneksi nirkabel, coba matikan dengan sakelar perangkat keras (jika ada), dan nyalakan kembali.

    Sesuatu yang aneh sedang terjadi di sini dan tidak ada yang membutuhkan waktu lama - ada baiknya untuk teliti sebelum melakukan langkah pemecahan masalah yang lebih melelahkan.

  4. Bagaimana Anda mencoba mengaksesnya dari sisi WAN? Jika Anda menggunakan mesin pada LAN untuk melakukan ini (hanya menghubungkan dari LAN ke IP WAN router Anda), ini hanya didukung untuk beberapa router. Lagi pula, tugas router adalah untuk merutekan lalu lintas antara sisi WAN dan LAN, bukan untuk merutekan lalu lintas dari satu sisi ke sisi lain. Dukungan untuk menghubungkan ke port yang diteruskan pada IP WAN dari dalam LAN sebenarnya merupakan pengecualian daripada aturan, meskipun banyak router rumah / kantor memiliki fitur ini.

    Jadi, jika Anda tidak menguji port forward dari host di sisi WAN, Anda harus melakukannya. Pilihan Anda untuk ini adalah:

    • Hubungkan diri Anda dari sisi WAN. Ini berfungsi jika Anda memiliki akses ke mesin di sana, misalnya, akses SSH ke mesin jarak jauh di sekolah, kantor, rumah teman, atau yang serupa.

    • Hubungkan mesin uji antara router dan apa pun menyediakan nya koneksi internet. Jika Anda memiliki modem kabel / DSL / ISDN dengan port Ethernet dan router Anda terhubung ke sana, Anda dapat menghubungkan switch ke modem dan menghubungkan router ke switch. Sambungkan komputer ke sakelar. Pertama-tama lihat apakah mesin itu hanya mendapatkan akses Internet - hari ini, banyak ISP menyediakan dua atau lebih alamat IP yang terpisah. Jika tidak , buka halaman pengaturan router Anda dan periksa WAN IP dan subnet mask WAN-nya , lalu berikan alamat IP secara statis ke mesin yang terhubung dengan switch yang berada dalam subnet yang sama.

      Metode ini memiliki beberapa kelemahan. Ini menyakitkan! Juga, secara teoritis dimungkinkan bagi ISP untuk mengkonfigurasi jaringan mereka secara tidak benar sehingga mesin uji yang terhubung ke sakelar dapat mengakses Internet. (Kecuali jika ISP Anda bermaksud untuk menghubungkan Anda dengan lebih dari satu IP WAN danAnda kebetulan telah memilih IP WAN untuk mesin uji yang ditugaskan ISP Anda kepada Anda, lalu lintas di antara itu dan host WAN yang benar harus diblokir / dijatuhkan oleh ISP. Tetapi beberapa ISP memiliki praktik aneh, jadi siapa yang tahu?) Jika ini terjadi, kemungkinan tidak akan menimbulkan masalah serius bagi siapa pun (dan bahkan jika itu terjadi, Anda hanya perlu menghubungkannya hingga beberapa menit). Namun, ini dapat berpotensi dilihat sebagai upaya untuk mendapatkan akses tambahan di luar batas langganan Anda, dan - yang lebih penting - jika pengguna lain memiliki IP yang sama, itu dapat mengganggu koneksi mereka. Karena itu, jika Anda ingin mencoba metode ini, jangan mencoba mengakses Internet dari mesin uji, segera hentikan jika Anda menemukan mesin uji dapat mengakses Internet, dan jangan coba-coba ini sama sekali jika dilarang atau disarankan oleh ISP Anda. (Dan jangan gunakan ini jika sisi WAN dari router Anda adalah LAN kantor, tanpa berkonsultasi terlebih dahulu dengan administrator jaringan Anda. Itu bukan ISP dan tidak ada asumsi bahwa sumber daya disediakan untuk mencegah akses yang tidak diinginkan.)

      Ada variasi pada teknik ini yang terkadang lebih tepat. Router Anda mungkin mendapatkan informasinya koneksi - alamat IP, subnet mask, alamat IP dari gateway (router) pada WAN yang itu menggunakan ketika tidak tahu di mana untuk mengirim sesuatu, dan informasi tentang server DNS - dari Anda ISP, melalui DHCP, melalui modem kabel / DSL / ISDN. Inilah sebabnya mengapa Anda harus menyambungkan router ke modem untuk memberikan konfigurasi yang diperlukan agar hasil pengujian sisi-WAN bermakna. Tetapi router biasanya akan mengingat informasi ini, asalkan sebenarnya terhubung ke jaringan di sisi WAN. Jadi Anda dapat menghubungkan router, modem, dan mesin uji, tetapi kemudian, dengan cepat, dansebelum melakukan sesuatu dengan mesin uji selain memastikan saklar melihatnya terhubung , lepaskan modem.

    • Gunakan layanan gratis di Internet untuk menguji port Anda. Karena memasukkan mesin uji antara antarmuka WAN router Anda dan Internet (di atas) sangat terlibat - dan karena itu akan menunjukkan port sebagai dapat diakses meskipun itu tidak dapat diakses karena diblokir oleh ISP Anda (yang juga berlaku untuk menghubungkan ke IP WAN router dari sisi LAN) - biasanya lebih baik menggunakan layanan pemindaian port berbasis web.

      Ada banyak layanan pemindaian porta. (Beberapa olahraga menggunakan frase "periksa firewall Anda" dengan gagasan bahwa kebanyakan orang mencoba memblokir daripada memfasilitasi akses.) Ini adalah satu. Jika Anda memilih untuk menggunakan yang itu, klik Lanjutkan , ketik 57757 ke dalam kotak teks, dan klik Use Probe Port Khusus yang Ditentukan . Untuk keperluan menjalankan server, Anda ingin "terbuka". "Ditutup" berarti porta dapat diakses tetapi server tidak berjalan (dan karenanya upaya koneksi ditolak). "Stealth" berarti port tidak dapat diakses - seolah-olah tidak ada mesin yang ditemukan di sana (atau seolah-olah port diteruskan ketika tidak ada mesin).

  5. OK, jadi Anda telah menentukan bahwa itu sebenarnya tidak dapat diakses dari Internet. Secara potensial Anda dapat memindai (idealnya dari sisi WAN) untuk mendapatkan detail, meskipun seringkali ini tidak memberikan informasi yang bermanfaat.

    Jika Anda ingin melakukan ini, maka di sisi WAN, Anda dapat menjalankan:

    sudo nmap -sS -sV -p57757 -vv WAN-IP

    Jika port ditampilkan sebagai difilter, itu mengkonfirmasikan bahwa paket yang dikirim ke sana mungkin tidak ke mana-mana (atau diblokir / dijatuhkan di sepanjang jalan).

  6. Ada baiknya memeriksa untuk melihat apakah masalah yang timbul dari port terkena WAN menjadi berbeda dari port server yang sebenarnya mendengarkan. Meneruskan port 55757 pada WAN ke port 22 pada mesin LAN harus membuat semuanya berjalan dengan baik, tapi mungkin di suatu tempat (server, klien) ada yang berasumsi nomor port sama dari perspektif server dan klien.

    Agaknya Anda tidak dapat meneruskan port 22 melalui router. Mungkin ISP Anda memblokir port itu. Tetapi jika Anda bisa melakukannya, lakukan itu!

    Jika tidak, Anda dapat membuat server OpenSSH benar-benar mendengarkan pada port 57757.

    Untuk melakukan ini, buat cadangan file konfigurasi server:

    cd /etc/ssh
    sudo cp sshd_config sshd_config.old
    

    Kemudian edit:

    gksu gedit sshd_config
    

    Atau gunakan editor teks konsol jika mesin tidak memiliki GUI:

    sudo nano -w sshd_config
    

    Di dekat bagian atas file, blok teks ini muncul:

    # What ports, IPs and protocols we listen for
    Port 22
    # Use these options to restrict which interfaces/protocols sshd will bind to
    #ListenAddress ::
    #ListenAddress 0.0.0.0
    Protocol 2
    # HostKeys for protocol version 2
    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_dsa_key
    HostKey /etc/ssh/ssh_host_ecdsa_key
    #Privilege Separation is turned on for security
    UsePrivilegeSeparation yes
    

    Ubah saja Port 22baris di atas, untuk mengatakan Port 57757sebaliknya.

    • Anda bisa menambahkan port daripada mengubahnya. Saya merekomendasikan pengujian dengan konfigurasi efektif yang paling sederhana.

      Lihat man sshd_configuntuk detail lebih lanjut tentang mengkonfigurasi server OpenSSH.

    Simpan file, keluar dari editor teks, dan mulai ulang server SSH dengan:

    sudo restart ssh
    

    Sekarang ubah port forward pada router jadi port 57757 ke depan ke port 57757 (bukan 22) pada server OpenSSH, dan lihat apakah itu dapat diakses dari Internet.

  7. Jika masih tidak berfungsi, lihat apakah mungkin firewall Ubuntu sebenarnya memblokir lalu lintas yang berasal dari luar LAN.

    (Ini tidak mungkin jika Anda sendiri tidak mengonfigurasinya dengan cara ini, tetapi jika semua pengaturan Anda benar dan tidak ada langkah-langkah di atas yang mengungkapkan sesuatu tentang masalah tersebut, ada baiknya Anda memeriksa.)

    Lari:

    sudo iptables -L
    

    Secara default, di Ubuntu, hasilnya terlihat seperti:

    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    

    Ini adalah kebijakan permisif sederhana, yang pada dasarnya setara dengan tidak menjalankan firewall. (Memang, jika modul firewall netfilter tidak dikompilasi ke dalam kernel Anda, sistem Anda akan berperilaku dengan cara yang sama seperti pengaturan di atas, meskipun iptablesperintah, yang menanyakan netfilterpengaturan, tidak akan bekerja tentu saja.)

    Jika konfigurasi Anda tidak terlihat seperti itu, baca man iptablesuntuk mengetahui apa yang mereka lakukan, dan / atau edit pertanyaan Anda (atau, jika Anda orang yang berbeda dengan masalah yang sama membaca ini, posting pertanyaan baru) untuk menyertakan mereka. Harap perhatikan bahwa, berpotensi, iptablesaturan Anda dapat mengungkapkan informasi sensitif tentang konfigurasi Anda. Secara praktis, ini biasanya tidak terjadi - dengan kemungkinan pengecualian aturan tentang host tertentu yang diblokir, atau jika konfigurasi Anda sangat buruk / tidak aman - biasanya kegunaan informasi ini untuk penyerang, terutama untuk mesin di LAN rumah / kantor di belakang router NAT , minimal.

Eliah Kagan
sumber
1

Karena berfungsi dari dalam LAN Anda, pengaturan server Anda tampaknya benar. Anda harus memberi tahu router untuk meneruskan dari port yang ingin Anda gunakan di luar ke port 57757 pada mesin Anda .
A tidak tracerouteakan berguna dalam kasus ini.

Guntbert
sumber
Oke, saya pikir sisi mesin baik-baik saja. Ya, saya mengatur router saya untuk meneruskan 57757 ke 22 ... tapi saya punya masalah yang sama. sshd_config diatur di port 22 juga.
Ci3
Itu mungkin seharusnya: ' port yang ingin Anda gunakan di luar (mis. 57757 ) ke port 22 di mesin Anda .' Ini alamat port publik yang Anda butuhkan untuk mengaburkan.
david6
Tidak benar dalam kasus ini - jika saya mengerti pertanyaan Chris
guntbert