Установка Fail2ban.
Если кратко, то: при обнаружении попытки взлома, добавляет запись с IP-адресом хакера в таблицу правил безопасности iptables (подробнее про iptables здесь) и блокирует его либо временно, либо навсегда. А еще fail2ban сообщит вам об атаке по электронной почте.
Теперь подробнее об установке и настройке fail2ban.
Обычно, fail2ban фокусируется на атаках на SSH, но его также можно настроить для защиты и других служб, которые используют логи и могут быть взломаны.
Важно: все команды в этом гайде выполняются в режиме суперпользователя.
CentOS 7:
Установка Fail2ban:
1 |
yum install fail2ban |
Для отправки писем, устанавливаем Sendmail:
1 |
yum install sendmail |
Запускаем Fail2ban и, если нужно, Sendmail:
1 |
systemctl start fail2ban |
1 |
systemctl enable fail2ban |
1 |
systemctl start sendmail |
1 |
systemctl enable sendmail |
Debian & Ubuntu
Устанавливаем Fail2ban:
1 |
apt-get install fail2ban |
Служба автоматически запустится.
Для email-поддержки, устанавливаем Sendmail:
1 |
apt-get install sendmail-bin sendmail |
Fedora
Устанавливаем Fail2ban:
1 |
dnf install fail2ban |
Для email-поддержки, устанавливаем Sendmail:
1 |
dnf install sendmail |
Запускаем Fail2ban и, если нужно, Sendmail:
1 |
systemctl start fail2ban |
1 |
systemctl enable fail2ban |
1 |
systemctl start sendmail |
1 |
systemctl enable sendmail |
Настройка Fail2ban
Fail2ban служба хранит свои файлы конфигурации в директории /etc/fail2ban. В ней существует файл со значениями по умолчанию под названием jail.conf.
Так как этот файл может быть изменен с помощью обновлений пакетов, его редактирование не рекомендуется. Вносить изменения нужно в файле jail.local, который переопределяет все параметры по умолчанию из файла jail.conf и имеет высший приоритет в исполнении.
Настройка fail2ban.local
- Перейдите в /etc/fail2ban.
1 |
<span class="hljs-built_in">cd</span> /etc/fail2ban |
- Поскольку изменения конфигурации должны быть сделаны в файле fail2ban.local, определения в котором перезаписывают fail2ban.conf, то скопируем fail2ban.conf в fail2ban.local:
1 |
<span class="hljs-built_in">sudo</span> cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local |
Переменные, которые можно настроить в файле fail2ban.local:
- loglevel: Уровень детализации логов fail2ban. Принимает значения: CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG .
- logtarget: Записывает логи в определенный файл. По умолчанию, все логи записываются в файл /var/log/fail2ban.log. Вы также можете изменить значение на STDOUT, которое будет выводить все данные; STDERR будет выводить все ошибки; SYSLOG; и FILE, которое записывает логи в файл FILE.
- socket: Расположение файла сокета.
- pidfile: Расположение файла PID для хранения ID процесса сервера fail2ban.
Базовая настройка jail.local
- Вернитесь в папку /etc/fail2ban и скопируйте файл jail.conf в jail.local:
1 |
<span class="hljs-built_in">sudo</span> cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local |
2. Если вы используете CentOS или Fedora, откройте jail.local установите значение backend:
1 2 |
backend=systemd <img class="size-medium aligncenter" src="http://blog.sedicomm.com/wp-content/uploads/2016/12/Screenshot-from-2016-12-21-19-02-30.png" width="589" height="685" /> |
- ignoreip: добавьте в эту строку те IP-адреса, которые Fail2ban нужно игнорировать (не банить). По умолчанию, эта команда не будет банить только localhost.
- bantime: время бана подозрительного IP-адреса в секундах. Если установить отрицательное число, бан будет постоянным.
- findtime: определяет промежуток времени в секундах, в течении которого программой будет определяться наличие подозрительной активности перед тем, как забанить IP-адрес.
- maxretry: количество попыток получения доступа к серверу с одного IP до того, как он будет запрещен. По умолчанию, это 3.
Оповещения по email.
Если вы хотите получать оповещения по email каждый раз, когда срабатывает Fail2ban, настройте в файле jail.local:
- destemail: email адрес, куда вы хотите отправлять письма.
- sendername: Имя, под которым будет отправляться письмо.
- sender: email адрес, с которого Fail2ban будет присылать письма.
Если вы не знаете, что написать в sender, введите команду
1 |
<em><code class="bash hljs ">sendmail -t user@email.com</em> |
где user@email.com — ваш адрес.
- Потом проверьте email (включая папку “Спам”, если нужно) и скопируйте адрес отправителя. Именно он может быть использован для конфигурации выше.
- action: определяет действия системы в случае превышения количества попыток получения доступа. По умолчанию, банит только пользователя. action_mw забанит и отправит email с отчетом; тогда как action_mwl забанит, отправит письмо с отчетом и все релевантные строки в файле лога.
Настройка jail2ban для различных сервисов
Кроме базовых настроек, jail.local также содержит различные настройки для большого числа распространенных сервисов, включая SSH. По умолчанию, она работает только для SSH.
Примерная конфигурация файла для защиты SSH:
1 2 3 4 5 6 |
[ssh] enabled = <span class="hljs-literal">true</span> port = ssh filter = sshd logpath = /var/log/auth.log maxretry = <span class="hljs-number">6</span> |
- enabled: определяет, включен фильтр или нет.
- port: порт сервиса, на который ссылается Fail2ban. Если используется порт по умолчанию, тогда можно использовать имя сервиса. Если вы перенесли ваш SSH порт на 3456, замените ssh на 3456.
- filter: фильтр, который будет использоваться.
- logpath: расположение логов сервиса.
- maxretry: перезапишет глобальное значение maxretry для определенного сервиса. Также можно добавить findtime и bantime.
- action: это может быть дополнительной настройкой, если значение по умолчанию не подходит. Дополнительные действия можно найти в папке /etc/fail2ban/action.d .
Для защиты веб-сервера Apache можно использовать следующие настройки Fail2ban:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
[apache] enabled = <span class="hljs-literal">true</span> port = <a href="http://blog.sedicomm.com/2016/12/25/fail2ban-ustanovka-i-nastrojka/http,httpsfilter" target="_blank">http,https filter</a> = apache-auth logpath = /var/log/apache2/error.log maxretry = <span class="hljs-number">3</span> [apache-multiport] enabled = <span class="hljs-literal">true</span> port = <a href="http://blog.sedicomm.com/2016/12/25/fail2ban-ustanovka-i-nastrojka/http,httpsfilter" target="_blank">http,https filter</a> = apache-auth logpath = /var/log/apache2/error.log maxretry = <span class="hljs-number">3</span> [apache-noscript] enabled = <span class="hljs-literal">true</span> port= <a href="http://blog.sedicomm.com/2016/12/25/fail2ban-ustanovka-i-nastrojka/http,httpsfilter" target="_blank">http,https filter</a> = apache-noscript logpath = /var/log/apache2/error.log maxretry = <span class="hljs-number">3</span> [apache-overflows] enabled = <span class="hljs-literal">true</span> port= <a href="http://blog.sedicomm.com/2016/12/25/fail2ban-ustanovka-i-nastrojka/http,httpsfilter" target="_blank">http,https filter</a> = apache-overflows logpath = /var/log/apache2/error.log maxretry = <span class="hljs-number">2</span> |
Не забудьте перезапускать Fail2ban после каждого редактирования конфигурационного файла!
На этом настройка Fail2ban завершена.
Если вдруг какой-то IP-адрес будет заблокирован по ошибке, удалите его из черного списка с помощью команды:
1 |
<span class="hljs-built_in">sudo</span> fail2ban-client <span class="hljs-keyword">set</span> JAIL unbanip IP |
- JAIL — название секции файла jail.local, в соответствии с правилами которой была активирована блокировка.
- IP — адрес, который нужно разблокировать.
Например:
1 |
<span class="hljs-built_in">sudo</span> fail2ban-client <span class="hljs-keyword">set</span> ssh-iptables unbanip <span class="hljs-number">63.127</span>.<span class="hljs-number">107.213</span> |
Надеюсь, это руководство было полезным для вас!