«Полное руководство по 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 + clientssshd -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-upgradesreboot-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 📋