Всем привет. Хотелось бы в этой теме обсудить защиту персонального VPS, на которого в том числе устанавливается всеми любимая панель 3x-ui и другие сервисы .
Как говорится:«безопасности много не бывает» …
Я напишу базовые вещи ,которые как мне кажется помогут в большинстве случаев.
Если у кого есть готовый скрипт по этой теме , прикрепляйте ссылку на источник , думаю будет полезно многим пользователям.
Напишите ваше мнение , конструктивную критику или возможно захотите от себя что-то добавить итд))
- Выбор VPS.
Вижу что многие пользователи экономят и покупают VPS ,которые физически находятся в РФ. А как мы знаем для товарища майора ничего не стоит сделать запрос и попросить хостера на территории РФ сделать дамп виртуального VPS заинтересованного пользователя. Поэтому рекомендуется покупка VPS за пределами РФ и желательно за XMR. Естественно чтобы ping был низкий (менее 50-100 мс):. Где можно купить ? Как вариант здесь https://bitcoin-vps.com/
Очень интересная и информативная статья про выбор VPS с сравнительной таблицей Putting Privacy Focused Free Speech VPS Providers To The Test.
- Установка на VPS свободного дистро Free GNU/Linux distributions
Рекомендуется установить свободные дистро List of Free GNU/Linux Distributions - GNU Project - Free Software Foundation
Если вы знаете хоcтеров у которых по умолчанию можно установить эти дистро, напишите пожалуйста. А так думаю 99% используют Debian или Ubunta .
- Шифрование своего VPS
Оставлю ссылку пример How to Encrypt your VPS disk (VPS) or Dedicated Server with Cryptsetup ⋆ ALexHost SRL
- При первом соединении с купленным VPS , проверить отпечатки
$ ssh root@ip_вашего_сервера
Вводим:
# ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
и сверяем с тем что вы видите.
- Обновить репозиторий
# apt update
# apt upgrade
# apt-get full-upgrade
# apt-get --purge autoremove
# apt autoclean
- Создать обычного пользователя ( вместо root )
# adduser stiff
# passd
Переключиться на пользователя stiff
# su - stiff
Переключиться на root
# su
- Копирование открытого ключа на сервер c ХОСТА на виртуальный сервер (VPS)
на Хосте
$ cd .ssh/
Копируем ваш открый ключ на VPS
$ ssh-copy-id stiff@ip_вашего_сервера
Не закрывая терминал , открыть второй терминал и попробовать зайти на VPS
Заходим без ввода пароля.
$ ssh stiff@ip_вашего_сервера
$ logout
Выйти так как мы зашли изначально как ROOT пользователь
$ exit
Ввойти на сервер заново как обычнй пользователь.
- Настройка SSH на VPS
на VPS
$ sudo nano /etc/ssh/sshd_config
Расскомментируем ( уберем знак #)
Изменим порт 22 на любой другой больше 1000 до 65535
Port 45798
PubkeyAuthentication yes
#PermitRootLogin prohibit-password
меняем на
PermitRootLogin no
Так же меняем с
#PasswordAuthentication yes
#PermitEmptyPasswords no
на
PasswordAuthentication no
PermitEmptyPasswords no
Используем только вторую версию SSH
Include /etc/ssh/sshd_config.d/*.conf
Protocol 2
Далее
X11Forwarding no
AllowTcpForwarding no
Установите LogLevel для мониторинга активности SSH
LogLevel INFO
Перегрузим SSH на VPS , проверим статус и снова зайдем на VPS
$ sudo systemctl restart ssh
$ sudo systemctl status ssh
$ ssh stiff@ip_вашего_сервера -p 45798
Проверим сколько пользователей на нашем VPS
$ who -q
$ pinky -w
- Утснавка фаервола UFW или другой на ваш выбор
$ sudo apt update
$ sudo apt install ufw
Включаем Фаервол ( на VPS)
$ sudo ufw enable
Проверим работу
$ sudo systemctl status ufw.service
Включим автозапуск
$ sudo systemctl enable ufw.service
Стартанем
$ sudo systemctl start ufw.service
Еще раз проверим
$ sudo systemctl status ufw.service
Создадим правило чтобы мы могли входить с Хоста на VPS используя наш ip адрес. 123.456.789.123 вместо этого примера вставьте ваш ip адрес который вам назначил хостер.
$ sudo ufw allow from 123.456.789.123 to any port 45798 proto tcp
Проверим какие программы и сервисы слушают порты
$ sudo ufw show listening
- Отключаем ПИНГ на свой сервер ( иногда это может не работать в зависимости от VPS провайдера.
$ sudo nano /etc/ufw/before.rules
Приводим в такой вид:
# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j DROP
-A ufw-before-input -p icmp --icmp-type time-exceeded -j DROP
-A ufw-before-input -p icmp --icmp-type parameter-problem -j DROP
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP
-A ufw-before-input -p icmp --icmp-type source-quench -j DROP
Перегружаем Фаервол
$ sudo ufw disable && doas ufw enable
Проверим пинг на НАШ сервер . Открыть терминал на Хосте и пингануть на ваш VPS
$ ping 123.456.789.123
Не работает , отлично
- Отключаем ipv6
$ sudo bash
# sysctl --all | grep disable_ipv6
Видим :
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.eth0.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
Вводим в терминале
# nano /etc/sysctl.conf
и вставляем
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
Сохраняем , выходим
# sysctl -p
- Логирование .
Логирование является важной частью безопасности VPS.
Ссылка пример по установке программы Rsyslog How to Setup Rsyslog Server on Debian 11
- Установка программы Fail2ban (Fail2Ban - программа для защиты серверов от атак методом грубой силы)
Ссылка пример How To Protect SSH with Fail2Ban on Debian 11 | DigitalOcean
- Установка DNSCrypt ( шифрование DNS)
Ссылка пример https://www.alexgoldcheidt.com/vps-dnscrypt-proxy-on-debian-bookworm-with-dnscry-pt/