11 -内核参数与模块管理(sysctl、modprobe) 🔧
前提条件 ✅
- 已完成第一阶段所有内容 + SSH 安全加固 + fail2ban + 服务管理基础
- 以 ops 用户登录(具有 sudo 权限)
- 系统运行在 Debian 12 Bookworm
- 虚拟机环境:VMware Workstation Pro(建议 4GB+ 内存以观察参数效果)
详细步骤 🛠️
- sysctl 简介与查看当前内核参数
sysctl 用于运行时修改内核参数(无需重启),生产环境用于优化性能、安全、防止 DoS 等。
常用查看命令:
sysctl -a | grep vm.swappiness # 查看单个参数
sysctl -a | grep net.ipv4 # 查看所有 IPv4 相关
sysctl -a # 查看全部(输出很多)
-
临时修改内核参数(立即生效,重启丢失)
示例:降低 swap 使用倾向(适合内存充足服务器)sudo sysctl vm.swappiness=10 # 验证 sysctl vm.swappiness -
永久修改内核参数(推荐方式)
创建或编辑自定义配置文件(/etc/sysctl.d/ 目录下):sudo nano /etc/sysctl.d/99-production.conf
推荐生产安全/性能参数集合(可按需选择启用):
# 基本安全加固
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.ip_forward = 0 # 关闭 IP 转发(非路由器)
# 防 SYN Flood 和 DoS
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 3
# 内存管理优化
vm.swappiness = 10
vm.overcommit_memory = 1 # 允许轻微 overcommit
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
# 文件描述符与端口范围
fs.file-max = 1000000
net.ipv4.ip_local_port_range = 1024 65535
# ASLR(地址空间布局随机化)增强
kernel.randomize_va_space = 2
# 日志与 panic 处理
kernel.printk = 4 4 1 7
kernel.panic = 10 # panic 后 10 秒自动重启
应用所有配置:
sudo sysctl --system
# 或只加载当前文件
sudo sysctl -p /etc/sysctl.d/99-production.conf
- 内核模块管理(modprobe)
查看已加载模块:lsmod | grep ipv6 lsmod | head
临时禁用模块(示例:禁用 IPv6 如果不需要):
sudo modprobe -r ipv6
永久禁用模块(推荐方式):
sudo nano /etc/modprobe.d/blacklist-ipv6.conf
内容:
blacklist ipv6
install ipv6 /bin/true
或者针对特定硬件模块(如禁用不必要的 USB 模块):
echo "blacklist usb-storage" | sudo tee /etc/modprobe.d/blacklist-usb-storage.conf
更新 initramfs 并重启验证:
sudo update-initramfs -u
sudo reboot
lsmod | grep ipv6 # 应无输出
- 验证与监控
sysctl -a | grep -E "swappiness|syncookies|accept_redirects" cat /proc/sys/net/ipv4/tcp_syncookies
实践任务 🎯
- 创建 /etc/sysctl.d/99-production.conf 文件,添加 vm.swappiness=10 和 tcp_syncookies=1,应用并验证
- 检查当前所有 IPv4 转发相关参数,确保 ip_forward=0
- 永久禁用 ipv6 模块(如果你的环境不需要 IPv6),重启后用 lsmod 确认
- 用 sysctl -a | grep syn 查看 SYN flood 防护参数是否生效
自测问题 ❓
sysctl --system命令会加载哪些位置的配置文件?- 为什么生产环境通常把 vm.swappiness 设置为 10 或更低?
- 禁用 ipv6 模块的两种常见方法是什么?哪种更彻底?
- tcp_syncookies=1 的作用是什么?在什么攻击场景下最有效?
总结 📌
通过 sysctl 和 modprobe 对内核进行安全与性能调优是服务器硬化重要一环。
本章配置的 99-production.conf 可作为生产模板,后续章节的防火墙、容器等会进一步依赖这些参数(如 net.ipv4.ip_forward)。