- Защита SSH от подбора пароля. Fail2ban
- Установка
- Конфигурационный файл Fail2ban
- Настройка защиты SSH
- Проверка
- Установка и настройка Fail2ban
- 1. Установка Fail2ban
- 2. Создание файла конфигурации
- 3. Глобальные настройки
- Защита SSH
- 5. Проверка настроек
- Заключение
- Защита сервера средством утилиты Fail2ban. Как ее настроить?
- Оглавление
- Принцип работы
- Установка Fail2ban
- Структура конфигурационных файлов
- Первоначальная настройка Fail2ban
- Защита сервиса sshd с помощью Fail2ban
- Защита NGINX
- a) Фильтр аутентификации
- б) Фильтр доступа к скриптам
- в) Фильтр сканеров
- Защита APACHE
- Защита Dovecot
- Защита FTP сервера
- Защита ISPmanager
- Защита WordPress
- Управление fail2ban
- Заключение.
Защита SSH от подбора пароля. Fail2ban
Для защиты вашего сервера от брутфорс-атак (взломов путем перебора паролей) лучше всего настроить и использовать авторизацию по ключу вместо авторизации по паролю.
Другим способом защиты может быть использование утилиты Fail2ban. Fail2ban анализирует логи служб, работающих на сервере, и при обнаружении подозрительной активности блокирует IP-адреса возможных злоумышленников. Fail2ban может использоваться для защиты Apache, FTP, dovecot и многих других сервисов.
В рамках этой статьи мы рассмотрим базовую настройку Fail2ban для защиты службы SSH от подбора пароля.
Установка
Для установки Fail2ban на Ubuntu/Debian выполните:
Для установки на CentOS:
Добавьте 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):
Либо создать пустой файл с таким именем и внести нужные параметры в него:
В новом файле будет достаточно указать только те настройки, значения которых вы хотите изменить: для всех параметров, которые вы не пропишете отдельно, Fail2ban будет применять значения по умолчанию.
Настройка защиты SSH
Откройте файл jail.local для редактирования:
Пример настроек, которые можно добавить в файл:
Такая настройка означает, что если с какого-либо 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:
Проверка
После настройки Fail2ban имеет смысл проверить его работу. Лучше делать это не сразу, а спустя пару часов после сохранения настроек, тогда результат будет более наглядным.
Просмотреть заблокированные IP-адреса можно в iptables:
Также, можно вывести логи работы Fail2ban:
Информацию можно получить и из интерфейса Fail2ban:
Установка и настройка Fail2ban
Уже через несколько дней после установки сервера с смотрящим наружу ssh обычно начинаются попытки взлома. Самый распространенный способ борьбы с подбором паролей – установка на сервер fail2ban.
1. Установка Fail2ban
Fail2ban базируется на простой и понятной концепции. Она включает в себя три стадии:
1. Просмотр логов по определенным в шаблоне параметрам;
2. Проверка на основе таких критериев, как ограничение числа попыток ввода пароля;
3. Создание правила в iptables для блокировки соответствующего ip в течении периода времени
Fail2ban начинает работать сразу после установки, но необходимо произвести минимальную настройку.
2. Создание файла конфигурации
Создатели программы рекомендуют не редактировать файл конфигурации, который ставится по умолчанию, а сделать его копию:
Все правки конфигурации мы будем производить в файле /etc/fail2ban/jail.local, этот файл будет подключен автоматически и его настройки имеют наивысший приоритет.
3. Глобальные настройки
Правила блокировки хранятся в одном файле под названием jail.conf в каталоге /etc/fail2ban
Рассмотрим, что в этом файле
Ignoreip указывает на IP – адрес , которые Fail2ban следует игнорировать. Например, Вам необходимо заходить на сервер из дома. Вы можете просто добавить свой IP или диапазон адресов, разделенные пробелом:
Bantime определяет а какой срок вы хотите блокировать атакующего. По умолчанию это 10 минут.
findtime – интервал времени в секундах, в течение которого программой будет определяться подозрительная активность.
maxretry – число попыток ввода пароля в течение findtime секунд до попадания IP-адреса в черный список.
После редактирования настроек необходимо перезапустить сервис:
Защита 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 неудачных попытки авторизоваться, выглядит так:
Сохраните изменения (в nano это Ctrl+O) и перезапустите fail2ban для применения настроек:
5. Проверка настроек
Этот шаг не является обязательным, но всё же имеет смысл проверить, что всё работает как было задумано. Посмотреть полный список правил, которыми руководствуется программа при мониторинге активности можно с помощью команды
Также для выполнения проверки достаточно несколько раз ввести неправильный пароль при авторизации и убедиться, что дальнейшие запросы от вас не обрабатываются. Следует обратить внимание на следующее:
- желательно проверку производить не с того же IP, с которого осуществляете настройку (чтобы иметь возможность разбанить себя и отредактировать конфиг).
- для проверки время бана лучше выставить поменьше.
- необходимо убедиться, что IP, с которого производится проверка, не был указан в ignoreip.
Заключение
Мы рассмотрели использование fail2ban для защиты от перебора паролей по ssh. Точно также можно защитить FTP, web-сервер, почтовый сервер и т.п. Это спасет от многих проблем.
Защита сервера средством утилиты Fail2ban. Как ее настроить?
Оглавление
Fail2ban — это бесплатная популярная программная платформа с открытым исходным кодом, разработанная для предотвращения вторжений, которую можно использовать для защиты вашего сервера от атак методом перебора паролей. Одной из главных задач Fail2ban является блокировка IP-адреса, активность которого имеет явный вредоносный признак. Из этого руководства вы узнаете, как установить Fail2ban на ваш VPS или физический сервер, чтобы защитить сервисы от атак цель которых несанкционированный доступ в систему, при помощи подбора пароля доступа.
Принцип работы
Fail2ban отслеживает файлы журналов (например, /var/log/auth.log, /var/log/apache/access.log), временно или постоянно запрещая подозрительную активность IP-адреса путем обновления существующих правил брандмауэра. Fail2ban позволяет автоматически выполнить различные действия, такие как заблокировать IP, используя правила iptables, или просто отправить уведомление по электронной почте администратору сервера. По умолчанию Fail2ban поставляется с правилами фильтра под различные сервисы (sshd, apache, mysql proftpd, и т. д.), но конфигурация может быть легко расширена для мониторинга любой другой службы. Все фильтры и действия настраиваются в файлах конфигурации, таким образом Fail2ban является отличным гибким инструментом для предотвращения взлома вашего сервера.
Установка Fail2ban
Для установки на Debian\Ubuntu выполните следующее:
Структура конфигурационных файлов
Файлы настроек находятся в каталоге /etc/fail2ban/. Для понимания работы утилиты, рассмотрим их более детально:
action.d/*.* — конфигурация выполняемых действий;
fail2ban.conf — дефолтный конфигурационный файл;
fail2ban.d/*.* — пользовательские настройки администратора для Fail2ban;
filter.d/*.* — шаблоны для анализа логов и настройки шаблонов;
jail.conf — дефолтные настройки сервисов;
jail.d/*.* — пользовательские настройки администратора для сервисов.
Файлы paths-arch.conf, paths-common.conf, paths-debian.conf и paths-opensuse.conf хранят в себе настройки путей для различных операционных систем семейства Linux.
Первоначальная настройка Fail2ban
Главный конфигурационный файл находится по адресу /etc/fail2ban/jail.conf, однако настоятельно не рекомендуется сразу вносить в него правки, сначала скопируем его под именем jail.local. Настройку продолжим непосредственно в этом файле, это предусмотрено разработчиками, все что вы сконфигурируете в jail.local будет автоматически перезаписывать настройки в jail.conf:
Первым делом в конфигурационный файл необходимо внести ваш IP адрес, чтобы правила Fail2ban на него не распространялись, иначе после запуска службы вы рискуете внести себя в бан и доступ к серверу будет утерян:
Необходимо найти и раскоментировать строку #ignoreip, добавив через пробел свой внешний статический IP адрес. В результате у вас должно получиться следующее:
где 178.20.***.** — Ваш IP адрес.
Здесь же, в секции [DEFAULT] можно задать значения findtime и maxretry, например:
Параметры findtime и maxretry определяют условия, при которых будут блокироваться вредоносные пользователи. Maxretry определяет количество попыток входа, а findtime – интервал времени, в течение которого пользователь должен пройти аутентификацию. Если клиент превысил любой из этих показателей, он будет заблокирован. Bantime определяет длительность блокировки в секундах. Эти параметры в статье будут встречаться неоднократно. Если в настройке какого либо из сервисов вы их не зададите, они будут автоматически браться с секции [DEFAULT].
Не забывайте перезапускать Fail2ban после каждого редактирования конфигурационного файла.
Важно! Путь к файлу хранения логов (logpath) обязан быть указан правильно, иначе перезапуск Fail2ban завершится ошибкой. В случае отсутствия лог-файла по указанному пути, его можно создать командой touch, например:
Теперь мы можем перейти к редактированию общих правил защиты сервисов.
Защита сервиса sshd с помощью Fail2ban
Первым делом очистим наш дефолный конфигурационный файл:
В каталоге jail.d/*.*, отвечающим за настройку сервисов, создадим файл sshd.conf и добавим в него следующие строки:
Чтобы применить изменения перезапустим сервис и внесем его в автозагрузку:
Рассмотрим детально наши действия. Мы их будем выполнять неоднократно для настройки других защищаемых сервисов:
[sshd] # обозначение конфигурируемого сервиса, в данном случае sshd
enabled = true # правило разрешающее мониторинг сервиса.
port: 2102 # Если вы для службы ssh используете стандартный порт 22, эту строку можно не указывать, однако, если вы используете нестандартный порт для подключения настраиваемого сервиса, в нашем примере это 2102, его обязательно необходимо указать.
bantime = 900 # время в секундах, на которое нарушитель будет заблокирован
findtime = 300 # время обнаружения
maxretry = 3 # допустимое количество ошибок аутентификации. На четвертой попытке нарушитель будет заблокирован.
Как это работает: Нарушитель с IP-адресом 123.123.12.13 пытается подобрать пароль к учетной записи на вашем сервере. Параметр findtime задает время, на которое ip адрес попадает под мониторинг от первого момента, когда он начинает фигурировать в логах /var/log/auth.log. Если в течении 300 секунд (5 минут), у нарушителя будет более чем три ошибки аутентификации, он будет заблокирован на 900 секунд (15 минут).
Проверить состояние правила можно командой:
Мы увидим следующее:
Защита NGINX
a) Фильтр аутентификации
Допустим, на ваших сайтах есть разделы требующие аутентификации. Выполнить базовую защиту этих разделов от подбора паролей так же поможет Fail2ban. По умолчанию, защита NGINX доступна из коробки, однако её необходимо активировать. Для этого, в конфигурационном файле /etc/fail2ban/jail.conf находим блок [nginx-http-auth], где изначально указан только logpath. Добавляем в него значения:
на выходе у нас должно получиться следующее:
Обратите внимание на то, как указаны пути к логам. Начиная с версии Fail2ban 0.9.х, писать полные пути не обязательно. Если расположение логов защищаемого сервиса стандартное, то пути к ним предусмотрены разработчиками. Значение %(nginx_error_log)s будет равнозначно пути /var/log/nginx/error. log. Вы можете использовать оба варианта.
Теперь создадим файл nginx-http-auth.conf
В который вносим следующие значения, которые являются фильтрами для корректной работы правила:
б) Фильтр доступа к скриптам
Fail2ban является довольно гибки и функциональным инструментом. Если необходимого инструмента в jail.conf нет, опытный администратор может его написать сам. Например, мы хотим заблокировать ip адрес, который обращается к файлам с расширениями php, asp, exe, pl, cgi, scgi. Это очень полезный фильтр для обнаружения всякого рода эксплойтов.
Внимание! Будьте внимательны при использовании этого фильтра. Оно имеет смысл если у вас статический сайт, или вы четко уверены, к выполнению каких скриптов необходимо применить фильтрацию. Если сайт разрабатывали не вы, обратитесь за консультацией к разработчику
Для начала отредактируем главный конфигурационный файл:
В него необходимо добавить секцию [nginx-noscript], которая по умолчанию не существует:
Теперь создадим файл фильтра, к которому будет отсылаться наше правило при анализе access.log web-сервера:
Вносим в него следующее:
Изменения вступят в силу после перезагрузки сервиса Fail2ban
в) Фильтр сканеров
Сами по себе сканеры не несут какой либо угрозы сайту, однако сканирование вашего сайта может быть тем самым звоночком, что злоумышленник ищет его уязвимые места. Определить сканеры легко по всплеску ошибок 403 и 404 в /var/log/nginx/access.log. Итак, приступим:
Добавляем следующие блоки:
Создаем правило фильтрации для ошибок 403:
Создаем правило фильтрации для ошибок 404:
Рассмотренный фильтр так же очень полезен при настройке фильтрации для web-сервера Apache. Он служит своего рода защитой от DDoS аттак и существенно может улучшить производительность web-сервера. Логика данного фильтра следующая: 404 — это код состояния HTTP, который указывает, что запрошенная веб-страница не может быть найдена на сервере. Другими словами, запрошенная веб-страница не существует или не работает.
И хакеры используют это как инструмент DDoS. Они генерируют тысячи запросов в минуту к несуществующим веб-страницам, что приводит к снижению производительности web-сервера или его полной неработоспособности.
Защита APACHE
В файле /etc/fail2ban/jail.local так же предусмотрена защита web-сервера Apache. Настройка аналогична настройке web-сервера NGINX, который мы рассмотрели в предыдущем разделе. Пройдемся кратко, по основным доступным фильтрам и за что они отвечают:
[apache-auth] — Определяет неудачные попытки ввода пароля.
[apache-badbots] — Определяем ботов, которые ищут email адреса
[apache-noscript] — Блокируем доступ к определенным скриптам
[apache-overflows] — Предотвращаем попытки переполнения Apache
[apache-nohome] — Блокируем неудачные попытки поиска домашней директории
[apache-botsearch] — Определяем ботов, которые перебором ищут популярные скрипты.
Каждое из правил активируется добавлением в блок строки enabled = true. Так же, в каждом блоке вы можете задать правила bantime, findtime и maxretry, которые рассмотрены выше.
Для примера, создадим несколько правил обнаружения:
Если вы используете Apache с PHP, вам может понадобиться раздел [php-url-fopen]
Защита Dovecot
Полезным будет поставить защиту от подбора паролей на почтовые ящики, если Вы используете этот популярный IMAP\POP3-сервер. Добавим секцию для фильтра в главный конфигурационный файл:
Защита FTP сервера
Выставить защиту вашего FTP сервера так же не трудно. Однако, перед настройкой вы должны учесть, какой из FTP вы используте (vsFTPd, proFTPd, Pure-FTPd etc), настройки могут отличаться. Например, если вы используете Pure-FTPd, добавим секцию для фильтра в главный конфигурационный файл:
Защита ISPmanager
Добавим секцию для фильтра в главный конфигурационный файл:
Защита WordPress
Рассмотрим защиту популярного движка WordPress от подбора паролей. Добавим секцию для фильтра в главный конфигурационный файл:
Управление fail2ban
Программа Fail2Ban состоит из fail2ban-server и fail2ban-client. Серверная часть работает в фоновом режиме и отвечает за отработку всех активированных правил. Клиент — ваши непосредственные правила, которые взаимодействуют с сервисом.
Перезапуск и проверка состояния Fail2ban:
Полный список правил:
Проверка срабатывания правила:
Проверить работу служб:
Показать состояние указанного jail:
Допустим, произошла ошибка, и ip адрес 123.123.12.13 не является нарушителем и нам его необходимо разблокировать:
Если необходимо добавить разрешение для данного ip адреса выполните:
Удалить ip адрес из доверенных:
Для просмотра списка всех доверенных адресов:
Однако, все разрешения которые вы внесете используя команду addignoreip — временные и после перезапуска службы Fail2ban этот список будет автоматически очищен. Если вам необходимо внести ip адрес на постоянной основе и внести его в конфигурационный файл /etc/fail2ban/jail.d/ .conf добавив с новой строки ещё один параметр:
В эту строку вы можете через пробел добавить как несколько IP адресов, так и целые подсети, например 172.16.1.0/24
Заключение.
В данной статье мы рассмотрели популярную утилиту Fail2ban, которая существенно может повысить безопасность вашего сервера. Утилита гибкая в настройке. Мы рассмотрели основные правила обнаружения для ssh, ftp, nginx и apache, которые будут актуальны ввиду того, что используются повсеместно. Рассмотреть же все возможности Fail2ban в рамках одной статьи крайне сложно, все зависит от поставленных перед вами задач и используемых сервисов. Однако логика создания правил прозрачно просматривается.
Если Вы планируете купить выделенный сервер или арендовать VPS в нашей компании, наша техническая поддержка поможет обеспечить бесперебойную работу сервера и проконсультирует Вас о принципах организации безопасности на Вашем сервере.