Технологии #Ubuntu #Linux #Сервер #Безопасность #SSH

Защита сервера после установки: ключи, fail2ban и брандмауэр

Первое, что делают со свежим сервером: вход по SSH-ключу вместо пароля, fail2ban против перебора, брандмауэр UFW и автоматические обновления безопасности. Пошагово, с проверкой на каждом этапе и командами под вашу сеть.

6 минут 1

Свежий сервер с белым IP начинают перебирать в среднем через несколько минут после подключения к сети. Боты круглосуточно стучатся в SSH со словарями паролей, и единственное, что стоит между ними и вашими данными, — это пароль пользователя.

Ниже — четыре шага, которые закрывают вопрос на годы: вход по ключу вместо пароля, fail2ban против перебора, брандмауэр и автоматические заплатки безопасности. На всё уйдёт полчаса. Конструктор ниже соберёт команды под ваши адреса и порты.

Конструктор команд: защита сервера

Выберите задачу и подставьте свои значения — получите команды для SSH-ключей, fail2ban, брандмауэра и автообновлений.

Команды выполняются по порядку сверху вниз

Статья продолжает установку Ubuntu Server: там про саму установку и первые настройки, здесь — про то, как сделать сервер неинтересным для чужих.

Шаг 1. Вход по ключу вместо пароля

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

Порядок такой: создать ключ у себя, отправить открытую часть на сервер, убедиться, что вход работает, и только потом запрещать пароли. Команды — в конструкторе, задача «Вход по ключу».

Три вещи, на которых обжигаются:

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

Пароль на сам ключ ставить стоит. Да, придётся вводить его при каждом подключении — но только до первой перезагрузки: системный агент запомнит ключ до конца сессии. Зато украденный ноутбук не означает украденный сервер.

Правки вносите отдельным файлом. В современных Ubuntu и Debian есть каталог /etc/ssh/sshd_config.d/, и файл оттуда переживёт обновление системы. Правки в самом sshd_config при обновлении пакета могут быть затёрты.

После запрета паролей sudo sshd -T | grep passwordauthentication должен показать no. Это и есть главный результат шага: перебор паролей больше не работает в принципе, потому что паролей нет.

Шаг 2. Fail2ban против перебора

Даже с ключами боты продолжат стучаться и засорять журнал. Fail2ban читает логи и банит адреса, с которых идут неудачные попытки: пять промахов за десять минут — и адрес улетает в блок на час.

Ставится одной командой, настраивается одним файлом. Важная деталь: свои настройки пишутся в jail.local, а не в jail.conf — последний перезаписывается при каждом обновлении пакета.

Обязательно впишите свою домашнюю подсеть в ignoreip. Иначе однажды ошибётесь паролем три раза с собственного ноутбука и заблокируете сами себя.

Проверка работы — sudo fail2ban-client status sshd. На сервере с белым IP счёт забаненных за сутки обычно идёт на десятки.

У fail2ban есть готовые фильтры не только для SSH: nginx, почта, панели управления. Логика та же — добавить блок в jail.local и перезапустить службу.

Шаг 3. Брандмауэр: закрыть всё, кроме нужного

Принцип простой: входящие соединения запрещены все, кроме тех, что вы открыли явно. В Ubuntu для этого есть UFW — надстройка над встроенным межсетевым экраном с человеческим синтаксисом.

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

Отдельно стоит развести службы на два типа:

  • Публичные — сайты на портах 80 и 443, если сервер их отдаёт наружу.
  • Домашние — Samba, Immich, панели управления, медиасерверы. Эти открываются только для своей подсети: sudo ufw allow from 192.168.1.0/24 to any port 445. Тогда даже случайный проброс порта на роутере не откроет службу всему интернету.

Проверить, что получилось, помогает sudo ss -tulpn | grep LISTEN: всё, что висит на 0.0.0.0, доступно по сети. Службы, нужные только самому серверу, должны слушать 127.0.0.1.

Шаг 4. Автообновления безопасности

Большинство взломов домашних серверов — это не хитрые атаки, а эксплуатация дыр, закрытых полгода назад. Пакет unattended-upgrades ставит заплатки безопасности сам, без вашего участия, и не трогает версии самих программ.

Включается через sudo dpkg-reconfigure -plow unattended-upgrades. Дальше решаете один вопрос: разрешать ли автоматическую перезагрузку, когда обновляется ядро.

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

Проверить, нужна ли перезагрузка прямо сейчас, можно наличием файла /var/run/reboot-required.

Чего делать не нужно

Менять порт SSH и считать это защитой. От сканирования всего интернета смена порта спасает, от целевой атаки — нет. Делать можно, но как способ почистить логи, а не как меру безопасности.

Ставить «комплексные решения по защите» из интернета. Скрипты, которые «настраивают всё сразу», часто ломают сеть, отключают нужные службы или сами оказываются закладкой. Четыре шага выше закрывают 95% реальных угроз.

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

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

Частые вопросы

Что делать, если потерял ключ и вход по паролю отключён?

Подключиться через консоль гипервизора или монитор с клавиатурой и вернуть PasswordAuthentication yes в конфиге SSH. Если сервер арендован — через веб-консоль хостера. Именно поэтому важно проверять вход по ключу до отключения паролей.

Fail2ban заблокировал мой адрес, как разблокировать?

sudo fail2ban-client set sshd unbanip АДРЕС. Чтобы не повторялось, добавьте свою подсеть в ignoreip в jail.local.

Нужен ли антивирус на сервере Linux?

Для домашнего сервера обычно нет. Осмысленно ставить clamav, только если сервер раздаёт файлы Windows-машинам и вы хотите проверять то, что на него заливают.

Обязательно ли ставить брандмауэр, если сервер за роутером?

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

Как понять, что сервер уже пытались взломать?

sudo journalctl -u ssh --since today | grep -i 'failed password' покажет неудачные попытки, last — успешные входы. Насторожить должны успешные входы, которых вы не совершали, и новые пользователи в /etc/passwd.

Что дальше

Защищённый сервер — основа для всего остального. Дальше на него обычно ставят общую папку Samba и хранилище фотографий Immich. Обе службы как раз из тех, что открываются только для домашней сети, а не наружу.

Статья помогла?

Комментарии

Пока никто не написал. Будьте первым — вопрос или свой опыт одинаково полезны.

Комментарий появится после проверки. Ссылки и реклама не публикуются.