Skip to content
ВажноAmneziaWG 3.1: как обновиться и как вернуться на 2.0Переустановка протокола, параметры по умолчанию, откат на 2.0 — и почему после этого перестают работать выданные конфигурации.Читать инструкцию →

🔒 Безопасность сервера

Несколько несложных шагов заметно повышают защиту VPS: закрывают его от перебора паролей и автоматических сканеров. Делать всё сразу не обязательно — начните с базового минимума, остальное добавите, когда будет время.

Порядок имеет значение

Идите по разделам сверху вниз. Особенно важно: перед закрытием доступа по паролю и перед включением файрвола убедитесь, что новый способ входа работает — проверяйте в новом окне терминала, не закрывая текущее.

1. Обновления

Актуальные пакеты закрывают известные уязвимости:

bash
sudo apt update && sudo apt upgrade -y

Чтобы обновления безопасности ставились сами:

bash
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades

2. Отдельный пользователь с правами sudo

Постоянно работать под root небезопасно. Создадим обычного пользователя с правами администратора — вместо alex подставьте своё имя латиницей:

bash
adduser alex
usermod -aG sudo alex
echo "alex ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/alex
su - alex

Дальше все команды выполняются от этого пользователя с приставкой sudo.

3. Смена стандартного порта SSH

Порт 22 круглосуточно сканируют бот-неты. Перевод на нестандартный порт (от 1024 до 65535) резко снижает поток попыток входа.

bash
sudo nano /etc/ssh/sshd_config

Найдите строку #Port 22, уберите # и укажите свой порт, например Port 2222. Сохраните: Ctrl+O → Enter → Ctrl+X. Затем откройте порт и перезапустите службу:

bash
sudo ufw allow 2222/tcp
sudo systemctl restart ssh   # на очень старых системах: sudo systemctl restart sshd

Проверьте, что сервер действительно слушает новый порт:

bash
sudo ss -tlnp | grep -E ':(22|2222)\s'

Подключение теперь выглядит так: ssh -p 2222 alex@IP_СЕРВЕРА

Проверьте доступ заранее

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

Порт остался 22 — дело в ssh.socket

В Ubuntu 22.10 и новее (включая 24.04) SSH по умолчанию запускается через сокет systemd. В этом случае порт задаёт сам сокет, а параметр Port из sshd_config игнорируется — команды выполняются без ошибок, но сервер продолжает слушать 22. Признак: в выводе ss -tlnp рядом с портом 22 указан не sshd, а systemd.

Проверить, включена ли активация через сокет:

bash
systemctl is-enabled ssh.socket

Ответ enabled — порт нужно менять в сокете, одним из двух способов.

Вариант А — задать порт в сокете:

bash
sudo systemctl edit ssh.socket

Откроется редактор (обычно nano). В пустой области между строками-комментариями впишите:

ini
[Socket]
ListenStream=
ListenStream=2222

Пустая строка ListenStream= обязательна: она сбрасывает унаследованный порт 22, иначе сервер будет слушать оба порта. Сохраните (Ctrl+O → Enter → Ctrl+X) и примените:

bash
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket

Вариант Б — отключить сокет и вернуться к обычной службе. Тогда порт берётся из sshd_config, как в старых версиях:

bash
sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service
sudo systemctl restart ssh

После любого из вариантов снова проверьте порт командой sudo ss -tlnp | grep -E ':(22|2222)\s' и, не закрывая текущую сессию, зайдите на сервер из нового окна терминала.

Важно для AmneziaVPN

Если сервер добавлен в приложение, укажите там новый порт — иначе установка протоколов не пройдёт. Приложение не умеет редактировать сохранённые реквизиты: сервер придётся удалить и добавить заново, а протоколы не переустанавливать, а найти кнопкой «Проверить сервер на наличие ранее установленных сервисов Amnezia». Подробнее — Ошибки 30x.

4. Вход по SSH-ключу вместо пароля

Ключ надёжнее пароля: публичный ключ лежит на сервере («замок»), приватный — только у вас («ключ»).

Создать ключи на своём компьютере

Windows (встроенный SSH — рекомендуемый способ), в командной строке:

bash
cd /D %USERPROFILE%\.ssh && ssh-keygen -f id_ed25519 -C "amnezia" -N "" -q -t ed25519
ФлагЗначение
-f id_ed25519имя файла приватного ключа — сделайте его индивидуальным
-C "amnezia"метка для идентификации ключа
-N ""без пароля
-qтихий режим
-t ed25519тип ключа ED25519

Появится пара: id_ed25519 (приватный, никому не передавайте) и id_ed25519.pub (публичный).

macOS и Linux:

bash
ssh-keygen                                  # на все вопросы можно нажимать Enter
ssh-copy-id -p 2222 alex@IP_СЕРВЕРА

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

bash
mkdir -p ~/.ssh && nano ~/.ssh/authorized_keys

Вставьте содержимое .pub-файла и сохраните: Ctrl+O → Enter → Ctrl+X.

Если пользуетесь PuTTY

Ключ в формате .ppk подходит только для самой PuTTY: в её настройках путь указывается в Connection → SSH → Auth → Credentials, поле Private key file for authentication. Для приложения AmneziaVPN ключ нужно экспортировать в OpenSSH-формат — как это сделать, описано в Ошибках 30x.

Отключить вход по паролю

Сначала проверьте вход по ключу

Откройте новое окно терминала и убедитесь, что сервер пускает вас без пароля. Только после этого продолжайте.

bash
sudo nano /etc/ssh/sshd_config

Найдите PasswordAuthentication yes и замените на PasswordAuthentication no. Заодно можно запретить вход самому root: строку #PermitRootLogin yes привести к виду PermitRootLogin no. Сохраните и перезапустите службу:

bash
sudo systemctl restart ssh

5. Файрвол UFW

Закрываем всё, кроме нужного:

bash
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp     # КРИТИЧЕСКИ ВАЖНО: ваш SSH-порт
sudo ufw allow 443/tcp      # например, XRay по TCP
sudo ufw allow 51820/udp    # например, AmneziaWG / WireGuard по UDP
sudo ufw enable && sudo ufw status

Не закройте себе SSH

Порт SSH нужно разрешить до включения файрвола. Если этого не сделать, доступ к серверу пропадёт.

Правило при смене протоколов: добавили новый протокол в AmneziaVPN или сменили порт — откройте его в UFW (sudo ufw allow ПОРТ). Ненужные старые порты закройте (sudo ufw delete allow ПОРТ) и перезагрузите файрвол (sudo ufw reload). Порт панели 3X-UI тоже нужно открыть — см. Панель 3X-UI.

6. Защита от перебора пароля: fail2ban

fail2ban блокирует адреса после серии неудачных попыток входа.

bash
sudo apt install fail2ban -y
sudo nano /etc/fail2ban/jail.local

Вставьте настройки:

ini
[sshd]
ignoreip = 127.0.0.1
bantime = 7200s
findtime = 1d
maxretry = 3
ПараметрЗначение
ignoreipдоверенные адреса, которые никогда не блокируются — например, внешний IP вашего дома или офиса
bantimeсрок блокировки адреса
findtimeпериод, за который считаются неудачные попытки
maxretryсколько попыток допустимо до блокировки

Примеры ignoreip:

ini
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 10.0.0.0/8
ignoreip = 127.0.0.1/8 ::1 93.184.216.34 198.51.100.42
ignoreip = 127.0.0.1/8 172.16.0.0/12 82.202.15.115 myhome.ddns.net

Суффиксы времени для bantime и findtime: s или без суффикса — секунды, m — минуты, h — часы, d — дни, w — недели, mo — месяцы, y — годы.

Сохраните файл и перезапустите службу:

bash
sudo systemctl restart fail2ban

Полезные команды fail2ban

ЗадачаКоманда
Список заблокированных адресовsudo iptables -L -n -v | grep fail2ban
Статус защиты SSHsudo fail2ban-client status sshd
Разблокировать адрес вручнуюsudo fail2ban-client set sshd unbanip IP-АДРЕС
Логи за деньsudo awk -v d="$(date -d '1 day ago' +'%Y-%m-%d')" '$1 >= d' /var/log/fail2ban.log
Логи за неделюsudo awk -v d="$(date -d '7 days ago' +'%Y-%m-%d')" '$1 >= d' /var/log/fail2ban.log

Забанили сами себя

Так бывает, ничего страшного: подключитесь из другой сети и снимите бан командой выше, а свой домашний адрес добавьте в ignoreip. Если доступа нет совсем — напишите нам, поможем: Обращение в поддержку.

7. Надёжный пароль root

bash
passwd                      # сменить пароль
openssl rand -base64 18     # сгенерировать стойкий

Подробнее о том, какой пароль где используется, — Как сменить пароль root.

8. Мониторинг

ЗадачаКоманда
Активные сетевые подключенияss -tulpn
Кто сейчас в системеwho
Последние входыlast -n 20
Нагрузка и процессыhtop
Свободное место на дискеdf -h

Меньше сервисов — меньше риска

Не устанавливайте лишнее ПО и панели, если они не нужны для работы VPN. Чем меньше открытых сервисов, тем меньше поверхность для атаки.