Защита 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


    lite.host

    DEN, 2 июня 2023 оценил

    Пользуюсь хостингом ещё с 2016 года, всегда все устраивает. Держит даже высоконагруженные сайты. Особенно хочу отметить техподдерж...


    Coopertino.ru

    Денис Мельников, 31 мая 2023 оценил

    Большая благодарность техподдержке хостинга. Была проблема с резервным бэкапом "благодаря" прошлому хостеру, ребята помо...


    prohoster.info

    Тимур, 31 мая 2023 оценил

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


    adman.com

    вячеслав , 29 мая 2023 оценил

    удобный и хороший хостинг советую.


    pq.hosting

    Леонид, 29 мая 2023 оценил

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


    новые Статьи

    Почту из Яндекса теперь можно перевезти в ispmanager. Бесплатно
    Установка Moodle на VPS с ОС Ubuntu
    Установка Home Assistant на VPS c OC Ubuntu
    Установка NextCloud на VPS
    Установка PostgreSQL на VPS Ubuntu
    Читать все статьи