it-swarm-id.com

Bagaimana cara mengeraskan server SSH?

Tindakan apa yang dapat/harus saya ambil untuk memastikan bahwa keamanan di sekitar server SSH saya benar-benar tidak dapat ditembus?

Ini akan menjadi komunitas wiki sejak awal, jadi mari kita lihat apa yang dilakukan orang untuk mengamankan server mereka.

128
LassePoulsen

Buat sshd block IP klien yang gagal memberikan informasi login yang benar " DenyHØsts " dapat melakukan pekerjaan ini dengan cukup efektif. Saya telah menginstal ini di semua kotak Linux saya yang dalam beberapa cara dapat dijangkau dari luar.

Ini akan memastikan bahwa serangan paksa pada SSHD tidak akan efektif, tetapi ingat (!) Dengan cara ini Anda bisa mengunci diri sendiri jika Anda lupa kata sandi. Ini bisa menjadi masalah pada server jauh yang Anda tidak memiliki akses.

21
LassePoulsen

Gunakan pasangan kunci publik/pribadi untuk otentikasi alih-alih kata sandi.

  1. Buat kunci SSH yang dilindungi frasa sandi untuk setiap komputer yang perlu mengakses server:

    ssh-keygen

  2. Izin akses kunci publik SSH dari komputer yang diizinkan:

    Salin konten ~/.ssh/id_rsa.pub dari setiap komputer ke setiap baris ~/.ssh/authorized_keys di server, atau jalankan ssh-copy-id [server IP address] pada setiap komputer yang Anda beri akses (Anda harus memasukkan kata sandi server di Prompt).

  3. Nonaktifkan akses SSH kata sandi:

    Buka /etc/ssh/sshd_config, cari baris yang mengatakan #PasswordAuthentication yes, dan ubah ke PasswordAuthentication no. Mulai ulang daemon server SSH untuk menerapkan perubahan (Sudo service ssh restart).

Sekarang, satu-satunya cara yang mungkin untuk SSH ke server adalah dengan menggunakan kunci yang cocok dengan baris di ~/.ssh/authorized_keys. Menggunakan metode ini, I tidak peduli dengan serangan brute force karena meskipun mereka menebak kata sandi saya, itu akan ditolak. Memaksa pasangan kunci publik/swasta tidak mungkin dengan teknologi saat ini.

108
Asa Ayers

Saya akan menyarankan:

  • Menggunakan fail2ban untuk mencegah upaya masuk brute force.

  • Menonaktifkan masuk sebagai root melalui SSH. Ini berarti penyerang harus mengetahui nama pengguna dan kata sandi yang membuat serangan lebih sulit.

    Tambahkan PermitRootLogin no ke /etc/ssh/sshd_config Anda.

  • Membatasi pengguna yang dapat SSH ke server. Baik dengan grup atau hanya pengguna tertentu.

    Tambahkan AllowGroups group1 group2 atau AllowUsers user1 user2 untuk membatasi siapa yang dapat SSH ke server.

72
Mark Davidson

Jawaban lain memberikan keamanan, tetapi ada satu hal yang dapat Anda lakukan yang akan membuat log Anda lebih tenang, dan memperkecil kemungkinan Anda akan dikunci dari akun Anda:

Pindahkan server dari port 22 ke yang lain. Baik di gateway Anda, atau di server.

Itu tidak meningkatkan keamanan, tetapi artinya semua pemindai internet acak tidak akan mengacaukan file log Anda.

24
Douglas Leeder

Aktifkan otentikasi dua faktor dengan HOTP atau TOTP . Ini tersedia mulai pukul 13.10 dan seterusnya.

Ini termasuk menggunakan otentikasi kunci publik melalui otentikasi kata sandi seperti pada jawaban lain di sini, tetapi juga mengharuskan pengguna membuktikan bahwa dia memegang perangkat faktor-kedua selain kunci pribadinya.

Ringkasan:

  1. Sudo apt-get install libpam-google-authenticator

  2. Mintalah setiap pengguna menjalankan perintah google-authenticator, yang menghasilkan ~/.google-authenticator dan membantu mereka mengonfigurasi dua perangkat faktor mereka (mis. Google Authenticator Android app).

  3. Edit /etc/ssh/sshd_config dan atur:

    ChallengeResponseAuthentication yes
    PasswordAuthentication no
    AuthenticationMethods publickey,keyboard-interactive
    
  4. Jalankan Sudo service ssh reload untuk mengambil perubahan Anda ke /etc/ssh/sshd_config.

  5. Edit /etc/pam.d/sshd dan ganti baris:

    @include common-auth
    

    dengan:

    auth required pam_google_authenticator.so
    

Rincian lebih lanjut tentang opsi konfigurasi yang berbeda adalah posting blog saya dari tahun lalu: Lebih baik otentikasi dua faktor ssh di Ubunt .

23
Robie Basak

Inilah satu hal mudah untuk dilakukan: instal fw ("firewall tidak rumit") dan gunakan untuk menilai batas koneksi yang masuk.

Dari Prompt perintah, ketik:

$ Sudo ufw limit OpenSSH 

Jika fw tidak diinstal, lakukan ini dan coba lagi:

$ Sudo aptitude install ufw 

Banyak penyerang akan mencoba menggunakan server SSH Anda untuk memaksa kata sandi dengan kasar. Ini hanya akan memungkinkan 6 koneksi setiap 30 detik dari alamat IP yang sama.

20
mpontillo

Jika saya ingin memiliki keamanan tambahan atau perlu mengakses server SSH jauh di dalam beberapa jaringan perusahaan saya menyiapkan layanan tersembunyi dengan menggunakan perangkat lunak anonimisasi Tor .

  1. Instal Tor dan atur server SSH itu sendiri.
  2. Pastikan sshd hanya mendengarkan di localhost.
  3. Buka /etc/tor/torrc. Set HiddenServiceDir /var/lib/tor/ssh dan HiddenServicePort 22 127.0.0.1:22.
  4. Lihatlah var/lib/tor/ssh/hostname. Ada nama seperti d6frsudqtx123vxf.onion. Ini adalah alamat dari layanan tersembunyi.
  5. Buka $HOME/.ssh/config dan tambahkan beberapa baris:

    Host myhost
    HostName d6frsudqtx123vxf.onion
    ProxyCommand socat STDIO SOCKS4A:127.0.0.1:%h:%p,socksport=9050
    

Selanjutnya saya perlu Tor pada Host lokal saya. Jika sudah diinstal saya bisa memasukkan ssh myhost dan SSH membuka koneksi melalui Tor. Server SSH di sisi lain hanya membuka portalnya di localhost. Jadi tidak ada yang bisa menghubungkannya melalui "internet normal".

12
qbi

Ada artikel Administrasi Debian tentang topik ini. Ini mencakup konfigurasi server SSH dasar dan juga aturan firewall. Ini bisa menarik juga untuk mengeraskan server SSH.

Lihat artikel di sana: Menjaga keamanan akses SSH .

8
Huygens

Pendekatan saya terhadap pengerasan SSH adalah ... kompleks. Item-item berikut ini berkenaan dengan cara saya melakukannya, dari batas Edge paling jauh dari jaringan saya ke server itu sendiri.

  1. Penyaringan tingkat lalu lintas lalu lintas melalui IDS/IPS dengan pemindai dan tanda tangan layanan yang dikenal dalam daftar blokir. Saya mencapainya dengan Snort melalui firewall perbatasan saya (ini adalah pendekatan saya, alat pfSense). Kadang-kadang, saya tidak bisa melakukan ini, seperti dengan VPS saya.

  2. Pemfilteran firewall/jaringan pada port SSH. Saya secara eksplisit hanya mengizinkan sistem tertentu untuk menjangkau server SSH saya. Ini dapat dilakukan melalui firewall pfSense di perbatasan jaringan saya, atau firewall di setiap server secara eksplisit sedang dikonfigurasi. Ada kasus di mana saya tidak bisa melakukan ini, (yang hampir tidak pernah terjadi, kecuali di lingkungan pengujian pribadi atau laboratorium pengujian keamanan di mana firewall tidak akan membantu menguji hal-hal).

  3. Dalam hubungannya dengan pfSense saya, atau firewall perbatasan NAT-ing jaringan internal dan memisahkan dari Internet dan sistem, VPN-Only Akses ke Server . Harus VPN ke jaringan saya untuk sampai ke server, karena tidak ada port yang menghadap Internet seperti itu. Ini jelas tidak bekerja untuk semua VPS saya, tetapi dalam hubungannya dengan # 2, saya dapat memiliki satu VPS menjadi 'gateway' dengan VPN ke server itu, dan kemudian mengizinkan IP itu ke kotak lain. Dengan begitu, saya tahu persis apa yang bisa atau tidak bisa SSH dalam - satu kotak saya yaitu VPN. (Atau, di jaringan rumah saya di belakang pfSense, koneksi VPN saya, dan saya satu-satunya yang memiliki akses VPN).

  4. Di mana # 3 tidak bisa dilakukan, fail2ban, dikonfigurasi untuk memblokir setelah 4 upaya gagal dan memblokir IP selama satu jam atau lebih adalah perlindungan yang layak terhadap orang-orang yang terus-menerus menyerang dengan bruteforcing - cukup blokir mereka di firewall secara otomatis dengan fail2ban, dan meh. Mengkonfigurasi fail2ban adalah rasa sakit ...

  5. Kebingungan pelabuhan dengan mengubah port SSH. Namun, ini bukan ide yang baik untuk dilakukan tanpa langkah-langkah keamanan tambahan juga - mantra "Keamanan melalui Ketidakjelasan" telah ditolak dan diperdebatkan dalam banyak kasus. Saya telah melakukan ini bersama dengan IDS/IPS dan penyaringan jaringan, tetapi masih merupakan hal yang SANGAT buruk untuk dilakukan sendiri.

  6. MANDATORI Otentikasi Dua Faktor, melalui solusi Dua-Faktor Otentikasi Duo Security . Setiap server SSH saya telah mengkonfigurasikan Duo di atasnya, sehingga bahkan untuk masuk, 2FA diminta terjadi, dan saya harus mengkonfirmasi setiap akses. (Ini adalah fitur paling membantu - karena bahkan jika seseorang memiliki frasa sandi atau pembobolan saya, mereka tidak dapat melewati plugin Duo PAM). Ini adalah salah satu perlindungan terbesar pada server SSH saya dari akses tidak sah - setiap pengguna masuk HARUS mengikat kembali ke pengguna yang dikonfigurasikan di Duo, dan karena saya memiliki perangkat terbatas, tidak ada pengguna baru yang dapat terdaftar dalam sistem.

Dua sen saya untuk mengamankan SSH. Atau, setidaknya, pemikiran saya tentang pendekatan.

6
Thomas Ward

Anda mungkin ingin checkout aplikasi FreeOTP dari RedHat daripada menggunakan Google Authenticator. Terkadang saat memperbarui aplikasi, mereka mengunci Anda! ;-)

Jika Anda ingin menggunakan token perangkat keras lain seperti Yubikey atau eToken PASS atau NG atau jika Anda memiliki banyak pengguna atau banyak server, Anda mungkin ingin menggunakan backend otentikasi dua faktor opensource.

Akhir-akhir ini saya menulis howto about this .

1
cornelinux

Untuk sejumlah besar pengguna/sertifikat, pertimbangkan integrasi LDAP. Organisasi besar menggunakan LDAP sebagai repositori untuk kredensial dan sertifikat pengguna yang disimpan pada badge atau fobs, apakah sertifikat tersebut digunakan untuk otentikasi atau menandatangani email. Contohnya termasuk openLDAP, openDJ, Active Directory, Oracle Universal Directory, IBM Directory Server, snareWorks ...

Komputer dan grup juga dapat dikelola dalam LDAP yang memberikan manajemen kredensial sentral. Dengan cara itu, meja bantuan dapat memiliki toko serba ada untuk menangani populasi besar.

Berikut ini tautan ke integrasi centOS: http://itdavid.blogspot.com/2013/11/howto-configure-openssh-to-fetch-public.html

0
weller1

Anda juga dapat memblokir berdasarkan negara asal menggunakan basis data geoIP.

Pada dasarnya jika Anda tinggal di AS maka tidak ada alasan bagi seseorang di Rusia untuk terhubung ke SSH Anda sehingga mereka akan secara otomatis diblokir.

Skrip dapat ditemukan di sini: https://www.axllent.org/docs/view/ssh-geoip/

Anda juga dapat menambahkan perintah iptables ke dalamnya (saya lakukan untuk tetesan saya) untuk secara otomatis menjatuhkan semua lalu lintas ke/dari IP tersebut.

0
Michael A Mike

Saya menulis tutorial kecil tentang melakukan ini baru-baru ini. Pada dasarnya, Anda harus menggunakan PKI dan tutorial saya juga menunjukkan cara menggunakan Otentikasi Dua Faktor untuk keamanan yang lebih tinggi. Bahkan jika Anda tidak menggunakan hal-hal itu, ada juga beberapa informasi tentang mengamankan server dengan menghapus suite cipher yang lemah dan dasar-dasar lainnya. https://joscor.com/blog/hardening-openssh-server-ubuntu-14-04/

0
01000101