На главную
- Инструкции для UNIX-систем
- Обзор
- Подключение к серверу по SSH
- Подключение к серверу по SFTP
- Авторизация по SSH-ключу
- Смена или сброс пароля root
- Смена пароля root для MySQL
- Добавление пользователей
- Управление правами доступа
- Защита SSH от подбора пароля. Fail2ban
- Подключение к базе данных MySQL
- Создание дампа базы и восстановление данных
- Установка LAMP на Ubuntu
- Установка phpMyAdmin на Ubuntu с LAMP
- Установка SSL-сертификата на Nginx
- Установка модулей PHP (CentOS)
- Установка модулей PHP (Debian / Ubuntu)
- Настройка параметров PHP (CentOS)
- Настройка параметров PHP (Debian / Ubuntu)
- Настройка перенаправлений
- Настройка перенаправлений (Nginx)
- Настройка FTP в Ubuntu 20.04
- Оптимизация MySQL с помощью MySQLTuner
- Сканирование с помощью ClamAV
- Управление службами в systemd
- Логирование в systemd
- Аудит системных событий
- Добавление дополнительного IP
- Настройка статического IP
- Добавление и удаление диска
- Изменение размера диска
- Монтирование резервных копий
- Создание swap, изменение его размера
- Установка и удаление программ. Менеджеры пакетов
- Установка графической оболочки XFCE на Ubuntu
- Настройка iptables
- Настройка OpenVPN
- Установка произвольной ОС на сервер
- Удаленный доступ к MySQL
- Установка QEMU-агента
- Установка Zabbix-агента
- Установка и работа с PostgreSQL
- Установка почтового сервера iRedMail
- Установка SSL на сервер с Keitaro
- Установка Minecraft на CentOS 7
- Запуск Wordpress на сервере c Ubuntu
- Запуск бота в фоновом режиме
- Установка сертификатов Минцифры
- Подготовка образа для создания облачного сервера
- Диагностика и решение проблем
- Инструкции для Windows
- Панели управления
Защита SSH от подбора пароля. Fail2ban
Для защиты вашего сервера от брутфорс-атак (взломов путем перебора паролей) лучше всего настроить и использовать авторизацию по ключу вместо авторизации по паролю.
Другим способом защиты может быть использование утилиты Fail2ban. Fail2ban анализирует логи служб, работающих на сервере, и при обнаружении подозрительной активности блокирует IP-адреса возможных злоумышленников. Fail2ban может использоваться для защиты Apache, FTP, dovecot и многих других сервисов.
В рамках этой статьи мы рассмотрим базовую настройку Fail2ban для защиты службы SSH от подбора пароля.
Для установки Fail2ban на Ubuntu/Debian выполните:
sudo apt update
sudo apt install fail2ban -y
Для установки на CentOS:
sudo yum update && yum install epel-release
sudo yum install fail2ban
Добавьте Fail2ban в автозагрузку:
sudo systemctl enable fail2ban
На Ubuntu защита для SSH начнет работать сразу после установки. По умолчанию Fail2ban будет на 10 минут блокировать IP-адреса, с которых в течение 10 минут было выполнено 5 неудачных попыток авторизации.
Эти и другие параметры работы утилиты можно изменить в ее настройках.
Конфигурационный файл Fail2ban
Настройки Fail2ban хранятся в конфигурационном файле /etc/fail2ban/jail.conf.
Настройки разделены по секциям. В [DEFAULT] указываются общие параметры, которые определяют работу Fail2ban в целом и применяются для большинства служб. Специфические настройки для той или иной службы прописываются внутри соответствующей секции (например, [sshd], [apache-auth], [vsftpd]).
Менять какие-либо параметры напрямую в файле jail.conf не рекомендуется. Вместо этого необходимо создать новый файл jail.local, разместив его в той же директории.
Можно либо сделать копию оригинального файла (может быть удобно, если вы планируете настроить Fail2ban для защиты нескольких служб, не только SSH):
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Либо создать пустой файл с таким именем и внести нужные параметры в него:
sudo touch /etc/fail2ban/jail.local
В новом файле будет достаточно указать только те настройки, значения которых вы хотите изменить: для всех параметров, которые вы не пропишете отдельно, Fail2ban будет применять значения по умолчанию.
Настройка защиты SSH
Откройте файл jail.local для редактирования:
sudo nano /etc/fail2ban/jail.local
Пример настроек, которые можно добавить в файл:
[DEFAULT]
ignoreip = 95.111.123.21
[sshd]
enabled = true
findtime = 120
maxretry = 3
bantime = 43200
Такая настройка означает, что если с какого-либо IP-адреса, за исключением указанного в ignoreip, в течение 2 минут будут выполнены 3 неудачные попытки авторизоваться, Fail2ban заблокирует этот адрес на 12 часов.
В секции DEFAULT могут быть указаны такие параметры, как период блокировки (bantime), количество попыток (maxretry) и пр., но в рамках данной инструкции мы пропишем большинство настроек в отдельной секции для SSH, а в раздел DEFAULT включим только параметр ignoreip:
- ignoreip — это «белый список» IP-адресов, то есть те адреса, которые не будут заблокированы при неудачных попытках подключения. Здесь можно прописать ваш собственный IP (если он статический, а не динамический), с которого вы подключаетесь к серверу. Можно указать несколько адресов через пробел или маску подсети.
Если вам не требуется белый список, строку можно просто закомментировать, указав перед ней #.
В секции [sshd] указываются настройки для работы Fail2ban с конкретной службой — SSH. В зависимости от системы, секция может называться [sshd], [ssh] или [ssh-iptables] (можно проверить в файле jail.conf).
Как упоминалось выше, при отсутствии того или иного параметра в этом файле, Fail2ban будет использовать значения по умолчанию. Соответственно, указать требуется только те настройки, значения которых нужно изменить.
Здесь мы прописали параметры:
- enabled — обязательный параметр, определяющий включение или отключение секции. Для включения должно быть установлено значение true, оно указано по умолчанию. Обратите внимание, что в CentOS этот параметр по умолчанию закомментирован. Если вы работаете с копией основного файла jail.conf, не забудьте раскомментировать эту строку (убрать #), чтобы активировать секцию;
- bantime — продолжительность бана в секундах, то есть период, на который подозрительный IP-адрес будет заблокирован;
- maxretry — количество неудачных попыток в течение периода findtime, после которых будет выполнена блокировка;
- findtime — период в секундах, в течение которого действие (в данном случае — неудачная попытка подключения) должно повториться определенное количество раз (maxretry), после чего будет выполнена блокировка.
Дополнительно могут быть настроены и другие параметры, например:
- port — порт, используемый службой, в данном случае SSH. Если SSH у вас работает на нестандартном порту (то есть не 22), пропишите его здесь. Если порт стандартный, указывать эту настройку необязательно.
- logpath — путь к файлу лога, который анализирует Fail2ban. По умолчанию это стандартный путь к логу sshd.
- action — выполняемое действие при блокировке IP. По умолчанию выполняется блок подозрительного IP путем изменения правил iptables.
Чтобы заблокировать все порты для этого IP, можно использовать: action = iptables-allports.
Если на сервере настроен firewalld или ufw, то для фильтрации с их помощью нужно указать соответствующее значение для action: firewallcmd-ipset и ufw, соответственно.
Полный список действий доступен в /etc/fail2ban/action.d.
После сохранения изменений перезапустите Fail2ban:
sudo systemctl restart fail2ban.service
Проверка
После настройки Fail2ban имеет смысл проверить его работу. Лучше делать это не сразу, а спустя пару часов после сохранения настроек, тогда результат будет более наглядным.
Просмотреть заблокированные IP-адреса можно в iptables:
sudo iptables -L
Также, можно вывести логи работы Fail2ban:
sudo tail /var/log/fail2ban.log
Информацию можно получить и из интерфейса Fail2ban:
sudo fail2ban-client status sshd