Issue: chống bad bots scan web & chặn ip spammer/hacker cùng người dùng từ một số quốc gia không trong list potential users để giảm các nguy cơ an ninh.

Phương thức:

1. Sử dụng Nginx Bad Bot and User-Agent Blocker – Github:

The Ultimate Nginx Bad Bot, User-Agent, Spam Referrer Blocker, Adware, Malware and Ransomware Blocker, Clickjacking Blocker, Click Re-Directing Blocker, SEO Companies and Bad IP Blocker with Anti DDOS System, Nginx Rate Limiting and WordPress Theme Detector Blocking. Stop and Block all kinds of bad internet traffic from ever reaching your web sites

Link: https://github.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker

2. Sử dụng công cụ tích hợp của VPSSIM:

3. Sử dụng “Hướng dẫn block User Agent với Nginx” của HOCVPS: 

ở file cấu hình tên miền (nếu dùng HocVPS Script file cấu hình ở đường dẫn /etc/nginx/conf.d/), trong section server, hãy thêm đoạn code if sau:

server {
    listen       80 default_server;

    root         /home/hocvps.com/public_html;
    index index.php index.html index.htm;
    server_name hocvps.com;

    # case sensitive matching
    if ($http_user_agent ~ (Antivirx|Arian)) {
        return 403;
    }

    # case insensitive matching
    if ($http_user_agent ~* (netcrawl|npbot|malicious)) {
        return 403;
    }

    ....
}

Sau đó nhớ restart lại Nginx.

Tùy bạn lựa chọn:

  • case sensitive matching: phân biệt chữ in hoa, chữ in thường
  • case insensitive matching: không phân biệt in hoa, in thường

Để tìm được header cần filter, tất nhiên bạn sẽ phải phân tích file access.log trước.

Để test kết quả bạn có thể dùng lệnh wget kèm theo option --user-agent, ví dụ:

wget --spider --user-agent "malicious bot" http://domain.com

Đây là đoạn code mình dùng để block request spam comment các bạn có  thể tham khảo thêm:

    #Block Spam comment
    location ~* /wp-comments-post\.php$ {
        if ($http_user_agent ~* "x11; linux i686; rv:17" ) {
            return 403;
        }
    }

Source: https://hocvps.com/block-user-agent-nginx/
=> Cần tham khảo thêm về user agent của mỗi loại user để ứng dụng cho phù hợp.
4. Chặn một quốc gia sử dụng Nginx truy cập một trang web cụ thể (server có nhiều web):
Cách tốt nhất để làm điều đó là sử dụng tùy chọn allow/deny bên trong các cấu hình virtual host.
Truy cập trang web http://www.incredibill.me/htaccess-block-country-ips, chọn quốc gia của bạn, bấm vào Generate .htaccess code, và bạn sẽ nhận được nhiều dòng như thế này:

Mã:
# BLOCK COUNTRY BY IP RANGE
# IncrediBILL's HTACCESS Tools
# http://incredibill.me
order allow,deny
#
# Block from ALBANIA (AL)
#
deny from 31.22.48.0/20
deny from 31.44.64.0/20
deny from 31.171.152.0/21
deny from 31.222.40.0/21

Những dòng mà chúng ta cần quan tâm là “deny from …”
Lấy tất cả những dòng đó, xóa tất cả những dòng còn lại sau đó thêm “;” vào cuối mỗi dòng, vì vậy, tất cả các dòng sẽ trở thành như thế này:

Mã:
deny 31.22.48.0/20;
deny 31.44.64.0/20;
deny 31.171.152.0/21;
deny 31.222.40.0/21;

Vào cuối của tất cả các dòng deny from, thêm dòng này:

Mã:
 allow all; 
Và nó sẽ trông như thế này:
Mã:
deny 31.22.48.0/20;
deny 31.44.64.0/20;
deny 31.171.152.0/21;
deny 31.222.40.0/21;
allow all;

Bây giờ chúng ta hãy thêm những IP vào Nginx:

Mã:
 nano -w /etc/nginx/block-country.conf 

Bây giờ chỉnh sửa cấu hình virtual host của bạn, ví dụ:

Mã:
location / {
  root  /var/www/yoursite.com;
  index  index.php;
  include /etc/nginx/block-country.conf;
}

Như bạn thấy, chúng tôi sử dụng chỉ thị include để chèn tập tin cấu hình allow/deny vào cấu hình virtual host của chúng tôi.
Được rồi, bây giờ reload Nginx để áp dụng các thay đổi:

Mã:
 service nginx reload 

Kiểm tra kết quả
Sử dụng một proxy từ đất nước mà bạn đang chặn và nếu cấu hình khối của bạn đang làm việc tốt, bạn không thể xem trang web của bạn.

Tham khảo thêm:

NGINX Block IP Address, Subnet and User Agent Guide

https://www.techieshelp.com/nginx-block-ip-address-subnet-and-user-agent-guide/