ไม่กี่วันฉันได้รับการโจมตีจากที่อยู่ IP บางส่วนไปยัง nginx ของฉัน ฉันได้ตัดสินใจที่จะใช้ fail2ban เพื่อแบนโดยอัตโนมัติ แต่ฉันสังเกตเห็นว่ามันทำงานได้ไม่ดีนัก ฉันเห็นในบันทึกที่ตรวจพบที่อยู่ IP แต่ไม่ได้ห้ามตามที่คาดไว้
ไฟล์คุกของฉันคือ:
[nginx-40x-req]
เปิดใช้งาน = จริง
bantime.rndtime = 2800
bantime.increment = จริง
พอร์ต = http,https
ตัวกรอง = nginx-40x-req
logpath = /var/log/nginx/access.log
สูงสุด = 5
และตัวกรองของฉันมีลักษณะดังนี้:
[คำนิยาม]
failregex = ^{"สถานะ": (400|401|403), "request_time": [0-9\.]+,\s+"remote_addr": "<โฮสต์>",
ใน nginx ของฉัน ฉันได้เพิ่มแผนที่เพื่อตรวจจับคำขอและส่งกลับ 403 เมื่อตรวจพบ บันทึกมีลักษณะดังนี้:
{"สถานะ": 403, "request_time": 0.000, "remote_addr": "xx.xx.xx.xx", "@timestamp": "2021-09-03T18:32:34+02:00", "ประเภท ": "nginx", "ชื่อโฮสต์": "vps-e642f340", "โฮสต์": "d.itsyjd.com", "uri": "/v2/speed_test", "request": "รับ 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 เช่น Gecko) เวอร์ชัน/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044304 Mobile Safari/537.36 (เข้ากันได้; Baiduspider/2.0;+http://www.baidu.com/ ค้นหา/spider.html)", "msec": 1630686754.923, "upstream_connect_time": -, "upstream_header_time": -, "upstream_response": -, "pipe": "p", "gzip_ratio": "-", "brotli_ratio ":"-", "remote_user": "-", "bad_request": "1"}
ใน Fail2ban ของฉัน ฉันเห็นข้อความจำนวนมากแจ้งว่าตรวจพบที่อยู่ IP:
2021-09-03 18:34:31,494 fail2ban.filter [32586]: INFO [nginx-40x-req] พบ xx.xx.xx.xx - 2021-09-03 18:29:33
แต่ก็ยังไม่มีการห้ามที่อยู่ IP เหล่านั้น
สิ่งหนึ่งที่ฉันสังเกตเห็นคือความเร็วในการอ่านของ fail2ban นั้นช้ากว่าความเร็วของบันทึก ดังนั้นฉันจึงเริ่มคิดว่านั่นอาจเป็นปัญหา เพราะเมื่อ IP เหล่านั้นถูกแบนและอ่าน fail2ban แบบเรียลไทม์ ที่อยู่ IP อื่นจะถูกแบนโดยไม่มีปัญหา . Max_retry คือ 5 และตรวจพบที่อยู่ IP ทั้งหมดมากกว่า 5 ครั้ง ดังนั้นจึงต้องถูกแบน
ทุกคนรู้ว่าฉันทำอะไรผิด (เพราะแน่นอนว่าเป็นสิ่งที่ฉันไม่เห็น)
ขอแสดงความนับถืออย่างสูง.
แก้ไข: หลังจากเขียนข้อความนี้ ฉันเห็นว่ามีการแบน แต่ทำงานช้ามาก ในเวลาประมาณ 15 นาทีได้ห้ามที่อยู่ IP ประมาณ 4 รายการจากประมาณ 11 รายการเมื่อทุก ๆ วินาทีพวกเขาถูกตรวจพบบ่อยครั้ง
แก้ไข 2: การล้างบันทึกด้วยวิธีง่ายๆ เสียงสะท้อน "" > <ไฟล์บันทึก>
ได้ก่อให้เกิดการแบน
เวอร์ชันของ fail2ban ของฉันคือ 0.10.2
เมื่อผู้โจมตีที่มีปัญหาถูกแบนและได้รับคำขอเพียงไม่กี่ครั้ง fail2ban กำลังอ่านข้อมูลแบบเรียลไทม์และทำการแบน:
2021-09-03 18:46:13,759 fail2ban.filter [32586]: INFO [nginx-40x-req] พบ XX.XX.XX.XX - 2021-09-03 18:46:13
2021-09-03 18:46:13,909 fail2ban.actions [32586]: ประกาศ [nginx-40x-req] ห้าม XX.XX.XX.XX
2021-09-03 18:46:18,855 fail2ban.filter [32586]: INFO [nginx-40x-req] พบ XX.XX.XX.XX - 2021-09-03 18:46:18
2021-09-03 18:47:07,004 fail2ban.filter [32586]: INFO [nginx-40x-req] พบ XX.XX.XX.XX - 2021-09-03 18:47:06
2021-09-03 18:48:34,390 fail2ban.filter [32586]: INFO [nginx-40x-req] พบ XX.XX.XX.XX - 2021-09-03 18:48:34
2021-09-03 18:48:54,230 fail2ban.filter [32586]: INFO [nginx-40x-req] พบ XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,231 fail2ban.filter [32586]: INFO [nginx-40x-req] พบ XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,231 fail2ban.filter [32586]: INFO [nginx-40x-req] พบ XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,335 fail2ban.actions [32586]: ประกาศ [nginx-40x-req] แบน XX.XX.XX.XX
2021-09-03 18:50:08,488 fail2ban.filter [32586]: INFO [nginx-40x-req] พบ XX.XX.XX.XX - 2021-09-03 18:50:08
ดังนั้นฉันยังคงคิดว่าปัญหาอาจจะเป็นความเร็วในการอ่าน
แก้ไข 3:
ในที่สุด ฉันได้อัปเกรดเวอร์ชันของ fail2ban เป็น 0.11.2 แล้ว ฉันได้เพิ่มรูปแบบวันที่ และฉันได้เปลี่ยนตัวตรวจจับที่อยู่ ตอนนี้ดูเหมือนว่าจะอ่านไฟล์ nginx ได้เร็วขึ้นมาก
[คำนิยาม]
failregex = ^{"สถานะ": (400|401|403), "request_time": [0-9\.]+,\s+"remote_addr": "<ADDR>",
datepattern = "@timestamp": "%%Y-%%m-%%dT%%H:%%M:%%S%%z"