SSH cukup aman, terutama jika Anda melakukan tindakan pencegahan yang wajar seperti meminta otentikasi berbasis pasangan kunci. Namun, masih banyak bot di alam liar yang mencoba menemukan host yang rentan dengan mencoba masuk menggunakan nama pengguna dan kata sandi umum yang disusupi seperti root / root atau admin / admin. Meskipun tidak mungkin berhasil, mereka masih akan menggunakan bandwidth Anda dan menghasilkan log dalam jumlah besar.
Salah satu cara untuk meminimalkan upaya login brute force adalah dengan mengubah port default yang didengarkan SSH. Namun, ini tidak dianggap sebagai praktik yang baik - pertama, ingatlah bahwa setiap kali mereka terhubung ke server, mereka harus mengatur port yang benar, selain default. Selain itu, ini dapat membuat kerentanan keamanan lain jika port yang dipilih lebih besar dari 1024. Biasanya, hanya root yang dapat mengikat ke nomor port di bawah 1024. Namun, jika nomor port yang lebih tinggi digunakan untuk SSH, dalam keadaan tertentu pengguna tanpa akses root dapat mengganti daemon SSH dengan layanan lain yang mungkin berbahaya.
Cara terbaik untuk mengatasi masalah ini adalah dengan menggunakan alat yang akan memblokir penyerang mengakses server SSH. Salah satu alat yang banyak digunakan adalah fail2ban ( www.fail2ban.org ). Dengan menganalisis log, fail2ban mendeteksi upaya otentikasi berulang yang gagal dan secara otomatis menetapkan aturan firewall untuk membuang lalu lintas yang berasal dari alamat IP penyerang.
Instal fail2ban di Ubuntu
Instalasi Manual
Menginstal fail2ban di Ubuntu (dan distribusi berbasis Debian lainnya) sangat sederhana:
$ sudo apt install fail2ban
Memeriksa cara kerjanya
Anda dapat memeriksa apakah layanan berjalan dengan perintah berikut:
$ sudo systemctl status fail2ban
Outputnya akan terlihat seperti berikut - status layanan harus aktif:
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-05-18 12:36:36 ***; ** min ago
Docs: man:fail2ban(1)
Process: 723*** ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
Main PID: 723*** (f2b/server)
Tasks: 5 (limit: 38293)
Memory: 18.0M
CGroup: /system.slice/fail2ban.service
└─723488 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
Mari kita lihat bagaimana fail2ban mengubah aturan iptables:
$ sudo iptables -L -n -v
Anda juga harus melihat bahwa ada rantai f2b-sshd baru di konfigurasi iptables yang direferensikan oleh aturan rantai INPUT:
Chain INPUT (policy ACCEPT 73411 packets, 6622K bytes)
pkts bytes target prot opt in out source destination
1019 65297 f2b-sshd tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22
Chain f2b-sshd (1 references)
pkts bytes target prot opt in out source destination
8 480 REJECT all -- * * 94.191.93.46 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT all -- * * 77.50.75.162 0.0.0.0/0 reject-with icmp-port-unreachable
10 600 REJECT all -- * * 51.254.143.190 0.0.0.0/0 reject-with icmp-port-unreachable
10 600 REJECT all -- * * 46.101.97.5 0.0.0.0/0 reject-with icmp-port-unreachable
9 540 REJECT all -- * * 43.129.28.88 0.0.0.0/0 reject-with icmp-port-unreachable
9 540 REJECT all -- * * 41.221.168.167 0.0.0.0/0 reject-with icmp-port-unreachable
9 540 REJECT all -- * * 35.247.219.12 0.0.0.0/0 reject-with icmp-port-unreachable
12 720 REJECT all -- * * 220.180.119.192 0.0.0.0/0 reject-with icmp-port-unreachable
10 600 REJECT all -- * * 218.75.121.75 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT all -- * * 213.87.101.176 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT all -- * * 192.139.15.34 0.0.0.0/0 reject-with icmp-port-unreachable
21 1260 REJECT all -- * * 187.104.145.210 0.0.0.0/0 reject-with icmp-port-unreachable
8 480 REJECT all -- * * 177.191.189.13 0.0.0.0/0 reject-with icmp-port-unreachable
10 600 REJECT all -- * * 159.89.82.134 0.0.0.0/0 reject-with icmp-port-unreachable
10 600 REJECT all -- * * 159.75.140.97 0.0.0.0/0 reject-with icmp-port-unreachable
8 480 REJECT all -- * * 157.92.13.105 0.0.0.0/0 reject-with icmp-port-unreachable
11 660 REJECT all -- * * 117.80.225.245 0.0.0.0/0 reject-with icmp-port-unreachable
9 540 REJECT all -- * * 106.53.121.179 0.0.0.0/0 reject-with icmp-port-unreachable
865 56057 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Paket fail2ban berisi alat yang disebut klien-fail2ban. Ini memungkinkan Anda untuk memeriksa status layanan dan berinteraksi dengannya (misalnya, Anda dapat memblokir dan membuka blokir alamat IP secara manual, mengaktifkan dan menonaktifkan penjara, dll.)
Mari kita lihat penjara mana yang aktif:
$ sudo fail2ban-client status
Status |- Number of jail: 1 `- Jail list: sshd
Hanya ada satu jail - sshd - yang sq bertanggung jawab untuk memantau log server SSH untuk login yang gagal dan mengkonfigurasi aturan firewall untuk memblokir upaya lebih lanjut.
Sekarang kita dapat memeriksa statistik untuk sshd jail:
$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 8
| |- Total failed: 26
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 22
|- Total banned: 25
`- Banned IP list: 106.53.121.179 117.80.225.245 157.92.13.105 159.75.140.97 159.89.82.134 177.191.189.13 187.104.145.210 213.87.101.176 218.75.121.75 220.180.119.192 35.247.219.12 41.221.168.167 43.129.28.88 46.101.97.5 51.254.143.190 77.50.75.162 94.191.93.46 1.55.165.141 120.53.245.68 104.131.178.145 106.56.102.83 152.32.146.21
Mengonfigurasi fail2ban
Dalam kebanyakan kasus, konfigurasi default sudah cukup. Namun, akan sangat membantu untuk memahami apa default ini dan bagaimana mereka dapat diubah agar sesuai dengan kebutuhan Anda.
Dalam konfigurasi standar, fail2ban akan melindungi server SSH dan memblokir penyerang selama 10 menit setelah 5 upaya login yang gagal dalam 10 menit. File konfigurasi default dapat ditemukan di /etc/fail2ban/jail.conf. File tersebut didokumentasikan dengan baik dan sebagian besar cukup jelas. Harap dicatat bahwa Anda tidak boleh membuat perubahan apa pun pada file ini karena mungkin ditimpa selama pembaruan fail2ban.
Setelah mengubah konfigurasi, jangan lupa untuk memulai ulang layanan:
$ sudo systemctl restart fail2ban
Saya harus mencatat bahwa dalam kasus ini, saya mengubah parameter konfigurasi, memahami strategi serangan dan menerima daftar harian dari host yang menyerang dan memblokirnya.
Tetapi saya akan memberi tahu Anda tentang ini nanti dalam catatan terpisah, jika yang ini bermanfaat dan menarik bagi seseorang.