Сегодня я покажу вам простой, но эффективный способ автоматической блокировки подозрительных 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 "Usage: $0 " exit 1 fi IP=$1 Check if IP is already blocked if iptables -L INPUT -v -n | grep -q "$IP"; then echo "IP $IP is already blocked." else iptables -A INPUT -s $IP -j DROP echo "IP $IP has been blocked." 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 has been blocked.
Чтобы убедиться, что IP действительно был заблокирован, вы можете просмотреть текущие iptables правила, выполнив команду:
sudo iptables -L -n -v
Этот сценарий очень полезен, когда вы хотите блокировать IP вручную или из пользовательских журналов.
Шаг 3: Настройка Fail2Ban с помощью iptables
Когда iptables готов и наш пользовательский скрипт на месте, пришло время настроить Fail2Ban, чтобы он мог автоматически обнаруживать и блокировать вредоносные IP-адреса, пытающиеся скомпрометировать такие сервисы, как SSH, Apache или любое другое приложение на вашем сервере.
Fail2Ban использует концепцию, называемую jails, которая представляет собой блоки конфигурации, предназначенные для мониторинга определенных служб. Каждый джейл указывает 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
После сохранения файла конфигурации тюрьмы перезапустите службу 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 на использование этого пользовательского действия в конфигурации вашего джейла.
sudo nano /etc/fail2ban/jail.local
В вашей тюрьме [sshd] или любой другой тюрьме, которую вы настроили, обновите строку action, чтобы она указывала на ваше пользовательское действие:
[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-адресов дает вам возможность ручного управления, когда это больше всего необходимо.




Комментарии (0)