Для прохождения сертификации по 152-ФЗ обязательны Mandatory Access Control и системный аудит. Мы развернули оба компонента на всех 12 серверах.
# Проверяем статус AppArmor
sudo aa-status
# Устанавливаем дополнительные профили
sudo apt install -y apparmor-profiles apparmor-profiles-extra apparmor-utils
# Создаём профиль для Nginx
sudo aa-genprof nginx
# Или вручную:
sudo cat > /etc/apparmor.d/usr.sbin.nginx <<'EOF'
#include
/usr/sbin/nginx {
#include
#include
capability net_bind_service,
capability setuid,
capability setgid,
capability dac_override,
/etc/nginx/** r,
/var/log/nginx/** w,
/var/www/** r,
/run/nginx.pid rw,
/var/lib/nginx/** rw,
# Запрещаем доступ к остальным файлам
deny /etc/shadow r,
deny /etc/passwd w,
deny /home/** rwx,
}
EOF
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx
# Переводим профиль в enforce mode
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx
# Проверяем
sudo aa-status | grep nginx
# Устанавливаем
sudo apt install -y auditd audispd-plugins
# Конфигурация правил /etc/audit/rules.d/hardening.rules
# Мониторинг изменений в файлах аутентификации
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers
# SSH конфигурация
-w /etc/ssh/sshd_config -p wa -k sshd_config
# Мониторинг системных команд
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_commands
# Мониторинг cron
-w /etc/crontab -p wa -k cron
-w /etc/cron.d/ -p wa -k cron
-w /var/spool/cron/ -p wa -k cron
# Мониторинг загрузки модулей ядра
-w /sbin/insmod -p x -k kernel_modules
-w /sbin/modprobe -p x -k kernel_modules
-w /sbin/rmmod -p x -k kernel_modules
# Попытки доступа к запрещённым файлам
-a always,exit -F arch=b64 -S open -F exit=-EACCES -k access_denied
-a always,exit -F arch=b64 -S open -F exit=-EPERM -k access_denied
# Мониторинг сетевых настроек
-a always,exit -F arch=b64 -S sethostname -S setdomainname -k network_changes
-w /etc/hosts -p wa -k network_changes
-w /etc/network/ -p wa -k network_changes
# Сделать конфигурацию неизменяемой (требует перезагрузки для изменения)
-e 2
# Применяем правила
sudo augenrules --load
sudo systemctl restart auditd
# Просмотр событий
sudo ausearch -k identity --start today
sudo aureport --auth --start today
sudo aureport --summary
# Настраиваем rsyslog для отправки логов на удалённый сервер
# /etc/rsyslog.d/60-remote.conf
# Отправляем все логи на центральный сервер
*.* @@log-server.company.local:514;RSYSLOG_SyslogProtocol23Format
# Локальные логи тоже сохраняем
*.* /var/log/syslog
# Ротация логов /etc/logrotate.d/custom
/var/log/auth.log
/var/log/syslog
/var/log/sudo.log
{
daily
rotate 90
compress
delaycompress
missingok
notifempty
create 640 root adm
}
# Устанавливаем logwatch для ежедневных отчётов
sudo apt install -y logwatch
# Настраиваем ежедневную отправку
echo '/usr/sbin/logwatch --output mail --mailto admin@company.local --detail high' | sudo tee /etc/cron.daily/00logwatch
sudo chmod +x /etc/cron.daily/00logwatch