Защита VPS от вредителей с помощью FAIL2BAN и IPTABLES

Защита VPS от вредителей с помощью FAIL2BAN и IPTABLES

14:12, 02.12.2021
Автор: Артур Бережной
2 мин.
351

Когда сервер подключается к сети, он неизбежно подвергнется атакам со стороны ботов, написанных хакерами с одной единственной целью – отыскать уязвимости в защите VPS. Сканирование ботами – это как проверка на прочность для молодого бойца, и если ваш сервер эту проверку успешно пройдет, то в будущем вы будете спать спокойно. Если же уязвимости найдутся – жди беды, ведь боты немедленно сообщат о них хакерам, а дальше всё будет зависеть от человеческого фактора. В этой статье мы расскажем о том, как можно защитить VPS или VDS с помощью двух простых, но крайне эффективных инструментов:


  1. Локального сервиса Fail2ban, отслеживающего логи всех запущенных процессов на сервере.
  2. Утилиты IPTABLES. Если точнее, то с помощью межсетевого экрана netfilter, а сама утилита нам нужна лишь для его настройки и управления. Она изначально встроена в ядро всех UNIX-подобных систем, использующих ядро Linux версии 2.4 и выше. В общем, установка не потребуется.


Но сперва стоит предпринять некоторые подготовительные меры.

Перенос SSH-сервера на другой порт

И первым нашим шагом будет перенос SSH-сервера на более безопасный порт. По умолчанию стоит стандартный 22 порт, и он считается небезопасным. Поэтому заходим в систему от имени пользователи с правами доступа уровня root, находим конфигурационный файл и создаем резервную копию, чтобы в случае неудачной модификации можно было откатить изменения:


# sudo cp /etc/ssh/sshd_config

/etc/ssh/sshd_config.factory-defaults


Теперь открываем на редактирование конфигурационный файл:


# sudo vi /etc/ssh/sshd_config


Здесь порт, установленный по умолчанию, необходимо заменить на более сложный, причем желательно использовать 5-значное число. Например, 57481 – в данном случае мы имеем достаточно сложный порт, включающий 5 цифр разного номинала. Использовать порт с пятью одинаковыми цифрами не стоит, так как их боты сканируют первоочередно.

Следующим нашим шагом в этом же файле будет отключение возможности аутентификации для суперпользователей, а также добавление возможности входа с помощью ключей SSH. Для этого находим и меняем параметры:


  • PermitRootLogin – заменяем на NO;
  • PubkeyAuthentication – заменяем на YES.


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


ssh user@host -p 57481


Теперь поясним, для чего это делается. Многие администраторы убеждены, что для обеспечения защиты VPS достаточно перейти на авторизацию по ключам и установить Fail2ban, и после этого сервер якобы будет непробиваем. Переход на нестандартный порт – это важная процедура, позволяющая использовать стандартные порты как прикормку для ботов, и благодаря им ваш сервер сможет вовремя выявить попытки сканирования и блокировать IP-адресы, откуда производится сканирование. Само собой, специалисты при таком подходе рекомендуют указывать белые адреса, чтобы случайно не поймать блокировку. Получается, что смена порта на нестандартный существенно усложняет взлом вашей системы и повышает стоимость сбора информации. При грамотной настройке злоумышленнику могут потребоваться месяцы беспрерывного сканирования, и если хакер заранее не знает ваш SSH порт, то он даже при выявлении уязвимостей не сможет ими воспользоваться. Поэтому не стоит пренебрегать этой рекомендацией.

Защита vps от вредителей с помощью fail2ban и iptables

Закрытие всех портов кроме SSH, HTTP, HTTPS

Если ваш сервер используется только для веб-хостинга, необходимо закрыть все сторонние порты, за исключением трех:


  • 80 (HTTP) и 443 (HTTPS) – они используются браузерами живых людей, посетителей вашего сайта.
  • SSH – в вашем случае номер порта будет тем, который вы сами выберете, когда будете переносить SSH, этот вопрос мы подробно рассмотрели выше. Сам порт будет использоваться исключительно администратором сервера.


Итак, алгоритм действий таков: сперва создаем файл с правилами iptables:


sudo touch /etc/iptables.firewall-rules


Внутрь файла необходимо поместить содержимое для корректной работы межсетевого экрана:


#!/bin/bash

IPTABLES=/sbin/iptables

#start and flush

$IPTABLES -F

$IPTABLES -t nat -F

$IPTABLES -X

$IPTABLES -P FORWARD DROP

$IPTABLES -P INPUT DROP

$IPTABLES -P OUTPUT ACCEPT


#SSH traffic

$IPTABLES -A INPUT -p tcp --dport 57481 -j ACCEPT

#HTTP traffic

$IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT

#HTTPS traffic

$IPTABLES -A INPUT -p tcp --dport 443 -j ACCEPT


#loopback

iptables -A INPUT -i lo -p all -j ACCEPT


Это лишь один из возможных вариантов написания скрипта, и если вы сами обладаете необходимыми знаниями в программировании, то без труда сможете написать свои правила, индивидуально адаптировав работу межсетевого фильтра под нужды VPS или VDS.

Динамическая защита при помощи Fail2ban

Сервис Fail2ban не всегда является частью базового набора системных утилит, поэтому его нужно сперва установить. Скачать его можно из любого официального репозитория. Если у вас сервер с ОС Debian или Ubuntu, команда для установки такая:


# apt-get install fail2ban


Если CentOS, Fedora или RHEL, то команда выглядит чуть иначе:


# yum install fail2ban


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

Как только вы установите утилиту, ваш SSH сервер уже получит базовую защиту от банального перебора ключей, однако опытные админы знают: этого недостаточно. Программа содержит два основных конфигурационных файла:


  1. /etc/fail2ban/fail2ban.conf — содержит параметры запуска процесса.
  2. /etc/fail2ban/jail.conf — здесь находятся параметры защиты для конкретных сервисов, в том числе SSHD.


Второй файл делится на несколько секций, так называемых изоляторов. Каждая из этих секций ответственна за определенные сервисы и типы атак.


Защита vps от вредителей с помощью fail2ban и iptables

Параметры, записанные в раздел [DEFAULT], автоматически применяются ко всем секциям, если их не переопределять вручную. В секции [SSH] содержатся параметры защиты SSH от повторяющихся неудачных попыток – это и есть тот элемент, гарантирующий защиты от перебора паролей. Таким нехитрым образом мы отсеиваем самых примитивных, но очень назойливых вредителей.

Теперь чуть подробнее о параметрах конфигурационного файла jail.conf:


  • ignoreip — это IP-адресы, которые блокировать не нужно. Сюда вы можете внести сколько угодно адресов, разделив их с помощью пробела, а также указать маску подсети и имя DNS.
  • bantime — продолжительность бана, указывается в секунду и назначается IP-адресам, совершившим попытку неудачной авторизации. По истечению этого времени IP-адрес удаляется из банлиста.
  • maxretry — этот параметр определяет количество допустимых подозрительных действий, после которых правило будет применено. В нашем случае под подозрительными действиями понимаются неудачные попытки аутентификации.
  • enabled — если прописано значение true, это будет означать, что секция активна. Если false, изолятор отключается.
  • port — сюда прописываем порт, на котором запущен целевой сервис. Как мы уже отмечали ранее, стандартный порт SSH это 22. Если вы его меняли на нестандартный, то прописываете его. Также сюда можно прописать его буквенное обозначение – ssh.
  • filter — название фильтра с регулярными выражениями, используемыми для выявления «подозрительных совпадений». Для фильтра sshd предназначен файл /etc/fail2ban/filter.d/sshd.conf.
  • logpath — адрес файла журнала, который утилита Fail2ban использует для фильтрации по заданным ранее параметрам. Здесь будет находиться log всех удачных и неудачных попыток совершить аутентификацию. Сам файл находится по пути /var/log/auth.log.


И теперь дадим несколько рекомендаций, как это всё правильно настроить и подготовить к труду и обороне:


  • не оставляйте в списке ignoreip адрес 127.0.0.1/8, заданный по умолчанию, так как параметр станет уязвимым местом в защите – если хакеру удастся получить доступ к какому-либо shell-аккаунту, он сможет в два счета запустить какой-нибудь bruteforce (перебор ключей) для атаки на root или других пользователей с этого же сервера;
  • не стоит вносить изменения в основной файл jail.conf, лучше использовать файл с расширением .local – они автоматически подключаются и имеют более высокий приоритет;
  • параметр maxtry лучше установить на 5.


После настройки утилиту нужно перезапустить, и всё заработает. Если нужны более подробные сведения по документации и настройке Fail2ban, рекомендуем посетить официальную Wiki, посвященную данному инструменту.

В качестве заключения

После всех этих манипуляций ваш сервер станет куда менее «доверчивым» по отношению к зловредным программам и ботам. Он перестанет реагировать на пакеты, приходящие на любые порты, окромя HTTP, HTTPS и SSH-порта, которые мы настроили с помощью iptables. Теперь ваш сервер сможет отличить плохое от хорошего, и всё плохое непременно попадет в бан. Можно считать, что защита Linux-хоста теперь реализована по высшему разряду, и взломать такой VPS будет очень непросто. А если остались вопросы – звоните или оставляйте заявку на сайте, наши специалисты вас проконсультируют и помогут решить любую задачу.

# О VPS Поделиться:
Статьи по Теме