Dec 12 13:15:35 gw1 sshd[19967]: Received disconnect from 66.234.240.251: 11: Bye Bye

Распухание логов роутера заставило меня обратить более пристальное внимание на записи в журналах безопасности sshd.

Dec 12 13:15:35 gw1 sshd[19967]: Received disconnect from 66.234.240.251: 11: Bye Bye

Эта запись появляется по одной причине: у меня запрещён вход на ssh по паролю. Разрешён только по сертификату. Бот который подбирает пароль к ssh к сожалению “тупой” и непрерывно долбится пока у него не закончится словарь. Когда ботов становится много и они настырны, то это и приводит к распуханию логов.

Я посчитал сколько таких записей есть в логе с количеством попыток больше 20-ти.

grep '11: Bye Bye' /var/log/secure* | sed -e 's/^.*Received disconnect from \([0-9]\{1,3\}\(.[0-9]\{1,3\}\)\{3\}\):.*$/\1/g' | sort | uniq -c | awk '{if($1>=20){print $0}}' | sort -nr
  10852 85.236.191.80
   8675 180.166.99.9
   8043 112.216.109.98
   5200 66.234.240.251
   4260 202.159.16.251
    860 46.166.162.14
    788 37.58.80.10
    751 139.159.118.166
    344 202.114.72.243
    339 27.221.10.43
    243 118.175.7.84
    241 117.79.146.58
    239 81.212.109.229
    227 103.23.102.5
    223 197.242.145.194
    207 159.122.113.152
    203 218.248.13.234
    169 115.84.178.168
    138 202.106.211.99
    134 218.38.12.218
    134 210.97.115.248
    129 74.208.221.217
    129 46.148.16.98
    128 5.10.78.54
    120 169.50.6.153
    110 218.57.11.7
    110 157.7.133.67
    107 111.2.199.136
     97 123.116.127.5
     96 168.235.149.30
     94 31.14.162.21
     91 182.131.21.69
     85 123.49.32.40
     74 93.174.93.138
     69 101.251.239.38
     68 200.60.5.75
     56 60.169.78.38
     56 109.169.48.102
     51 61.188.189.7
     50 200.35.150.97
     47 5.10.78.52
     47 115.85.192.40
     45 5.10.74.194
     42 58.60.168.236
     41 89.163.212.64
     38 219.235.227.190
     38 182.73.50.86
     35 219.93.67.114
     35 169.54.91.220
     33 80.82.64.127
     33 159.122.107.155
     27 80.195.4.83
     27 37.59.173.229
     26 121.199.65.21
     26 104.200.78.34
     25 185.112.102.222
     24 89.163.140.142
     23 65.181.123.194
     22 5.10.71.227
     20 94.182.163.75
     20 62.210.214.89

fail2ban на такие записи никак не реагировал. Значит нужно это исправить.
Добавим регулярное выражение в файл /etc/fail2ban/filter.d/sshd.conf

# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
# $Revision: 728 $
#

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf


[Definition]

_daemon = sshd

# Option:  failregex
# Notes.:  regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "<HOST>" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)
# Values:  TEXT
#
failregex = ^%(__prefix_line)s(?:error: PAM: )?Authentication failure for .* from <HOST>\s*$
            ^%(__prefix_line)s(?:error: PAM: )?User not known to the underlying authentication module for .* from <HOST>\s*$
            ^%(__prefix_line)sFailed (?:password|publickey) for .* from <HOST>(?: port \d*)?(?: ssh\d*)?$
            ^%(__prefix_line)sROOT LOGIN REFUSED.* FROM <HOST>\s*$
            ^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$
            ^%(__prefix_line)sUser \S+ from <HOST> not allowed because not listed in AllowUsers$
            ^%(__prefix_line)sauthentication failure; logname=\S* uid=\S* euid=\S* tty=\S* ruser=\S* rhost=<HOST>(?:\s+user=.*)?\s*$
            ^%(__prefix_line)srefused connect from \S+ \(<HOST>\)\s*$
            ^%(__prefix_line)sAddress <HOST> .* POSSIBLE BREAK-IN ATTEMPT!*\s*$
            ^%(__prefix_line)sUser \S+ from <HOST> not allowed because none of user's groups are listed in AllowGroups$
            ^%(__prefix_line)sReceived disconnect from <HOST>: 11: Bye Bye$

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

Проверим то что оно срабатывает. Результат вывожу в файл так как он у меня получается большим.

fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/sshd.conf > aa.aa.txt

Нас интересует срабатывание выражения с индексом 11. Цитату приведу частично.

- Number of matches:
   [1] 0 match(es)
   [2] 0 match(es)
   [3] 0 match(es)
   [4] 0 match(es)
   [5] 2797 match(es)
   [6] 0 match(es)
   [7] 0 match(es)
   [8] 0 match(es)
   [9] 0 match(es)
   [10] 0 match(es)
   [11] 18924 match(es)

Видим что вместе с 5-м сработало и 11-е правило. Что и требовалось.
Теперь можно перезапустить fail2ban.

service fail2ban restart

И посмотреть как fail2ban заблокирует крацкера (cracker).

# tail /var/log/messages
Dec 12 13:17:56 gw1 fail2ban.jail   : INFO   Jail 'ssh-iptables' stopped
Dec 12 13:17:56 gw1 fail2ban.server : INFO   Exiting Fail2ban
Dec 12 13:17:57 gw1 fail2ban.server : INFO   Changed logging target to SYSLOG for Fail2ban v0.8.4
Dec 12 13:17:57 gw1 fail2ban.jail   : INFO   Creating new jail 'ssh-iptables'
Dec 12 13:17:57 gw1 fail2ban.jail   : INFO   Jail 'ssh-iptables' uses Inotify
Dec 12 13:17:57 gw1 .<30>fail2ban.filter : INFO   Added logfile = /var/log/secure
Dec 12 13:17:57 gw1 .<30>fail2ban.filter : INFO   Set maxRetry = 5
Dec 12 13:17:57 gw1 .<30>fail2ban.filter : INFO   Set findtime = 600
Dec 12 13:17:57 gw1 fail2ban.actions: INFO   Set banTime = 600
Dec 12 13:17:57 gw1 fail2ban.jail   : INFO   Jail 'ssh-iptables' started
Dec 12 13:18:03 gw1 .<28>fail2ban.actions: WARNING [ssh-iptables] Ban 66.234.240.251