Защита VPS | сервера ( метод Параноика)

Всем привет. Хотелось бы в этой теме обсудить защиту персонального VPS, на которого в том числе устанавливается всеми любимая панель 3x-ui и другие сервисы .

Как говорится:«безопасности много не бывает» …

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

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

Напишите ваше мнение , конструктивную критику или возможно захотите от себя что-то добавить итд))

  1. Выбор VPS.

Вижу что многие пользователи экономят и покупают VPS ,которые физически находятся в РФ. А как мы знаем для товарища майора ничего не стоит сделать запрос и попросить хостера на территории РФ сделать дамп виртуального VPS заинтересованного пользователя. Поэтому рекомендуется покупка VPS за пределами РФ и желательно за XMR. Естественно чтобы ping был низкий (менее 50-100 мс):. Где можно купить ? Как вариант здесь https://bitcoin-vps.com/

Очень интересная и информативная статья про выбор VPS с сравнительной таблицей Putting Privacy Focused Free Speech VPS Providers To The Test.

  1. Установка на VPS свободного дистро Free GNU/Linux distributions

Рекомендуется установить свободные дистро List of Free GNU/Linux Distributions - GNU Project - Free Software Foundation
Если вы знаете хоcтеров у которых по умолчанию можно установить эти дистро, напишите пожалуйста. А так думаю 99% используют Debian или Ubunta .

  1. Шифрование своего VPS

Оставлю ссылку пример How to Encrypt your VPS disk (VPS) or Dedicated Server with Cryptsetup ⋆ ALexHost SRL

  1. При первом соединении с купленным VPS , проверить отпечатки

$ ssh root@ip_вашего_сервера

Вводим:

# ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

и сверяем с тем что вы видите.

  1. Обновить репозиторий

 # apt update

 # apt upgrade

 # apt-get full-upgrade
 
 # apt-get --purge autoremove
 
 # apt autoclean
  1. Создать обычного пользователя ( вместо root )


 # adduser  stiff 
  
  # passd

Переключиться на пользователя stiff

# su - stiff

Переключиться на root

# su

  1. Копирование открытого ключа на сервер c ХОСТА на виртуальный сервер (VPS)

на Хосте

$ cd .ssh/

Копируем ваш открый ключ на VPS

$ ssh-copy-id stiff@ip_вашего_сервера

Не закрывая терминал , открыть второй терминал и попробовать зайти на VPS

Заходим без ввода пароля.

$ ssh stiff@ip_вашего_сервера

$ logout

Выйти так как мы зашли изначально как ROOT пользователь

$ exit

Ввойти на сервер заново как обычнй пользователь.

  1. Настройка 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
  1. Утснавка фаервола 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

  1. Отключаем ПИНГ на свой сервер ( иногда это может не работать в зависимости от 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

Не работает , отлично

  1. Отключаем 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

  1. Логирование .

Логирование является важной частью безопасности VPS.

Ссылка пример по установке программы Rsyslog How to Setup Rsyslog Server on Debian 11

  1. Установка программы Fail2ban (Fail2Ban - программа для защиты серверов от атак методом грубой силы)

Ссылка пример How To Protect SSH with Fail2Ban on Debian 11 | DigitalOcean

  1. Установка DNSCrypt ( шифрование DNS)

Ссылка пример https://www.alexgoldcheidt.com/vps-dnscrypt-proxy-on-debian-bookworm-with-dnscry-pt/

  1. Используйте хорошие генераторы паролей. Например программу pwgen

$ apt-cache search pwgen

pwgen - Automatic Password generation

Пример для сравнения, 15 знаков :

$ openssl rand  -base64  15

02iAThIyqJ9JLXQUIIor
$ pwgen -n -c -s  -y -1 15

@D|!q&L}$A;z6:h

Привет.

Но зачем? Скажи, пожалуйста, чем такой дистрибутив отличается от любого другого без установленного пакета linux-firmware и с ядром linux-libre?

Не видел ни одного хостера, который бы давал по умолчанию установить подобный дистрибутив, но можно сделать это самому, даже если хостер не даёт подключать iso.

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

По второй ссылке есть инструкция (только для Арч, но и на других системах можно сделать подобное) по расшифровыванию диска через ssh. Это удобно, чтобы не заходить каждый раз в VNC для ввода пароля после перезагрузки.

Если быть параноиком, то нужно ставить свой сервер, к которому никто не будет иметь физического доступа, а если всё-таки получит, то сервер должен самоуничтожиться.

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

Пользователя root лучше заблокировать.

$ sudo passwd -l root

При таком варианте должен быть настроен доступ через sudo. Если вы против sudo, могу понять, но интересно услышать вашу позицию (предположу, что вы всё-таки используете doas, а не su).

Это необязательный шаг. ssh-copy-id по умолчанию и так ищет ключи по этому пути.

В целом согласен, но параноик тут бы включил двухфакторную авторизацию (и по ключу, и по паролю), разрешил бы логиниться только конкретному пользователю и отключил бы ненадёжные алгоритмы шифрования. Также можно использовать ssh-audit, чтобы проверить настройки. В целом рекомендую очень вдумчиво почитать эту статью: OpenSSH. Также нет ничего про скрытие ssh (port knoсking, например).

Будет работать, только, если провайдер выдаёт вам статичный белый IP, но в большинстве случаев это не так, поэтому настраивать в большинстве случаев нужно по-другому.

Хватит одного параметра ядра для полного выключения: ipv6.disable=1. Ваш вариант (через sysctl) вызывает сомнения, потому что systemd-sysctl.service запускается до завершения настройки сети и другие сервисы могут вновь поднять IPv6.

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

Остальное пока нет сил комментировать. Если вы всё-таки параноик, то рекомендую почитать:
Security (и все ссылки на этой странице);
РЕКОМЕНДАЦИИ ПО БЕЗОПАСНОЙ НАСТРОЙКЕ ОПЕРАЦИОННЫХ СИСТЕМ LINUX (рекомендации ФСТЭК России).

Привет. Спасибо за комментарии и мнение . :handshake:

  1. Что касается свободных дистро , да ты прав это в первую очередь очищенное ядро linux-libre
    от проприетраных компонетнов. И да ты так же прав что по умолчанию сложно найти VPS у которого есть такие дистро. Но думаю что есть … по-моему я как-то встречал , вспомню , напишу сюда, но мне не понравился сайт , он был с google трекерами и прочим мусором…

  2. Шифрование. И здесь ты прав, свой сервер однозначно лучше бесспорно ! Я бы добавил к твоим мыслям еще важную информацию чтобы другие тоже могли прочитать , важным аспектом является шифрование GRUB и установка Libreboot Libreboot — Википедия вместо проприетарного BIOS и UEFI. Где-то на просторах Mastodon я видел проект о котором ты говоришь …

  3. Да, пользователя root можно заблокировать. Что касается opendoas )) то да, это отличная альтернатива. Кстати хорошее видео на эту тему "Sudo Is Bloat. Use Doas Instead! " https://inv.nadeko.net/watch?v=A5buxcYXp7k

  4. Копирование открытого ключа SSH. Спасибо за коррекцию.

  5. …и по ключу, и по паролю. Согласен. Если не сложно добавь пожалуйста от себя команды чтобы здесь сохранить твои заметки, а я могу подправить инструкцию.

  6. Настройка UFW. Было бы интересно узнать как по другому ?)

  7. Отключаем ipv6. Согласен.

  8. pwgen это не для памяти )) А так да , " В лесу родилась ёлочка, В лесу она росла

" он же dktcehjlbkfcmtkjxrfdktcejyfhjckf для памяти сойдет ))

  1. Добавлю еще важный параметр это БЭКАПЫ черз SSH . Ссылка пример How to Backup Your VPS: A Simple Guide to Getting Started — RackNerd

Cсылка на The Ministry of Digital Development and Communications не HTTPS надо им было в Let’s Encrypt сертификат получать ))

P.S Дело вот в чем , то что здесь написана информация, которая значительно - на 80% минимум улучшит защиту арендованного VPS в стране где есть свобода слова или по крайне мере в ту сторону стремятся.
Если покупать VPS на территории РФ то даже эти настройки не помогут ))

Когда лень пройдет )) напиши пожалуйста свои рекомендации , с удовольсвтием прочту и приму к сведению :fist: :+1:

Тут я пока считаю лучшим вариантом установить linux-hardened (по умолчанию включены многие настройки безопасности) и не устанавливать linux-firmware, потому что для VPS он не нужен.

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

Libreboot всё-таки не про VPS из-за буквы V в этом слове. Уже хорошо, если хостер тебе даёт возможность включить UEFI с Secure Boot. У тех, что я видел, даже этого нет (только загрузка через BIOS). Использование GRUB для расшифровки никак не защищает от буткитов. С таким же успехом можно расшифровывать диск самим ядром. Виртуализация в этом плане сильно ограничивает возможности по сохранению приватности данных.

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

Да, без проблем. По ссылке, которую я приводил, это тоже есть.

AuthenticationMethods publickey,password

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

Кстати, если ты любитель doas, то, возможно, есть смысл присмотреться к tinyssh:

Спойлер
tinysshd is a minimalistic SSH server which implements only a subset of SSHv2 features.

tinysshd supports only secure cryptography (minimum 128-bit security, protected against cache-timing attacks)

tinysshd doesn't implement older crypto (such as RSA, DSA, HMAC-MD5, HMAC-SHA1, 3DES, RC4, ...)

tinysshd doesn't implement unsafe features (such as password or hostbased authentication)

tinysshd doesn't have features such: SSH1 protocol, compression, port forwarding, agent forwarding, X11 forwarding ...

tinysshd doesn't use dynamic memory allocation (no allocation failures, etc.)

У тебя хороший вариант, если провайдер выдаёт тебе статический адрес, но для большинства людей это не так (кому-то вообще нужно иметь возможность подключаться из разных сетей), поэтому если паранойя несильная, то я бы так настроил (вместо 22-го порта нужно использовать порт для ssh):

# ufw default deny
# ufw allow 443/tcp
# ufw limit 22/tcp
# ufw enable

Ещё можешь эту тему почитать (есть интересные идеи): Гайд по ограничению ssh на vps.

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

HTTPS, нужно только довериться :wink:. Если параноишь и не хочешь открывать, можешь тут почитать: ФСТЭК РФ опубликовал рекомендации по обеспечению безопасной настройки Linux.

Ты молодец. Считаю, что поднимаешь правильные темы. Лучше хоть какая-то безопасность, чем её полное отсутствие.

  1. Можете пояснить что плохого в IPv6?

  2. И у какого провайдера вы покупали VPS из этого списка? Putting Privacy Focused Free Speech VPS Providers To The Test.

  3. Если хотите мониторить систему то можно поставить: Tripwire — Википедия

  4. Зачем выключать форвадинг если только вы этой системой и пользуетесь?

X11Forwarding no 
AllowTcpForwarding no    # Зачем это делать?
  1. По поводу DNS у меня этим занимается systemd-resolved и запросом через DoH.

Можно добавить установку jitterentropy, хардеринг.
Сомневаюсь, что systemd подходит для параноика

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

Хотелось бы почитать защиту VPS от цензора, а не от хакиров.
Купленный за забором VPS не может отвалиться как хетзер ?

Непонятно какое отношение имеет отключение ipv6 к безопасности ?
Его обычно отключают, потому что не умеют/не хотят с ним возиться

Полное шифрование , включая системный раздел, потребует при загрузке ввод кода через vnc каждый раз. Или патчить код модуля grub, чтобы зашить его туда. Это поможет от сисадминов, от кракеров кода - нет.
Хостер может всегда и незаметно снять snapshot работающей системы вместе с диском и памятью.

Привет. Вы правы , но можно не закрывать терминал в которм идут настройки и открыть второй )
А так да, вы правы.

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

Привет. По поводу отключения ipv6 лучше чем Ruheni Mathenge не напишу)

Источник: How to Disable IPv6 on All Your Devices - PrivacySavvy

Почему мне следует отключить IPv6?

Хотя IPv6 в целом хорошо работает с распространенным IPv4. Но он также может вызывать конфликты при определенных обстоятельствах, требуя от вас этого.

Например, он может создавать проблемы с сетью или вызывать утечки VPN, когда вы хотите скрыть свое фактическое местоположение в сети и IP-адрес. К сожалению, многие надежные VPN, включая NordVPN или Surfshark, по-прежнему не поддерживают IPv6. Поэтому, хотя они предлагают расширенную защиту от утечки IP, вам все равно, возможно, придется отключить IPv6 вручную, чтобы предотвратить случайное раскрытие вашего фактического IP-адреса в сети.

Аналогично, если ваше интернет-соединение неоднократно переподключается, ваш маршрутизатор может закрыть соединение из-за конфликта IPv6.

Такие проблемы возникают из-за плохой адаптации IPv6 на уровне конечного пользователя. Кроме того, некоторые интернет-провайдеры, такие как AT&T, Verizon и Xfinity, все еще борются с адекватной адаптацией и реализацией IPV6. Поэтому, чтобы избежать всех этих проблем, вам, возможно, придется решить отключить IPv6 на своем устройстве.

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

Что касается полнодискового шифрования , есть такая проблема, согласен , вы мне напомнили еще один пункт который нужно включить в инструкцию, а именно :

$ sudo apt-get --purge remove xinetd nis yp-tools tftpd atftpd tftpd-hpa telnetd rsh-server rsh-redone-server

Удалим лишнее)

Что касается дампа VPS я писал об этом , есть такая проблема и как мне кажется единственное решение это полнодисковое шифрование , как показала практика такие конторы как Proton и Tuta сдавали своих пользователей , а елси бы было шифрование ,то тут посложнее было бы ))

Поддерживаю мысль, если вы знаете VPS где по умолчание установлена хотябы Devuan ( OpenRC) дайте знать пожалуйста.

Привет. Не нашел в репо твою рекомендацию tripwire и на github с 2018 года ничего не обновлялось

Что касается статьи по выбору VPS ( если вы читали) то автор купил и проверил везде и сделал выводы. А дальше уже выбор за пользователем доберять аналитике автора или нет ))

Поддерживаю мысль.

Не помню у кого , но есть хостеры у которых можно подключить ISO в том числе и такие варианты как Trisquel , Devuan , Parabola итд Но это через VNС что не есть хорошо…

Вы не настоящие параноики, если не используете SELinux)

А ещё могу добавить, можно удалить агентов виртуализации. Например, на моем VPS пакет qemu-guest-agent.
И ключи ssh, которые добавляет себе техподдержка, чтобы иметь доступ к вашему серверу.

Согласен , а вдруг VPS это что-то типо T200 Vikings X200 Laptop – FSF RYF certified (sold out) – Vikings Shop и он у дргуа в Нидерландах случайно оказался )) И там установлен Libreboot и заширофван по Argon2id и так же GRUB с gpg подписью и законодательство Нидерландов при запросе откажет запрашиваемым из РФ сторне в передаче данного PC ))))

А так конечно ты прав, ждем пока появится VPS с свободным железом , может на rockchip итд

Привет . Если я не ошибаюсь после обновлени сервера и запуска команды

$ sudo apt-get --purge autoremove

qemu-guest-agent удаляется…