Bila situs anda menjadi target SPAM ataupun BOT SCANNER dengan mengirim berbagai request random, bisa di block dengan bantuan web server NGINX. Contoh server block nginx

server {
    listen 80;
    server_name loadbalancer.prod.jaranguda.com default_server;
    root /var/www/loadbalancer.prod.jaranguda.com;
    index index.php index.html;
    location / {
      try_files $uri /index.html;
    }
}

cek log nginx, biasanya berada di /var/log/nginx, sebagai contoh saya ambil potongan log sebagai berikut

192.168.1.2 - - [25/Nov/2020:13:52:32 +0700] "GET / HTTP/2.0" 200 617 "-" "Mozilla/5.0 (Linux; Android 4.4.4; SM-G720N0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36" "-"
192.168.1.2 - - [25/Nov/2020:13:55:31 +0700] "GET /jadi-orang-terkenal HTTP/2.0" 200 3948 "https://www.google.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36" "-"
192.168.1.2 - - [25/Nov/2020:13:56:35 +0700] "GET /harga-pasar-saat-ini HTTP/2.0" 200 5898 "https://www.google.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36" "-"
192.168.1.2 - - [25/Nov/2020:13:56:38 +0700] "GET /perhitungan-pajak-yang-benar HTTP/2.0" 200 627 "https://www.google.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36" "-"
192.168.1.2 - - [25/Nov/2020:13:57:06 +0700] "GET / HTTP/1.1" 200 28931 "-" "Baiduspider+(+http://www.baidu.com/search/spider.htm);googlebot|baiduspider|baidu|spider|sogou|bingbot|bot|yahoo|soso|sosospider|360spider|youdaobot|jikeSpider;)" "-"
192.168.1.2 - - [25/Nov/2020:14:05:03 +0700] "GET / HTTP/2.0" 200 28918 "-" "curl/7.69.1" "-"

Cara blokir user agent

User agent yang ada sangat banyak dan bisa saja dibuat asal-asalan, untuk itu ada baiknya di cek log dari server anda agar lebih tepat sasaran. Nginx memiliki variable $http_user_agent yang bisa digunakan untuk mendeteksi user agent dari client. Formatnya sebagai berikut

if ($http_user_agent ~ (useragent)) {
    return 403 "Rejected!";
}

untuk memblokir banyak user agent sekaligus bisa ditambahkan |, contoh kita akan memblokir curl yang ada di potongan log nginx

if ($http_user_agent ~ (useragent|useragentlain|userAgentLainLagi|curl)) {
    return 403 "Rejected!";
}

Bila user agent memiliki space harus di escape dengan \, contoh untuk user agent Buah Manis

if ($http_user_agent ~ (useragent|useragentlain|userAgentLainLagi|curl|Buah\ Manis)) {
    return 403 "Rejected!";
}

Case Sensitive atau Case Insensitive

Di nginx kita bisa menggunakan ~ untuk case sensitive dan ~* untuk case insensitive. Seperti contoh terakhir diatas

if ($http_user_agent ~ (useragent|useragentlain|userAgentLainLagi|curl|Buah\ Manis)) {
    return 403 "Rejected!";
}

akan memblokir user agent

useragent
useragentlain
userAgentLainLagi
Buah Manis

tetapi tidak dengan kombinasi huruf besar kecil yang disatukan

Useragent
userAgentlain

solusinya adalah dengan menggunakan ~*

if ($http_user_agent ~* (useragent|useragentlain|userAgentLainLagi|curl|Buah\ Manis)) {
    return 403 "Rejected!";
}

Lengkapnya server block menjadi

server {
    listen 80;
    server_name loadbalancer.prod.jaranguda.com default_server;
    root /var/www/loadbalancer.prod.jaranguda.com;
    index index.php index.html;
    location / {
      try_files $uri /index.html;
    }
 
  if ($http_user_agent ~* (useragent|useragentlain|userAgentLainLagi|curl|Buah\ Manis)) {
      return 403 "Rejected!";
  }
 
}

Setelah merubah konfigurasi nginx, service nginx harus direload atau di restart

systemctl reload nginx

Testing Blokir User Agent

Untuk test kita akan menggunakan curl, contoh

curl http://DOMAIN.com
# output
rejected!

coba ganti user agent menjadi LALALALA, harusnya bisa mengakses website seperti normal

curl -H 'User-Agent: LALALALA' http://DOMAIN.com

Leave a comment

Your email address will not be published. Required fields are marked *