Измените fail2ban failregex для соответствия отказавшей аутентификации с открытым ключом через ssh

fail2ban не распознает отказавший открытый ключ ssh логины, и я предполагаю, что это может быть решено путем изменения failregex из /etc/fail2ban/filter.d/sshd.config соответствовать следующей строке:

<date> <time> <server-hostname> sshd[25917]: Connection closed by <client-ip> [preauth]

Но я не могу найти достойное введение о том, как правильно изменить, сказал failregex. Поскольку я действительно не знаю что переменные как ^%(__prefix_line)s включайте трудно получить работу regex.

Я понимаю, что новая версия 0.9.1 включает regex в matche "Соединение, закрытое [preauth]" строка, но я использую fai2ban из репозитория Debian, и конфигурация 0.9.1 не совместима с той, которую я имею.

7
задан 29 April 2015 в 15:26
6 ответов

Эта строка выполняет это:

^%(__prefix_line)sConnection closed by <HOST> \[preauth\]$

Протестировано со следующей строкой журнала:

Apr 29 12:30:12 sendai sshd[25917]: Connection closed by 127.0.0.1 [preauth]

Успешно протестировано с помощью:

$ 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
9
ответ дан 2 December 2019 в 23:18

По крайней мере, в openssh 7.3 сообщения журнала также содержат номер порта. Поэтому мне пришлось изменить решение sebix на следующее:

^%(__prefix_line)sConnection closed by <HOST> port \d+ \[preauth\]$
6
ответ дан 2 December 2019 в 23:18

Для меня это работает лучше, так как я получаю тонны допустимых записей журнала, соответствующих регулярному выражению «Соединение закрыто», по крайней мере, в вариантах OpenSSH 6.6.1. Поверьте, он также охватывает новый формат журнала OpenSSH, который включает «порт»:

^%(__prefix_line)sDid not receive identification string from <HOST>\s*$
^%(__prefix_line)sReceived disconnect from <HOST>: (port \d*: ){,1}11: (Bye Bye){,1} \[preauth\]\s*$

$ cat /etc/*relea* | grep -i desc
DISTRIB_DESCRIPTION="Ubuntu 14.04.5 LTS"

$ fail2ban-regex /var/log/auth.log filter.d/sshd.conf

Running tests
=============

Use   failregex file : filter.d/sshd.conf
Use         log file : /var/log/auth.log


Results
=======

Failregex: 39 total
|-  #) [# of hits] regular expression
|  12) [16] ^\s*(<[^.]+\.[^.]+>)?\s*(?:\S+ )?(?:kernel: \[\d+\.\d+\] )?(?:@vserver_\S+ )?(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)?\s(?:\[ID \d+ \S+\])?\s*Did not receive identification string from <HOST>\s*$
|  13) [23] ^\s*(<[^.]+\.[^.]+>)?\s*(?:\S+ )?(?:kernel: \[\d+\.\d+\] )?(?:@vserver_\S+ )?(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)?\s(?:\[ID \d+ \S+\])?\s*Received disconnect from <HOST>: (port \d*: ){,1}11: (Bye Bye){,1} \[preauth\]\s*$
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [62412] MONTH Day Hour:Minute:Second
`-

Lines: 62412 lines, 0 ignored, 39 matched, 62373 missed
Missed line(s):: too many to print.  Use --print-all-missed to print all 62373 lines

$ grep "Did not receive identification string from" /var/log/auth.log | wc -l
16
$ grep "Received disconnect from" /var/log/auth.log | grep -v x.x.x.x | wc -l
23
1
ответ дан 2 December 2019 в 23:18

В Ubuntu 18.04 с OpenSSH 7.6p1 мне пришлось расширить правила « cmnfailre » в /etc/fail2ban/filter.d/sshd.conf от

^%(__prefix_line)sConnection closed by authenticating user <F-USER>.+</F-USER> <HOST> port \d+ \[preauth\]$

для соответствия попыткам входа в систему ssh без правильного ключа ssh:

Apr 14 15:27:15 ubuntu-server sshd[8719]: Connection closed by authenticating user root x.x.x.x port 42664 [preauth]
Apr 14 15:27:15 ubuntu-server sshd[8721]: Connection closed by authenticating user root x.x.x.x port 42666 [preauth]
Apr 14 15:27:16 ubuntu-server sshd[8723]: Connection closed by authenticating user root x.x.x.x port 42668 [preauth]
Apr 14 15:27:16 ubuntu-server sshd[8725]: Connection closed by authenticating user root x.x.x.x port 42670 [preauth]
Apr 14 15:27:17 ubuntu-server sshd[8727]: Connection closed by authenticating user root x.x.x.x port 42672 [preauth]
1
ответ дан 2 December 2019 в 23:18

Взлом регулярных выражений не требуется (по крайней мере, начиная с fail2ban 0.10.4). В /etc/fail2ban/jail.conf находится следующая информация:

[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

Поэтому следуйте рекомендациям, создав /etc/fail2ban/jail.local с другими вашими настройками, а также один из более строгих режимов, например,

[sshd]
mode   = aggressive

Этот режим теперь распространяется на неисправные открытые ключи.

11
ответ дан 16 January 2020 в 02:33

В 2021 году в Debian с fail2ban=0.11.2-1 (от Bullseye) все, что вам нужно сделать, это добавить

mode = aggressive

строку в /etc/fail2ban/jail .d/defaults-debian.conf в разделе [sshd]. Это запрещает всем, кто пытается войти в систему как действительный пользователь, используя неправильный открытый ключ. Нет необходимости делать что-либо еще.

0
ответ дан 19 June 2021 в 20:35

Теги

Похожие вопросы