
Защита сервера — rs harden
Скрипт по шагам включает базовую защиту: автообновления, fail2ban, SSH только по ключу, файрвол, swap. SSH и файрвол откатываются сами, если вы не подтвердили вход.
Новый сервер в интернете начинают перебирать по SSH через несколько минут после запуска. Базовая защита известна давно — вход только по ключу, fail2ban, файрвол, автообновления, — но каждый раз её делают руками, и самый страшный шаг в ней — не отрезать доступ самому себе.
rs harden проходит эти шаги по очереди: объясняет, что изменит, спрашивает и делает. Изменения SSH и файрвола откатываются сами, если за 3 минуты вы не подтвердили, что можете войти из нового окна.
Что делает
- Автообновления безопасности — unattended-upgrades: заплатки ставятся сами каждый день, без перезагрузок.
- fail2ban для SSH — 5 неудачных попыток за 10 минут, и IP блокируется на час. Если уже стоит fail2ban или CrowdSec — не трогает.
- SSH только по ключу — только если ключ для вашего пользователя уже есть: вход по паролю выключается, root — только по ключу, не больше 3 попыток. Настройки — отдельным файлом
/etc/ssh/sshd_config.d/00-runstack-harden.conf, основной конфиг не меняется. - Файрвол ufw — порты SSH открыты всегда, про каждый другой порт, который слушает наружу, спрашивает (80 и 443 — по умолчанию «да»). Если файрвол уже есть (ufw или nftables) — не трогает.
- Swap — 2 ГБ (4 ГБ при памяти от 8 ГБ), если его нет: без него при нехватке памяти ядро сразу убивает процессы.
- Время и ядро — синхронизация времени (NTP), защита от SYN-флуда, без ICMP-редиректов, полный ASLR.
Как выглядит
==> 3. SSH
Выключает вход по паролю (только ключи), root — только по ключу, 3 попытки на соединение. Ключ найден у: deploy.
Выключить вход по паролю в SSH? [y/N] y
┌──────────────────────────────────────────────────────────────────────┐
│ НЕ закрывайте это окно. Откройте НОВЫЙ терминал и проверьте: │
│ ssh deploy@<сервер> по ключу │
│ Работает — наберите здесь yes в течение 180 с. Иначе изменение │
│ откатится. │
└──────────────────────────────────────────────────────────────────────┘
yes / no: yes
✓ SSH: только ключи. Отменить: rm /etc/ssh/sshd_config.d/00-runstack-harden.conf && systemctl reload ssh
==> 4. Файрвол (ufw)
Порт 3000/tcp (node) слушает 0.0.0.0. Разрешить его из интернета? [y/N] n
Как запустить
- Скопируйте команду из блока «Скачать» — он появится после входа. В команде ваш личный токен, он действует 12 часов.
- Выполните её на сервере в обычном терминале (не из cron и не через пайп без терминала): шаги с SSH и файрволом требуют вашего подтверждения.
- Дальше —
sudo rs harden. Сначала можно посмотреть план:sudo rs harden --plan.
rs harden каждый шаг с вопросом
rs harden --plan только показать, что изменится
rs harden --yes без вопросов: только шаги, которые не отрежут доступ
(обновления, fail2ban, swap, время, ядро)
Безопасно ли это
Скрипт меняет настройки сервера — поэтому каждый шаг с вопросом, а два опасных (SSH и файрвол) с таймером отката. Без терминала (--yes, автоматизация) SSH и файрвол не меняются никогда. Каждое изменение — отдельный файл с пометкой RunStack, его легко найти и удалить; как откатить каждый шаг — в вики. Проверить результат: sudo rs security.
Требования
- Ubuntu 22.04 / 24.04 или Debian 12+ (apt), права root (
sudo), systemd. - Для шага SSH — ключ в
~/.ssh/authorized_keysпользователя, под которым вы зашли. Нет ключа — шаг пропускается. - Подключение к серверу, которое вы не потеряете: у провайдера должна быть консоль (VNC) на крайний случай.
Вопросы
Сколько стоит? Сейчас бесплатно.
Что если я не успею подтвердить? Через 3 минуты изменение откатится само: SSH вернётся к прежним настройкам, файрвол выключится. Подключение, в котором запущен скрипт, не рвётся.
Порты Docker закроются файрволом? Нет: Docker публикует порты в обход ufw. Ограничивайте их через rs <сервис> access или публикуйте на 127.0.0.1. Подробнее — в вики.
Материалы доступны после входа и подтверждения email.
