🔒 Безопасность
При обсуждении вопросов безопасности — будь то в контексте YunoHost или любой другой системы — помните, что безопасность не является бинарным состоянием, а представляет собой непрерывный процесс. Термин «безопасность» по сути бессмысленен без уточнения, от чего именно мы защищаемся. «Угрозы», которые следует учитывать, зависят от контекста и могут варьироваться от автоматизированных атак ботов, бродящих по Интернету, до сложных государственных структур, таких как АНБ, или уязвимостей в цепочке поставок (например, скомпрометированных зависимостей программного обеспечения), или базовых рисков, таких как использование пользователями слишком простых паролей, или попытка взлома вашего сервера вашим злейшим врагом из начальной школы 20 лет назад...
YunoHost разработан с учётом требований безопасности и обеспечивает оптимальный баланс между безопасностью и удобством использования. Вот неполный список аспектов безопасности, реализованных в проекте:
- межсетевой экран (брандмауэр) на основе
nftablesдля ограничения входящего трафика соответствующими портами; fail2ban, программное обеспечение, автоматически отклоняющее трафик с вредоносных IP-адресов, пытающихся взломать SSH и другие сервисы методом перебора;- использование рекомендаций Mozilla для NGINX, Postfix, Dovecot, шифров SSH и т. д.;
- проверка того, что пароль/кодовая фраза пользователя не слишком простые при их определении;
- хеширование паролей пользователей (например, соленый SHA512 в LDAP);
- контроль за правами доступа к файлам/каталогам UNIX во всей системе;
- Приложения обычно запускаются от имени выделенного пользователя и с ограниченными возможностями;
- автоматическое удаление конфиденциальной информации из журналов операций YunoHost и при их передаче в Yunopaste;
- ...
Кроме того, в среднесрочной перспективе проект планирует реализовать следующие функции:
- самостоятельный сброс паролей для пользователей;
- автоматические предупреждения об уязвимостях (через раздел «Диагностика», а не через форум или социальные сети);
- поддержка OIDC и 2FA;
- улучшенная поддержка SSH-ключей, в частности предоставление возможности их настройки через веб-панель администратора;
- дальнейшее ограничение возможностей приложения только тем, что ему необходимо (см. пакетирование v3);
- ...
Для обсуждения уязвимостей безопасности в YunoHost, свяжитесь с командой безопасности проекта.
Основные советы по безопасности
Безопасность — это не разовая процедура, а активный, непрерывный процесс. Вот несколько основных правил, которые следует внедрить:
Использование предельно простых паролей, пожалуй, является главной причиной взлома серверов. Использование вами и вашими пользователями достаточно сложных паролей/кодовых фраз — основа приемлемого уровня безопасности.
- Как администратор, забудьте о традиционных паролях. Используйте достаточно сложные парольные фразы. Изучите менеджеры паролей.
- Поддерживайте свой сервер и приложения в разумном состоянии. Рассмотрите возможность использования для приложений автоматических обновлений.
- Помните, что каждое установленное вами приложение — это дополнительная «поверхность атаки». В идеале проверяйте репутацию безопасности каждого устанавливаемого приложения. Не устанавливайте случайные приложения и не забывайте о них. Удаляйте приложения, которые вы больше не используете.
- Создавайте учётные записи только для тех людей, которым вы доверяете, в частности, для тех, кто будет использовать надёжные пароли/парольные фразы и соблюдать правила безопасности в целом.
- Регулярно проверяйте форум и социальные сети (например, учётную запись YunoHost в Mastodon), чтобы быть в курсе обнаружения уязвимостей или выпуска важных исправлений.
В следующих разделах описаны возможные способы дальнейшего повышения уровня безопасности вашего сервера.
SSH-аутентификация по ключу
По умолчанию для аутентификации по SSH используется пароль администратора. Рекомендуется отключить этот тип аутентификации и заменить его механизмом ключей.
О вашем клиенте:
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub <username@your_yunohost_server>
Если возникнут проблемы с правами доступа, установите username в качестве владельца каталога ~/.ssh с помощью команды chown. Будьте осторожны, в целях безопасности этот каталог должен иметь права доступа 700.
Если вы используете Ubuntu 16.04, вам следует запустить ssh-add для инициализации SSH-агента.
Введите свой пароль администратора, и ваш ключ будет скопирован на ваш сервер.
На вашем сервере редактирование файла конфигурации SSH для отключения аутентификации по паролю осуществляется с помощью системной настройки:
sudo yunohost settings set security.ssh.ssh_password_authentication -v no
Никогда не закрывайте текущее SSH-соединение, не убедившись, что ваши изменения вступили в силу. Проверьте новую конфигурацию, открыв новое окно терминала. Таким образом, вы сможете отменить изменения, если что-то пойдёт не так.
Использование пользовательского порта для SSH
Чтобы предотвратить попытки подключения по SSH со стороны роботов, сканирующих интернет в поисках серверов с включенным SSH, можно изменить порт SSH. Это делается с помощью системной настройки, которая отвечает за обновление конфигурации SSH и Fail2Ban.
Обратите внимание, что изменение порта по-прежнему полезно, даже если вы отключили аутентификацию по паролю, поскольку это значительно снижает количество ложных срабатываний от попыток перебора паролей в логах SSH.
Если вы вручную внесёте какие-либо изменения в конфигурацию SSH-сервера (/etc/ssh/sshd_config), механизм regen-conf YunoHost больше не будет автоматически обновлять этот файл. По этой причине всегда используйте инструменты администрирования YunoHost для внесения изменений в файлы конфигурации системы!
sudo yunohost settings set security.ssh.ssh_port -v <new_ssh_port_number>
Для последующих SSH-подключений необходимо добавить опцию -p, за которой следует номер SSH-порта.
ssh -p <new_ssh_port_number> admin@<your_yunohost_server>
Никогда не закрывайте текущее SSH-соединение, не убедившись, что ваши изменения вступили в силу. Проверьте новую конфигурацию, открыв новое окно терминала. Таким образом, вы сможете отменить изменения, если что-то пойдёт не так.
Усиление защиты от угроз, используемой NGINX, SSH, Dovecot и Postfix
Конфигурация TLS по умолчанию для служб, как правило, обеспечивает хорошую совместимость со старыми устройствами. Вы можете настроить эту политику для конкретных служб, таких как SSH и NGINX. По умолчанию конфигурация NGINX соответствует рекомендациям по промежуточной совместимости от Mozilla. Вы можете переключиться на «современную» конфигурацию, которая использует более новые рекомендации по безопасности, ценой снижения совместимости, что может стать проблемой для ваших пользователей и посетителей, использующих старые устройства. Более подробную информацию о совместимости можно найти на этой странице.
Изменение уровня совместимости не является окончательным и может быть отменено, если оно не соответствует вашей среде.
На вашем сервере измените политику для NGINX
sudo yunohost settings set security.nginx.nginx_compatibility -v modern
На своём сервере измените политику для SSH
sudo yunohost settings set security.ssh.ssh_compatibility -v modern
Отключение API YunoHost
Администрирование YunoHost осуществляется через HTTP API — тот же интерфейс, который использует веб-панель управления. Если вы не планируете им пользоваться, он может стать дополнительным, ненужным вектором атаки. В таком случае соответствующую службу можно полностью отключить через командную строку:
Это полностью отключит как API YunoHost, так и веб-панель администрирования, которая от него зависит. Продолжайте только в том случае, если вы уверены, что отныне будете использовать исключительно командную строку.
sudo systemctl disable yunohost-api
sudo systemctl stop yunohost-api
Поскольку yunohost-api теперь отключён и не запущен, диагностика сообщит об ошибке. Эту ошибку можно проигнорировать с помощью следующей команды:
sudo yunohost diagnosis ignore --filter services service=yunohost-api