Mengkonfigurasi Fail2Ban di Linux untuk Melindungi SSH, Apache, MySQL, Exim

Fail2ban memungkinkan Anda untuk memblokir akses ke server atau menjalankan layanan berdasarkan analisis log akses dan koneksi. Fail2Ban dapat secara otomatis membuat aturan firewall untuk memblokir alamat IP tertentu jika tindakan dari IP ini terdeteksi sebagai mencurigakan. Jadi, Fail2Ban dapat melindungi server Anda dari tebakan kata sandi melalui SSH, serangan DDoS, eksploitasi upaya eksploitasi, dan melakukan tindakan yang dilarang.

Setiap layanan server yang port-portnya terbuka ke dunia luar berpotensi rentan. Pelabuhan beberapa layanan dapat ditutup, tetapi tidak semua dapat melakukan ini. Misalnya, jika Anda ingin layanan email SMTP Anda berfungsi penuh, Anda tidak dapat menonaktifkannya atau memblokir port pada firewall dan dari waktu ke waktu Anda dapat melihat log dalam log tentang upaya memilih kata sandi untuk akun tersebut. Ini terjadi dengan layanan lain..

Biasanya di semua server saya, saya menutup akses SSH dari luar, karena Saya terhubung ke server saya dari alamat IP statis saya atau melalui koneksi OpenVPN. Tetapi ini tidak selalu memungkinkan. Mengganti port standar datang untuk menyelamatkan, atau mengkonfigurasi pada server layanan fail2ban. Dalam contoh ini, kami akan menunjukkan cara menginstal dan menggunakan fail2ban pada CentOS, namun Anda juga dapat menggunakan instruksi ini untuk distribusi Linux lainnya..

Konten:

  • Instalasi dan pengaturan awal Fail2Ban di CentOS 8/7
  • Menggunakan Fail2Ban untuk Melindungi SSH dari Pemeriksaan Kata Sandi
  • Log Fail2Ban
  • Mengamankan Apache dengan Fail2Ban
  • Mengkonfigurasi Bundel Fail2Ban dan Nginx
  • Mengamankan MySQL dengan Fail2Ban
  • Aturan Fail2Ban untuk Exim
  • Daftar Putih IP Fail2Ban, IP Unblocking

Instalasi dan pengaturan awal Fail2Ban di CentOS 8/7

Paket untuk menginstal fail2ban ada di repositori Epel, kami akan menghubungkannya:

# yum install epel-release -y

Setelah menghubungkan repositori, Anda dapat menginstal fail2ban via yum atau dnf (pada CentOS 8):

# yum install fail2ban -y

Seperti layanan lainnya, fail2ban perlu ditambahkan ke startup agar dimulai secara otomatis ketika sistem restart:

[root @ server ~] # systemctl aktifkan fail2ban

Symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service → /usr/lib/systemd/system/fail2ban.service dibuat.

Layanan fail2ban menyimpan file konfigurasi dalam direktori / etc / fail2ban. File konfigurasi utama - /etc/fail2ban/jail.conf. Karena file ini dapat ditimpa saat memperbarui layanan, agar berfungsi, Anda perlu membuat file jail.local. Juga file dalam direktori /etc/fail2ban/jail.d/ dapat digunakan untuk mengganti pengaturan dalam file di atas. File diterapkan dengan urutan sebagai berikut:

  • /etc/fail2ban/jail.conf
  • /etc/fail2ban/jail.d/*.conf
  • /etc/fail2ban/jail.local
  • /etc/fail2ban/jail.d/*.local

Menggunakan Fail2Ban untuk Melindungi SSH dari Pemeriksaan Kata Sandi

Buat file dan buat pengaturan:

# nano /etc/fail2ban/jail.local

Dan tambahkan isinya:

[DEFAULT] # Larangan host selama satu jam: bantime = 3600 # Override /etc/fail2ban/jail.d/00-firewalld.conf: banaction = iptables-multiport [sshd] diaktifkan = true

Konfigurasi ini menetapkan waktu baru untuk memblokir alamat IP untuk semua layanan, mengatur penggunaannya iptables untuk kunci dan perlindungan untuk sshd diaktifkan.

Untuk menggunakan firewalld untuk memfilter, tentukan:

banaction = firewallcmd-ipset

Setelah mengubah pengaturan, mulai ulang layanan:

# systemctl restart fail2ban

Untuk melihat status fail2ban dan memeriksa daftar layanan yang dilindungi, jalankan perintah:

[root @ server ~] # fail2ban-client status

Status | - Jumlah penjara: 1 '- Daftar penjara: sshd 

Anda dapat meminta status kunci fail2ban saat ini untuk layanan tertentu:

# fail2ban-client status sshd

Dalam file jail.conf dapat menggambarkan parameter umum yang tidak akan ditimpa jail.local.

Buka kunci:

ignip = 127.0.0.1/8

Ubah nilai berikut:
bantime = 10m - waktu IP akan diblokir
findtime = 10m - waktu selama upaya otorisasi yang gagal akan dihitung.
maxretry = 3 - jumlah upaya sebelum memblokir

Untuk menerima peringatan email, Anda perlu mengonfigurasi opsi berikut:
destemail = [email protected] -penerima
pengirim = [email protected] - pengirim
mta = postfix - Layanan SMTP di mana pengiriman

Untuk mengkonfigurasi pemblokiran untuk layanan individual, dalam file /etc/fail2ban/jail.local setelah blok [DEFAULT], sebuah blok dibuat untuk layanan yang diinginkan, misalnya, seperti sshd. Tambahkan beberapa pengaturan untuk itu:

[sshd] diaktifkan = true port = ssh logpath =% (sshd_log) s

Kami menunjukkan port mana yang akan diblokir dan di mana harus menulis log pemblokiran. Perhatikan direktori /etc/fail2ban/filter.d, ada filter yang dijelaskan dengan bantuan yang entri dalam log akan dianalisis dan untuk memeriksa apakah entri ini atau itu menunjukkan otentikasi gagal. Jika Anda mencantumkan file dalam direktori, Anda dapat menemukan aturan fail2ban untuk sebagian besar layanan populer:
# ls /etc/fail2ban/filter.d

File-file tersebut dijelaskan dengan sangat rinci dan Anda dapat mempelajari apa yang Anda butuhkan untuk memahami bagaimana cek log terjadi..

Log Fail2Ban

Untuk memeriksa log fail2ban, jalankan perintah:

# journalctl -b -u fail2ban

Anda juga dapat memeriksa log secara real time:

# tail -F /var/log/fail2ban.log

Output log:

2019-12-05 12: 13: 26.914 fail2ban.actions [9750]: PEMBERITAHUAN [sshd] Kembalikan Ban 222.186.180.17 2019-12-05 12: 13: 26.930 fail2ban.actions [9750]: PEMBERITAHUAN [sshd] Kembalikan Ban 222.186 .180.223 2019-12-05 12: 13: 26.944 fail2ban.actions [9750]: PEMBERITAHUAN [sshd] Kembalikan Ban 36.72.82.10 2019-12-05 12: 13: 26.958 fail2ban.actions [9750]: PEMBERITAHUAN [sshd] Pulihkan Larangan 40.117.135.57 2019-12-05 12: 13: 26.973 fail2ban.actions [9750]: PEMBERITAHUAN [sshd] Kembalikan Ban 45.55.155.224 2019-12-05 12: 13: 26.988 fail2ban.actions [9750]: PEMBERITAHUAN [sshd ] Kembalikan Ban 67.205.135.127 2019-12-05 12: 13: 27.003 fail2ban.actions [9750]: PEMBERITAHUAN [sshd] Kembalikan Ban 83.171.107.216 2019-12-05 12: 13: 43,362 fail2ban.filter [9750]: INFO [sshd] Ditemukan 183.87.134.98 - 2019-12-05 12:13:42 2019-12-05 12: 13: 45.571 fail2ban.filter [9750]: INFO [sshd] Ditemukan 183.87.134.98 - 2019-12-05 12 : 13: 45 2019-12-05 12: 15: 46.109 fail2ban.filter [9750]: INFO [sshd] Ditemukan 112.64.170.178 - 2019-12-05 12:15:45 2019-12-05 12: 17: 05.317 fail2ban.actions [9750]: PEMBERITAHUAN [sshd] Unba n 222.186.175.216

Seperti yang kamu lihat, fail2ban bekerja dan secara berkala memblokir atau menghapus pemblokiran untuk alamat IP.

Untuk memeriksa alamat IP mana yang diblokir di iptables oleh fail2ban, lakukan:

# iptables -L

Seperti yang Anda lihat, dengan ssh terbuka ke luar, dari waktu ke waktu seseorang mencoba mengambil kata sandi dan masuk. Jika Anda memeriksa statistik setelah beberapa waktu, Anda dapat melihat bahwa jumlah IP yang diblokir bertambah.

Mengamankan Apache dengan Fail2Ban

Jika Anda ingin menyesuaikan fail2ban untuk apache Anda (httpd), tambahkan pengaturan berikut ke jail.local:

# mendeteksi upaya kata sandi yang gagal [apache] diaktifkan = true port = http, filter https = apache-auth logpath = / var / log / httpd / error_log maxretry = 3 # blok IP yang secara langsung mengakses skrip dengan ekstensi php, asp, exe, pl, cgi, scgi [apache-noscript] diaktifkan = true port = http, filter https = apache-noscript logpath = / var / log / httpd / error_log maxretry = 3 # mendeteksi upaya untuk meluap Apache [apache-overflows] diaktifkan = true port = http, filter https = apache-overflows logpath = / var / log / http_ / error_log maxretry = 2 # mendeteksi upaya pencarian yang gagal di direktori home pada server [apache-nohome] diaktifkan = true port = http, https filter = apache -nohome logpath = / var / log / httpd / * error_log maxretry = 2

Setelah mengubah file konfigurasi, kami me-restart layanan dan memeriksa status:

[root @ server ~] # fail2ban-client status apache

Status untuk penjara: apache | - Filter | | - Saat ini gagal: 0 | | - Total gagal: 0 | '- Daftar file: / var / log / httpd / error_log' - Tindakan | - Saat ini dicekal: 0 | - Total diblokir: 0 '- Daftar IP terlarang:

Untuk pengujian, saya menginstal di server Joomla, setelah itu saya mencoba membuka file yang tidak ada dan fail2ban memblokir saya:

[root @ server httpd] # fail2ban-client status apache-noscript

Status untuk penjara: apache-noscript | - Filter | | - Saat ini gagal: 1 | | - Total gagal: 6 | '- Daftar file: / var / log / httpd / error_log' - Actions | - Saat ini dilarang: 1 | - Total diblokir: 1 '- Daftar IP yang dilarang: *. *. *. *

Mengkonfigurasi Bundel Fail2Ban dan Nginx

Jika Anda adalah server web nginx dan situs ini memiliki bagian yang memerlukan otorisasi, Anda mungkin juga memiliki masalah dengan upaya untuk menghitung kata sandi. Untuk fail2ban kita dapat menentukan untuk menggunakan file tersebut nginx-http-auth.conf, Secara default, sudah dijelaskan dalam file konfigurasi. /etc/fail2ban/jail.conf:

[root @ server ~] # cat /etc/fail2ban/jail.conf | grep nginx

[nginx-http-auth] logpath =% (nginx_error_log) s # Untuk menggunakan penjara 'nginx-limit-req' Anda harus memiliki 'ngx_http_limit_req_module' # dan mendefinisikan 'limit_req' dan 'limit_req_zone' seperti yang dijelaskan dalam dokumentasi nginx # http: / /nginx.org/en/docs/http/ngx_http_limit_req_module.html # atau misalnya lihat di 'config / filter.d / nginx-limit-req.conf' [nginx-limit-req] logpath =% (nginx_error_log) s [ nginx-botsearch] logpath =% (nginx_error_log) s logpath =% (nginx_access_log) s

Apakah kita perlu memasukkannya dalam file konfigurasi /etc/fail2ban/jail.local dengan menambahkan:

[nginx-http-auth] enabled = true

Setelah semua pengaturan, jangan lupa untuk me-restart layanan:

# systemctl restart fail2ban

Mengamankan MySQL dengan Fail2Ban

Untuk melindungi MySQL, Anda perlu menambahkan blok terpisah ke file konfigurasi jail.local:

[mysqld-auth] enabled = true filter = port mysqld-auth = 3306 logpath = /var/log/mysql/error.log

Pengaturan ini akan melindungi Anda dari tebakan kata sandi untuk pengguna mysql (ini adalah kekuatan brutal yang sangat sering terjadi).

Aturan Fail2Ban untuk Exim

Untuk mengkonfigurasi keamanan untuk layanan email Exim, buat konfigurasi berikut:

[exim] diaktifkan = true filter = exim action = iptables-multiport [name = exim, port = "25,465,587"] logpath = / var / log / exim / mainlog

Jadi Anda bisa menyesuaikan fail2ban untuk bekerja dengan hampir semua layanan populer dan server Anda akan seaman mungkin.

Daftar Putih IP Fail2Ban, IP Unblocking

Untuk membuka kunci IP yang diblokir fail2ban, gunakan perintah:

# fail2ban-client set SECTION unbanip IP - di mana BAGIAN adalah nama bagian dalam file konfigurasi, sesuai dengan aturan yang diblokir alamat IP Anda. Sebagai contoh:

# fail2ban-client set apache-noscript unbanip 185. *. *. *

Anda dapat menambahkan alamat IP tertentu ke pengecualian fail2ban (daftar putih). Untuk melakukan ini, dalam file konfigurasi jail.conf masukkan IP di baris:

ignip = 185. *. *. *

Dengan menambahkan alamat IP saya ke pengecualian, saya melakukan beberapa serangan seperti sebelumnya dan pemblokiran tidak terjadi.

Seperti yang Anda lihat, fai2ban cukup mudah diatur, tetapi ini merupakan cara perlindungan tambahan yang efektif untuk server Anda dari penyusup. Untuk Windows, sayangnya, saya belum melihat program gratis dengan fungsi serupa (Anda dapat mencoba memblokir alamat IP menggunakan PowerShell - lihat artikel Melindungi RDP dari Pemeriksaan Kata Sandi).