Hardening ядра Linux: sysctl параметры безопасности — АйТи Фреш

Hardening ядра Linux: sysctl параметры безопасности

Hardening ядра Linux: sysctl параметры безопасности

Зачем нужен kernel hardening через sysctl

Установка Ubuntu или Debian «из коробки» — это компромисс между безопасностью и совместимостью. Часть параметров ядра настроена консервативно для максимальной совместимости, а не для максимальной защиты. Linux kernel hardening через sysctl — это изменение этих параметров в сторону безопасности.

Хорошая новость: большинство параметров применяются без перезагрузки и не влияют на производительность заметным образом. На всех серверах клиентов мы раскатываем hardening-конфиг через Ansible сразу после первичной настройки — до открытия каких-либо портов наружу.

Три группы параметров:

  • Защита памяти — ASLR, запрет маппинга нулевой страницы, ограничение ptrace
  • Защита сети — SYN flood, IP spoofing, ICMP redirect, source routing
  • Ограничение информации — dmesg, /proc, kernel pointers

Параметры безопасности памяти

Защита памяти затрудняет эксплуатацию уязвимостей типа buffer overflow и privilege escalation.

ASLR и защита адресного пространства

Параметры рандомизации памяти:

# /etc/sysctl.d/10-hardening.conf

# ASLR — рандомизация адресного пространства
# 0=выключен, 1=частичный, 2=максимальный (рекомендуется)
kernel.randomize_va_space = 2

# Запрет маппинга нулевой страницы
# Предотвращает NULL pointer dereference exploits
vm.mmap_min_addr = 65536

# Ограничение ptrace — процесс не может отлаживать другой без CAP_SYS_PTRACE
# 1=только дочерние процессы, 2=только с CAP_SYS_PTRACE, 3=полный запрет
kernel.yama.ptrace_scope = 1

# Скрыть указатели ядра из /proc
# Предотвращает утечку KASLR-адресов непривилегированным пользователям
kernel.kptr_restrict = 2

# Ограничить доступ к dmesg
kernel.dmesg_restrict = 1

# Применяем сразу (без перезагрузки)
sysctl -p /etc/sysctl.d/10-hardening.conf
Защита сетевого стека

Защита сетевого стека

Сетевые параметры — самая большая группа. Защищают от IP spoofing, SYN flood, ICMP redirect и других сетевых атак.

Основные сетевые параметры

Полный набор сетевого hardening:

# Защита от IP spoofing (reverse path filtering)
# 0=выключено, 1=strict, 2=loose
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Запрет принятия ICMP redirect
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0

# Запрет source routing (атаки через маршрутизацию)
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

# Запрет пересылки пакетов (если не роутер)
net.ipv4.ip_forward = 0
# Для роутера/шлюза: net.ipv4.ip_forward = 1

# SYN cookies — защита от SYN flood
net.ipv4.tcp_syncookies = 1

# Игнорировать broadcast ICMP (Smurf attack)
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Защита от ICMP bogus error responses
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Логирование martian packets (пакеты с невозможными адресами)
net.ipv4.conf.all.log_martians = 1

# TCP параметры (производительность + безопасность)
net.ipv4.tcp_rfc1337 = 1       # Защита от TIME_WAIT атак
net.ipv4.tcp_timestamps = 0    # Убираем временные метки (утечка uptime)

# IPv6 аналоги
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_source_route = 0

Параметры /proc и файловой системы

Защита информации о системе:

# Запрет жёстких ссылок на файлы других пользователей
fs.protected_hardlinks = 1

# Запрет симлинков на файлы других пользователей в sticky-каталогах
fs.protected_symlinks = 1

# Ограничение доступа к /proc
# Требует ядро 5.8+
# kernel.unprivileged_userns_clone = 0  # для Ubuntu может сломать snap

# Лимит количества открытых файлов (защита от fork bomb)
fs.file-max = 2097152

# Ограничение на pipe capacity
fs.pipe-max-size = 1048576

Параметр kernel.yama.ptrace_scope = 1 — один из самых важных для production. Он ломает некоторые отладочные инструменты типа gdb, но надёжно защищает от атак типа «залезть в память другого процесса».

Готовый файл конфигурации

Собираем всё в один файл для деплоя через Ansible или вручную:

Полный hardening.conf

Файл /etc/sysctl.d/99-hardening.conf для production-серверов:

# Kernel hardening — АйТи Фреш
# Версия: 2026-03

# === ПАМЯТЬ ===
kernel.randomize_va_space = 2
vm.mmap_min_addr = 65536
kernel.yama.ptrace_scope = 1
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1

# === СЕТЬ: IPv4 ===
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.ip_forward = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.all.log_martians = 1
net.ipv4.tcp_rfc1337 = 1
net.ipv4.tcp_timestamps = 0

# === СЕТЬ: IPv6 ===
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.default.accept_redirects = 0

# === ФАЙЛОВАЯ СИСТЕМА ===
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
fs.suid_dumpable = 0

# Применить
# sysctl -p /etc/sysctl.d/99-hardening.conf

После применения проверяем через lynis: lynis audit system --quick. Большинство hardening-проверок должны быть зелёными.

Часто задаваемые вопросы

Часто задаваемые вопросы

ASLR (Address Space Layout Randomization) — рандомизация адресного пространства. Затрудняет эксплуатацию уязвимостей buffer overflow. kernel.randomize_va_space=2 — максимальная рандомизация, стандарт для production-серверов.

Большинство параметров безопасности не влияют на производительность. Исключения: tcp_syncookies при высокой нагрузке SYN, vm.swappiness при ограниченной памяти. Сетевые параметры (rp_filter, accept_redirects) работают без заметного overhead.

sysctl -a показывает все параметры. sysctl kernel.randomize_va_space — конкретный параметр. Для сравнения с hardened baseline используйте lynis или oscap с профилем CIS.

При значении 1 — только root может читать dmesg. dmesg содержит адреса памяти ядра, которые помогают при разработке эксплойта. В Ubuntu 22.04 уже стоит 1 по умолчанию.

Да, sysctl -w параметр=значение применяет немедленно. sysctl -p /etc/sysctl.d/hardening.conf перечитывает файл. Перезагрузка не нужна.

#linux kernel hardening #sysctl безопасность #ASLR linux

Столкнулись с похожей задачей? Обращайтесь — решим

Если у вас происходит что-то из описанного в этой статье — или любая другая проблема с ИТ-инфраструктурой, — обращайтесь в любое время. Мои специалисты и я лично разберём ситуацию, найдём настоящую причину и доведём до решения.

Возьмёмся и за разовую задачу, и за постоянное обслуживание. Первичная консультация — бесплатно и без обязательств.

📞 +7 903 729-62-41 💬 MAX: +7 903 729-62-41 ✈️ Telegram @ITfresh_Boss

С уважением, Семёнов Евгений Сергеевич, директор «АйТи Фреш» — IT-аутсорсинг для компаний до 50 рабочих мест, 15+ лет практики

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

Каждую неделю мы выпускаем практические гайды для руководителей IT и системных администраторов. Это не просто теория! Здесь вы найдёте всё: безопасность, 1С, миграции, резервные копии и проверенные лайфхаки из наших реальных проектов.

Письмо придёт в течение минутыНе нашли его во «Входящих» — загляните в папку «Спам» или «Промоакции» и нажмите «Не спам». Так все следующие выпуски будут приходить прямо в основную почту.
Реквизиты оператора персональных данных

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