누군가가 자신의 ssh에 로그인을 시도했지만 실패했다는 이메일을 저와 사용자에게 보내려고 합니다. IP가 금지되었습니다. 하지만 보내려는 이메일의 변수를 어떻게 사용할 수 있는지 모르겠습니다.

Sendmail은 문제 없이 이메일이 전송되고 있으므로 올바르게 설정되어 있습니다.

다음은 내 jail.local 구성입니다.

[sshd]
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
action  = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
             %(mta)s-whois-lines-ssh[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]

그리고 여기 내 action.d/sendmail-whois-lines-ssh.conf가 있습니다.

[INCLUDES]

before = sendmail-common.conf
         helpers-common.conf

[Definition]

norestored = 1
actionban = ( printf %%b "Subject: [Fail2Ban] <name>: banned <ip> from <fq-hostname>
            Date: `LC_ALL=C date +"%%a, %%d %%h %%Y %%T %%z"`
            From: <sendername> <<sender>>
            To: <dest>, <F-USER>@mydomain.cz\n
            Hi,\n
            The IP <ip> has just been banned by Fail2Ban after
            <failures> attempts against <name>.\n\n
            Here is more information about <ip> :\n
            `/usr/bin/whois <ip> || echo missing whois program`\n\n
            Lines containing failures of <ip>\n";
            %(_grep_logs)s;
            printf %%b "\n
            Regards,\n
            Fail2Ban" ) | /usr/sbin/sendmail -f <sender>.mydomain.cz <dest> <F-USER>@mydomain.cz

[Init]
name = default
logpath = /dev/null

나에게 보낸 전자 메일은 구성에서 올바르게 가져왔기 때문에 문제가 없지만 <F-USER>에 값이 없으므로 @mydomain.cz로 전송됩니다.

사용자에게 전자 메일을 보낼 수 있도록 값을 어떻게 얻을 수 있습니까?

편집 SSH에서 적중되는 정규식은 다음과 같습니다.

^pam_unix\(sshd:auth\):\s+authentication failure;\s*logname=\S*\s*uid=\d*\s*euid=\d*\s*tty=\S*\s*ruser=<F-USER>\S*</F-USER>\s*rhost=<HOST>\s.*%(__suff)s$
answer

I am trying to send e-mail to me and user that someone tried to login to their ssh and failed

나는 이 접근 방식과 관련하여 의심의 여지가 거의 없습니다. 예를 들어 이로 인해 도입될 수 있는 특정 "취약점" - RE <F-USER>\S*</F-USER>는 첫 번째 공백까지 무엇이든 일치하므로 예를 들어 일치하는 "사용자 이름"이 이면 [email protected],test메일도 로 보내질 [email protected]수 있습니다. 귀하의 도메인 사용자가 아닙니다. 메일 작업에서 외부 입력(로그에서)을 사용하려고 하기 때문에 다른 시나리오를 상상할 수도 있습니다. 따라서 이것이 일부 주입 가능성의 영향을 받지 않는지 확인하는 것이 좋습니다( 예 : GHSA-m985-3f3v-cwmm 참고 ).

The regex getting hit on SSH is this one ...

failregex는 또한 <F-USER>...</F-USER>사용자 이름으로 저장될 값을 캡처하기 위해 포함해야 하며 무언가와 일치해야 합니다.

다음 은 현재 버전에서 어떻게 보이는지 예입니다(태그로 인한 실패 RE가 아니며 <F-NOFAIL>IP가 없는 메시지에 대한 IP를 찾는 도우미일 뿐입니다 . 자세한 내용은 issues/3189#issuecomment-999571654 참조).

이에 따라 <F-ALT_USER>대체 사용자 이름이 생성되고 일부 가 빈 값과 일치 F-USER하는 경우 이를 티켓의 캡처된 그룹에 저장합니다.<F-USER>...</F-USER>

아마도 (위의 문제/3189에서와 같이) 잘못된 백엔드가 있을 수 있으므로 로 전환하면 systemd다른 sshd-regex를 사용하여 일치시키는 데 도움이 됩니다.

정규 표현식과 관련하여 다음과 같이 변경할 수 있습니다(현재 sshd-filter에서 백포트됨).

- ^pam_unix\(sshd:auth\):\s+authentication failure;\s*logname=\S*\s*uid=\d*\s*euid=\d*\s*tty=\S*\s*ruser=<F-USER>\S*</F-USER>\s*rhost=<HOST>\s.*%(__suff)s$
+ ^pam_unix\(sshd:auth\):\s+authentication failure;(?:\s+(?:(?:logname|e?uid|tty)=\S*)){0,4}\s+ruser=<F-ALT_USER>\S*</F-ALT_USER>\s+rhost=<HOST>(?:\s+user=<F-USER>\S*</F-USER>)?%(__suff)s$

그러나 이것은 이미 issues/3189pam-generic 에서 말했듯이 필터/감옥 의 RE 이므로 sshd 감옥에 이것을 사용하는 것은 정확하지 않습니다(일반적으로 저널 또는 auth.log에서 다른 메시지를 볼 수 있음).

어쨌든 더 깊이 조사하려면 메시지 예제가 필요합니다(또는 금지를 일으킨 sshd-session의 모든 메시지가 포함된 로그 발췌문).