Есть ли способ автоматически блокировать IP-адрес, когда пользователь пытается войти в систему как любое неверное имя пользователя? У меня уже есть:
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 31536000
в /etc/fail2ban/jail.conf
Я не могу помочь вам с fail2ban, но я использую denyhosts для этой цели. Вы можете настроить довольно много параметров, а также иметь распределенную базу данных, куда вы можете отправлять и получать других плохих хостов.
Вот более подробное руководство:
Установить пакет denyhosts
(sudo apt-get install denyhosts
)
Посмотрите на конфигурацию по умолчанию в /etc/denyhosts.conf
, вас могут заинтересовать DENY_TRESHOLD_INVALID
, [ 114] и DENY_TRESHOLD_ROOT
варианты.
Что касается сервера синхронизации, он по умолчанию отключен, и вам необходимо включить его, раскомментировав опцию SYNC_SERVER
.
Также неплохо установить опцию PURGE_DENY
на 1w или что-то подобное в случае, если вы заблокируете себя, поэтому запись будет очищена через неделю, и вы сможете снова войти в систему.
Почему бы просто не запретить все входы в систему root полностью через SSH, а не использовать Fail2Ban или другие вещи? Сделав это и отказавшись от использования имени пользователя root, вы устраните проблему, связанную с тем, чтобы заблокировать всех пользователей, потому что даже если они угадывают пароль root, он будет запрещать им вход. Независимо от того, сколько раз они пытаются.
В /etc/ssh/sshd_config
найдите строку, содержащую PermitRootLogin
. Отредактируйте его в любом текстовом редакторе, но убедитесь, что вы используете sudo
/ gksudo
(gksudo, только если вы используете текстовый редактор с графическим интерфейсом). Сделайте ту строку, о которой я упоминал, скажите PermitRootLogin no
, затем сохраните и выполните sudo service ssh restart
.
(Этот ответ был написан для неправильно сформулированного исходного вопроса. Этот ответ не будет изменен для соответствия пересмотренному вопросу, потому что я не могу ответить на него. Я могу удалить ЭТОТ ответ в будущем)
Это намеренно не поддерживается в fail2ban
:
Другими словами, недопустимые пользователи могут получить 2 попытки, в то время как неверный пароль для действительных пользователей получит 5 попыток. Как это можно сделать в fail2ban?
Убедительный аргумент против этого говорит о том, что он позволяет злоумышленнику узнать, является ли имя пользователя действительным, и, таким образом, резко уменьшает пространство поиска атаки методом перебора. [ 114] blockquote>
Я нашел ваш вопрос, пытаясь сделать то же самое, но теперь я передумал. Помимо секретной выгоды, зачем экономить время злоумышленника, обрезая его пораньше?
Вы можете повысить свою безопасность, включив секцию roundcube. В Roundcube действительно есть доступные плагины капчи, которые уменьшат это, но пользователи будут жаловаться, если им придется вводить капчу для входа в систему по почте.
Fail2ban предоставляет простое решение для этого.
Прежде всего, нам нужно добавить круглый куб в /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]
в приведенном выше фактической папке круглого куба
например /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
.
Наслаждайтесь
Сначала определите фильтр для недопустимых пользователей в 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.