Hôm xưa anh Đỗ Trung Quân đăng trong nhóm Hỗ trợ Server – Hosting & WordPress cảnh báo việc con Bot của Facebook có thể làm full CPU máy chủ.
Tình huống này thật kì thú. Tự dưng Bot của Facebook lại đi spam web thường dân, mà spam đến nổi làm cho web người ta sập luôn mới sợ.
1. Chuyện gì đang xảy ra?
Mình đọc bình luận thấy có giả thiết cho rằng Facebook đang tổng điều động Bot đi cào website để đào tạo AI.
Một giả thiết khác cho rằng đây có thể là 1 hình thức tấn công DDOS mới.
Hôm nay chính mình được trải nghiệm. Nhưng không chỉ Facebook bot, mà còn có cả Amazon Bot và bytedance (tiktok) cùng 1 lúc.
Mỗi giây có 4-5 con bot truy cập. Tính ra một ngày sẽ có ~400k truy vấn.
Ấy còn là ít. Có người từng dính 7 triệu truy vấn một ngày chỉ riêng con Facebook.
Thế nên mình tin rằng Đây là 1 phương pháp tấn công DDOS lợi dụng các trình thu thập dữ liệu. (Crawl bots)
Copy từ Logs:
- Mozilla/5.0 (Linux; Android 5.0) AppleWebKit/537.36 (KHTML, like Gecko) Mobile Safari/537.36 (compatible; Bytespider; spider-feedback@bytedance.com)”
- Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot)”
- facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)”
Và chúng sẽ chọn tấn công vào trang có truy vấn tiêu hao CPU nhất, thường là trang có bộ lọc sản phẩm. Cả trăm truy vấn lọc trong thời gian ngắn thì máy chủ cùi cùi như của công ty mình sao chịu nổi.
Web load ì ạch và sẽ tạch.
Mình đi dò la mấy diễn đàn quốc tế 1 vòng thì mới ngớ người, té ra tình huống này đã xảy ra từ hồi 2012. Khổ chủ đăng đàn hỏi đủ nơi nhưng đều không tìm ra nguyên nhân gốc rễ.
Lạy chúa, tụi nào có thể tài tình đến độ lợi dụng Facebook và Amazon để tạo 1 cuộc tấn công DDOS cơ chứ. Chuyện này đã được báo cáo từ chục năm trước mà đến giờ các ông lớn vẫn chả thèm quan tâm.
2. Chặn mấy con bot này thì sẽ xong phải không?
Phải không?
Không đơn giản thế, vì vốn dĩ mấy con bot này có nhiệm vụ đi thu thập nội dung website và cho website mình xuất hiện trên các nền tảng đó. Thế nên khi mình chặn nó, mình sẽ là người thiệt hơn.
Đáng sợ hơn nữa, tại bài thảo luận này, có 1 bình luận như sau xin tạm dịch ra tiếng Việt:
“Chào,
Nhân tiện, tôi có thể xác nhận vấn đề này. Tôi làm việc cho một tờ báo lớn ở Na Uy và khoảng một năm trước chúng tôi cũng gặp phải vấn đề tương tự.
Hàng ngàn yêu cầu mỗi giây cho đến khi chúng tôi chặn nó. Và sau khi chúng tôi chặn nó, lưu lượng truy cập vào trang Facebook của chúng tôi cũng giảm mạnh.
Tôi cho rằng Facebook đã coi trang web của chúng tôi không hoạt động và do đó sẽ không cung cấp cho người dùng nội dung từ trang Facebook của chúng tôi vì điều đó sẽ cung cấp cho họ nội dung mang lại trải nghiệm người dùng kém.”
3. Vậy chúng ta phải làm thế nào?
3.1. Đầu tiên với Facebook, không chặn, chỉ giới hạn.
Chúng ta sẽ giới hạn tần suất yêu cầu từ Facebook bot.
Ơn giời, có 1 plugin thực hiện điều này. Nó tên là Facebook Request Throttle.
Theo mặc định, plugin giới hạn các yêu cầu từ trình thu thập dữ liệu web của Facebook ở mức 2 giây một lần. Nếu muốn thay đổi tần số này, bạn có thể sửa đổi số FACEBOOK_REQUEST_THROTTLE
.
Đổi số 2.0 thành 200.0 chẳng hạn. Cái này chỉnh trong Plugin > Plugin file editor
define('FACEBOOK_REQUEST_THROTTLE', 2.0); // Number of seconds permitted between each hit from facebookexternalhit
3.2. Còn với Amazon bot, chặn quách cho rồi.
Chúng ta sẽ sử dụng HTTP 403 hoặc 444 để từ chối quyền truy cập của Bot.
Cái này tuỳ vào cách bạn tạo VPS như thế nào.
Riêng mình dùng VPS cài máy chủ web Nginx nên sẽ bổ sung vào tệp cấu hình Nginx mấy dòng bên dưới:
# Block specific bots
if ($http_user_agent ~* (Amazonbot)) {
return 403;
}
Còn với máy chủ web Apache/Litespeed thì bạn có thể chỉnh sửa file .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (Amazonbot) [NC]
RewriteRule .* - [F,L]
</IfModule>
Nguồn hướng dẫn, mình trích từ bài này: