Hardening сервера: 20 практических настроек безопасности Linux под продакшен
Меня зовут Семёнов Евгений Сергеевич, директор АйТи Фреш. За 15+ лет я поднимал и защищал серверы от малых офисов до крупных ферм веб-хостинга. И у нас на практике сложился список из 20 настроек, которые я делаю на каждом production-сервере Linux в первые 30 минут после установки ОС. Без них даже полностью обновлённая система уязвима к типовым атакам. Разберу все 20 пунктов с конкретными командами.
1. Свежая ОС и регулярные обновления
Первое, что я делаю на новом сервере — apt update && apt full-upgrade. Дальше включаю unattended-upgrades для автоматической установки security-патчей:
apt install -y unattended-upgrades apt-listchanges
dpkg-reconfigure --priority=low unattended-upgrades
2. SSH на ключах, без root и паролей
# /etc/ssh/sshd_config
Port 22022
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
AllowGroups ssh-users
Protocol 2
ClientAliveInterval 300
ClientAliveCountMax 2
systemctl reload sshd
3. Firewall на nftables/ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow from 10.10.0.0/24 to any port 22022
ufw allow 443/tcp
ufw enable
4. fail2ban от брутфорса
apt install -y fail2ban
# /etc/fail2ban/jail.local
[DEFAULT]
bantime = 86400
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = 22022
mode = aggressive
5. Параметры ядра через sysctl
# /etc/sysctl.d/99-hardening.conf
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_rfc1337 = 1
kernel.randomize_va_space = 2
kernel.dmesg_restrict = 1
kernel.kptr_restrict = 2
kernel.yama.ptrace_scope = 2
fs.suid_dumpable = 0
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
sysctl --system
6. SELinux или AppArmor в enforcing
Ubuntu/Debian по умолчанию идут с AppArmor, Rocky/РЕД ОС — с SELinux. В любом случае — в enforcing, и не трогаем.
# AppArmor
aa-status
aa-enforce /etc/apparmor.d/usr.sbin.nginx
# SELinux
setenforce 1
getenforce
# /etc/selinux/config — SELINUX=enforcing
7. Запрет ненужных модулей ядра
# /etc/modprobe.d/blacklist-hardening.conf
install cramfs /bin/true
install freevxfs /bin/true
install jffs2 /bin/true
install hfs /bin/true
install hfsplus /bin/true
install squashfs /bin/true
install udf /bin/true
install dccp /bin/true
install sctp /bin/true
install rds /bin/true
install tipc /bin/true
install usb-storage /bin/true # если нет USB-флешек
8. Монтирование с noexec/nosuid/nodev
# /etc/fstab
/dev/nvme0n1p5 /tmp ext4 defaults,nodev,nosuid,noexec 0 2
/dev/nvme0n1p6 /var/tmp ext4 defaults,nodev,nosuid,noexec 0 2
/dev/nvme0n1p7 /home ext4 defaults,nodev,nosuid 0 2
tmpfs /dev/shm tmpfs defaults,nodev,nosuid,noexec 0 0
9. Отключение неиспользуемых сервисов
systemctl list-unit-files --state=enabled
systemctl disable --now bluetooth cups avahi-daemon rpcbind
10. Парольная политика
apt install -y libpam-pwquality
# /etc/security/pwquality.conf
minlen = 14
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
difok = 5
retry = 3
enforce_for_root
11. sudo с журналированием
# /etc/sudoers.d/logging
Defaults logfile="/var/log/sudo.log"
Defaults log_input, log_output
Defaults iolog_dir="/var/log/sudo-io/%{user}"
%admins ALL=(ALL) ALL
# Не NOPASSWD — администратор должен вводить пароль
12. Автообновление часов (NTP)
apt install -y chrony
# /etc/chrony/chrony.conf — внутренний NTP сервер
server ntp.corp.example.ru iburst
makestep 1.0 3
rtcsync
systemctl enable --now chrony
13. Ограничение размера журналов
# /etc/systemd/journald.conf
[Journal]
SystemMaxUse=2G
SystemKeepFree=10%
MaxRetentionSec=3month
Compress=yes
ForwardToSyslog=yes
systemctl restart systemd-journald
14. Централизованный syslog
# /etc/rsyslog.d/99-graylog.conf
*.* @@logs.corp.example.ru:1514;RSYSLOG_SyslogProtocol23Format
systemctl restart rsyslog
15. Аудит действий (auditd)
apt install -y auditd
# /etc/audit/rules.d/audit.rules — базовый набор
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k priv
-w /var/log/sudo.log -p wa -k actions
-a always,exit -F arch=b64 -S execve -F uid=0 -k root_commands
systemctl enable --now auditd
16. Контроль целостности AIDE
apt install -y aide
aide --init
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# /etc/cron.daily/aide
#!/bin/bash
aide --check | mail -s "AIDE report $(hostname)" root@corp.example.ru
17. Отключение core dumps
# /etc/security/limits.d/disable-cores.conf
* hard core 0
* soft core 0
# /etc/sysctl.d/99-no-cores.conf
fs.suid_dumpable = 0
kernel.core_pattern = /bin/false
18. PAM-усиление входа
# /etc/pam.d/common-auth (Debian)
auth required pam_tally2.so deny=5 unlock_time=900 onerr=fail
# /etc/pam.d/common-password
password required pam_pwhistory.so remember=24 enforce_for_root
19. Отдельный диск/LV для /var/log и /var/lib
Забитый журналами / root — сервер встаёт. Выносим быстрорастущие директории на отдельные LVM или разделы с квотами.
20. Проверка через lynis и openscap
apt install -y lynis
lynis audit system
# или
apt install -y libopenscap8 ssg-debderived
oscap xccdf eval --profile cis \
--results-arf results.xml \
--report report.html \
/usr/share/xml/scap/ssg/content/ssg-debian12-ds.xml
Типовая шкала оценки защищённости
| Lynis score | Статус | Действие |
|---|---|---|
| 0-40 | Критично | Немедленно закрывать дыры |
| 40-60 | Плохо | Прошёл базовый setup, нужно ещё |
| 60-80 | Нормально | Типовой production |
| 80-90 | Хорошо | Цель для серверов с данными |
| 90+ | Отлично | Для критичных систем |
Реальный кейс: веб-хостинг после компрометации
В феврале 2025 пришли в компанию, которой взломали биллинговый сервер через старую уязвимость Apache. После приведения в порядок мы не просто восстановили, но и прошли полный hardening на всех 12 серверах парка:
- Все 20 пунктов выше применены через единый Ansible-плейбук.
- Добавили Wazuh-агенты на все серверы для HIDS.
- Настроили централизованный Graylog + алерты.
- Lynis score вырос с 46 до 88 на всех серверах.
- Железо — Dell PowerEdge с Xeon Platinum 8280, 40G Mellanox, в дата-центре МТС.
За 9 месяцев с момента внедрения — ноль успешных взломов, 340+ автоматически забаненных IP-адресов. Стоимость проекта — 420 000 ₽, месячная поддержка — 28 000 ₽.
Проведём hardening ваших серверов
Комплексное укрепление безопасности Linux и Windows серверов под стандарты CIS, ФСТЭК. Автоматизация через Ansible/Salt, интеграция с существующим мониторингом, отчёт по Lynis/OpenSCAP.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — частые вопросы о hardening
- Что такое hardening?
- Комплекс настроек ОС для уменьшения атакуемой поверхности.
- По каким стандартам?
- CIS Benchmarks, NIST 800-53, ФСТЭК 17/21.
- Нужен ли SELinux/AppArmor?
- Для публичных серверов — обязательно.
- Как автоматизировать?
- Ansible dev-sec, SaltStack, Lynis, OpenSCAP.
- Замедляет ли hardening сервер?
- SELinux/AppArmor — 2-5%. Остальное не влияет.