· 17 мин чтения

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 серверах парка:

За 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%. Остальное не влияет.

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.