Домашний сервер на Orange Pi — часть 6: используем fail2ban для защиты сервера

Во все времена с момента изобретения глобальной сети шла непримеримая война ммежду теми, кто имеет сервер и хочет защитить его от несанкционированного доступа, и теми, кто хочет получить доступ к ресурсам сервера.

Поэтому сегодня, мы постараемся немного улучшить защиту нашего сервера. Хорошо, что в UNIX-подобных системах, хорошо организована система логирования, поэтому нам остается только систематически проверять логи на наличие "нехороших" записей и отправлять нарушилитей в далекий бан. Опять же, на нашу удачу, сейчас даже самостоятельно парсить кучу логов в системе не надо. Есть отличный Open Source продук с многоговорящим названием - fail2ban.

По своей сути, fail2ban - это демон (мы же помним, что в linux - демоны, а в windows - службы?), который парсит файлы логов в соответсвии с фильтрами и правилами, которые можно создавать самостоятельно, и обнаружив ссответсвие отправляет IP адреса (боты, злоумышленники) в бан.

Установка fail2ban

Установка fail2ban проста так же как и установка любого другого пакета в Ubuntu-производной системе:

sudo apt install fail2ban whois -y

Дополнительно установим пакет whois для проверки IP-адреса и домена, для составления более подробного отчета отсылаемого на email.

В принципе, приложение уже готово к работе: базовые правила по защите SSH уже включены, сервис активирован и запущен, но мы добавим несколько правил для оптимальной работы приложения.

Конфигурирование fail2ban

Настройка сервиса осуществляется конфигурированием правил - jail'ов (изоляторов), а также фильтров - по необходимости.
Джайлы можно конфигурировать двумя способами:

  1. Добавлять отдельный jail в каталог /etc/fail2ban/jail.d/правило.conf
  2. Составить перечень правил в одном файле: /etc/fail2ban/jail.local

Мне удобнее иметь один файл конфигурации, в котором будут описаны все правила. Поэтому открываем файл для редактирования:

sudo nano /etc/fail2ban/jail.local

и вносим в него следующий текст.

# общие настройки правил
[DEFAULT]
# Белый список IP-адресов
ignoreip = 127.0.0.1 192.168.1.0/24
# Время блокировки 30 дней
bantime = 2592000
# Время в течение которого отлавливаем неудачные попытки 8 мин
findtime = 43200
# Количество попыток
maxretry = 3
# Каким сервисом производим блокировку
banaction = iptables-multiport
# настройка отправки сообщения на почту
destemail = example@example.ru
sendername = Fail2Ban
mta = sendmail
action = %(action_mwl)s

# Правила для защиты SSH
# [Название правила]
[ssh]
# Включаем правило
enabled = true
# Какой порт проверяем (стандартный порт SSH - 22) и какой будем банить.
port = ssh
# Применяемый фильтр
filter = sshd
# Инструмент для блокировки
action = iptables[name=sshd]
# Какой файл логов отслеживаем
logpath = /var/log/auth.log

# Защищаем WEB-сервер Apache
# Отслеживаем неудачные попытки ввода пароля
[apache]
enabled = true
port = http,https
filter = apache-auth
action = iptables-multiport[name=APACHE, port="http,https", protocol=tcp]
logpath = /var/log/apache*/*error.log

# Отслеживаем сканирование для применения эксплойтов и php уязвимостей
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
action = iptables-multiport[name=APACHE-NOSCRIPT, port="http,https", protocol=tcp]
logpath = /var/log/apache*/*error.log

# Отслеживаем попытки переполнения стека Apache
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
action = iptables-multiport[name=APACHE-OVERWLOWS, port="http,https", protocol=tcp]
logpath = /var/log/apache*/*error.log
# Здесь мы даем зловреду максимум две попытки
maxretry = 2

# Отслеживаем попытки поиска домашней директории на сервере
[apache-nohome]
enabled = true
port = http,https
filter = apache-nohome
action = iptables-multiport[name=APACHE-NOHOME, port="http,https", protocol=tcp]
logpath = /var/log/apache*/*error.log
maxretry = 2

# включаем защиту wp-admin/wp-login
[wordpress-login]
enabled = true
port = http,https
action = iptables-multiport[name=WP, port="http,https", protocol=tcp]
# Этого фильтра нет, необходимо добавить в /etc/fail2ban/filter.d/wp-login.conf
filter = wordpress-login
logpath = /var/log/apache*/*access.log
maxretry = 2

Теперь создадим фильтр для отслеживания попыток входа в админ-панель WordPress

sudo nano /etc/fail2ban/filter.d/wordpress-login.conf

и вносим следующий текст:

[Definition]
failregex = ^<HOST> .* "POST /wp-login.php

Этот фильтр обеспечит блокировку всех IP адресов, которые обращаются к wp-login.php (адрес администратора внесен в белый список)

сохраняемся, выходим из редактора и для того, что внесенные изменения вступили в силу, нам осталось только перезапустить сервер fail2ban

sudo systemctl restart fail2ban

Всё, настройку мы завершили и наш сервер стал чуть-чуть лучще защищён. Безусловно, если атаку совершает не бот, а человек, то он скорее всего будет использовать proxy-серверы, VPN и мы заблокируем его временный IP-адрес, но новичка это может остановить, а прфессионала точно не остановит. Надо четко осознавать, что неприступных серверов не бывает и рано или поздно наш сервер могут взломать, поэтому смотрим на это философски, максимально обеспечиваем защиту и делалаем регулярные backup'ы.

Работа с сервисом в терминале

Иногда нам может понадобиться работа с сервисом "в ручном" режиме:

  • Проверить статус сервиса и правила в частности;
  • Самостоятельно заблокировать адрес или разблокировать;

Сейчас рассмотрим несколько примеров работы с утилитой в теминале.

Проверить список правил

sudo fail2ban-client status

Конкретное правило можно проверить командой:

sodo fail2ban-client status apache

Так же, правила блокировки можно проверить с помощью iptables:

sudo iptables -L

Добавить IP адрес в список блокировок (забанить)

Добавить адрес в список заблокированых адресов можно насколькими способами:
Средствами fail2ban

sudo fail2ban-client set "правило" banip IP адрес
Пример:
sudo fail2ban-client set apache banip 192.168.1.3

Средствами iptables

sudo iptables -I "цепочка правил" -s IP адрес -j DROP
Пример:
sudo iptables -I f2b-APACHE 1 -s 192.168.1.4 -j DROP

Удаление IP адреса из списка блокировки (разбанить)

Удаление заблокированного адреса из списка блокировок, так же можно выполнить несколькими способами:

Средствами fail2ban

sudo fail2ban-client set "правило" unbanip "IP адрес"
Пример:
sudo fail2ban-client set apache unbanip 192.168.1.3

Средствами iptables

sudo iptables -D "цепочка правил" -s IP адрес -j DROP
Пример:
sudo iptables -D f2b-APACHE -s 192.168.1.4 -j DROP

На этом настройка сервиса fail2ban завершена. Надеюсь, что материал поможет начинающим администраторам и домашним айтишникам как я )). Если более опытные товарищи могут как-то дополнить материал или имеют конструктивную критику, то добро пожаловать в комментарии.

Рад был помочь. До скорых встреч.

Похожие записи

Добавить комментарий