Зміцнення безпеки Linux: практичний контрольний список
Стандартна інсталяція Linux не готова до виробничого використання. Пройдіть покроково SSH, брандмауер, автоматичні оновлення і контроль привілеїв користувачів.
Зміст
- Чому стандартні інсталяції є небезпечними
- Зміцнення облікових записів користувачів та автентифікації
- Вимкнення входу від root та використання sudo
- Застосування суворих політик паролів
- Блокування невикористовуваних облікових записів
- Зміцнення SSH
- Налаштування брандмауера
- Оновлення системи та керування пакетами
- Вимкнення непотрібних служб
- Безпека файлової системи
- Виявлення вторгнень та моніторинг
- Зміцнення ядра за допомогою sysctl
Чому стандартні інсталяції є небезпечними
Свіжовстановлений Linux-сервер постачається з набором налаштувань, оптимізованих для широкої сумісності та простоти налаштування, а не для безпеки. Служби, які Вам не потрібні, можуть бути запущені, SSH приймає автентифікацію за паролем (вразлива до брутфорс-атак), брандмауер може бути дозвільним або вимкненим, а облікові записи користувачів можуть мати надмірні привілеї. Зміцнення — це процес систематичного зменшення поверхні атаки відповідно до Ваших фактичних вимог.
Цей контрольний список орієнтований на сімейства Debian/Ubuntu та RHEL/CentOS, але принципи застосовуються універсально.
Зміцнення облікових записів користувачів та автентифікації
Вимкнення входу від root та використання sudo
Ніколи не входьте як root безпосередньо. Створіть виділеного адміністративного користувача та надайте йому привілеї sudo:
adduser adminuser
usermod -aG sudo adminuser # Debian/Ubuntu
usermod -aG wheel adminuser # RHEL/CentOS
Вимкніть SSH-вхід від root у /etc/ssh/sshd_config: встановіть PermitRootLogin no.
Застосування суворих політик паролів
Встановіть libpam-pwquality (Debian) або pam_pwquality (RHEL) та налаштуйте мінімальну довжину, вимоги до складності та історію в /etc/security/pwquality.conf. Встановіть термін дії паролю в /etc/login.defs: PASS_MAX_DAYS 90, PASS_MIN_DAYS 1, PASS_WARN_AGE 14.
Блокування невикористовуваних облікових записів
passwd -l username # Заблокувати обліковий запис
chage -E 0 username # Негайно вичерпати термін
Перевіряйте облікові записи без паролю або з доступом до оболонки, якого не повинно бути (grep -v 'nologin\|false' /etc/passwd).
Зміцнення SSH
SSH — найпоширеніший вектор віддаленого доступу. Зміцніть /etc/ssh/sshd_config:
Port 2222 # Нестандартний порт зменшує автоматизовані сканування
PermitRootLogin no
PasswordAuthentication no # Лише автентифікація за ключем
PubkeyAuthentication yes
AllowUsers adminuser # Білий список конкретних користувачів
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
X11Forwarding no
AllowTcpForwarding no # Якщо не потрібно
Protocol 2
Після зміни порту оновіть правила брандмауера перед перезапуском sshd. Використовуйте sshd -t для перевірки конфігурації на синтаксичні помилки.
Для генерації ключів надавайте перевагу Ed25519 над RSA 2048:
ssh-keygen -t ed25519 -C "admin@server"
Налаштування брандмауера
UFW (Ubuntu/Debian)
ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp # Ваш порт SSH
ufw allow 443/tcp # HTTPS, якщо є веб-сервер
ufw enable
ufw status verbose
firewalld (RHEL/CentOS)
firewall-cmd --set-default-zone=drop
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
Використовуйте nftables безпосередньо для максимального контролю та продуктивності на сучасних ядрах. Застосовуйте принцип заборони за замовчуванням — дозволяйте лише те, що явно необхідно.
Оновлення системи та керування пакетами
Підтримуйте систему в актуальному стані. Невиправлені вразливості є найпоширенішим вектором початкового доступу після атак на облікові дані:
# Debian/Ubuntu — увімкнути автоматичні оновлення безпеки
apt install unattended-upgrades
dpkg-reconfigure unattended-upgrades
# RHEL/CentOS — увімкнути автоматичні оновлення
dnf install dnf-automatic
systemctl enable --now dnf-automatic.timer
Видаліть непотрібні пакети: apt purge telnet rsh-server ypserv xinetd. Кожен встановлений пакет є потенційною вразливістю.
Вимкнення непотрібних служб
Перелічіть усі запущені служби та вимкніть ті, які Вам не потрібні:
systemctl list-units --type=service --state=running
systemctl disable --now servicename
Загальні кандидати для видалення на веб-сервері: avahi-daemon, cups, bluetooth, rpcbind. Кожен відкритий порт є потенційною точкою входу.
Безпека файлової системи
- Встановіть sticky bit на каталоги з можливістю запису для всіх:
chmod +t /tmp - Використовуйте параметри монтування
noexec,nosuid,nodevдля/tmp,/var/tmpта знімних носіїв у/etc/fstab - Перевіряйте двійкові файли SUID/SGID:
find / -perm /6000 -type f 2>/dev/null— видаляйте біт у тих, де він не потрібен - Обмежуйте права доступу до
/etc/cron*:chmod 700 /etc/cron.d /etc/cron.daily
Виявлення вторгнень та моніторинг
- Fail2ban: автоматично блокує IP-адреси з повторними невдачами автентифікації — необхідний для будь-якого SSH, доступного з інтернету
- auditd: журналювання системних викликів, доступу до файлів та команд користувачів на рівні ядра — надає SIEM-системам насичені дані про події
- AIDE (Advanced Intrusion Detection Environment): створює криптографічну базу даних хешів файлів у відомому справному стані та попереджає про зміни
- Logwatch або GoAccess: регулярні зведення журналів, що надсилаються електронною поштою
Централізуйте журнали на віддаленому сервері syslog або SIEM негайно — якщо зловмисник отримає root-доступ, він очистить локальні журнали.
Зміцнення ядра за допомогою sysctl
Додайте до /etc/sysctl.d/99-hardening.conf:
net.ipv4.ip_forward = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.tcp_syncookies = 1
kernel.randomize_va_space = 2
kernel.dmesg_restrict = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
Застосуйте за допомогою sysctl --system. Ці параметри вимикають IP-пересилання, запобігають атакам перенаправлення ICMP, вмикають захист SYN cookie та забезпечують ASLR.