Порядок в /etc/ssh: Зачем дробить sshd_config и как правильно настраивать SSH через модули

Когда вы арендуете новый сервер, первой же инженерной задачей становится базовое укрепление периметра. Нужно убрать SSH со стандартного 22-го порта, жестко заблокировать авторизацию по паролям, оставить строго авторизацию по ключам Ed25519 и заблокировать прямой вход для учетной записи root. Девять из десяти мануалов в интернете до сих пор предлагают один и тот же устаревший алгоритм: открыть файловым редактором главный конфигурационный файл /etc/ssh/sshd_config, пролистать пару сотен строк полотна и начать вручную менять параметры.

Забудьте про этот подход. Лезть руками в дефолтный системный файл операционки — это откровенно плохой тон и залог проблем при будущем обслуживании сервера. В современных дистрибутивах Linux (включая Debian) по умолчанию реализована модульная структура конфигурации. Вместо редактирования монолитного файла все свои настройки мы выносим в отдельные, изолированные файлы внутри специального каталога. Давайте разберем, как устроен этот механизм и почему он бережет время и нервы при эксплуатации сервисов.

В чем подвох прямого редактирования sshd_config?

Когда на сервере накатываются системные обновления (например, через apt upgrade), менеджер пакетов периодически обновляет и сам демон OpenSSH. Если разработчики дистрибутива изменили дефолтные параметры безопасности или обновили синтаксис, система попытается обновить конфигурационный файл. Увидев, что вы переписали sshd_config вручную, менеджер пакетов замрет и спросит: затереть ваши правки или оставить старый файл? Если обновления идут в автоматическом режиме или через скрипты, рядом просто создастся файл вида sshd_config.dpkg-dist, а логи замусорятся предупреждениями.

Модульный подход снимает эту головную боль. Главный файл sshd_config остается в первозданном виде — таким, каким его видит пакетный менеджер. Все ваши личные правила живут в отдельном каталоге, и при любом обновлении системы ваши настройки гарантированно сохранятся.

Механика работы директивы Include

Откройте файл /etc/ssh/sshd_config. В самом верху вы увидите следующую директиву:

Include /etc/ssh/sshd_config.d/*.conf

Эта строчка заставляет демон SSH при старте заходить в папку sshd_config.d/ и по порядку вычитывать содержимое всех файлов, имеющих расширение .conf. Здесь вступает в силу ключевое правило интерпретатора OpenSSH: если один и тот же параметр встречается в конфиге несколько раз, ядро берет самое первое найденное значение, а все последующие — игнорирует.

Так как строка Include прописана в самом начале главного файла, ваши кастомные параметры считываются первыми. Они сходу перекрывают любые дефолтные настройки, записанные ниже по тексту в основном файле. Нам именно это и требуется.

Практика: Собираем изолированный файл безопасности

Давайте с нуля создадим один чистый файл, где зафиксируем всю базовую защиту, не трогая системный sshd_config.

1. Создаем кастомный файл
Имя файла может быть любым понятным, но на конце обязательно должно стоять расширение .conf:

sudo nano /etc/ssh/sshd_config.d/security_hardening.conf

2. Прописываем параметры защиты
Вносим только те строки, которые реально меняют поведение службы. Никакой лишней шелухи — строго рабочий набор:

# Перешиваем порт на нестандартный (выбираем любой свободный)
Port 2222

# Запрещаем прямой вход под root (заходим только под обычным юзером)
PermitRootLogin no

# Полностью отключаем авторизацию по паролям
PasswordAuthentication no

# Включаем вход исключительно по SSH-ключам
PubkeyAuthentication yes

# Запрещаем учетки с пустыми паролями
PermitEmptyPasswords no

# Лимитируем параллельные неавторизованные подключения
MaxStartups 10:30:100

Сохраняем файл и выходим из редактора.

Обязательный контроль: Проверка синтаксиса и тест

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

Шаг 1: Валидация встроенным тестером
Запускаем встроенную проверку синтаксиса OpenSSH с ключом -t (Test):

sudo sshd -t

Если команда выполнилась молча и вернула чистую строку — синтаксис корректен. Если система вывела ошибки — возвращаемся в наш .conf файл и правим указанные строки.

Шаг 2: Безопасный рестарт
Только убедившись в отсутствии ошибок, отправляем службу в рестарт:

sudo systemctl restart ssh

Правило страховки: После выполнения команды systemctl restart ни в коем случае не закрывайте окно терминала, в котором работаете. Откройте вторую вкладку на своем компьютере и попробуйте подключиться к серверу по новому порту и с ключом. Если новое подключение успешно установилось — всё настроено идеально, теперь текущую сессию можно закрывать.

Заключение

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

👁️ 25

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

девять − семь =

root@phoenix901:~# connect
[×]

Получай дайджест раз в неделю.
Без спама.