Jump to content
IPS Invision Community
Sign in to follow this  
qwert

Использование fail2ban для защиты SSH от подбора пароля

Recommended Posts

qwert

В данной статье мы рассмотрим защиту 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 [email protected]
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password:

После второй попытки консоль пару минут ожидала ответа от сервера, но в итоге соединение было разорвано. Дальнейшие попытки соединения в течение 10 минут отклонялись на стороне сервера ещё до запроса пароля, как и ожидалось:

ssh [email protected]
ssh: connect to host 95.213.195.80 port 22: Connection refused

Заключение

Мы рассмотрели использование fail2ban для защиты SSH от брутфорса. Аналогичным образом можно защитить FTP, apache, postfix, dovecot и многие другие сервисы. Это убережёт вас от проникновения злоумышленников на сервер путём подбора пароля.

  • Нравится 1
  • Спасибо 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • Sipsb
      By Sipsb
      Просмотреть файл OAuth Server
      Добавляет сервер OAuth2 к вашему форуму IPS Community Suite 4
      Автор Sipsb Добавлен 10.11.2016 Категория Приложения Разработчик wohali Локализация ENG Версия IPS  
    • qwert
      By qwert
      Проблема в следующем использую ISPmanager Lite 5, Centos 7
      www-домен в режиме FastCGI (Nginx + PHP-FPM), версия PHP 7.2 php.ini для 7.2 настроен глобально на обычную конфигурацию, где display_errors = Off в корне домена добавлен файл index.php с phpinfo();, где php.ini выводится как /opt/php72/etc/php.ini Где может переопределяться значение display_errors?
      Если зайти в /opt/php72/etc/php.ini, то можно увидеть display_errors = Off, но phpinfo(), указанный выше, показывает display_errors = On Та же проблема, если поменять php 7.2 на 5.6.
    • qwert
      By qwert
      php.ini — это конфигурационный файл, который содержит настройки интерпретатора PHP. В панели управления VESTA файл php.ini можно отредактировать во вкладке «СЕРВЕР». 
      Переходим во вкладку «СЕРВЕР», выбираем пункт веб сервер «apache2» и нажимаем на ссылку «CONFIGURE».
      Дальше выбираем вкладку «Настроить PHP.INI».
      Базовые настройки:
      max_execution_time - Количество секунд работы PHP Сценария перед тем, как сценарий будет завершен. Этот лимит предотвращает сбои в работе сервера из-за «зависших сценариев», которым требуется время для выполнения. max_input_time - Количество секунд, которое Сценарий PHP использует для обработки новой информации, такой как загрузки файла. Этот лимит предотвращает замедление работы сервера перегруженным сценарием. memory_limit - Максимальный объем памяти в Мб, доступный php-скрипту. Этот предел предотвращает размещение доступной памяти сервера сценариями с большим кодом. error_reporting - Уровень ошибок в php, которые будут выводиться на сайте: предупреждения, ошибки, использование функций которые помечены устаревшими. Функция работает, когда включена опция display_errors. display_errors - Если опция включена, ошибки и предупреждения будут включены в результат выполнения скрипта (будут включены в сгенерированный html, и отображены на странице сайта, если в скрипте не переопределена данная опция). post_max_size - Максимальный размер данных в байтах, которые могут быть отправлены методом POST. Как правило, должно быть больше, чем upload_max_filesize и меньшим, чем memory_limit. Используются ярлыки для значений байта: K (kilo), M (mega), и G (giga) Например, 16M. upload_max_filesize - Ограничение максимального размера файла, загружаемого на сервер. Указывается в мегабайтах. Для расширенных настроек необходимо нажать кнопку «Дополнительные опции».
      После внесения корректировок, необходимо установить галочку «Перезапустить» и нажать кнопку «Сохранить», после этого веб сервер будет перезагружен и изменения вступят в силу.
×
×
  • Create New...
Вверх