Thank you for reading this post, don't forget to subscribe!
Fail2ban — это бесплатный и широко используемый инструмент предотвращения вторжений с открытым исходным кодом, который мониторит файлы журналов на наличие IP-адресов, которые показывают вредоносные признаки, такие как слишком большое количество сбоев ввода паролей и многое другое, и запрещает их доступ (обновляет правила брандмауэра для отклонения этих IP-адресов). По умолчанию Fail2ban поставляется с фильтрами для различных сервисов, включая sshd.
Установка Fail2ban на CentOS/RHEL 8
Пакет fail2ban отсутствует в официальных репозиториях, но доступен в репозитории EPEL. После входа в систему перейдите к интерфейсу командной строки, а затем включите репозиторий EPEL в своей системе, как показано ниже:
1 |
<span class="hljs-comment"># dnf install epel-release</span> |
Или же:
1 |
<span class="hljs-comment"># dnf install </span><a href="https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm%3C/code%3E" target="_blank" rel="noopener noreferrer"><span class="hljs-comment">https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm</span></a> |
После этого установите пакет Fail2ban, выполнив следующую команду:
1 |
<span class="hljs-comment"># dnf install fail2ban</span> |
Настройка Fail2ban для защиты SSH
Файлы конфигурации fail2ban находятся в каталоге /etc/fail2ban/, а фильтры хранятся в каталоге /etc/fail2ban/filter.d/ (файл фильтра для sshd — /etc/fail2ban/filter.d/sshd.conf).
Глобальным файлом конфигурации для сервера fail2ban является /etc/fail2ban/jail.conf, однако не рекомендуется изменять этот файл напрямую, так как он, вероятно, будет перезаписан или улучшен в случае обновления пакета в будущем.
В качестве альтернативы рекомендуется создавать и добавлять свои конфигурации в файл jail.local или отдельные файлы .conf в каталоге /etc/fail2ban/jail.d/. Обратите внимание, что параметры конфигурации, установленные в jail.local, будут переопределять всё, что определено в jail.conf.
Для этой статьи мы создадим отдельный файл с именем jail.local в каталоге /etc/fail2ban/, как показано ниже:
1 |
<span class="hljs-comment"># vi /etc/fail2ban/jail.local</span> |
Когда файл открыт, скопируйте и вставьте в него следующую конфигурацию. Pаздел [DEFAULT] содержит глобальные параметры, а [sshd] содержит параметры для sshd jail:
1 2 3 4 5 6 7 8 9 10 |
<span class="hljs-title">[DEFAULT]</span> <span class="hljs-setting">ignoreip = <span class="hljs-value"><span class="hljs-number">192.168</span>.<span class="hljs-number">56.2</span>/<span class="hljs-number">24</span></span></span> <span class="hljs-setting">bantime = <span class="hljs-value"><span class="hljs-number">21600</span></span></span> <span class="hljs-setting">findtime = <span class="hljs-value"><span class="hljs-number">300</span></span></span> <span class="hljs-setting">maxretry = <span class="hljs-value"><span class="hljs-number">3</span></span></span> <span class="hljs-setting">banaction = <span class="hljs-value">iptables-multiport</span></span> <span class="hljs-setting">backend = <span class="hljs-value">systemd</span></span> <span class="hljs-title">[sshd]</span> <span class="hljs-setting">enabled = <span class="hljs-value"><span class="hljs-keyword">true</span></span></span> |
Давайте кратко объясним параметры в приведенной выше конфигурации:
- ignoreip: указывает список IP-адресов или имен хостов, которые нельзя забанить.
- bantime: указывает количество секунд, на которое хост забанен (т.е. эффективная длительность бана).
- maxretry: указывает количество сбоев до того, как хост будет забанен.
- findtime: fail2ban заблокирует хост, если он генерировал «maxretry» в течение последних секунд «findtime».
- Banaction: запрет действия.
- backend: указывает бэкэнд, используемый для получения модификации файла журнала.
Таким образом, приведенная выше конфигурация означает, что если у какого-то IP трижды произошел сбой за последние 5 минут, вы заблокируйте его на 6 часов и проигнорируйте IP-адрес 192.168.56.2.
Затем запустите и активируйте сервис fail2ban. Проверьте, работает ли он, используя следующую команду systemctl:
1 2 3 |
<span class="hljs-preprocessor"># systemctl start fail2ban</span> <span class="hljs-preprocessor"># systemctl enable fail2ban</span> <span class="hljs-preprocessor"># systemctl status fail2ban</span> |
Мониторинг проблемных и заблокированных IP-адресов с помощью fail2ban-client
После настройки fail2ban для защиты sshd вы можете отслеживать проблемные и заблокированные IP-адреса с помощью fail2ban-client. Чтобы просмотреть текущее состояние сервера fail2ban, выполните следующую команду:
1 |
<span class="hljs-comment"># fail2ban-client status</span> |
Чтобы контролировать sshd jail, запустите:
1 |
<span class="hljs-comment"># fail2ban-client status sshd</span> |
Чтобы разбанить IP-адрес в fail2ban (во всех jails и базе данных), выполните следующую команду:
1 |
<span class="hljs-comment"># fail2ban-client unban 192.168.56.1</span> |
Для получения дополнительной информации о fail2ban прочитайте следующие справочные страницы:
1 2 |
<span class="hljs-preprocessor"># man jail.conf</span> <span class="hljs-preprocessor"># man fail2ban-client</span> |