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


    HostVDS.com

    Denis, 30 сентября 2024 оценил

    Некоторое время выбирал не дорогой и стабильный сервис для впн, попробовал данный сервис, оказалось очень даже хорошо. Порадовала ...


    hsvds.ru

    Евгений, 29 сентября 2024 оценил

    Не рекомендую. Первый раз встречаю сервис, где нет возможности работать с правами администратора. завлекла заявленная скорость, но...


    aeza.net

    Максим, 27 сентября 2024 оценил

    С aeza.net не паришься с блокировками. Подключаешься - и вперед! Могу рекомендовать.


    Smartape.ru

    Иван, 27 сентября 2024 оценил

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


    Firstbyte

    Виктор Балавин, 27 сентября 2024 оценил

    Занимаюсь разработкой сайтов и когда у меня советуются, где разместить сайт интернет-магазина, то я рекомендую вдс fb. Мы уже 5 ле...


    новые Статьи

    Восстановление пароля root для VPS
    Как установить AmneziaVPN на VPS
    Настройка Wireguard VPN на роутере Keenetic
    Как настроить OpenVPN на роутере Keenetic Lite?
    Установка и настройка HestiaCP на VPS/VDS