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


    Smartape.ru

    Никита, 23 апреля 2024 оценил

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


    vpsdom.net

    Валерий , 23 апреля 2024 оценил

    Не первый год работаю с vpsdom, цены устраивают, серверы хорошие, при заказе ds-2 поставили процессор лучше и диска побольше, спас...


    ihor.ru

    Ефим, 22 апреля 2024 оценил

    Надежный и стабильный хостинг с огромными лимитами! Я уже долгое время использую его для виртуальной частной сети (VPN) с протокол...


    lite.host

    Денис, 21 апреля 2024 оценил

    Много искал хостингов. Все перебрал, и особенно именитых. На самых известных очень много недостатков, к примеру платные функции. Н...


    pq.hosting

    nerdusatro, 19 апреля 2024 оценил

    После использования услуг хостинга от PQ.Hosting, я остался вполне удовлетворен. Первое, что бросается в глаза - это стабильность ...


    новые Статьи

    Установка и настройка HestiaCP на VPS/VDS
    Как установить SSH-ключи на сервер в PuTTY?
    Установка git на VPS сервер
    Установка Bitrix24 на VPS
    Установка и настройка LAMP на VPS с Ubuntu
    Читать все статьи