Hardening свежего Linux-сервера: первые 20 минут
Полный чек-лист безопасности на первый час для нового VPS на Debian, Ubuntu или AlmaLinux — SSH-ключи, файрвол, автообновления, fail2ban и реально важные проверки.
Новый развёрнутый VPS доступен всему интернету за секунды, а учётные данные, которые пришли с ним, — это пароль. Это руководство — первые двадцать минут по порядку, для Debian, Ubuntu или AlmaLinux. Сделайте это до установки чего-либо ещё — скомпрометированному серверу нельзя доверять размещение чего бы то ни было.
Минуты 0–3 — SSH-ключи раньше всего остального
Парольный вход — причина взлома большинства свежих серверов. Установите ключ до того, как что-либо отключите, и убедитесь, что он работает, прежде чем закрывать сеанс, через который подключены.
- 01.На своей машине: ssh-keygen -t ed25519 -C 'vps'.
- 02.Скопируйте публичный ключ: ssh-copy-id root@IP_СЕРВЕРА.
- 03.Проверьте: ssh root@IP_СЕРВЕРА — без запроса пароля.
- 04.И только потом отключайте парольную аутентификацию.
Note · Никогда не отключайте парольный вход, пока не проверите вход по ключу во втором терминале. Неверная конфигурация sshd на единственном сервере — это блокировка доступа, а не улучшение безопасности.
Минуты 3–6 — правильно отключите парольный вход
Отредактируйте /etc/ssh/sshd_config и задайте три значения. Перезагружайте, а не перезапускайте, чтобы ошибка в конфиге не убила сеанс.
- ▹PermitRootLogin prohibit-password — вход root по ключу допустим, по паролю нет.
- ▹PasswordAuthentication no — только ключи.
- ▹PubkeyAuthentication yes — убедитесь, что путь к ключам действительно включён.
Выполните systemctl reload sshd, откройте новый терминал и убедитесь, что ключ работает. Затем проверьте второй вход по ключу из отдельного сеанса, прежде чем закрывать что-либо. В гайде по SSH есть точный конфиг и порядок проверки.
Минуты 6–9 — файрвол
По умолчанию запрещайте входящие, разрешайте только нужное. ufw на Debian/Ubuntu, firewalld на AlmaLinux.
- 01.Сначала разрешите SSH: ufw allow 22/tcp — всегда первым, иначе заблокируете себя.
- 02.Разрешите только нужные порты: 80 для HTTP, 443 для HTTPS.
- 03.Задайте умолчания: ufw default deny incoming, ufw default allow outgoing.
- 04.Включите: ufw enable.
Note · Если используете fail2ban, не добавляйте правило, блокирующее порт 22, без jail, уважающего ваш собственный IP, иначе можно забанить себя.
Минуты 9–12 — автоматические обновления безопасности
Незакрытые уязвимости ядра и библиотек — самая частая реальная точка входа. Включите unattended upgrades, чтобы патчирование не зависело от того, вспомните ли вы.
- ▹Debian/Ubuntu: установите unattended-upgrades и включите обновления безопасности.
- ▹AlmaLinux: включите dnf-automatic-timers.
- ▹Перезагружайтесь автоматически, когда этого требует ядро, или поставьте напоминание сделать это вручную.
Минуты 12–15 — fail2ban
При ключевом SSH fail2ban менее критичен, но дёшев: он отсекает подбор паролей по любой оставшейся парольной поверхности. Установите, включите jail для ssh и задайте короткие findtime и bantime.
Минуты 15–18 — проверьте, что реально открыто
Неassumeйте. Посмотрите, что действительно слушает, и сравните с задуманным.
- 01.ss -tulpn — все слушающие сокеты с owning-процессом.
- 02.С вашей машины: nmap -Pn IP_СЕРВЕРА — внешний взгляд.
- 03.Всё, что слушает на 0.0.0.0 и чего вы не планировали, — это решение, которое нужно принять сейчас, а не потом.
Минуты 18–20 — остальной чек-лист
- ▹Пока не меняйте hostname: сначала убедитесь, что DNS вашего мониторинга и обратного прокси разрешается правильно.
- ▹Задайте часовой пояс и включите NTP, чтобы логи имели смысл.
- ▹Установите restic или свой инструмент бэкапа и запланируйте его — до того как появятся данные, которые вам дороги.
- ▹Добавьте проверку мониторинга для сервиса, который собираетесь развернуть, а не только на то, что сервер жив.
Чего это не покрывает
Двадцать минут hardening дают сервер, который не отобьётся автоматическим сканером. Это не делает систему неизменяемой, стек приложений проверенным или даёт план реагирования на инциденты. Это продолжающаяся работа — но первые двадцать минут не дают свежей машине стать чужой.
FAQ
QНужен ли fail2ban, если я использую только ключи?
AМенее срочно, но всё же полезно. Ключи делают перебор бессмысленным, а fail2ban снижает шум и закрывает любой сервис, который всё ещё принимает пароли.
QНужно ли полностью отключать вход root?
AНе обязательно. Root по ключу допустим; опасен root по паролю. Полное отключение root с sudo-пользователем добавляет шаг без заметного выигрыша, если ключ защищён.
QВ каком порядке это делать?
AСначала SSH-ключи, проверить, потом отключить пароли, затем файрвол, затем обновления, затем проверить экспозицию. Каждый шаг опирается на предыдущий.