Từ vài ngày nay, tôi nhận được các cuộc tấn công từ một số địa chỉ IP vào nginx của mình. Tôi đã quyết định sử dụng fail2ban để cấm nó tự động, nhưng tôi nhận thấy rằng nó không hoạt động tốt lắm. Tôi có thể thấy trong nhật ký đang phát hiện địa chỉ IP nhưng không bị cấm như mong đợi.
Hồ sơ tù của tôi là:
[nginx-40x-req]
đã bật = đúng
bantime.rndtime = 2800
bantime.increment = true
cổng = http, https
bộ lọc = nginx-40x-req
logpath = /var/log/nginx/access.log
thử lại tối đa = 5
và bộ lọc của tôi trông như thế này:
[Sự định nghĩa]
failregex = ^{"status": (400|401|403), "request_time": [0-9\.]+,\s+"remote_addr": "<HOST>",
Trên nginx của tôi, tôi đã thêm một bản đồ để phát hiện các yêu cầu của nó và trả về 403 khi được phát hiện. Các bản ghi trông như thế này:
{"status": 403, "request_time": 0,000, "remote_addr": "xx.xx.xx.xx", "@timestamp": "2021-09-03T18:32:34+02:00", "type ": "nginx", "hostname": "vps-e642f340", "host": "d.itsyjd.com", "uri": "/v2/speed_test", "request": "GET https://d .itsyjd.com/v2/speed_test HTTP/1.1", "request_method": "GET", "request_proto": "http", "request_proto_proxy": "-", "request_uri": "/v2/speed_test", "request_args ": "-", "server_proto": "HTTP/1.1", "body_bytes_sent": 552, "http_referer": "-", "http_user_agent": "Mozilla/5.0 (Linux; Android 8.0; MHA-AL00 Build/HUAWEIMHA -AL00; wv) AppleWebKit/537.36 (KHTML, như Gecko) Phiên bản/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044304 Mobile Safari/537.36 (tương thích; Baiduspider/2.0;+http://www.baidu.com/ search/spider.html)", "msec": 1630686754.923, "upstream_connect_time": -, "upstream_header_time": -, "upstream_response": -, "pipe": "p", "gzip_ratio": "-", "brotli_ratio ": "-", "remote_user": "-", "bad_request": "1"}
Trên fail2ban của tôi, tôi có thể thấy rất nhiều thông báo nói rằng địa chỉ IP đã được phát hiện:
2021-09-03 18:34:31,494 fail2ban.filter [32586]: THÔNG TIN [nginx-40x-req] Đã tìm thấy xx.xx.xx.xx - 2021-09-03 18:29:33
Nhưng nó vẫn không cấm các địa chỉ IP đó.
Một điều tôi nhận thấy là tốc độ đọc của fail2ban chậm hơn tốc độ ghi nhật ký, vì vậy tôi bắt đầu nghĩ rằng có thể đó là vấn đề, bởi vì khi những IP đó bị cấm và fail2ban đọc theo thời gian thực, thì các địa chỉ IP khác cũng bị cấm mà không có vấn đề gì . Max_retry là 5 và tất cả các địa chỉ IP đã được phát hiện hơn 5 lần, vì vậy chúng phải bị cấm.
Bất kỳ ai cũng biết tôi có thể làm sai điều gì (vì chắc chắn đó là điều mà tôi không nhìn thấy).
Trân trọng.
CHỈNH SỬA: Sau khi viết thông báo này, tôi đã thấy lệnh cấm đó hoạt động rất chậm. Trong khoảng 15 phút đã cấm khoảng 4 địa chỉ IP từ khoảng 11 địa chỉ, khi mỗi giây chúng bị phát hiện rất nhiều lần.
EDIT2: Xóa nhật ký đơn giản tiếng vang "" > <logfile>
đã kích hoạt các lệnh cấm.
Phiên bản fail2ban của tôi là 0.10.2
Với việc kẻ tấn công có vấn đề bị cấm và chỉ nhận được một vài yêu cầu, fail2ban đang đọc theo thời gian thực và đang cấm:
2021-09-03 18:46:13,759 fail2ban.filter [32586]: THÔNG TIN [nginx-40x-req] Đã tìm thấy XX.XX.XX.XX - 2021-09-03 18:46:13
2021-09-03 18:46:13,909 fail2ban.actions [32586]: THÔNG BÁO [nginx-40x-req] Ban XX.XX.XX.XX
2021-09-03 18:46:18,855 fail2ban.filter [32586]: THÔNG TIN [nginx-40x-req] Đã tìm thấy XX.XX.XX.XX - 2021-09-03 18:46:18
2021-09-03 18:47:07,004 fail2ban.filter [32586]: THÔNG TIN [nginx-40x-req] Đã tìm thấy XX.XX.XX.XX - 2021-09-03 18:47:06
2021-09-03 18:48:34,390 fail2ban.filter [32586]: THÔNG TIN [nginx-40x-req] Đã tìm thấy XX.XX.XX.XX - 2021-09-03 18:48:34
2021-09-03 18:48:54,230 fail2ban.filter [32586]: THÔNG TIN [nginx-40x-req] Đã tìm thấy XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,231 fail2ban.filter [32586]: THÔNG TIN [nginx-40x-req] Đã tìm thấy XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,231 fail2ban.filter [32586]: THÔNG TIN [nginx-40x-req] Đã tìm thấy XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,335 fail2ban.actions [32586]: THÔNG BÁO [nginx-40x-req] Ban XX.XX.XX.XX
2021-09-03 18:50:08,488 fail2ban.filter [32586]: THÔNG TIN [nginx-40x-req] Đã tìm thấy XX.XX.XX.XX - 2021-09-03 18:50:08
Vì vậy, tôi vẫn nghĩ rằng vấn đề có thể là tốc độ đọc.
CHỈNH SỬA3:
Cuối cùng tôi đã nâng cấp phiên bản fail2ban lên 0.11.2, tôi đã thêm một mẫu dữ liệu và tôi đã thay đổi trình phát hiện địa chỉ. Bây giờ dường như đọc tệp nginx nhanh hơn rất nhiều.
[Sự định nghĩa]
failregex = ^{"status": (400|401|403), "request_time": [0-9\.]+,\s+"remote_addr": "<ADDR>",
datepotype = "@timestamp": "%%Y-%%m-%%dT%%H:%%M:%%S%%z"