«Полное руководство по SELinux + Snort + LUKS» обычно не дочитывают. Ниже — порядок работ, после которого сервер перестаёт быть низко висящим фруктом 🛡️

0. До того как открыть в интернет #

  • свежий образ LTS / Debian stable;
  • cloud-init / ключ, не password root по SSH;
  • план доступа: console провайдера / IPMI, если ban’нете сами себя.

1. SSH #

/etc/ssh/sshd_config.d/hardening.conf:

PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
AllowUsers evgeny deploy
MaxAuthTries 3
# Port 2258   # если меняете — сразу firewall + clients
sshd -t && systemctl reload ssh

Отдельный deploy без sudo для CI; ваш пользователь — с sudo (NOPASSWD — только если сеть доверена и вы это приняли).

2. Firewall: default drop #

nftables-скелет:

table inet filter {
  chain input {
    type filter hook input priority 0; policy drop;
    ct state established,related accept
    iif lo accept
    tcp dport 2258 ip saddr { 192.168.50.0/24, 100.64.0.0/10 } accept
    # http только с reverse-proxy
    tcp dport 80 ip saddr 192.168.50.11 accept
  }
}

UFW — ок на простых VPS (ufw default deny incoming, allow OpenSSH).

3. Обновления #

apt install unattended-upgrades
# security origins; без -proposed
dpkg-reconfigure -plow unattended-upgrades

reboot-required — не игнорируйте неделями на edge-хостах.

4. brute-force #

  • fail2ban на SSH имеет смысл, если порт виден не только LAN;
  • на HTTP за reverse-proxy банить $remote_addr без real_ip = банить proxy.

Лимиты на origin (limit_req) — дополнение, не замена edge-фильтру.

5. Пользователи и сервисы #

# кто слушает
ss -lntup
# лишние пакеты
apt purge apache2  # если nginx-only

Сервисы — под отдельными user (php-fpm pools, User= в systemd). ProtectSystem=strict / hardening drop-in — следующий уровень после базового.

6. Логи и время #

timedatectl   # NTP on
journalctl -u ssh -S today

Без времени и логов расследование = гадание.

7. Бэкапы и restore #

Харднинг без проверенного restore — театр. Хотя бы:

  • ежедневный snapshot/PBS;
  • один раз в квартал restore на тестовый VMID.

Что не в этом посте #

  • SELinux enforcing с нуля на чужом образе — отдельный проект;
  • «поставьте Snort» без людей, которые читают алерты;
  • full disk encryption на VPS, где hypervisor уже злой.

Чеклист #

  • root login off, keys only
  • firewall drop + allowlist
  • unattended security updates
  • deploy ≠ root
  • лишние порты закрыты
  • backup + restore test

С этого начинают; остальное — по threat model, не по толщине PDF с CIS benchmark 📋