VPN-сервер: чек-лист hardening безопасности
Вы подняли WireGuard или OpenVPN, всё работает — и на этом обычно останавливаются. А зря: голый VPN-сервер с открытым SSH на 22 порту и default-конфигом — это не защита, а просто ещё одна точка входа для ботов, которые сканируют интернет круглосуточно. Ниже — рабочий чек-лист hardening, который закрывает типовые дыры за один вечер, без параноидального оверинжиниринга.
Содержание
Firewall: разрешайте только то, что реально нужно
Базовое правило — политика по умолчанию «запретить всё», и точечные разрешения поверх неё. На Ubuntu/Debian проще всего через UFW:
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp comment 'SSH'
ufw allow 51820/udp comment 'WireGuard'
ufw enable
Для OpenVPN добавьте свой порт (обычно 1194/udp) — и по возможности смените его на нестандартный, это не защита от целенаправленной атаки, но отсекает автоматическое сканирование ботами.
Проверьте, что не слушает наружу лишнее — панели управления, Redis, exporter'ы метрик:
ss -tulpn | grep LISTEN
Всё, чего нет в списке разрешённых портов, либо переводите на 127.0.0.1, либо явно блокируйте. Не забудьте про IPv6 — частая дыра в том, что правила пишут только для IPv4, а v6-трафик идёт мимо. Для более сложных сценариев (несколько интерфейсов, NAT между VPN-подсетями) со временем стоит перейти на nftables напрямую, но для одиночного сервера UFW обычно достаточно.
Какой VPS выбрать для собственного VPN
Для личного VPN на телефоне, компьютере и домашних устройствах начните с Lite: 1 vCPU, 2 ГБ памяти и 40 ГБ NVMe. Это стартовый вариант для небольшого числа одновременно подключённых устройств. Если VPN будет обслуживать команду и другие приложения, рассмотрите Старт с 2 vCPU и 4 ГБ памяти.
Для личного VPN
Lite · 1 vCPU · 2 ГБ RAM
40 ГБ NVMe
Начальный тариф для своего VPN-сервера.
Для VPN и дополнительных сервисов
Старт · 2 vCPU · 4 ГБ RAM
80 ГБ NVMe
Больше памяти для нескольких приложений на одном сервере.
Аренда VPS для VPN: после заказа переходите к настройке по этой инструкции. Скорость зависит также от канала и маршрута до сервера.
В кнопках заказа выбрана локация в Великобритании. Другую страну можно выбрать при оформлении.
Оплата VPS картой РФ или по СБП доступна в личном кабинете. Для безналичной оплаты от юридического лица или ИП запросите счёт у support@maatrix.io, указав тариф и реквизиты.
fail2ban: автоматический бан за перебор
Firewall пропускает трафик к SSH и VPN-порту, а fail2ban следит за логами и банит IP, которые перебирают пароли или долбят хендшейками:
apt install fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Минимальный jail для SSH в /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 22
maxretry = 4
findtime = 600
bantime = 3600
Для OpenVPN есть готовый фильтр — проверьте, что секция [openvpn] включена и указывает на реальный путь лога. WireGuard же fail2ban защищать не от чего: это UDP без классического хендшейка — пакет с неверным ключом сервер просто молча дропает, здесь работает сама криптография протокола плюс firewall.
Проверить статус:
fail2ban-client status sshd
Растущий список забаненных IP — нормальная картина для любого сервера с публичным SSH, значит защита реально нужна. Есть и альтернатива с общей базой репутации IP между серверами — fail2ban или CrowdSec.
Отключение неиспользуемых протоколов и сервисов
Каждый работающий сервис — лишняя поверхность атаки. Посмотрите, что включено на старте:
systemctl list-unit-files --state=enabled
Типичные кандидаты на отключение: avahi-daemon (mDNS для локальной сети, серверу не нужен), cups (печать), rpcbind.
systemctl disable --now avahi-daemon cups rpcbind
Если когда-то тестировали второй VPN-протокол, а сейчас работает только один — не оставляйте демон «на всякий случай», а полностью убирайте:
systemctl disable --now openvpn@server
apt purge openvpn
Отдельно проверьте локальный DNS-резолвер, если он поднят для клиентов VPN (например, unbound): убедитесь, что он не отвечает на recursive-запросы с любого IP — иначе сервер превращается в open resolver и его начинают использовать для DNS-амплификации в чужих атаках. В конфиге access-control ограничьте ответы только подсетью VPN.
Обновления: автоматические, но контролируемые
Большинство реальных взломов VPS — не эксплойт нулевого дня, а известная уязвимость в софте, который не обновляли полгода. Настройте автообновления безопасности:
apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades
В /etc/apt/apt.conf.d/50unattended-upgrades ограничьте область только security-обновлениями, а автоматический reboot лучше отключить и следить за флагом /var/run/reboot-required вручную:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::Automatic-Reboot "false";
Сервер с активными VPN-туннелями, который сам ушёл в перезагрузку в 3 часа ночи, роняет соединения у всех пользователей одновременно — предупреждайте об этом заранее или планируйте окно вручную.
Сам VPN-софт тоже стоит проверять отдельно: WireGuard встроен в ядро с версии 5.6, OpenVPN и его зависимости идут из репозитория. Раз в квартал сверяйте версии:
openvpn --version
apt list --upgradable | grep -i openvpn
SSH: ключи, отключение root-логина, лимиты
SSH — самый частый вектор атаки на VPS, потому что он есть всегда и легко сканируется. Базовый набор в /etc/ssh/sshd_config:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
X11Forwarding no
MaxAuthTries 3
AllowUsers deploy
PasswordAuthentication no включайте только после того, как залили публичный ключ в ~/.ssh/authorized_keys и проверили вход в отдельной сессии — не разрывайте текущее подключение до этой проверки, иначе рискуете остаться без доступа. Подробная настройка — в статье SSH-ключи вместо пароля.
Дополнительный слой — 2FA на SSH через PAM-модуль, а в жёстком варианте можно закрыть 22 порт наружу полностью и пускать только через сам VPN-туннель. У схемы есть проблема курицы и яйца при сбое VPN, поэтому держите резервный канал доступа — обычно веб-консоль провайдера.
Мониторинг и резервные копии конфигов
Hardening без наблюдения за результатом — разовая настройка, которая тихо деградирует. Минимальный набор:
- Логи авторизации — периодически просматривайте
journalctl -u ssh -f, не полагайтесь только на fail2ban. - Доступность сервера — если о падении VPN вы узнаёте от пользователей, это слишком поздно; настройте внешний мониторинг вроде Uptime Kuma.
- Аномальная нагрузка — внезапный скачок CPU на VPN-сервере часто означает не рост легитимного трафика, а майнинг, спам-рассылку или сканирование чужой сети через ваш сервер. Лишний процесс обычно виден в
htopза пару минут наблюдения.
Отдельно позаботьтесь о резервной копии самих настроек безопасности — конфигов WireGuard/OpenVPN с ключами, правил firewall, jail.local, sshd_config:
tar czf vpn-config-backup-$(date +%F).tar.gz \
/etc/wireguard /etc/openvpn /etc/fail2ban/jail.local /etc/ssh/sshd_config
Храните архив не на том же сервере — иначе бэкап бесполезен именно в момент, когда сервер недоступен.
Частые вопросы
С чего начать hardening, если сервер уже месяц в проде и на него страшно что-то менять?
С firewall — это самая обратимая мера: включаете правила, проверяете нужные порты, только потом переходите к SSH и fail2ban. Держите резервную SSH-сессию открытой, пока меняете конфиг.
Нужен ли hardening, если сервер держит только WireGuard и больше ничего?
Да. WireGuard устойчив к сканированию сам по себе (молча дропает пакеты с неверным ключом), но SSH для администрирования всё равно открыт — и именно он основная точка атаки на «чистом» VPN-сервере.
Fail2ban заметно нагружает сервер?
Нет, накладные расходы минимальны — это парсинг логов и работа с таблицами firewall. Даже на слабом VPS с 1 vCPU разница незаметна.
Стоит ли менять стандартный SSH-порт с 22 на нестандартный?
Это не защита от целенаправленной атаки, но реально снижает объём мусорного трафика от автосканеров в логах — как дополнительная мера полезно, как основная защита нет.
Как часто повторять этот чек-лист?
Firewall и SSH-конфиг настраиваются один раз и пересматриваются при изменении инфраструктуры. Обновления безопасности — автоматически, версии VPN-софта — сверяйте вручную раз в квартал. Логи и мониторинг — постоянно, в фоне.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Готовы перейти к настройке?
Закажите Lite с конфигурацией, предложенной для старта, или сравните все тарифы. Оплата картой РФ и через СБП — в личном кабинете.
Заказать Lite Все тарифы и цены