Защита VPS с помощью iptables и fail2ban

Iptables и fail2ban

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

Одной из наиболее популярной утилитой для защиты VPS/VDS является iptables. Она предназначена для управления брандмауэром. Также с утилитой iptables используется популярное решение fail2ban, для блокировки передачи данных с запрещенных IP-адресов.

Как перенести SSH на другой порт?

Подробнее как сменить порт ssh, читайте в нашей статье.

Сначала необходимо выполнить следующую команду:

sudo nano /etc/ssh/sshd_config

Далее нужно изменить стандартный порт на другой. Он должен быть более сложный и входить в диапазон от 1 до 65535.

# What ports, IPs and protocols we listen for
#Port 22
Port 496З1

Далее сохраняем и перезапускаем SSH:

sudo service ssh restart

Обратите внимание, после смены порта при входе необходимо указывать новый порт, например: ssh -p 55876 user@host

Как заблокировать все порты, кроме http, https и SSH?

Чтобы лучше обезопасить Ваш виртуальный сервер, на котором расположены важные сайты, достаточно трех портов: http, https и SSH. Для других сервисов, связанных с сетью, рекомендуется иметь отдельный сервер. Так как клиенты сайтов, обычно используют всего два порта – HTTP и HTTPS, то для серверов, на которых размещаются обычные сайты, логично отключить любые другие порты. Кроме этого, необходимо оставить и порт, который используется администратором – SSH. Для этого необходим файл настроек iptables:

sudo touch /etc/iptables.firewall-rules

Который в свою очередь должен иметь следующий код:

# Apache Error Filter

[Definition]

failregex =

^.*\[client <HOST>\].*wootwoot.at.ISC.SANS.DFind.*
^.*\[client <HOST>\].*Lost connection to MySQL server during query.*
^.*\[client <HOST>\].*client denied by server configuration.*
^.*\[client <HOST>\].*Invalid URI in request.*
^.*\[client <HOST>\].*/admin.php' not found or unable to stat
^.*\[client <HOST>\].*/wp-login.php' not found or unable to stat
^.*\[client <HOST>\].*/vam_rss2_info.php' not found or unable to stat
^.*\[client <HOST>\].*File does no exist: .*typo3
^.*\[client <HOST>\].*File does no exist: .*hostcmsfiles
^.*\[client <HOST>\].*File does no exist: .*administrator
^.*\[client <HOST>\].*File does no exist: .*bitrix
^.*\[client <HOST>\].*File does no exist: .*bbadmin
^.*\[client <HOST>\].*File does no exist: .*WebAdmin
^.*\[client <HOST>\].*File does no exist: .*webmanage
^.*\[client <HOST>\].*File does no exist: .*fck
^.*\[client <HOST>\].*File does no exist: .*fckeditor
^.*\[client <HOST>\].*File does no exist: .*web

ignoreregex =

Чтобы после перезапуска системы данные настройки применяли автоматически, необходимо создать скрипт. Создаем файл и делаем его исполняемым:

sudo touch /etc/network/if-pre-up.d/firewall
sudo chmod +x /etc/network/if-pre-up.d/ firewall

Внутри прописываем:

#!/bin/sh
/sbin/iptables-restore < /etc/iptables.firewall-rules

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

sudo iptables -L

Защита VPS с помощью fail2ban

Так как данная утилита не входит в стандартный систему, для ее запуска необходимо выполнить следующее действие:

sudo apt-get install fail2ban

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

cd /etc/fail2ban/ && cp jail.conf jail.local

По умолчанию утилита fail2ban оснащена некоторыми фильтрами для сервера Apache, но лучше создать самостоятельно собственные. Один необходим для лога access, а другой для error. Чтобы данные логи распространялись сразу на все сайты, находящиеся на сервере, требуется настроить виртуальные хосты. Это сделает защиту VPS более надежной, а ее настройку более простой и понятной, ведь осуществляется она всего двумя фильтрами сразу для всех ресурсов. Для этого нужно создать следующие файлы:

cd /etc/fail2ban/filter.d/
touch apache-access.conf
touch apache-error.conf

Файл для лога access должен содержать:

# Apache Access Filter

[Definition]

failregex =

^.*<HOST> .*///*
^.*<HOST> .*\\\*
^.*<HOST> .*wootwoot*
^.*<HOST> .*WinHttpRequest.*

ignoreregex =

Данный файл постоянно будет дополняться строчками в разделе failregex. Это связано с тем, что так или иначе выявляется опасная деятельность ботов или хакеров. В примере показана блокировка определенных запросов (обозначается звездочками с двух сторон, например *\\\*) Для лога error фильтр практически не отличается структурно:

# Apache Error Filter

[Definition]

failregex =

^.*\[client <HOST>\].*wootwoot.at.ISC.SANS.DFind.*
^.*\[client <HOST>\].*Lost connection to MySQL server during query.*
^.*\[client <HOST>\].*client denied by server configuration.*
^.*\[client <HOST>\].*Invalid URI in request.*
^.*\[client <HOST>\].*/admin.php' not found or unable to stat
^.*\[client <HOST>\].*/wp-login.php' not found or unable to stat
^.*\[client <HOST>\].*/vam_rss2_info.php' not found or unable to stat
^.*\[client <HOST>\].*File does no exist: .*typo3
^.*\[client <HOST>\].*File does no exist: .*hostcmsfiles
^.*\[client <HOST>\].*File does no exist: .*administrator
^.*\[client <HOST>\].*File does no exist: .*bitrix
^.*\[client <HOST>\].*File does no exist: .*bbadmin
^.*\[client <HOST>\].*File does no exist: .*WebAdmin
^.*\[client <HOST>\].*File does no exist: .*webmanage
^.*\[client <HOST>\].*File does no exist: .*fck
^.*\[client <HOST>\].*File does no exist: .*fckeditor
^.*\[client <HOST>\].*File does no exist: .*web

ignoreregex =

В файле настроек jail.local необходимо запустить созданные фильтры, указав пути к новым файлам:

[apache-access]

enabled = true
port = http,https
filter = apache-access
logpath = /path/to/access.log
maxretry = 1
findtime = 600
bantime = 86400

[apache-error]

enabled = true
port = http,https
filter = apache-error
logpath = /path/to/error.log
maxretry = 1
findtime = 600
bantime = 86400

После перезапуска FAIL2BAN защита активируется:

sudo service fail2ban restart

Всю информацию по фильтрам и заблокированным адресам можно посмотреть, выполнив команду:

sudo iptables -L

Подборка лучших NVMe VPS серверов, на нашем сайте.

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

  1. Стас 25 октября 2022, 14:52 # 0
    Интересная статья, нашел много новой информации для себя. Хотелось бы еще статей на тему, как защитить VPS от атак.

    Последние отзывыpic


    Firstbyte

    Ardanov, 20 ноября 2024 оценил

    Отличный хостер, работаем уже не первый год. Сначала брал пару виртуальных серверов в аренду, а затем развернули VPN для бизнеса и...


    Smartape.ru

    Кирилл, 19 ноября 2024 оценил

    Использую хостинг Смартэйп под размещение своих сайтов ,изначально использовал бесплатный пробный период на две недели ,сайты груз...


    time-host.net

    Алексей, 19 ноября 2024 оценил

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


    ihor.online

    Николай Муратов, 19 ноября 2024 оценил

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


    aeza.net

    knonim, 19 ноября 2024 оценил

    Пользуюсь аезой почти 9 месяцев (VPS) Очень быстрый запуск виртуального сервера, автоматическая переустановка, если это требуется...


    новые Статьи

    Установка FastPanel на Ubuntu VPS
    Установка Django на VPS с Ubuntu
    Установка FastAPI на VPS с UBUNTU
    Установка Flask на VPS с Ubuntu
    Как отключить систему SElinux на VPS