Vừa rồi có một khách sử dụng sử dụng VPS sau đó nhờ mình setup FastPanel để phục vụ cho việc chạy web. Sử dụng ổn định một thời gian thì đột nhiên VPS lag kinh khung, không thể tạo tác gì được cả.

Mình thực hiện SSH vào VPS và kiểm tra tình trạng thì thấy load avg cực cao. Khi đọc access log thì mình nhận thấy như sau.

Ảnh đầu tiên bị tấn công xmlrpc.php

Dạng tấn công này khá phổ biến

Ngăn chặn BadBot và tấn công xmlrpc.php trên FastPanel
Ngăn chặn BadBot và tấn công xmlrpc.php trên FastPanel 8

Ảnh 2 là bị Bot scan

Thoạt hình qua thì mình thấy con bot có tên Amazonbot/0.1. Ban đầu cứ tưởng đây là bot của AWS nhưng mà không nhé, bạn có thể xem qua bài post này

CleanShot 2024 01 31 at 22.43.50
Ngăn chặn BadBot và tấn công xmlrpc.php trên FastPanel 9

Đọc access log trên FastPanel

Việc đầu tiên bạn hãy đọc access.log của webiste để xác định chính xác. Bên dưới là vị trí của file log và bạn cần thay đổi usernamemydomain.com

tail -f /var/www/username/data/logs/mydomain.com-frontend.access.log

Cách ngăn chặn

Trong bài viết này thì ở đầu bài tôi đã xác định được web bị tấn công theo 2 kiểu này. Đây là 2 kiểu đơn giản và có thể chặn. Tôi sẽ tạo một file cấu hình và đặt tên nó là deny.conf

vi /etc/nginx/fastpanel2-includes/deny.conf

Tiếp theo tôi sẽ dán nội dung sau vào file deny.conf. Trong đoạn này tôi đã thêm cấu hình chặn truy cập vào xmlrpc.php và một số badbot mà tôi thấy nó có rủi ro. Bạn có thể thêm hoặc xoá các bot trong cấu hình của tôi nếu các bot này bạn cần sử dụng để thu thập web.

#Block xmlrpc
location = /xmlrpc.php {
          deny all;
          access_log off;
          log_not_found off;
}
#Block badbot
    # case sensitive matching
    if ($http_user_agent ~ (Bytespider|Amazonbot/0.1|MJ12bot/v1.4.8|MJ12bot/v1.4.4|SemrushBot/6~bl|SemrushBot/7~bl|SemrushBot-BM/1.0|DotBot/1.1|DotBot/1.2|MegaIndex.ru/2.0|AspiegelBot|PetalBot|BLEXBot/1.0|serpstatbot/2.1|proximic|Barkrowler/0.9|SeekportBot|YandexBot/3.0|Pinterestbot/1.0|DataForSeoBot/1.0|GrapeshotCrawler/2.0|curl/8.1.2|AhrefsBot/7.0|Barkrowler/0.9)) {
        return 403;
    }

Sau khi thêm xong bạn lưu lại và kiểm tra cấu hình nginx bằng lệnh nginx -t. Nếu kết quả trả về như sau thì không có lỗi.

[root@root ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Thực hiện khởi động lại nginx để áp dụng cấu hình mới bằng lệnh

service nginx restart

Thực hiện kiểm tra lại thì HTTP trả về mã 403 tức đã bị từ chối truy cập. Như vậy đã thành công trong việc ngăn chặn.

CleanShot 2024 01 31 at 22.56.33
Ngăn chặn BadBot và tấn công xmlrpc.php trên FastPanel 10