Apa masalah keamanan yang mungkin terjadi dengan daemon SSH?

14

Saya ingin dapat SSH ke PC kantor Ubuntu 10,04 saya dari luar. Karena itu saya berpikir untuk memulai daemon SSH di PC. Apa masalah keamanan, gangguan yang mungkin terjadi, pengaturan konfigurasi khusus, dll. Saya harus tahu?

Dalam hal itu penting: ini pada dasarnya hanya untuk penggunaan saya sendiri, saya tidak berpikir akan ada orang lain yang menggunakannya; ini adalah Ubuntu 10.04 PC di sebagian besar lingkungan Windows 7 / Vista / XP.

ev-br
sumber
1
Anda mungkin ingin mempertimbangkan untuk menginstal OpenVPN juga dan membuat terowongan VPN ke PC Anda untuk koneksi ssh Anda. Dengan cara ini Anda tidak perlu membuka port ssh Anda ke dunia.
Linker3000
@ Linker3000 Terima kasih! Saya akan memikirkannya --- meskipun saya memiliki pengalaman yang tidak menyenangkan dengan VPN beberapa waktu lalu.
ev-br
@Zhenya Jika Anda tidak memberi spasi pada "@" dan nama pengguna, mereka akan menerima pemberitahuan bahwa Anda membalasnya. ;) Jadi, Anda akan menerima komentar saat saya menggunakan @Zhenya, tetapi tidak ketika saya menggunakan @ Zhenya
BloodPhilia
@Zhenya Dan sekarang Anda melakukannya lagi XD
BloodPhilia
@Linker, dapatkah Anda sedikit menjelaskan mengapa OpenVPN lebih aman daripada SSH?
Arjan

Jawaban:

20

Kekhawatiran terbesar adalah orang yang masuk sebagai administrator komputer melalui SSH. Ini dapat dilakukan dengan brute force jika Anda memiliki kata sandi yang mudah ditebak.

Ada beberapa langkah-langkah keamanan yang dapat Anda ambil, di bawah ini adalah beberapa yang selalu saya ambil ketika menyiapkan server SSH dan beberapa tambahan.

  1. Gunakan kata sandi yang kuat, yang terdiri dari setidaknya (katakanlah) 10 huruf besar dan kecil, angka, dan karakter lainnya.

  2. Jail pengguna ke direktori home mereka. Pengguna yang dipenjara tidak akan dapat mengakses / mengedit file yang berada di luar direktori home mereka. Jadi pengguna Anda tidak akan dapat mengakses / mengedit file sistem utama. Banyak tutorial dapat ditemukan online tentang cara memenjarakan pengguna. Sebagian besar dari mereka menggunakan JailKit . Contoh tutorial semacam itu dapat ditemukan di sini . Atau, Anda juga dapat menggunakan ChrootDirectoryarahan asli OpenSSH-server . Contoh tutorial ini dapat ditemukan di sini .

  3. Instal Fail2Ban . Fail2Ban adalah program yang memeriksa log otentikasi untuk entri yang salah. Ketika batas tertentu tercapai, itu menambah blok firewall untuk IP tertentu untuk waktu yang telah ditentukan. Ada juga beberapa tutorial online yang ditemukan online tentang cara mengatur Fail2Ban dengan SSH, contohnya adalah yang ini . Situs web Fail2Ban juga memiliki beberapa HOWTO yang bagus dan lengkap.

  4. Nonaktifkan login root melalui SSH. Ini adalah pengguna yang memiliki akses ke hampir semua file di sistem Anda, oleh karena itu menonaktifkan login shell-nya. Dalam versi terbaru Ubuntu, pengguna root secara otomatis dinonaktifkan tetapi tidak ada salahnya untuk menonaktifkan akses SSH-nya. Ini dilakukan dengan mengedit file /etc/ssh/sshd_config. Cari baris berikut dan pastikan tidak ada # di depannya.

    #PermitRootLogin no
    
  5. Gunakan port non-standar (Mis. Bukan 22) Ini dapat dilakukan melalui penerusan port di router Anda (Mis 16121 -> 22 bukannya 22 -> 22) atau dengan membuat daemon SSH mendengarkan pada port yang berbeda. Ini akan membuat layanan SSH Anda lebih mudah dideteksi oleh pengguna jahat. Ini dilakukan dengan mengedit file /etc/ssh/sshd_config. Cari baris berikut dan ubah 22 ke port apa pun yang Anda inginkan. Jangan lupa untuk meneruskan port yang benar di router Anda sesudahnya.

    Port 22
    
  6. Jangan menggunakan kata sandi untuk masuk. Selain kata sandi, SSH juga memungkinkan masuk dengan menggunakan kunci pribadi. Ini berarti kunci disimpan di komputer Anda di mana Anda mengakses SSH dari mesin SSH. Ketika koneksi dicoba, klien SSH menggunakan kunci untuk masuk ke server alih-alih melalui otentikasi kata sandi. Kunci autentikasi jauh lebih kuat secara kriptografis daripada kata sandi dan karenanya tidak mudah diretas. Ada juga beberapa tutorial online yang ditemukan online tentang cara mengatur otentikasi berbasis kunci dengan SSH, contohnya adalah yang ini . (Jika Anda SSH dari windows dengan Putty, periksa tautan ini untuk Putty howto.) Setelah Anda mengatur otentikasi berbasis kunci, Anda dapat menonaktifkan otentikasi kata sandi dengan mengedit file /etc/ssh/sshd_config. Cari baris berikut dan pastikan tidak ada # di depannya.

    #PasswordAuthentication no
    
  7. Secara opsional, seperti yang disebutkan oleh @ Linker3000 dalam komentarnya, Anda dapat mengatur terowongan VPN ke PC yang ingin Anda akses melalui SSH dan kemudian melarang akses jaringan non-lokal pada server SSH. Dengan begitu, tidak ada perangkat eksternal tanpa koneksi VPN yang dapat mengakses server SSH Anda. Ini dapat dilakukan dengan menolak SEMUA host dan kemudian hanya mengizinkan IP jaringan lokal untuk login. Ini dilakukan dengan mengedit /etc/hosts.denydan menambahkan yang berikut:

    sshd: ALL
    

    dan untuk /etc/hosts.allowmenambahkan yang berikut ini:

    sshd: 192.168.1.*
    

    di mana IP cocok dengan salah satu jaringan lokal Anda. *adalah wildcard, sehingga semua alamat IP yang dimulai dengan 192.168.1.akan diterima. Jika ini tidak berhasil, distribusi Anda mungkin digunakan sshsebagai gantinya sshd. Dalam hal ini, Anda harus mencoba ssh: 192.168.1.*dan ssh: ALLsebagai gantinya.

  8. Anda hanya bisa mengizinkan host tertentu, melakukan hal yang sama dengan /etc/hosts.allowdan /etc/hosts.denyseperti yang dijelaskan dalam 6, tetapi /etc/hosts.allowmenambahkan baris berikut dan setiap host untuk memungkinkan dipisahkan oleh spasi:

    sshd: {IP OF HOST TO ALLOW 1} {IP OF HOST TO ALLOW 2} {IP OF HOST TO ALLOW 3} {ETC.}
    
  9. Izinkan hanya pengguna tertentu untuk mengakses server SSH Anda. Ini dilakukan dengan mengedit file /etc/ssh/sshd_config. Cari baris berikut dan pastikan tidak ada # di depannya. Jika tidak ada, buat itu. Misalnya, jika Anda hanya ingin mengizinkan john, tom dan mary, tambahkan / edit baris ini:

    AllowUsers john tom mary
    

    Anda juga dapat menolak pengguna tertentu misalnya, jika Anda ingin menolak akses ke john, tom dan mary, tambahkan / edit baris ini:

    DenyUsers john tom mary
    
  10. Hanya izinkan protokol SSH2 untuk koneksi masuk. Ada dua versi protokol SSH. SSH1 tunduk masalah keamanan sehingga menggunakan SSH 2 dianjurkan. Hal ini dapat dipaksa dengan mengedit file /etc/ssh/sshd_config. Cari baris berikut dan pastikan tidak ada # di depannya. Jika tidak ada, buat itu.

    Protocol 2,1
    

    hapus, 1 sehingga garisnya akan

    Protocol 2
    
  11. Jangan memungkinkan pengguna untuk login yang tidak memiliki password ditetapkan. Hal ini dapat dipaksa dengan mengedit file /etc/ssh/sshd_config. Cari baris berikut dan pastikan tidak ada # di depannya. Jika tidak ada, buat itu.

    PermitEmptyPasswords no
    
  12. Dan meskipun sederhana dan mungkin tidak perlu dikatakan tetapi terbukti penting dalam banyak kasus, tetap perbarui peranti lunak Anda. Perbarui paket / perangkat lunak yang diinstal secara rutin.


= setelah mengedit file konfigurasi SSH, jangan lupa untuk me-restart daemon untuk menerapkan perubahan. Mulai ulang daemon dengan menjalankan:

sudo /etc/init.d/ssh restart

atau

sudo /etc/init.d/sshd restart

tergantung pada distribusi Linux yang Anda gunakan.

BloodPhilia
sumber
2
sudo service ssh restartdi Ubuntu.
ulidtko
@ulidtko Pertanyaan ini digabung dengan pertanyaan yang lebih umum sehingga saya membuat jawaban saya lebih umum dan cocok untuk distribusi yang berbeda. Ini akan bekerja pada hampir semua distro, tapi kau benar.
BloodPhilia
@BloodPhilia Terima kasih banyak atas jawaban yang terperinci dan mudah diakses! Beberapa pertanyaan lebih lanjut tentang poin Anda: 1. Apa keuntungan memenjarakan pengguna hanya dengan membatasi izin? Katakanlah, masuk sebagai 'pengguna' Saya hanya memiliki akses baca untuk hal-hal di luar / rumah saya, tetapi tidak ada akses tulis atau eksekusi [sesuai standar Ubuntu, saya kira]. Apakah ini lebih baik / lebih buruk daripada memenjarakan? 2. Di mana log otentikasi biasanya berada? Saya ingin bisa memeriksanya secara manual / via grep sesekali.
ev-br
@BloodPhilia 4. Jika saya membuat sshd yang mendengarkan port non-standar pada server, misalnya 1234, maka apa cara menghubungkan ke server ini dari baris perintah linux pada klien? Maksud saya, apakah perintah ssh standar memerlukan semacam saklar?
ev-br
1
@ulidtko: Dengan Pemula sudo restart ssh,.
Hello71
7

Beberapa tips:

  1. Gunakan otentikasi berbasis Kunci, yang WAY lebih aman daripada kata sandi
  2. Hanya SSH 2
  3. Nonaktifkan login Root
  4. Untuk paranoid, ubah port dari port standar 22
  5. Untuk kenyamanan, gunakan alat untuk memetakan IP Anda ke nama DNS, seperti Dyndns atau sejenisnya. Anda dapat pergi lama dengan IP yang sama, tapi itu satu waktu perjalanan Anda dan membutuhkannya, Anda akan menemukan Anda mendapat mengeluarkan yang baru.
  6. Tentu saja, hanya memungkinkan port yang dibutuhkan untuk SSH (port 22, atau non-standar jika Anda memilih) melalui firewall Anda.
Brian
sumber
1
Re 5: Jika Anda memiliki akun email di mesin di luar rumah Anda, Anda dapat mengatur pekerjaan cron untuk secara berkala mengirim pesan dari mesin rumah Anda ke alamat itu. IP rumah Anda akan berada di header. Tidak nyaman seperti DNS, tetapi dapat digunakan.
garyjohn
Anda juga dapat menghubungi ISP Anda dan meminta harga untuk alamat IP statis. Sejauh ini ini adalah solusi yang paling sederhana, tetapi biasanya lebih mahal daripada DNS dinamis
Steen Schütt
2

Risiko utama adalah lupa bahwa Anda menjalankan server ssh dan meletakkan kata sandi yang lemah di akun. Ada penyerang di luar sana yang secara sistematis mencoba nama akun umum (seperti webmasterdan bob) dan kata sandi yang lemah. Anda dapat menghilangkan risiko ini dengan melarang login password (dimasukkan PasswordAuthentication nodalam sshd_config, dan baik juga menempatkan UsePAM Noatau otentikasi password menonaktifkan dalam pengaturan PAM untuk ssh). Ukuran perantara adalah untuk membatasi login ssh ke daftar putih pengguna dengan AllowUsersatau AllowGroupsdalam sshd_config.

Perhatikan bahwa mengizinkan kata sandi masuk bukan merupakan masalah keamanan. password yang lemah dan password menyadap adalah masalah, dan memungkinkan otentikasi password di server ssh adalah enabler. Untuk melindungi terhadap sandi mengintip, tidak pernah ketik sandi Anda pada mesin Anda tidak sepenuhnya percaya (tapi kemudian jika Anda melakukan mempercayai mesin Anda mungkin juga menginstal sebuah kunci pribadi di atasnya, dan kemudian Anda tidak perlu otentikasi password).

Persyaratan minimum untuk menggunakan klien ssh pada mesin adalah bahwa Anda percaya bahwa tidak akan ada pembajakan aktif dari komunikasi ssh (serangan man-in-the-middle dimungkinkan jika itu dijalankan pada mesin klien - Anda pikir Anda mengetik perintah ke klien ssh asli tetapi klien sebenarnya mengirimkan data otentikasi Anda dengan setia tetapi juga memasukkan kuda trojan ke dalam komunikasi setelah itu). Ini adalah persyaratan yang lebih lemah daripada percaya tidak akan ada pengintai kata sandi (biasanya dilakukan melalui keylogger, tetapi ada metode lain yang kurang otomatis seperti selancar bahu). Jika Anda memang memiliki kepercayaan minimum tetapi masih takut pengintai, Anda dapat menggunakan kata sandi satu kali (OpenSSH mendukung mereka melalui dukungan PAM-nya).

Tentu saja, seperti program lain yang berinteraksi dengan mesin di luar kendali Anda (bukan hanya server jaringan tetapi juga klien), Anda harus mengikuti pembaruan keamanan.

Gilles 'SO- berhenti menjadi jahat'
sumber
2

Tiga hal muncul di benak saya:

  1. Jika Anda membuka port 22 standar maka segera akan terdeteksi dan PC Anda akan dipalu oleh serangan brute force. Saya sarankan Anda mengkonfigurasi sshd untuk mendengarkan port lain atau melakukan pemetaan port pada firewall Anda. Meskipun ini bukan peluru ajaib itu pasti akan menghemat siklus CPU yang sama setidaknya.

    Port 12345

  2. Nonaktifkan otentikasi kata sandi dan gunakan kunci saja secara eksplisit. Kunci apa pun akan lebih baik daripada kata sandi paling rumit yang dapat Anda ingat.

    PasswordAuthentication no

  3. Meskipun Ubuntu memiliki pengguna root dinonaktifkan secara default, secara eksplisit menonaktifkan login root

    PermitRootLogin ada

shpokas
sumber