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 内核参数安全加固建议


朋友圈点赞图在线生成源码