
과거에 너무 긴장해서 오랫동안 놓친 것 같은 Fail2ban에 대한 규칙을 만들려고 노력하고 있으므로 기꺼이 세상에 제출하겠습니다. :-)
무슨 일이 일어났나요?
- Fail2ban/filter/named-antispam.conf 아래에 이미 파일이 생성되었습니다.
- 컨텐츠로 제작했습니다
#cat filter.d/named-antispam.conf
[Definition]
prefregex = ([a-zA-Z][a-zA-Z][a-zA-Z])\s([0-9]|[0-9][0-9])\s([0-9][0-9]):([0-9][0-9]:[0-9][0-9])
failregex = ^rate limit drop all response to <HOST>$
그리고jail.conf
#Disabled for Writing this Articel
[named-antispam]
enabled = false
filter = named-antispam
logpath = /var/log/named/rate.log
bantime = 2628000
maxretry = 30
findtime = 60
- Fail2ban을 활성화하고 디버그로 설정하면 어떻게 되는지 확인해 볼까요?
2021-01-26 11:25:19,461 fail2ban.filterpyinotify[14180]: DEBUG Event queue size: 16
2021-01-26 11:25:19,462 fail2ban.filterpyinotify[14180]: DEBUG <_RawEvent cookie=0 mask=0x2 name='' wd=2 >
규칙을 비활성화하면 오류 없이 디버그를 설정할 수 있습니다. 따라서 이해할 수 없는 오류가 있는 것 같아서 여기에 질문합니다. 그리고 엔딩에서 - 예, 내 로그에 많은 항목이 있지만 Fail2ban은 신경 쓰지 않습니다.
답변1
기본적으로 문제가 무엇인지 제공하지 않았으며 필터에서 포착하려는 메시지가 포함된 로그 발췌도, fail2ban-regex -v
필터로 무엇을 찾으려고 시도하지도 않았습니다.
메시지는 다음과 같습니다.
Jan 26 14:00:10 srv named[26403]: client 192.0.2.100#21324 (example.com): rate limit drop all response to 192.0.2.0/24
그런 다음 주목해야 할 2가지 사항이 있습니다. 첫째, IP는 클라이언트 뒤에 있고(여기 192.0.2.100
) 끝에는 서브넷이 있습니다(IP/CIDR 표기법, 여기 192.0.2.0/24
).
서브넷을 금지하려는 경우(fail2ban 및 선택한 금지 조치가 서브넷을 전혀 금지할 수 있는 경우) 버전에 따라 다음을 사용할 수 있습니다.
다음 중 하나(fail2ban이 지원하는 경우 <SUBNET>
):
failregex = ^\s*\S+\s+named(?:\[\d+\])?: [^:]+: rate limit drop all response to <SUBNET>
아니면 이거:
failregex = ^\s*\S+\s+named(?:\[\d+\])?: [^:]+: rate limit drop all response to (?:<F-IP4>\d+\.\S+</F-IP4>|<F-IP6>\w+\:\S+</F-IP6>)
서브넷 대신 IP를 금지한 후 다음 중 하나를 사용할 수도 있습니다.
failregex = ^\s*\S+\s+named(?:\[\d+\])?: client <ADDR>[^:]*: rate limit drop all response
예를 들어 다음과 같이 확인할 수도 있습니다 fail2ban-regex
.
msg='Jan 26 14:00:10 srv named[26403]: client 192.0.2.100#21324 (example.com): rate limit drop all response to 192.0.2.0/24'
fail2ban-regex "$msg" '^\s*\S+\s+named(?:\[\d+\])?: [^:]+: rate limit drop all response to <SUBNET>'
...
Lines: 1 lines, 0 ignored, 1 matched, 0 missed
또는 로그 파일로 필터를 테스트하려면 다음을 사용하십시오.
fail2ban-regex /var/log/named/rate.log named-antispam
당신 prefregex
과 failregex
- 그들은 단지 정확하지 않습니다. prefregex나 failureregex에는 타임스탬프 일치 부분이 포함되어서는 안 됩니다 datepattern
.위키또는수동, 여기에는 다음이 포함됩니다.
참고: 이는 처리 failregex
후(지정된 경우) 메시지의 나머지 부분에 적용되며 prefregex
, 이는 처리 후에 발생합니다 datepattern
(최상의 패턴과 일치하는 타임스탬프 문자열이 메시지에서 제외됨).
예를 들어 사전 필터링이 필요한 경우 에도 prefregex
의미가 있습니다. 예를 들어 하나 이상의 실패 정규 표현식이 있습니다(그리고 이러한 정규 표현식은 지정된 경우 행의 전체 부분 또는 <F-CONTENT>
및 사이에 포함된 일치하는 RE 부분에 적용됩니다 </F-CONTENT>
. 사전 필터링이 없는 경우 예상되는 것은 prefregex
거의 의미가 없습니다.
어쨌든 어떤 이유로든 필요한 경우 다음과 같습니다.
prefregex = ^\s*\S+\s+named(?:\[\d+\])?: <F-CONTENT>.+</F-CONTENT>$
failregex = ^[^:]+: rate limit drop all response to <SUBNET>
#failregex = ^[^:]+: rate limit drop all response to (?:<F-IP4>\d+\.\S+</F-IP4>|<F-IP6>\w+\:\S+</F-IP6>)
#failregex = ^client <ADDR>[^:]*: rate limit drop all response