Opensmtpd와 함께 작동하기 위해 Fail2Ban에 대한 Regex를 얻을 수 없는 것 같습니다. 건강검진을 받을 수 있나요?

Opensmtpd와 함께 작동하기 위해 Fail2Ban에 대한 Regex를 얻을 수 없는 것 같습니다. 건강검진을 받을 수 있나요?

openSMPTD메일서버를 운영하고 있습니다 . 현재 무차별적인 공격을 받고 있는 것 같은데, 들어올 수 있을지는 의문입니다. 그런데 지속적인 로그인 시도로 서버의 부담을 덜고 싶습니다. fail2ban위반자를 금지하도록 구성하고 있습니다 . 그러나 올바른 정규식을 얻을 수 없어서 화가 났습니다! 나는 보았다freeBSD 포럼의 이 링크fail2ban그것을 잡는 정규식 에 대해 . 그러나 해당 정규식조차도 그들이 제공한 예제 텍스트를 캡처하지 못하는 것 같습니다. 나는 아무 소용이 없도록 정규식을 편집했습니다. 나는 정규식에 매우 약하기 때문에 누군가 나에게 몇 가지 조언을 줄 수 있기를 바랍니다.

내 로그 파일은 다음과 같습니다.

Dec 25 20:03:29 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp connected address=193.169.254.42 host=<unknown>
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp tls ciphers=TLSv1.2:ECDHE-RSA-AES128-SHA256:128
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp authentication user=info result=permfail
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp failed-command command="AUTH LOGIN (password)" result="535 Authentication failed"
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp disconnected reason=quit
"

이를 분석해 보겠습니다. 무차별 대입임을 보여주는 줄은 다음과 같습니다.

f7fa148a43b34578 smtp failed-command command="AUTH LOGIN (password)" result="535 Authentication failed"

인증 실패가 표시됩니다. 그러나 이상하게도 openSMTPD는 금지할 IP 주소를 해당 줄에 포함하지 않습니다. 다음을 수행하려면 그 위에 있는 변수 번호를 찾아야 합니다.

f7fa148a43b34578 smtp connected address=193.169.254.42 host=<unknown>

범죄자의 IP 주소를 볼 수 있는 곳. 알았어, 충분히 공평해. 모든 텍스트를 선택하는 현재 정규식은 다음과 같습니다.

^.*smtp connected address=\w[1-9.]* host=[a-z<>]*\n*[a-zA-Z0-9_.-\s\]\[:=<>"()]*

fail2ban좀 더 세밀한 것을 원 하지만 . 두 사람이 동시에 연결할 수 있고 잘못된 회선이 선택되어 금지될 수 있으므로 적절한 IP 주소를 금지할 수 있는 명확한 방법이 있는지 잘 모르겠습니다.

어떤 제안이 있으십니까?

답변1

여러 줄 정규식을 사용하는 더 새롭고 깔끔한 방법은 버전 <F-...>에 도입되었지만 0.10.0불행히도 아직 잘 문서화되지 않은 태그를 사용하는 것입니다.

[Definition]

prefregex = <F-MLFID>: \w{16} </F-MLFID><F-CONTENT>.+</F-CONTENT>$

failregex = <F-NOFAIL>smtp connected address=(?:<IP6>|<IP4>)</F-NOFAIL>
            smtp failed-command command="AUTH LOGIN \(password\)" result="535 Authentication failed"
            <F-NOFAIL><F-MLFFORGET>smtp disconnected</F-MLFFORGET></F-NOFAIL>

설명

사전 필터 정규식은 각 줄을 전처리하고 세션 ID를 캡처하는 데 사용됩니다. 세션 ID는 해당 f7fa148a43b34578부분이라고 가정하고 여러 줄에 걸쳐 있는 동일한 세션을 식별합니다. 내부의 텍스트 <F-CONTENT>는 우리가 관심을 갖고 있는 부분이며, Failregex에 의해 처리될 부분입니다.

Failregex에서는첫 번째하나는 금지 조치가 내려질 때 필요한 IP 주소와 라인이 일치하며 <F-NOFAIL>라인이 실패로 간주되지 않음을 나타내기 위해 태그에 포함됩니다. 그만큼두번째regex는 실제 인증 실패이며, 일치하는 경우 fall2ban은 이전에 캡처한 IP 주소를 차단합니다. 그만큼마지막<F-MLFFORGET>하나는 캡처된 연결 ID(사용자의 연결이 끊어졌으므로)를 삭제할 시간임을 알리기 위해 지시문 으로 둘러싸여 있으며 , <F-NOFAIL>해당 행 자체도 실패가 아니기 때문에 태그 사이에도 포함됩니다.

fail2ban-regex도구를 사용하여 이를 테스트 할 수 있습니다 .

링크된 포럼 게시물의 정규식이 왜 작동하지 않는지 알 수 있습니다. 문자열은 둘 이상의 부분에서 다릅니다. 따라서 더 일반적인 경우와 일치시키려면 위에서 두 번째 실패 정규식을 변경해야 합니다(저는 opensmtpd를 사용하지 않으므로 이에 대해 도움을 드릴 수 없습니다).

관련 정보