Как не превратить свой сервер в проходной двор с помощью скриптов конструкции konstruktoid
Представьте, что вы только что развернули свежую Ubuntu. Все работает, SSH открыт, пакеты обновлены. Кажется, что вы в безопасности, пока не заглянете в логи и не увидите там бесконечные попытки подбора паролей со всего мира. Стандартные настройки Linux-дистрибутивов обычно смещены в сторону удобства, а не безопасности. Чтобы довести систему до ума, приходится часами копаться в конфигах SSH, настраивать фаерволы и ограничивать права системных служб.
Автор репозитория под ником konstruktoid решил упростить эту рутину и собрал скрипты для автоматического «закаливания» (hardening) Ubuntu. Это не просто набор команд, а целая стратегия по превращению обычной ОС в цифровую крепость, где во главу угла поставлен контроль через systemd.
Что именно делает этот скрипт
Основная идея проекта — максимально уменьшить поверхность атаки. Если служба не нужна, она должна быть выключена. Если служба работает, она должна иметь ровно столько прав, сколько требуется для выполнения задачи.
Скрипт проверяет систему по огромному списку критериев, многие из которых взяты из рекомендаций CIS (Center for Internet Security). Вот несколько направлений, в которых он наводит порядок:
- Настройка параметров ядра через sysctl. Сюда входит блокировка пересылки пакетов (IP forwarding), защита от спуфинга и ограничение доступа к отладочным функциям ядра.
- Ужесточение прав доступа к системным файлам. Скрипт проверяет права на
/etc/shadow,/etc/gshadowи другие критичные конфиги, чтобы обычные пользователи или взломанные веб-приложения не могли их прочитать. - Ограничение systemd-сервисов. Это, пожалуй, самая интересная часть. Скрипт использует современные возможности изоляции systemd, такие как
PrivateTmp,NoNewPrivilegesиProtectSystem. - Управление модулями ядра. Отключаются редко используемые протоколы (вроде DCCP или SCTP) и файловые системы, которые часто становятся источниками уязвимостей.
Как это работает на практике
Проект написан на Shell, что делает его прозрачным для аудита. Вы можете просто прочитать код перед запуском и понять, что именно изменится в вашей системе. Для начала работы достаточно клонировать репозиторий и запустить основной скрипт от имени суперпользователя.
git clone https://github.com/konstruktoid/hardening.git
cd hardening
sudo bash ubuntu.sh
Кстати, у автора есть отдельная версия для Debian, но этот репозиторий сфокусирован именно на Ubuntu (версии 20.04, 22.04 и 24.04). Интересно, что скрипт не просто меняет конфиги, он еще и устанавливает дополнительные инструменты защиты, например, auditd для глубокого логирования системных вызовов.
Тонкая настройка под себя
Запуск скрипта «в лоб» на работающем продакшене — затея рискованная. Hardening — это всегда компромисс между безопасностью и работоспособностью. Если вы отключите возможность загрузки определенных модулей ядра, у вас может отвалиться Docker или специфическое сетевое оборудование.
В проекте предусмотрен файл конфигурации, где можно переопределить переменные. Например, если вам жизненно необходим IPv6 (который скрипт по умолчанию старается ограничить), это можно поправить в настройках. Я бы советовал сначала прогнать скрипт на тестовой виртуалке, которая полностью повторяет ваш рабочий стек технологий.
Почему стоит обратить внимание на systemd edition
Многие старые гайды по безопасности Linux до сих пор советуют править десятки файлов в /etc/. Подход konstruktoid современнее: он активно использует модульность systemd. Вместо того чтобы переписывать основной юнит-файл сервиса, создаются так называемые drop-in файлы. Это позволяет обновлять пакеты через apt без конфликтов в конфигурации, при этом ваши надстройки безопасности остаются в силе.
Скрипт также проверяет наличие скомпрометированных пакетов и предлагает удалить софт, который часто становится «дырой» в безопасности, например, старые реализации rsh или telnet.
Кому пригодится этот проект
Если вы администрируете пару серверов для личных проектов, этот репозиторий станет отличным чек-листом. Не обязательно запускать весь скрипт целиком — можно подсмотреть удачные решения для настройки ufw или параметры sysctl.
Для системных администраторов в компаниях это готовая база для создания собственного корпоративного золотого образа (Golden Image). Вместо того чтобы изобретать велосипед, можно взять наработки konstruktoid и адаптировать их под свои требования соответствия (compliance).
Однако помните: безопасность — это процесс. Запуск скрипта сегодня не гарантирует защиту от уязвимости, которая выйдет завтра. Но это определенно поднимает планку для потенциального атакующего настолько высоко, что он, скорее всего, пойдет искать более легкую добычу.
С чего начать изучение
- Посмотрите файл
ubuntu.sh. Это входная точка, из которой вызываются остальные модули. - Изучите папку
scripts/. Там логика разбита по категориям: сеть, файловая система, доступы. - Обязательно прочитайте секцию про переменные окружения в README, чтобы понимать, как управлять поведением скрипта без правки его кода.
Проект живой, регулярно обновляется под новые релизы Ubuntu и учитывает свежие рекомендации по безопасности. Это хороший пример того, как автоматизация превращает многочасовую рутину в минутную задачу.
