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.
Jawaban:
Gunakan pasangan kunci publik / pribadi untuk otentikasi alih-alih kata sandi.
Buat kunci SSH yang dilindungi frasa sandi untuk setiap komputer yang perlu mengakses server:
ssh-keygen
Izin akses kunci publik SSH dari komputer yang diizinkan:
Salin konten
~/.ssh/id_rsa.pub
dari setiap komputer ke setiap jalur~/.ssh/authorized_keys
di server, atau jalankanssh-copy-id [server IP address]
di setiap komputer yang Anda beri akses (Anda harus memasukkan kata sandi server saat diminta).Nonaktifkan akses SSH kata sandi:
Buka
/etc/ssh/sshd_config
, cari baris yang mengatakan#PasswordAuthentication yes
, dan ubah kePasswordAuthentication 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 garis masuk
~/.ssh/authorized_keys
. Dengan menggunakan metode ini, saya tidak peduli dengan serangan brute force karena meskipun mereka menebak kata sandi saya, itu akan ditolak. Memaksa pasangan kunci publik / pribadi dengan kasar tidak mungkin dilakukan dengan teknologi saat ini.sumber
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
.Membatasi pengguna yang dapat SSH ke server. Baik dengan grup atau hanya pengguna tertentu.
Tambahkan
AllowGroups group1 group2
atauAllowUsers user1 user2
untuk membatasi siapa yang dapat SSH ke server.sumber
sshd
konfigurasi Anda sudah benar sebelum Anda memulai kembali sshd, untuk menghindari mengunci diri Anda dari mesin. Lihat blog ini untuk detailnya - jalankan sajasshd -T
setelah perubahan konfigurasi sebelum memulai kembali yang utamasshd
. Juga, minta sesi SSH terbuka pada mesin ketika Anda membuat perubahan konfigurasi, dan jangan tutup ini sampai Anda memvalidasi konfigurasi seperti yang disebutkan dan mungkin telah melakukan tes masuk SSH.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.
sumber
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 dalam jawaban lain di sini, tetapi juga mengharuskan pengguna membuktikan bahwa dia memegang perangkat faktor-kedua selain kunci pribadinya.
Ringkasan:
sudo apt-get install libpam-google-authenticator
Mintalah setiap pengguna menjalankan
google-authenticator
perintah, yang menghasilkan~/.google-authenticator
dan membantu mereka mengonfigurasi dua perangkat faktor mereka (mis. Aplikasi Google Authenticator Android).Edit
/etc/ssh/sshd_config
dan atur:Jalankan
sudo service ssh reload
untuk mengambil perubahan Anda/etc/ssh/sshd_config
.Edit
/etc/pam.d/sshd
dan ganti baris:dengan:
Rincian lebih lanjut tentang berbagai opsi konfigurasi adalah posting blog saya dari tahun lalu: Lebih baik otentikasi dua faktor ssh di Ubuntu .
sumber
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 pada semua kotak Linux saya yang dalam beberapa cara dapat dijangkau dari luar yang hebat.
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.
sumber
Inilah satu hal mudah untuk dilakukan: instal ufw ("firewall tidak rumit") dan gunakan untuk menilai batas koneksi yang masuk.
Dari prompt perintah, ketik:
Jika ufw tidak diinstal, lakukan ini dan coba lagi:
Banyak penyerang akan mencoba menggunakan server SSH Anda untuk memaksa kata sandi. Ini hanya akan memungkinkan 6 koneksi setiap 30 detik dari alamat IP yang sama.
sumber
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 .
localhost
./etc/tor/torrc
. AturHiddenServiceDir /var/lib/tor/ssh
danHiddenServicePort 22 127.0.0.1:22
.var/lib/tor/ssh/hostname
. Ada nama sepertid6frsudqtx123vxf.onion
. Ini adalah alamat dari layanan tersembunyi.Buka
$HOME/.ssh/config
dan tambahkan beberapa baris:Terlebih lagi saya membutuhkan Tor di host lokal saya. Jika sudah diinstal saya bisa masuk
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".sumber
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 .
sumber
Pendekatan saya terhadap pengerasan SSH adalah ... kompleks. Item-item berikut ini berkenaan dengan cara saya melakukannya, dari batas tepi jaringan saya ke server itu sendiri.
Penyaringan lalu lintas tingkat perbatasan melalui IDS / IPS dengan pemindai dan tanda tangan layanan yang dikenal di daftar blokir. Saya mencapai ini dengan Snort melalui firewall perbatasan saya (ini adalah pendekatan saya, alat pfSense). Kadang-kadang, saya tidak bisa melakukan ini, seperti dengan VPS saya.
Firewall / Penyaringan jaringan port SSH (s). Saya secara eksplisit hanya mengizinkan sistem tertentu untuk menjangkau ke server SSH saya. Ini dilakukan melalui firewall pfSense di perbatasan jaringan saya, atau firewall di setiap server yang secara eksplisit dikonfigurasikan. 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).
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).
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 ...
Kebingungan port 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 sangat SANGAT buruk untuk dilakukan sendiri.
WAJIB Otentikasi Dua Faktor, melalui solusi Otentikasi Dua Faktor Duo Security . Setiap server SSH saya memiliki Duo yang dikonfigurasikan, sehingga untuk dapat masuk, 2FA diminta terjadi, dan saya harus mengonfirmasi setiap akses. (Ini adalah fitur paling membantu - karena bahkan jika seseorang memiliki frasa sandi saya atau menerobos masuk, 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.
sumber
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 tentang ini .
sumber
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/
sumber
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 begitu 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
sumber
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.
sumber