Linux 内核参数安全加固建议

Linux 内核是整个系统的核心,它负责管理硬件资源、进程调度、网络协议栈以及文件系统等关键功能。默认情况下,许多内核参数的配置更侧重于兼容性和性能,而非安全性。对于暴露在公网环境中的服务器,尤其是运行 Web 服务的系统,对内核参数进行安全加固是抵御网络攻击、防止信息泄露和限制攻击面的一道重要防线。本文将从网络、内存、文件系统及进程管理几个维度,提供一份可落地的 Linux 内核参数安全加固建议。

一、网络层加固:抵御 SYN Flood 与 IP 欺骗

网络协议栈是攻击者最常触碰的入口。通过调整 sysctl 参数,可以有效缓解拒绝服务攻击并增强流量过滤能力。

1. 开启 SYN Cookies 防护

当服务器遭遇 SYN Flood 攻击时,半连接队列会被迅速填满,导致正常用户无法建立连接。开启 SYN Cookies 可以让内核在队列溢出时使用加密方式回应 SYN-ACK,从而不占用大量资源。

net.ipv4.tcp_syncookies = 1

2. 减少 SYN-ACK 重试次数

降低重试次数可以加快半连接资源的释放速度,减轻潜在攻击带来的资源消耗。

net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

3. 禁用 IP 源路由与 ICMP 重定向

攻击者可能利用源路由选项伪造数据包路径,或通过 ICMP 重定向篡改路由表。除非有特殊网络需求,否则应禁用这些功能。

net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0

4. 启用反向路径过滤

反向路径过滤可以丢弃那些源地址在路由表中不可达的数据包,有助于防御 IP 欺骗。

net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

5. 记录并丢弃异常数据包

开启伪造数据包、源路由数据包和重定向数据包的日志记录,便于审计和追踪。

net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1

6. 忽略 ICMP 广播请求

防止服务器响应 ICMP 广播,避免被利用作为放大攻击的反射源。

net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

二、内存与进程管理:限制资源滥用

攻击者可能通过 fork 炸弹或大量进程耗尽系统资源。合理限制进程数量和内存行为可以提升系统稳定性。

1. 限制最大进程数

通过 kernel.pid_max 可以调整系统最大 PID 数,但更关键的是使用 ulimit 或 cgroup 限制用户进程数。内核层面可关注以下参数:

kernel.threads-max = 10000

该值应根据实际业务需求设定,避免默认的极大值导致 fork 炸弹轻易耗尽资源。

2. 禁用核心转储中的敏感信息

核心转储文件可能包含密码、密钥等敏感数据。通过设置 fs.suid_dumpable 为 0,可以防止 setuid 程序产生核心转储。

fs.suid_dumpable = 0

同时,可以通过 kernel.core_pattern 将核心转储导向安全路径或直接丢弃。

3. 启用地址空间布局随机化(ASLR)

ASLR 是防御内存破坏类漏洞利用的重要机制。确保其处于开启状态:

kernel.randomize_va_space = 2

2 表示对栈、堆和共享库均进行随机化,安全性最高。

三、文件系统与内核信息保护

限制对内核信息和文件系统的访问,可以减少攻击者获取系统情报的途径。

1. 限制 dmesg 访问权限

内核日志可能包含地址布局、硬件信息等敏感内容。通过 kernel.dmesg_restrict 限制非特权用户读取:

kernel.dmesg_restrict = 1

2. 限制 kptr_restrict

防止内核指针地址通过 /proc 等接口泄露,增加漏洞利用难度:

kernel.kptr_restrict = 2

2 表示无论特权如何,内核指针均以 0 显示。

3. 禁用 SysRq 魔术键

SysRq 允许通过键盘组合直接执行内核操作,在服务器上应禁用或严格限制:

kernel.sysrq = 0

4. 保护链接与符号链接

防止普通用户创建硬链接到不属于自己的文件,或跟随不受信任的符号链接:

fs.protected_hardlinks = 1
fs.protected_symlinks = 1

5. 限制对内核性能事件的访问

perf_event_paranoid 控制非特权用户对性能监控事件的访问,建议设置为较高值:

kernel.perf_event_paranoid = 3

四、持久化与生效方式

上述参数可以通过 sysctl 命令临时生效,但为了重启后依然有效,应写入配置文件。

1. 创建独立配置文件

/etc/sysctl.d/ 目录下创建 99-security-hardening.conf,将加固参数集中管理:

sudo vim /etc/sysctl.d/99-security-hardening.conf

将前述参数逐行写入,保存退出。

2. 应用配置

执行以下命令使配置立即生效:

sudo sysctl --system

3. 验证关键参数

使用 sysctl -a 或针对特定参数查询,确认加固项已正确加载:

sysctl net.ipv4.tcp_syncookies
sysctl kernel.randomize_va_space

五、注意事项与平衡

内核参数加固并非越严格越好,需要结合业务场景权衡。

  • 兼容性:禁用 ICMP 重定向或源路由可能影响某些特殊网络环境,如多宿主主机或特定负载均衡架构。
  • 性能kernel.threads-max 设置过低可能导致高并发服务无法创建足够线程。
  • 容器环境:在 Docker 或 Kubernetes 中,部分内核参数是命名空间隔离的,需在宿主机或 Pod 安全策略中分别配置。
  • 测试验证:任何加固变更都应在测试环境验证后再上生产,避免服务中断。

结语

Linux 内核参数安全加固是系统安全基线的重要组成部分。通过合理配置网络协议栈、内存保护、文件系统权限和信息泄露防护,可以显著提升服务器抵御常见攻击的能力。然而,安全是一个持续的过程,内核参数加固应与防火墙策略、最小权限原则、及时更新补丁以及入侵检测系统相结合,形成纵深防御体系。建议运维人员定期审查 sysctl 配置,并根据业务变化和威胁情报动态调整,确保系统在安全与可用之间保持最佳平衡。

未经允许不得转载:任鹏个人博客 » Linux 内核参数安全加固建议

赞 (0) 打赏

评论 0

取消
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏