Защита 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 [email protected]

Как заблокировать все порты, кроме 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


    Handyhost.ru

    Серёга, 7 февраля 2023 оценил

    Хорошие VPSки у данного провайдера. Качественные и стабильные. пинг хороший. Для моего сайта работает вполне хорошо. Никаких задер...


    xhost24.com

    Михаил548, 6 февраля 2023 оценил

    Перенес сюда свой сайт бесплатно, пользуюсь пару месяцев. Все устраивает, стоимость нормальная, сервис на высоте


    prohoster.info

    Сергей, 6 февраля 2023 оценил

    Решил попробовать данный хост, все работает стабильно. Адекватная цена, вопросов по работе не возникало, скорость устраивает. Подд...


    cloud4box.com

    Алиса Иванова, 6 февраля 2023 оценил

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


    pq.hosting

    Константин, 3 февраля 2023 оценил

    Как по мне оптимальное соотношение цены и качества. Замечу, что в месяц аренда VPS обходится мне всего лишь в 8 долларов, что с уч...


    новые Статьи

    Установка Home Assistant на VPS c OC Ubuntu
    Установка NextCloud на VPS
    Установка PostgreSQL на VPS Ubuntu
    Установка Redmine на VPS c Ubuntu
    Сброс root пароля MySQL на VPS
    Читать все статьи