block User Agent với Nginx

Issue: block user với ip ngoài location cung cấp dịch vụ nhưng không chặn bot google, yandex…

1st step:Enable access log to get an idea of the visitors who have been visiting their websites

  + Edit nginx.conf: nano /etc/nginx/nginx.conf or vhost domain conf: /etc/nginx/conf.d/domain.com.conf

=> change “access_log off”; => “access_log on”;

=> Restart server 

Ref to analyze log: https://tangduongtrieu.com/phan-tich-log-cua-vps-tu-co-ban-den-nang-cao/#check-log-tung-domain

=> Command to extract log:

             + Lấy log của một ngày cụ thể: grep -w ’05/Dec/2020′ /home/nginx/domains/domain.com/log/access.log 

             + Xuất ra log trong ngày và điều kiện “hoặc”: grep -w ’05/Dec/2015.*google\|04/Dec/2015.*google’ /home/nginx/domains/domain.com/log/access.log  => Chỉ lấy các dòng có chuổi là “05/Dec/2015” và “google” HOẶC có chuổi là “04/Dec/2015” và “google”

+ Xuất ra tất cả các IP có >10 kết nối trong ngày:

             grep -w ’05/Dec/2015′ /home/nginx/domains/domain.com/log/access.log | grep -o ‘[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}’ | sort | uniq -cd | sort -nr | grep -v ‘^ *[1-9] ‘

            + Thoát khỏi “grep”: Ctrl + C

2nd step: Open domain conf file:

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;
    }

    ....
}

Ý nghĩa:

  • 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

+ Phân tích access.log để tìm header cần filter 

+ Một số khái niệm cơ bản:

$http_user_agent: The user agent string is a text that the browsers themselves send to the webserver to identify themselves

Tham khảo: 

https://community.vpssim.vn/viewtopic.php?t=211 – Hướng Dẫn Bật “Access_log” Cho Domain Trên VPS

Hướng dẫn block User Agent với Nginx: https://hocvps.com/block-user-agent-nginx/

How do I block multiple http user agents?: https://www.cyberciti.biz/faq/unix-linux-appleosx-bsd-nginx-block-user-agent/

Analyze User Agent string: http://www.useragentstring.com/

https://serverfault.com/questions/760359/nginx-allow-deny-based-on-ip-user-agent-combination

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

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