Modify fail2ban failregex to match failed public key authentications via ssh
This line does it:
^%(__prefix_line)sConnection closed by <HOST> \[preauth\]$
Tested with the following logstring:
Apr 29 12:30:12 sendai sshd[25917]: Connection closed by 127.0.0.1 [preauth]
Successfully tested with:
$ fail2ban-regex ~/ssh.log sshd.conf
Running tests
=============
Use regex file : sshd.conf
Use log file : /home/user/ssh.log
Results
=======
Failregex
|- Regular expressions:
[...]
| [12] ^\s*(?:\S+ )?(?:kernel: \[\d+\.\d+\] )?(?:@vserver_\S+ )?(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:)?\s*Connection closed by <HOST> \[preauth\]$
|
`- Number of matches:
[...]
[12] 1 match(es)
Summary
=======
Addresses found:
[...]
[12]
127.0.0.1 (Wed Apr 29 12:30:12 2015)
[..]
Success, the total number of match is 1
No regex hacking is required (at least since fail2ban 0.10.4). In /etc/fail2ban/jail.conf
is the following information:
[sshd]
# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode = normal
So follow the recommendations by creating /etc/fail2ban/jail.local
with your other customisations, along with one of the more stringent modes, for example,
[sshd]
mode = aggressive
This mode now covers failed public keys.
At least in openssh 7.3 the log messages also contain a port number. So I had to modify sebix's solution to the following:
^%(__prefix_line)sConnection closed by <HOST> port \d+ \[preauth\]$