![fall2ban은 공격자 IP를 감지하지만 차단하지 않으며 로그 읽기 속도가 느립니다.](https://rvso.com/image/770115/fall2ban%EC%9D%80%20%EA%B3%B5%EA%B2%A9%EC%9E%90%20IP%EB%A5%BC%20%EA%B0%90%EC%A7%80%ED%95%98%EC%A7%80%EB%A7%8C%20%EC%B0%A8%EB%8B%A8%ED%95%98%EC%A7%80%20%EC%95%8A%EC%9C%BC%EB%A9%B0%20%EB%A1%9C%EA%B7%B8%20%EC%9D%BD%EA%B8%B0%20%EC%86%8D%EB%8F%84%EA%B0%80%20%EB%8A%90%EB%A6%BD%EB%8B%88%EB%8B%A4..png)
며칠 전부터 일부 IP 주소에서 내 nginx에 대한 공격을 받고 있습니다. 나는 그것을 자동으로 금지하기 위해 Fail2ban을 사용하기로 결정했지만 그것이 잘 작동하지 않는 것을 발견했습니다. 로그에서 IP 주소를 감지하지만 예상대로 차단되지 않는 것을 볼 수 있습니다.
내 감옥 파일은 다음과 같습니다
[nginx-40x-req]
enabled = true
bantime.rndtime = 2800
bantime.increment = true
port = http,https
filter = nginx-40x-req
logpath = /var/log/nginx/access.log
maxretry = 5
내 필터는 다음과 같습니다.
[Definition]
failregex = ^{"status": (400|401|403), "request_time": [0-9\.]+,\s+"remote_addr": "<HOST>",
내 nginx에서 요청을 감지하고 감지되면 403을 반환하는 맵을 추가했습니다. 로그는 다음과 같습니다.
{"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, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044304 Mobile Safari/537.36 (compatible; 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"}
Fail2ban에서 IP 주소가 감지되었다는 메시지를 많이 볼 수 있습니다.
2021-09-03 18:34:31,494 fail2ban.filter [32586]: INFO [nginx-40x-req] Found xx.xx.xx.xx - 2021-09-03 18:29:33
그러나 여전히 해당 IP 주소를 금지하지는 않습니다.
제가 알아차린 한 가지 사실은 Fail2ban 읽기 속도가 로그 속도보다 느리기 때문에 아마도 그것이 문제일지도 모른다고 생각하기 시작했습니다. 왜냐하면 해당 IP가 금지되고 Fail2ban 읽기가 실시간으로 이루어지면 다른 IP 주소도 문제 없이 금지되기 때문입니다. . Max_retry는 5이고 모든 IP 주소가 5회 이상 감지되었으므로 차단해야 합니다.
누구든지 내가 무엇을 잘못하고 있는지 알고 있습니다(확실히 내가 보지 못하는 것이기 때문입니다).
친애하는.
편집: 이 메시지를 작성한 후 금지 조치가 취해졌지만 매우 느리게 작동하는 것을 확인했습니다. 약 15분 만에 약 11개 중 약 4개의 IP 주소가 차단되었으며, 매초마다 여러 번 탐지되었습니다.
EDIT2: 간단한 방법으로 로그를 삭제하면 echo "" > <logfile>
차단이 시작되었습니다.
내 failure2ban 버전은 0.10.2입니다.
문제가 있는 공격자를 차단하고 몇 가지 요청만 받은 상태에서 Fail2ban은 실시간으로 읽고 다음을 차단합니다.
2021-09-03 18:46:13,759 fail2ban.filter [32586]: INFO [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:46:13
2021-09-03 18:46:13,909 fail2ban.actions [32586]: NOTICE [nginx-40x-req] Ban XX.XX.XX.XX
2021-09-03 18:46:18,855 fail2ban.filter [32586]: INFO [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:46:18
2021-09-03 18:47:07,004 fail2ban.filter [32586]: INFO [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:47:06
2021-09-03 18:48:34,390 fail2ban.filter [32586]: INFO [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:48:34
2021-09-03 18:48:54,230 fail2ban.filter [32586]: INFO [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,231 fail2ban.filter [32586]: INFO [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,231 fail2ban.filter [32586]: INFO [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,335 fail2ban.actions [32586]: NOTICE [nginx-40x-req] Ban XX.XX.XX.XX
2021-09-03 18:50:08,488 fail2ban.filter [32586]: INFO [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:50:08
그래서 나는 여전히 문제가 아마도 읽기 속도라고 생각합니다.
편집3:
마지막으로 Fail2ban 버전을 0.11.2로 업그레이드하고 날짜 패턴을 추가했으며 주소 감지기를 변경했습니다. 이제 nginx 파일을 훨씬 더 빠르게 읽는 것 같습니다.
[Definition]
failregex = ^{"status": (400|401|403), "request_time": [0-9\.]+,\s+"remote_addr": "<ADDR>",
datepattern = "@timestamp": "%%Y-%%m-%%dT%%H:%%M:%%S%%z"
답변1
- 액세스 로그를 모니터링하는 것은 바람직하지 않습니다.실패2반/위키: 모범 사례특히 "기생 로그 트래픽 감소" 부분.
- 부적절한 정규 표현식으로 인해 Fail2bans가 "읽기 속도가 로그 속도보다 느릴 수 있습니다"라는 문제가 발생할 수도 있습니다. RE가 좋지 않은 것 같습니다. 하지만 더 빠르게 만들 수 있으므로 로깅 형식을 변경하면 됩니다. 또한 단일 및 정밀을 지정하면
datepattern
처리 속도를 높이는 데 도움이 될 수 있습니다. - 전체적으로 알려진 경쟁 조건을 생성할 수 있습니다. Fail2ban은 v.0.10.5까지 영향을 받았습니다. 참조https://github.com/fail2ban/fail2ban/issues/2660자세한 내용은 (수정 사항은 v.0.10.6 / v.0.11.2 내에서 릴리스되었습니다)
또한 유사한 문제에 대한 답변도 기록해 두십시오.https://github.com/fail2ban/fail2ban/issues/3021#issuecomment-834287295.