Памятка по безопасности VPS, VDS сервера Ubuntu, Debian

Безопасность

Данная памятка включает в себя минимальный перечень возможных мер по улучшению безопасности собственного VPS, VDS сервера с Ubuntu или Debian. В примере используется VPS от Fornex, сервер используется преимущественно для VPN.

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

https://aeza.net/?ref=379564 — реферальная ссылка, После регистрации Вы получите бонус 15% к пополнению баланса, который будет действовать 24 часа.

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

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

Также советую посетить страницу обсуждения Защиты сервера Ubuntu, Debian на форуме opeNode.ru

Общие правила безопасности VPS, VDS сервера

Настройки сервера VPS не самая важная часть безопасности, самое важное — это здравый смысл администратора сервера.

  • Не храните пароль личного кабинета сервера в онлайн хранилищах паролей (много случаев сливов паролей) или в TXT файле на рабочем столе. Лучше всего хранить пароль только в своей голове и периодически обновлять его, в крайнем случае заведите бумажный блокнот. Также вы можете воспользоваться хранилищем паролей с открытым исходным кодом KeePassXC или Bitwarden, такой способ тоже относительно безопасен. Если же вы храните пароли в браузере и не хотите менять свои привычки, то обязательно пользуйтесь мастер паролем.
  • Используйте сложные пароли с учётом регистра и использованием спецсимволов.
  • Максимально усильте защиту Email к которому привязан личный кабинет панели управления сервером.
  • Используйте двухфакторную верификацию для Email и личного кабинета администратора сервера. Желательно использовать не смс верификацию, а программы 2FA с использованием токенов по типу Aegis, 2FA, Яндекс ключ и т.д., так как смс могут перехватить злоумышленники с использованием клона вашей сим карты (редкий случай, но так бывает). Я в большинстве случаев использую Aegis
  • Не сохраняйте пароли в FTP-клиентах — очень часто вирусы берут информацию из FTP-клиента.
  • Никому не передавайте данные основной учетной записи администратора, и если есть необходимость в передаче доступа, создайте для этого новую учетную запись с ограниченными правами. Не забудьте потом удалить временную учетную запись.
  • Используйте проверенные VPS, VDS серверы. Сам использую Fornex. Подписчики также рекомендуют Melbicom. В случае если вы всё-таки решили сэкономить денег и используете сомнительный и очень бюджетный сервер, то усиливайте безопасность по максимуму и желательно не используйте свои личные данные, реальный IP и личные платежные реквизиты при покупке аренды сервера.

Использование SSH ключа

Источник: https://fornex.com/c/fir5fs/ru/help/authorization-ssh-key/

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

Если вы решили настроить на сервере ssh авторизацию по ключу, первое, что необходимо сделать — это сгенерировать секретный и публичный RSA-ключи.

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

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

ssh-keygen -t rsa -b 2048

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

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

Для перехода в каталог с ключами выполните команду:

cd ~/.ssh

В каталоге будут лежать два файла:

  • id_rsa — секретный ключ.
  • id_rsa.pub — публичный ключ.

Скопируйте в надежное место файл секретного ключа, а публичный ключ перенесите на сервер. Удобнее всего для копирования файлов с сервера на пк использовать Filezilla или любой другой SFTP файловый менеджер.

Заносим сгенерированный открытый ключ в авторизованные ключи сервера. Для этого скопируйте содержимое id_rsa.pub в конец файла authorized_keys:

cat id_rsa.pub >> ~/.ssh/authorized_keys

Настройте ssh авторизацию по ключу в конфиге OpenSSH сервера:

nano /etc/ssh/sshd_config

Приведите текущие настройки в соответствие параметрам ниже:

PubkeyAuthentication yes  
AuthorizedKeysFile %h/.ssh/authorized_keys  
RhostsRSAAuthentication no  
HostbasedAuthentication no  
PermitEmptyPasswords no

Чтобы отключить вход по паролю, изменяем значение параметра в том же файле sshd_config:

PasswordAuthentication no

В Ubuntu 24.04 LTS параметр PasswordAuthentication находится в файле /etc/ssh/sshd_config.d/50-cloud-init.conf. Изменение упомянутого параметра в файле /etc/ssh/sshd_config не принесёт никаких изменений.

nano /etc/ssh/sshd_config.d/50-cloud-init.conf

Для Ubuntu 22.04 дополнительно пропишите

PubkeyAcceptedAlgorithms +ssh-rsa

Установите права выполнив команду:

chmod 700 ~/.ssh/ &&
chmod 600 ~/.ssh/authorized_keys

Далее выполните перезапуск ssh сервера.

systemctl restart ssh

На этом настройка SSH ключа на сервере закончена.

Установка Fail2ban в Ubuntu, Debian

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

Установка Fail2ban в Ubuntu

Обновляем систему:

apt update -y && 
apt upgrade -y

Пакет Fail2ban включен в репозитории Ubuntu по умолчанию. Чтобы установить его, введите следующую команду:

apt-get install fail2ban

Для запуска службы Fail2ban вводим следующие команды (для справки, т.к. fail2ban должен запуститься автоматически):

systemctl enable fail2ban
systemctl start fail2ban

Для проверки работоспособности службы Fail2ban:

systemctl status fail2ban

Пункты 3.2. и 3.3. содержат описание настройки Fail2ban и выполнять их необязательно, так как защита SSH по умолчанию уже включена в Fail2ban с момента установки.

Основы настройки Fail2ban

Источник: https://homehosted.ru/ustanovka-i-nastrojka-fail2ban/

Процесс настройки fail2ban не зависит от дистрибутива Linux. Файлы конфигурации Fail2Ban располагаются в директории /etc/fail2ban. В первую очередь нас интересует файл jail.conf. Однако, его не рекомендуется изменять, так как он может быть перезаписан при обновлении пакета и для настройки используют подключаемые файлы из каталога /etc/fail2ban/jail.d.Он содержит основные настройки защиты для таких сервисов, как HTTP, FTP, SSH, Squid, Monit, Horde, Drupal и др. Сам файл поделен на секции, которые называются «тюрьмами» или «изоляторами» (jais). Отдельный изолятор отвечает за определённый сервис. Достаточно добавить параметр enabled = true в необходимой секции файла для активации защиты.

Для включения того или иного правила из основного файла конфигурации jail.conf необходимо создавать отдельные конфигурации для каждого сервиса отдельно в директории /etc/fail2ban/jail.d/ по аналогии с файлом /etc/fail2ban/jail.d/defaults-debian.conf, который также не следует редактировать. Или по аналогии с файлом из следующего пункта.

[sshd]
enabled = true

Основной перечень возможных параметров:

  • ignoreip — перечень IP-адресов, которые не должны блокироваться сервисом ни при каких условиях. В этом параметре можно также задать маску подсети или имя DNS-сервера. Вы можете прописать свой IP адрес для исключения самоблокировки.
  • bantime — время блокировки в секундах. По истечении этого срока заблокированный адрес удаляется из списков сервиса.
  • maxretry — количество подозрительных действий, после которых активируется блокировка. Например, количество неудачных попыток логина.
  • port — определяет, на каком порту или портах запущен необходимый сервис.
  • filter — имя фильтра, по которому идёт поиск совпадений. Например, для фильтра sshd создан файл /etc/fail2ban/filter.d/sshd.conf.
  • logpath — путь к файлу журнала. Здесь будет фиксироваться история удачных и неудачных входов в систему. По умолчанию это файл /var/log/auth.log.
  • action — действия, которое будет выполняться, если Fail2ban обнаружит активность, соответствующую критериям поиска;

Fail2ban читает файлы конфигурации в следующем порядке. Каждый файл .local отменяет настройки из файла .conf:

  • /etc/fail2ban/jail.conf — стандартные настройки сервисов
  • /etc/fail2ban/jail.d/*.conf — пользовательские настройки администратора для сервисов
  • /etc/fail2ban/jail.local — пользовательские настройки администратора для сервисов
  • /etc/fail2ban/jail.d/*.local — пользовательские настройки администратора для сервисов

Также существуют и другие файлы настроек:

  • action.d/*.* — конфигурация выполняемых действий;
  • fail2ban.conf — стандартный конфигурационный файл;
  • fail2ban.d/*.* — пользовательские настройки администратора для Fail2ban;
  • filter.d/*.* — шаблоны для анализа логов и настройки шаблонов;

Файлы paths-arch.conf, paths-common.conf, paths-debian.conf и paths-opensuse.conf хранят в себе настройки путей для различных операционных систем семейства Linux.

Настройка Fail2ban для SSH

Источник: https://homehosted.ru/ustanovka-i-nastrojka-fail2ban

SSH изолятор работает в Fail2Ban по умолчанию сразу после установки сервиса. Но если Вам необходимо внести изменения в его работу, необходимо создать новый jail файл. Для этого мы будем использовать редактор nano:

nano /etc/fail2ban/jail.d/ssh.conf

Добавляем в созданный файл следующие строки:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 300
backend = systemd

* где:

  • sshd — название для правила;
  • enabled позволяет быстро включать (true) или отключать (false) правило;
  • port — порт целевого сервиса. Принимается буквенное или цифирное обозначение;
  • filter — фильтр (критерий поиска), который будет использоваться для поиска подозрительных действий. По сути, это имя файла из каталога /etc/fail2ban/filter.d без .conf на конце;
  • logpath — расположение лог-файла, в котором фильтр будет искать подозрительную активность на основе описанных критериев.
  • maxretry — количество действий, которые разрешено совершить до бана.
  • findtime — время в секундах, в течение которого учитывается maxretry;

Чтобы изменения вступили в силу, перезапускаем сервис:

systemctl restart fail2ban

Указанная нами конфигурация будет блокировать IP адреса после 3-х проваленных попыток логина на Ваш сервер через SSH. Блокировка действует 300 секунд, а все подозрительные действия будут записываться в файл журнала /var/log/auth.log.

Вы можете изменить параметры под Ваши нужды.

Добавление IP адреса в белый список

Источник: https://homehosted.ru/ustanovka-i-nastrojka-fail2ban

Чтобы избежать неловкого провала в виде самоблокировки, советую сразу же добавить доверенные IP-адреса в белый список, прежде чем приступать к основной настройке программы. Сделать это можно, отредактировав файл jail.local:

nano /etc/fail2ban/jail.local

Добавьте следующие строки, заменив ip1 и ip2 на доверенные адреса:

[DEFAULT]
ignoreip = ip1 ip2

ignoreip — перечень IP-адресов, которые не должны блокироваться сервисом ни при каких условиях. В этом параметре можно также задать маску подсети или имя DNS-сервера. Вы можете прописать свой IP адрес для исключения самоблокировки.

Не забудьте перезагрузить программу для применения изменений при помощи команды:

systemctl restart fail2ban

Изменение стандартного порта для SSH подключения в Ubuntu, Debian

Источник: https://fornex.com/ru/help/ssh-port/

По умолчанию SSH-сервер открывает для входящих соединений 22 TCP-порт, и тем самым вызывает потенциальную угрозу bruteforce-атак, поскольку злоумышленник обнаружив на сервере такой открытый порт, пытается подобрать пароль к удалённому серверу при помощи специальных средств автоматизации.

Информация об используемом порте находится на вашем виртуальном сервере (VPS) в файле sshd_config, который находится в директории /etc/ssh/

Чтобы сменить SSH-порт:

Заходим на сервер помощью SSH-клиента PuTTY

Устанавливаем Net-tools:

apt install net-tools

Проверяем список открытых портов командой:

netstat -tupln | grep LISTEN

Таким образом мы проверим какие из портов уже используются, чтобы не использовать их повторно.

После проверки портов открываем файл sshd_config. Его вы можете открыть с помощью любого установленного текстового редактора.

Редактором nano:

nano /etc/ssh/sshd_config

Ищем в файле sshd_config запись:

Раскомментируем строку убрав # и меняем номер порта на другой, сохраняем данные изменения при помощи сочетания кнопок на клавиатуре CTRL+O

После нажимаем подтвердить, с помощью клавиши Enter на клавиатуре

Чтобы изменения вошли в силу, перезагружаем виртуальный SSH-сервер. Это можно сделать при помощи команды:

service sshd restart

Добавление правил брандмауэра

Закрываем IPTABLES при помощи надстройки UFW от лишних соединений путем добавления новых правил в дополнение к стандартным.

Устанавливаем UFW

apt install ufw

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

Давайте установим для ваших правил UFW значения по умолчанию. Чтобы установить значения по умолчанию, используемые UFW, используйте следующие команды:

ufw default deny incoming  && 
ufw default allow outgoing

Так как данные команды закрыли все лишние порты и соединения, вам необходимо добавить правило фаервола (брэндмауэра) разрешающее использовать порт SSH соединения (в противном случае вы не можете использовать SSH и единственный способ им воспользоваться будет панель управления сервером)

Выполните следующую команду указав номер своего порта SSH вместо ПОРТ-SSH, такой же командой вы можете открыть и другие порты такие как 80, 443 и т.д.:

ufw allow (ваш порт SSH, по умолчанию 22) !важно!

# к примеру ufw allow 44

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

ufw enable

Перезапускаем Fail2ban:

systemctl restart fail2ban

Более подробную документацию по UFW смотрим тут https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-22-04

Если правила UFW необходимы для содержимого контейнера Docker то воспользуйтесь uwf-docker, подробнее тут https://openode.ru/topic/38-ufw-docker-ufw-docker-delaem-konteynery-bezopasnymi/

Оцените статью
Кибер Лис
Добавить комментарий

  1. StudyDocx

    Спасибо за статью, пригодилось!

    Ответить