В данной статье мы рассмотрим защиту SSH-сервиса от брутфорс-атак на примере сервера Ubuntu 16.04 с помощью программы fail2ban, которая эффективно отслеживает сетевую активность и блокирует запросы с устройств, IP-адрес которых попал в чёрный список.
Технические требования
- сервер с Ubuntu 16.04
- пользователь с sudo-правами
- текстовый редактор nano
Шаг 1. Установка fail2ban
Перед установкой программы стоит обновить индекс пакетов, выполнив команду:
sudo apt-get update
Пакет fail2ban присутствует в официальном репозитории, поэтому его можно установить одной командой:
sudo apt-get install fail2ban -y
Итак, fail2ban установлен. Теперь необходимо произвести минимальную настройку.
Шаг 2. Создание файла конфигурации
Программа включает в себя готовый файл конфигурации, однако создателями программы не рекомендуется вносить в него изменения, чтобы не возникло проблем при работе с серверов, поэтому мы просто создадим себе его копию:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Все правки конфигурации мы будем производить в файле /etc/fail2ban/jail.local, этот файл будет подключен автоматически и его настройки имеют наивысший приоритет.
Шаг 3. Глобальные настройки
Откройте файл /etc/fail2ban/jail.local текстовым редактором. Так как мы рассматриваем настройку на примере Ubuntu, то будем использовать nano:
sudo nano /etc/fail2ban/jail.local
Как и в большинстве конфигов, здесь всё, что находится справа от знака #, является комментарием и не учитывается программой. В первую очередь нас интересует секция [DEFAULT]. В ней содержатся основные правила:
- ignoreip - указание, какие IP-адреса не должны блокироваться. Вы можете задать через пробел несколько адресов, которые fail2ban не будет учитывать в своих проверках. Например, если у вас постоянный IP-адрес, то вы можете указать его, и тогда при ошибочном вводе пароля не будете заблокированы.
- bantime - время в секундах, в течение которого подозрительный IP-адрес будет заблокирован.
- findtime - интервал времени в секундах, в течение которого программой будет определяться подозрительная активность.
- maxretry - число неуспешных попыток авторизации в течение findtime секунд до попадания IP-адреса в бан.
Чтобы настройки вступили в силу, необходимо перезапустить fail2ban:
sudo service fail2ban restart
К слову, fail2ban ведёт лог, поэтому если не удаётся перезапустить программу из-за некорректной конфигурации, то стоит заглянуть в лог:
tail -n 20 -f /var/log/fail2ban.log
Параметр n указывает, сколько последних строк из лога вывести на экран.
Шаг 4. Защита SSH
Файл конфигурации fail2ban имеет по умолчанию подготовленные секции для различных сервисов, поэтому защита какого-либо из них требует минимальных усилий и знаний. Итак, откроем снова файл конфигурации /etc/fail2ban/jail.local и найдём в нём секцию [sshd] (в вашей системе это может быть [ssh] или [ssh-iptables], если это так, то используйте ту секцию, которая у вас есть). Пробежимся по параметрам (в большинстве своём они не являются обязательными, и если не будут указаны, то применяются настройки по умолчанию):
- enabled - состояние (true/false) фильтра, показывающее, включен он или выключен.
- filter - какой фильтр применяется (со списком фильтров можно ознакомиться в /etc/fail2ban/filter.d/).
- action - действия, выполняемые при бане IP-адреса.
- logfile - файл с логами, которые будет отслеживать fail2ban.
Исходя из этого, конфиг, банящий IP на 12 часов, если с него в течение 10 минут было произведено 3 неудачных попытки авторизоваться, выглядит так:
[sshd]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
logpath = /var/log/auth.log
findtime = 600
maxretry = 3
bantime = 43200
Сохраните изменения (в nano это Ctrl+O) и перезапустите fail2ban для применения настроек:
sudo service fail2ban restart
Шаг 5. Проверка настроек
Этот шаг не является обязательным, но всё же имеет смысл проверить, что всё работает как было задумано. Посмотреть полный список правил, которыми руководствуется программа при мониторинге активности можно с помощью команды
sudo iptables –L
Также для выполнения проверки достаточно несколько раз ввести неправильный пароль при авторизации и убедиться, что дальнейшие запросы от вас не обрабатываются. Следует обратить внимание на следующее:
- желательно проверку производить не с того же IP, с которого осуществляете настройку (чтобы иметь возможность разбанить себя и отредактировать конфиг).
- для проверки время бана лучше выставить поменьше.
- необходимо убедиться, что IP, с которого производится проверка, не был указан в ignoreip.
- важно знать, как удалить IP-адрес из чёрного списка:
sudo fail2ban-client set SECTION unbanip IP
где SECTION - название секции в конфигурационном файле, в соответствии с правилами которой IP был заблокирован, а IP - адрес, который требуется разблокировать. В нашем случае команда выглядит так:
sudo fail2ban-client set sshd unbanip XXX.XXX.XXX.XXX
Итак, пробуем: для теста я поставил maxretry = 2, bantime = 600, то есть при двух ошибках мой IP-адрес будет заблокирован на 10 минут.
ssh root@95.213.195.80
root@95.213.195.80's password:
Permission denied, please try again.
root@95.213.195.80's password:
После второй попытки консоль пару минут ожидала ответа от сервера, но в итоге соединение было разорвано. Дальнейшие попытки соединения в течение 10 минут отклонялись на стороне сервера ещё до запроса пароля, как и ожидалось:
ssh root@95.213.195.80
ssh: connect to host 95.213.195.80 port 22: Connection refused
Заключение
Мы рассмотрели использование fail2ban для защиты SSH от брутфорса. Аналогичным образом можно защитить FTP, apache, postfix, dovecot и многие другие сервисы. Это убережёт вас от проникновения злоумышленников на сервер путём подбора пароля.
От qwert
Рекомендуемые комментарии
Комментариев нет
Создайте учетную запись или войдите, чтобы комментировать
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти