Site icon ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Понедельник, 23 июня, 2025

Как создать простой скрипт для блокировки IP-адресов с помощью iptables и Fail2Ban

Как создать простой скрипт для блокировки IP-адресов с помощью iptables и Fail2Ban

Сегодня я покажу вам простой, но эффективный способ автоматической блокировки подозрительных IP-адресов с помощью небольшого скрипта и таких инструментов, как iptables и Fail2Ban. Эти инструменты мощные, лёгкие и могут помочь защитить ваш Linux-сервер от атак методом перебора, ботов или любого вредоносного трафика.

Это руководство предназначено для начинающих и отлично подойдёт системным администраторам, студентам или всем, кто управляет VPS, веб-сервером или даже домашним Linux-сервером.

 

Что такое iptables и Fail2Ban?

Прежде чем мы углубимся в настройку, давайте разберемся, какие два ключевых инструмента мы используем — iptables и Fail2Ban.

 

iptables

iptables — утилита брандмауэра командной строки, встроенная в большинство дистрибутивов Linux, которая работает, применяя набор правил (называемых цепочками политик) для управления сетевым трафиком.

Эти правила могут фильтровать пакеты на основе IP-адреса, номера порта или протокола. Вы можете представить iptables как привратника, стоящего у двери вашего сервера и пропускающего только доверенный трафик и блокирующего остальной.

 

Fail2Ban

С другой стороны, Fail2Ban — это инструмент для мониторинга журналов, который автоматически обнаруживает вредоносное поведение и реагирует на него. Он отслеживает файлы журналов в режиме реального времени и ищет подозрительные шаблоны, такие как несколько неудачных попыток входа в систему.

Когда он обнаруживает что-то подозрительное, например атаку методом перебора на ваш SSH, он блокирует IP-адрес нарушителя, добавляя правило блокировки в iptables. Вы можете указать, сколько попыток сбоя допускается, на какой срок блокируется IP-адрес и даже настроить ответ.

При совместном использовании iptables и Fail2Ban предлагают простой, но эффективный способ защиты вашего сервера. В то время как iptables выполняет функции брандмауэра, Fail2Ban добавляет интеллектуальные возможности, выявляя угрозы и обновляя правила брандмауэра на лету.

 

Зачем использовать собственный скрипт для блокировки IP-адресов?

Хотя Fail2Ban отлично справляется со своей задачей, автоматически блокируя подозрительные IP-адреса на основе заранее заданных шаблонов в журнале, наличие пользовательского скрипта для блокировки IP-адресов обеспечивает дополнительный уровень гибкости и контроля.

Пользовательский скрипт позволяет быстро добавлять или удалять IP-адреса из списка блокировки без непосредственного изменения сложных правил брандмауэра. Он также дает возможность создавать логику на основе пользовательских журналов или триггеров, которые Fail2Ban может не отслеживать.

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

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

 

Шаг 1. Установка iptables и Fail2Ban

Прежде чем мы приступим к настройке, давайте убедимся, что в вашей системе установлены iptables и Fail2Ban. Эти инструменты доступны в стандартных репозиториях большинства основных дистрибутивов Linux, поэтому установка не составит труда.

Если вы используете систему на базе Debian, такую как Ubuntu или сам Debian, начните с обновления списка пакетов, чтобы убедиться, что всё обновлено.

sudo apt update

 

После завершения обновления установите iptables и fail2ban с помощью команды:

sudo apt install iptables fail2ban

 

Для систем на базе RPM вы можете установить оба инструмента с помощью менеджера пакетов yum.

sudo yum install iptables-services fail2ban

 

После завершения установки вы сможете настроить брандмауэр и автоматическую защиту с помощью Fail2Ban.

 

Шаг 2. Создание простого скрипта для блокировки IP-адресов

Теперь, когда iptables и Fail2Ban установлены, давайте создадим простой bash-скрипт (block-ip.sh), который позволит вам вручную блокировать любой IP-адрес с помощью iptables.

sudo nano /usr/local/bin/block-ip.sh

 

В этот файл вставьте следующий код:

#!/bin/bash

if [ -z "$1" ]; then
 echo "Использование: $0 "
 exit 1
fi

IP=$1

# Проверить, заблокирован ли IP-адрес
if iptables -L INPUT -v -n | grep -q "$IP"; then
 echo "IP-адрес $IP уже заблокирован."
else
 iptables -A INPUT -s $IP -j DROP
 echo «IP $IP заблокирован.»
fi

 

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

После того как содержимое скрипта будет готово, нажмите CTRL+O для сохранения и CTRL+X для выхода из редактора. Теперь сделайте скрипт исполняемым, чтобы его можно было запускать напрямую из командной строки:

sudo chmod +x /usr/local/bin/block-ip.sh

 

Теперь, когда скрипт готов, давайте протестируем его, заблокировав пример IP-адреса. Например, чтобы заблокировать IP-адрес 192.168.1.100, выполните:

sudo /usr/local/bin/block-ip.sh 192.168.1.100

 

Если всё работает правильно, вы должны увидеть сообщение следующего содержания:

IP-адрес 192.168.1.100 blocked.

 

Чтобы убедиться, что IP-адрес действительно был заблокирован, вы можете просмотреть текущие правила iptables с помощью команды:

sudo iptables -L -n -v

 

Этот скрипт очень полезен, если вы хотите заблокировать IP-адреса вручную или на основе пользовательских журналов.

 

Шаг 3. Настройка Fail2Ban с помощью iptables

Теперь, когда iptables готов и наш пользовательский скрипт на месте, пришло время настроить Fail2Ban так, чтобы он мог автоматически обнаруживать и блокировать вредоносные IP-адреса, пытающиеся скомпрометировать такие сервисы, как SSHApache или любое другое приложение на вашем сервере, работающее в интернете.

Fail2Ban использует концепцию под названием «блоки», которые представляют собой просто блоки конфигурации, предназначенные для мониторинга конкретных сервисов. Каждый блок сообщает Fail2Ban, какие логи отслеживать, какие шаблоны искать и как реагировать при обнаружении атаки.

Для начала нам нужно отредактировать или создать файл jail.local, в котором вы определяете свои пользовательские настройки, не затрагивая конфигурацию по умолчанию.

sudo nano /etc/fail2ban/jail.local

 

Вставьте в файл следующий блок:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600

 

Давайте разберёмся, что означает каждый из этих вариантов:

  • enabled = true: Это включает режим ожидания, чтобы он активно отслеживал SSH.
  • port = sshЭто сообщает Fail2Ban, какой порт нужно отслеживать.
  • filter = sshd: Здесь указывается фильтр, используемый для обнаружения неудачных попыток входа в систему.
  • logpath = /var/log/auth.logЭто файл журнала, который Fail2Ban будет проверять на наличие неудачных попыток входа в SSH.
  • maxretry = 5Если IP-адрес не сможет войти в систему 5 раз в течение заданного периода времени, он будет заблокирован.
  • bantime = 3600: Это устанавливает продолжительность блокировки в 3600 секунд (1 час).
  • findtime = 600Это определяет временное окно (в секундах), в течение которого подсчитываются максимальные попытки повторной попытки, в данном случае — 10 минут.

 

Если вы используете систему на базе CentOS или RHEL, вам нужно будет изменить путь к журналу в соответствии с местом хранения журналов SSH.

/var/log/secure

 

После сохранения файла конфигурации jail перезапустите службу Fail2Ban, чтобы применить изменения:

sudo systemctl restart fail2ban

 

Чтобы убедиться, что ваша виртуальная машина работает правильно, выполните следующую команду для проверки состояния SSH-виртуальной машины:

sudo fail2ban-client status sshd

 

Здесь вы увидите, сколько IP-адресов было заблокировано, сколько всего было обнаружено попыток входа и активна ли блокировка.

Если вы хотите узнать, какие IP-адреса в настоящее время заблокированы iptables (включая те, которые запрещены Fail2Ban), выполните:

sudo iptables -L -n

 

Наконец, если вы хотите разблокировать конкретный IP-адрес, который был автоматически заблокирован Fail2Ban, вы можете удалить его вручную с помощью следующей команды:

sudo fail2ban-client set sshd unbanip 192.168.1.100

 

Шаг 4. Объедините свой скрипт с Fail2Ban (по желанию)

По умолчанию Fail2Ban использует собственные внутренние действия для блокировки IP-адресов с помощью iptables. Однако, если вы предпочитаете, чтобы Fail2Ban вызывал ваш собственный скрипт блокировки IP-адресов, возможно, из-за того, что вы добавили собственную логику или ведение журнала, вы можете настроить собственное действие Fail2Ban.

Для этого сначала нужно создать новый файл с определением действия.

sudo nano /etc/fail2ban/action.d/customblock.conf

 

В этот файл вставьте следующую конфигурацию:

[Definition]
actionstart =
actionstop =
actioncheck =
actionban = /usr/local/bin/block-ip.sh 
actionunban = iptables -D INPUT -s  -j DROP

[Init]

 

Эта конфигурация указывает Fail2Ban на необходимость использовать ваш пользовательский скрипт при блокировке IP-адреса. Строка actionban запускает ваш скрипт и передаёт ему IP-адрес нарушителя. Для отмены блокировки она напрямую удаляет правило блокировки из iptables.

Далее вам нужно указать Fail2Ban использовать это пользовательское действие в вашей конфигурации jail.

sudo nano /etc/fail2ban/jail.local

 

В разделе «[sshd]» jail  или любой другой настроенной вами тюрьме обновите строку действия, чтобы она указывала на ваше пользовательское действие:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600
action = customblock

 

После внесения этих изменений перезапустите службу Fail2Ban, чтобы применить их:

sudo systemctl restart fail2ban

 

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

 

Правила сохранения iptables

Важно отметить, что правила iptables по умолчанию не являются постоянными. Это означает, что любые правила, добавленные вручную или с помощью Fail2Ban, будут удалены после перезагрузки сервера, если вы не сохраните их вручную.

В системах Debian или Ubuntu вы можете сделать правила брандмауэра постоянными, установив пакет iptables-persistent:

sudo apt install iptables-persistent

 

После установки сохраните текущие правила с помощью:

sudo netfilter-persistent save

 

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

sudo service iptables save

 

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

sudo iptables-save > /etc/sysconfig/iptables

 

Сохраняя свои правила, вы гарантируете, что IP-адреса, заблокированные вручную или с помощью Fail2Ban, останутся заблокированными даже после перезагрузки системы.

 

Заключение

Защита вашего Linux-сервера не обязательно должна быть сложной. Объединив возможности iptables с интеллектом Fail2Ban, вы можете создать надежную и гибкую защиту от атак методом перебора, нежелательных попыток входа в систему и подозрительной активности IP-адресов.

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

Exit mobile version