Как заблокировать все попытки входа в систему root с помощью denyhosts и / или fail2ban?

В настоящее время я блокирую все логины ssh, используя root. Но я хотел пройти лишнюю милю и заблокировать IP-адрес клиента, который пытался войти в систему как root. В настоящее время у меня есть и работает denyhosts и fail2ban, могу ли я использовать denyhosts и или fail2ban для блокировки IP-адресов тех, кто пытается войти в систему как root?

4 ответа

Решение

В зависимости от вашего дистрибутива, отредактируйте /etc/fail2ban/jail.confОбновите [ssh] раздел, чтобы показать что-то вроде этого

[ssh]

enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
bantime = 3600
maxretry = 3

Измените параметры как требуется. Он не будет специально блокировать root, но каждая попытка не удалась. Будь осторожен с maxretry и bantime, Если вы не в состоянии с вашим собственным паролем, в то время как maxtretry установите низкий уровень, вы блокируете себя для bantime, Перезапустите fail2ban.

Я не буду пытаться заблокировать IP-адрес навсегда, так как множество попыток исходит от динамических IP-адресов, которые могут блокировать некоторых законных пользователей в более поздний момент времени.

(В некоторых дистрибутивах для ваших изменений предлагается файл jail.options. Это предпочтительное место для внесения ваших изменений, поскольку на него не должны влиять обновления, перезаписывающие файл conf.)

Скопируйте этот код в новый файл /etc/fail2ban/filter.d/sshd-root.conf:

[INCLUDES]

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

[Definition]

_daemon = sshd

failregex = ^%(__prefix_line)sFailed (?:password|publickey) for root from <HOST>(?: port \d*)?(?: ssh\d*)?$

ignoreregex = 

ПОЖАЛУЙСТА, ВНИМАНИЕ, что вам, возможно, придется отредактировать failregex, чтобы точно определить неудачные попытки входа в систему root - используйте:

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

чтобы проверить, что он определяет правильные записи журнала.

Затем вам нужно отредактировать свой jail.local, чтобы использовать новый фильтр - добавьте что-то вроде:

[ssh]

enabled  = true
port     = 1:65535
filter   = sshd-root
logpath  = /var/log/auth.log
bantime  = 604800
maxretry = 3

Очевидно, вы должны настроить эти значения в соответствии с вашими потребностями. Приведенные выше настройки отбросят все входящие пакеты с нарушающего IP-адреса после трех попыток войти в систему как пользователь root и снова освободят IP-адрес через одну неделю.

Так как по умолчанию /etc/fail2ban/filter.d/sshd.conf уже есть регулярное выражение для AllowUsers и DenyUsers...

...
^%(__prefix_line)sUser .+ from <HOST> not allowed because not listed in AllowUsers\s*$
^%(__prefix_line)sUser .+ from <HOST> not allowed because listed in DenyUsers\s*$
...

Следующее будет:

  • Разрешить соединения от exampleusername с внешних IP-адресов
  • А также root или любые соединения в локальной сети (192.168.0.*)

Строка `/etc/ssh/sshd_config':

AllowUsers exampleusername *@192.168.0.* *@localhost *@127.0.0.1

И в /etc/fail2ban/jail.conf:

ignoreip = 127.0.0.1/8 192.168.0.2/255
...
...
[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 1
findtime = 99999999 
bantime  = 99999999

Как вы заблокировали ssh логины? /bin/false или опция syd_config DenyUsers?

Я не могу придумать ответ из моей головы, но IIRC denyhosts анализирует файл журнала, так что просто посмотрите, не получена ли запись в файле журнала после того, как кто-то попытается войти в систему с отключенным root

Другие вопросы по тегам