Практически каждый виртуальный сервер неизбежно подвергается атаке. Бывает происходит наплыв большого количества специальных ботов, которые ищут уязвимости на 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 серверов, на нашем сайте.
Комментарии ()