GNU/Linux >> Belajar Linux >  >> Cent OS

Blokir bot jahat dengan Fail2ban

Fail2ban adalah alat keamanan serbaguna. Meskipun terutama digunakan untuk mencegah serangan brute force terhadap SSH, ini juga dapat digunakan untuk melindungi layanan lain.

Ada bot yang memindai internet dan mengirim ribuan permintaan ke server web dengan harapan menemukan kerentanan. Postingan ini tentang memblokir bot tersebut dengan Fail2ban.

Kami berasumsi bahwa Anda menggunakan Apache sebagai server web Anda. Namun, instruksi ini dapat dengan mudah disesuaikan untuk nginx atau server web lainnya.

Namun, Anda harus ingat bahwa Fail2ban bukan firewall aplikasi web (WAF) dan tidak dapat memblokir permintaan jahat jika mereka berhasil melewatinya. Ini karena fail2ban mengambil tindakan dengan memantau log; Oleh karena itu, setidaknya satu upaya jahat harus dicatat sebelum Fail2ban dapat mengambil tindakan apa pun.

Apa itu bot yang buruk?

Dalam postingan ini, kami akan fokus pada pemblokiran bot yang melakukan salah satu hal berikut:

  • Menelusuri situs web untuk proxy terbuka
  • Mengirim permintaan GET dengan parameter itu. berisi Payload injeksi SQL
  • Mengirim permintaan GET dengan parameter itu. mengandung muatan neurosis

Tentu saja, Anda juga dapat memblokir jenis serangan lainnya. Namun, kami membatasi diri pada tiga kasus yang disebutkan di atas untuk artikel ini.

Instal Fail2ban

Fail2ban tersedia di repositori sebagian besar distribusi.

Untuk menginstalnya di Debian / Ubuntu jalankan:

sudo apt-get update
sudo apt-get install fail2ban

Di bawah CentOS Anda harus terlebih dahulu menggunakan repositori EPEL; Maka Anda harus mengaktifkan dan memulainya.

sudo yum -y install epel-release
sudo yum -y install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Dasar-dasar Fail2ban

Inti dari mekanisme kerja Fail2ban adalah sejumlah penjara. Sederhananya, jail menginstruksikan Fail2ban untuk melihat sejumlah log dan menerapkan filter setiap kali log berubah. Jika jumlah kecocokan untuk filter sama dengan jumlah maksimum kecocokan yang diizinkan oleh penjara, tindakan yang ditentukan di penjara akan diambil.

Jadi, Anda perlu mendefinisikan dua hal:filter dan penjara. Penjara dikonfigurasi untuk melihat log Apache untuk permintaan berbahaya.

Tentukan filter

Filter hanyalah kumpulan ekspresi reguler Python yang diperiksa terhadap log. Di sini kita harus menentukan filter untuk kriteria yang dijelaskan di atas.

Tapi pertama-tama mari kita lihat entri di log Apache:

66.249.79.189 - - [17/Jan/2017:14:10:41 +0000] "GET /robots.txt HTTP/1.1" 200 3494 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +https:
//www.google.com/bot.html)"

Perhatikan bahwa header permintaan GET /robots.txt HTTP/1.1 berada dalam tanda kutip ganda. Jika Anda merancang sendiri aturan tersebut, Anda harus cukup berhati-hati untuk memastikan bahwa hanya header permintaan yang cocok. Jika tidak, Anda berisiko memblokir pengguna yang sah.

Payload injeksi SQL umumnya berisi string dalam bentuk union select(...) atau select concat (...) . Jadi Anda dapat mencoba mencocokkan pola ini dengan ekspresi reguler berikut:



(?i)^<HOST> -.*"[^"]+(?:union[^"]+select[^"]*|select[^"]+concat[^"]*)(?:%%2[8C]|[,(])

<HOST> Bagian mendefinisikan posisi alamat IP dalam entri log, dan (?i) menunjukkan bahwa ekspresi reguler tidak peka huruf besar/kecil.

[^"] di regex memastikan bahwa teks yang cocok diapit dalam tanda kutip ganda. Ini memastikan bahwa ekspresi reguler hanya cocok dengan header permintaan dan tidak ada yang lain. (?:%%2[8C]|[,(]) menunjukkan bahwa union select atau select concat koma mengikuti yang sesuai (, ) atau tanda kurung (( ), baik secara langsung atau dalam bentuk kode persen.

Sering kali, bot yang mencari proxy terbuka mengirim permintaan dalam bentuk:

101.33.59.9 - - [17/Jan/2017:14:10:41 +0000] "GET https://google.com/ HTTP/1.1" 400 3494 "-" "Mozilla"
101.33.59.9 - - [17/Jan/2017:14:10:44 +0000] "CONNECT yahoo.com:80" 400 3499 "-" "Mozilla"

Ekspresi reguler seperti berikut ini dapat dengan mudah mencocokkan ini:

(?i)^<HOST> -.*"(?:(?:GET|POST|HEAD) https?:|CONNECT [a-z0-9.-]+:[0-9]+)

Ekspresi reguler (?:(?:GET|POST|HEAD) https?: cocok dengan persyaratan tipe pertama, sedangkan ekspresi reguler CONNECT [a-z0-9.-]+:[0-9]+ memenuhi persyaratan tipe kedua.

Bot yang memindai Shellshock sering mengirim permintaan seperti:

10.11.12.13 - - [17/Jan/2016:16:00:00 +0000] "GET /cgi-bin/printenv.cgi HTTP/1.0" 200 1 "-" "() { test;};echo "Content-type: text/plain"; echo; echo; /bin/rm -rf /var/www/"

Ekspresi reguler seperti ini cocok dengan pola untuk Shellshock:

<HOST> -.*"()s*{[^;"]+[^}"]+}s*;

Di sini kami memeriksanya () { <command>; } Pola dan s memperhitungkan ruang akun yang mungkin disertakan dalam permintaan jahat.

Jika kita menggabungkannya, sekarang kita dapat menulis filter kita:

[Definition]
failregex = <HOST> -.*"()s*{[^;"]+[^}"]+}s*;
            (?i)^<HOST> -.*"[^"]+(?:union[^"]+select[^"]*|select[^"]+concat[^"]*)(?:%%2[8C]|[,(])
            (?i)^<HOST> -.*"(?:(?:GET|POST|HEAD) https?:|CONNECT [a-z0-9.-]+:[0-9]+)
ignoreregex =

ignoreregex memungkinkan Anda memasukkan item ke daftar putih. Anda dapat menambahkan regex yang diabaikan seperti yang dilakukan untuk failregex.

Simpan filter di atas di /etc/fail2ban/filter.d/badbot.local

Tentukan penjara

Sekarang setelah Anda menentukan filter, saatnya untuk menentukan jail. Di sini kami memblokir alamat IP selama enam menit jika mengirimkan tiga permintaan seperti itu dalam enam menit.

Tambahkan ini ke /etc/fail2ban/jail.local milik Anda Berkas:

[badbot]
enabled   = true
port      = http,https
filter    = badbot
logpath   = /var/log/apache*/*access.log
maxretry  = 3
banaction = iptables-multiport
findtime  = 360
bantime   = 360

Setelah Anda mengonfigurasi jail, Anda harus memulai ulang fail2ban agar perubahan ini diterapkan. Bergantung pada distribusi Anda, salah satu dari perintah ini akan diperlukan untuk memulai ulang:

sudo systemctl restart fail2ban
sudo service fail2ban restart

fail2ban sekarang memblokir semua upaya bot jahat yang mencoba menyerang server web Anda. Anda dapat memperluas aturan ini ke server web Anda yang lain atau jenis serangan lain yang mungkin Anda lihat.




Cent OS
  1. Blokir rentang IP dari negara-negara dengan GeoIP dan iptables

  2. Cara memblokir IP tertentu Menghubungkan ke server dengan firewall-cmd

  3. Ukuran blok yang bagus untuk kloning disk dengan diskdump (dd)

  1. Debian – Bagaimana Cara Memblokir Non-free Dengan Preferensi Apt?

  2. Menggunakan Fail2ban Untuk Memblokir Login ISPConfig yang Salah

  3. Amankan Server Linux Anda Dengan Fail2Ban [Panduan Pemula]

  1. Instal Fail2ban di CentOS

  2. Cara Melindungi Apache dan SSH Dengan Fail2Ban di CentOS 8

  3. Cara Menginstal Fail2ban dengan Firewalld di Rocky Linux 8