WESERVER / БАЗА ЗНАНИЙ

Как настроить безопасность нового VDS: первые шаги

На новом Linux VDS сначала обновите пакеты, создайте пользователя с sudo, перейдите на SSH-ключи, запретите вход root и по паролю, затем включите фаервол. Команды, порядок и частые ошибки.

Краткий ответ

Получив новый Linux VDS, сначала обновите пакеты, создайте отдельного пользователя с правами sudo, добавьте ему SSH-ключ и запретите вход под root и по паролю. Затем включите фаервол, который пропускает только нужные порты. Всё это делается за одну сессию, и автоматический перебор паролей перестаёт давать результат.

Команды приведены с apt для Ubuntu и Debian и с dnf для AlmaLinux и Rocky Linux. В примерах IP сервера 203.0.113.10, новый пользователь deploy. К VDS с Windows Server подключаются по RDP; об этом подробнее в руководстве по удалённому рабочему столу.

В каком порядке настраивать защиту нового сервера?

Если выполнить некоторые шаги не в том порядке, можно потерять доступ к собственному серверу. Держите сессию root открытой до конца и идите по списку:

  • Войдите по SSH под root
  • Обновите пакеты и при необходимости перезагрузите сервер
  • Создайте пользователя с sudo и добавьте ему SSH-ключ
  • Проверьте вход новым пользователем из второго окна
  • Запретите вход под root и по паролю, перезапустите SSH и снова проверьте вход из второго окна
  • Сначала разрешите SSH в фаерволе, потом включите его
  • Установите Fail2ban и проверьте открытые порты через ss

Как обновить систему и автоматизировать обновления безопасности?

Образы ОС содержат пакеты на момент сборки, поэтому на свежем сервере нет исправлений безопасности, вышедших позже. Выполните apt update && apt upgrade -y в Ubuntu и Debian или dnf upgrade -y в AlmaLinux и Rocky Linux. Если в Ubuntu появился файл /var/run/reboot-required, значит, обновилось и ядро, и нужен reboot.

Чтобы исправления безопасности ставились сами, в Ubuntu и Debian установите unattended-upgrades и включите его командой dpkg-reconfigure -plow unattended-upgrades. В AlmaLinux и Rocky Linux выполните dnf install dnf-automatic, укажите apply_updates = yes в /etc/dnf/automatic.conf и запустите таймер: systemctl enable --now dnf-automatic.timer. С настройками по умолчанию ни один из инструментов не перезагружает сервер после обновления ядра, так что перезагрузку планируйте на своё окно обслуживания.

Как создать пользователя с sudo вместо работы под root?

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

  • Ubuntu и Debian: создайте пользователя и пароль командой adduser deploy, затем добавьте его в группу sudo: usermod -aG sudo deploy. Если в минимальном образе Debian нет sudo, сначала выполните apt install sudo.
  • AlmaLinux и Rocky Linux: создайте пользователя командой useradd -m deploy, задайте пароль через passwd deploy и добавьте его в группу wheel: usermod -aG wheel deploy.
  • Проверка: переключитесь через su - deploy и выполните sudo whoami. Если вывод root, sudo работает.
  • Этот пароль спрашивается при командах sudo, а не при входе по SSH. Всё равно выберите надёжный пароль, который больше нигде не используется.

Как добавить SSH-ключ и запретить вход под root и по паролю?

Если ключ уже добавлен для root, выполните под root rsync --archive --chown=deploy:deploy ~/.ssh /home/deploy: команда скопирует authorized_keys новому пользователю с правильным владельцем и правами. Если ключа ещё нет, запустите ssh-copy-id [email protected] со своего компьютера. Затем во втором терминале убедитесь, что ssh [email protected] пускает без запроса пароля.

Когда вход работает, ужесточите настройки SSH. Вместо правки основного файла создайте /etc/ssh/sshd_config.d/00-guvenlik.conf с тремя строками: PermitRootLogin no, PasswordAuthentication no и KbdInteractiveAuthentication no. sshd берёт для каждого параметра первое прочитанное значение. Файл с именем на 00 читается раньше файлов вроде 50-cloud-init.conf, в которых некоторые облачные образы задают PasswordAuthentication yes, поэтому действует ваша настройка.

Перед перезапуском проверьте синтаксис командой sshd -t; пустой вывод означает, что ошибок нет. Затем выполните systemctl restart ssh в Ubuntu и Debian или systemctl restart sshd в AlmaLinux и Rocky Linux. Команда sshd -T | grep -Ei "permitrootlogin|passwordauthentication" показывает значения, которые сервер использует на самом деле. Прежде чем закрыть сессию root, ещё раз подключитесь как deploy из нового окна.

Как включить фаервол и какие порты открыть?

Закройте все входящие подключения и разрешите только те службы, которыми пользуетесь. Для веб-сервера это обычно SSH и порты 80 и 443. Базы данных, Redis и панели управления не выставляйте в интернет; если нужен удалённый доступ, разрешите только конкретный IP-адрес.

  • Ubuntu и Debian (ufw): ufw allow OpenSSH, ufw allow 80/tcp, ufw allow 443/tcp, затем ufw enable. Состояние смотрите через ufw status verbose. В Debian ufw может отсутствовать, установите его командой apt install ufw.
  • AlmaLinux и Rocky Linux (firewalld): запустите службу командой systemctl enable --now firewalld. Сервис ssh в зоне по умолчанию уже разрешён. Для веба добавьте firewall-cmd --permanent --add-service=http и firewall-cmd --permanent --add-service=https, затем выполните firewall-cmd --reload; firewall-cmd --list-all покажет текущие правила.
  • Доступ для одного IP: ufw allow from 198.51.100.7 to any port 3306 proto tcp

Нужны ли отдельные правила фаервола для сервера с IPv6?

VDS WeServer работают с IPv4 и IPv6, поэтому проверьте, что правила действуют для обоих протоколов. При IPV6=yes в /etc/default/ufw ufw добавляет каждое правило сразу для IPv4 и IPv6. firewalld и так управляет обоими протоколами в одной зоне.

Правила iptables, написанные вручную, касаются только IPv4; для IPv6 нужны отдельные правила в ip6tables. Если про это забыть, служба, закрытая по IPv4, останется доступной по IPv6-адресу. Для проверки снаружи выполните с другой машины что-то вроде nc -zv -6 ipv6-адрес-сервера 3306 и посмотрите, отвечает ли порт.

Нужен ли Fail2ban и как его настроить?

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

  • Установка: apt install fail2ban в Ubuntu и Debian. В AlmaLinux и Rocky Linux пакет находится в репозитории EPEL: сначала dnf install epel-release, затем dnf install fail2ban.
  • В /etc/fail2ban/jail.local под заголовком [sshd] укажите enabled = true, maxretry = 5 и bantime = 1h. В Debian 12 логи SSH пишутся в journal, а не в файл, поэтому добавьте ещё строку backend = systemd.
  • Запустите службу: systemctl enable --now fail2ban. Команда fail2ban-client status sshd покажет заблокированные IP-адреса.
  • Если случайно заблокировали свой IP, снимите блокировку: fail2ban-client set sshd unbanip 198.51.100.7.

Как проверить, какие службы открыты наружу?

Команда ss -tulpn выводит все прослушиваемые порты TCP и UDP вместе с программой, которая их открыла. Адрес 0.0.0.0 или [::] означает, что служба доступна на всех сетевых интерфейсах. Если видите 127.0.0.1 или [::1], к службе можно обратиться только с самого сервера.

Если в списке есть служба, которой вы не пользуетесь, остановите и отключите её: systemctl disable --now <служба>. Когда MySQL, PostgreSQL или Redis обслуживают только приложение на этом же сервере, им достаточно слушать 127.0.0.1. Фаервол служит второй линией обороны; если служба слушает не тот адрес, сначала исправьте это в её собственных настройках.

Какие ещё настройки сделать сразу: часовой пояс, hostname, резервные копии?

  • Часовой пояс: timedatectl set-timezone Europe/Istanbul (или ваш пояс). С правильным временем проще сопоставлять логи и разбираться с задачами по расписанию.
  • Hostname: hostnamectl set-hostname web01. Когда открыто несколько серверов, по приглашению командной строки сразу видно, где вы находитесь.
  • Резервные копии: если провайдер предлагает бэкапы или снапшоты, уточните письменно их объём и срок хранения. Для важных данных держите регулярную копию вне сервера и проверяйте, что она восстанавливается.
  • Переустановка: если переустановить ОС из клиентской панели WE1, эти настройки не сохранятся. Повторите шаги и удалите старый host-ключ на своём компьютере командой ssh-keygen -R 203.0.113.10.

Частые ошибки при первичной настройке и их решение

Чаще всего доступ теряют или оставляют службу открытой из-за одной из этих ошибок:

  • SSH отвалился сразу после ufw enable. Причина: фаервол включили до того, как разрешили SSH. Решение: войдите через консоль провайдера и выполните ufw allow OpenSSH; если консоли нет, обратитесь в поддержку.
  • Вход по паролю отключён, но SSH всё равно спрашивает пароль. Причина: другой файл в sshd_config.d переопределяет параметр или службу не перезапустили. Решение: проверьте действующее значение через sshd -T, исправьте порядок имён файлов и перезапустите службу.
  • Новый пользователь получает Permission denied (publickey). Причина: authorized_keys всё ещё принадлежит root или права выставлены неверно. Решение: chown -R deploy:deploy /home/deploy/.ssh, chmod 700 /home/deploy/.ssh и chmod 600 /home/deploy/.ssh/authorized_keys.
  • sudo выдаёт «deploy is not in the sudoers file». Причина: пользователь не добавлен в группу sudo или wheel, либо сессия открыта до изменения групп. Решение: повторите usermod -aG под root и войдите пользователем заново.
  • Порт базы данных виден снаружи. Причина: служба слушает 0.0.0.0 или [::], а правил для IPv6 нет. Решение: настройте службу на 127.0.0.1 и проверьте IPV6=yes в ufw.

Частые вопросы

Менять ли порт SSH? Смена порта уменьшает следы автоматических сканеров в логах, но целенаправленную атаку не остановит. Реальную защиту дают вход по ключу и отключённый вход по паролю. Если всё же меняете порт, откройте новый в фаерволе до того, как закроете старый.

Подходят ли эти шаги для VDS с Windows Server? Принцип тот же, инструменты другие: обновления через Windows Update, надёжный пароль администратора и доступ по RDP только с нужных IP-адресов в брандмауэре Windows. Подробности в руководстве по подключению через RDP.

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

Отключать ли SELinux? В AlmaLinux и Rocky Linux SELinux по умолчанию работает в режиме enforcing и даёт дополнительный уровень защиты. Если приложение не работает, найдите заблокированное действие через ausearch -m avc и исправьте контекст или правило, а не выключайте SELinux.

Что регулярно проверять после настройки? Время от времени просматривайте ожидающие обновления, вывод fail2ban-client status sshd и список ss -tulpn. Именно в нём обычно всплывает недавно установленная служба, которая незаметно открыла порт наружу.

Смотреть связанные продуктыСпросить в WhatsApp← К категории

СВЯЗАННОЕ

Похожие статьи

ALL IN WE1

Создадим вашу инфраструктуру.

Опишите задачу — поможем выбрать подходящие ресурсы и тип сервера.

Написать в WhatsApp