Fail2Ban или DenyHosts для блокировки неверных попыток входа по SSH
Есть ли способ автоматически заблокировать IP-адрес, когда пользователь пытается войти в систему как любое неверное имя пользователя? У меня уже есть:
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 31536000
в /etc/fail2ban/jail.conf
5 ответов
Я не могу помочь вам с fail2ban, но я использую denyhosts для этой цели. Вы можете настроить довольно много параметров, а также иметь распределенную базу данных, куда вы можете отправлять и получать других плохих хостов.
Вот более подробное руководство:
устанавливать denyhosts
пакет (sudo apt-get install denyhosts
)
Посмотрите на конфигурацию по умолчанию в /etc/denyhosts.conf
вы можете быть заинтересованы в DENY_TRESHOLD_INVALID
, DENY_TRESHOLD_VALID
а также DENY_TRESHOLD_ROOT
опции.
Что касается сервера синхронизации, он по умолчанию отключен, и вам нужно будет включить его, раскомментировав SYNC_SERVER
вариант.
Это также не плохо установить PURGE_DENY
вариант 1w или что-то подобное в случае, если вы блокируете себя, поэтому запись будет очищена через неделю, и вы сможете снова войти в систему.
Сначала определите фильтр для недопустимых пользователей в filter.d/sshd-invaliduser.conf
:
[INCLUDES]
before = common.conf
[Definition]
_daemon = sshd
failregex = ^%(__prefix_line)s[iI](?:llegal|nvalid) user .*? from <HOST>(?: port \d+)?\s*$
ignoreregex =
[Init]
journalmatch = _SYSTEMD_UNIT=sshd.service + _COMM=sshd
Затем включите его в jail.local
:
[sshd-invaliduser]
enabled = true
maxretry = 1
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Это работает с fail2ban 0.9.6-2 на Debian 9.
Это намеренно не поддерживается вfail2ban
:
Другими словами, недопустимые пользователи могут получить 2 попытки, в то время как неверный пароль для действительных пользователей - 5 попыток. Как это можно сделать в fail2ban?
Убедительный аргумент против этого говорит о том, что он позволяет злоумышленнику узнать, является ли имя пользователя действительным, и, таким образом, значительно уменьшает пространство поиска атаки методом "грубой силы".
Я нашел ваш вопрос, пытаясь сделать то же самое, но теперь я передумал. Помимо секретной выгоды, зачем экономить время злоумышленника, отсекая его пораньше?
Почему бы просто не запретить все входы в систему root полностью через SSH, а не использовать Fail2Ban или другие вещи? Сделав это и отказавшись от использования имени пользователя root, вы избавитесь от необходимости блокировать всех, потому что даже если они угадают пароль root, он будет запрещать им вход. Независимо от того, сколько раз они пытаются.
В /etc/ssh/sshd_config
найти строку, содержащую PermitRootLogin
, Отредактируйте это любым текстовым редактором, но убедитесь, что вы используете sudo
/gksudo
(gksudo, только если вы используете текстовый редактор с графическим интерфейсом). Сделай ту строчку, о которой я говорил PermitRootLogin no
затем сохраните и сделайте sudo service ssh restart
,
(Этот ответ был написан для неправильно заданного исходного вопроса. Этот ответ не будет изменен для соответствия пересмотренному вопросу, потому что я не могу ответить на него. Я могу удалить ЭТОТ ответ в будущем)
Вы можете повысить свою безопасность, включив раздел roundcube. В Roundcube действительно есть доступные плагины капчи, которые уменьшат это, но пользователи будут жаловаться, если им придется вводить капчу для входа в систему по почте.
Fail2ban предоставляет простое решение для этого.
Для начала нам нужно добавить roundcube в /etc/fail2ban/jail.conf
[roundcube]
enabled = false
port = http,https
filter = roundcube
action = iptables-multiport[name=roundcube, port="http,https"]
logpath = [YOUR PATH TO ROUNDCUBE HERE]/logs/errors
maxretry = 5
findtime = 600
bantime = 3600
+ Изменить [YOUR PATH TO ROUNDCUBE HERE]
в приведенном выше к вашей фактической папке Roundcube
например /home/roundcube/public_html/logs/errors
Далее нам нужно создать фильтр.
добавлять /etc/fail2ban/filter.d/roundcube.conf
[Definition]
failregex = IMAP Error: Login failed for . from <HOST>(\. . in .?/rcube_imap\.php on line \d+ \(\S+ \S+\))?$
ignoreregex =
Теперь у нас есть основы, нам нужно проверить наш фильтр. Для этого мы используем fail2ban-regex
,
наслаждаться