Debian服务器的安全始于最小化攻击面,核心在于禁用所有非必要服务和优化关键内核参数。这意味着你需要立即动手,逐一审查系统上运行的服务,关闭任何与核心业务无关的进程,同时通过sysctl调整内核的默认行为,堵住网络、内存和进程层面的潜在漏洞。这不是一个可选项,而是生产环境部署前的强制步骤。

一、服务管理:识别与禁用非必要守护进程

Debian默认安装可能包含你并不需要的服务,如exim4邮件服务器、蓝牙服务、cups打印服务等。这些服务会开放网络端口,消耗资源,并成为攻击者首要的入侵目标。

首先,使用systemctl或service命令全面审查运行状态:

systemctl list-units --type=service --state=running
# 或
service --status-all | grep +

对于每一个正在运行的服务,你必须明确其用途。例如,如果你的服务器不处理邮件,立即禁用并卸载exim4:

systemctl stop exim4
systemctl disable exim4
apt purge exim4*

同理,处理其他常见非必要服务:

# 禁用打印服务
systemctl disable cups cups-browsed
# 禁用蓝牙
systemctl disable bluetooth
# 禁用自动更新服务(若采用手动更新策略)
systemctl disable apt-daily-upgrade.timer apt-daily.timer

一个关键工具是netstatss,用于查看开放端口对应的服务:

ss -tulpn
# 或
netstat -tulpn

对于任何监听在非预期端口(尤其是0.0.0.0)的服务,必须追查其来源并决定是否禁用。

二、深入服务审查:使用systemd-analyzse和chkconfig

对于systemd系统,systemd-analyze能帮助你分析启动链:

systemd-analyze blame  # 查看各服务启动耗时,耗时长的非核心服务值得怀疑
systemd-analyze critical-chain  # 查看关键启动链

对于SysVinit系统(旧版本),可使用chkconfig或直接操作/etc/rc*.d/目录。最佳实践是:在决定禁用服务前,使用man [服务名]或查阅Debian官方文档了解其功能。不确定时,将其设置为禁用(disable)而非卸载,观察系统运行是否受影响。

三、内核参数调优:网络层加固

内核参数通过/etc/sysctl.conf/etc/sysctl.d/目录下的文件进行持久化配置。立即应用以下网络安全优化,能有效防御IP欺骗、SYN洪水攻击并控制网络行为。

创建或编辑自定义配置文件:

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

添加以下内容:

# 禁用IP源路由和ICMP重定向(防止IP欺骗)
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
net.ipv4.conf.default.secure_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0

# 启用反向路径过滤(验证数据包来源)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# 禁用ICMP广播请求,防止Smurf攻击
net.ipv4.icmp_echo_ignore_broadcasts = 1

# 记录可疑数据包(如不可能地址、源路由包)
net.ipv4.conf.all.log_martians = 1

# 保护TCP SYN-Cookie,防范SYN洪水
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2

# 限制本地端口范围
net.ipv4.ip_local_port_range = 32768 65535

保存后,执行sysctl -p /etc/sysctl.d/99-security-hardening.conf立即生效。

四、内核参数调优:内存与进程防护

内存和进程层面的配置能防止资源耗尽型攻击(如fork炸弹)并增强审计能力。

在同一个或新的sysctl配置文件中继续添加:

# 控制核心转储(防止敏感信息泄露,生产环境通常禁用)
fs.suid_dumpable = 0

# 启用ExecShield和ASLR(地址空间布局随机化)增强
kernel.randomize_va_space = 2

# 防止用户通过setuid程序创建核心转储
fs.protected_hardlinks = 1
fs.protected_symlinks = 1

# 限制内核消息读取权限(dmesg)
kernel.dmesg_restrict = 1

# 启用内核模块签名验证(确保仅加载可信模块)
kernel.modules_disabled = 0  # 保持为0,但结合AppArmor/SELinux使用

对于进程限制,还需编辑/etc/security/limits.conf文件,防止单个用户发起fork炸弹:

* hard nproc 500
* soft nproc 200
root hard nproc unlimited

五、文件系统与权限加固:不可或缺的补充

仅调整内核和服务不够,文件系统权限是最后一道防线。关键操作包括:

1. 挂载选项优化:在/etc/fstab中,为关键分区(如/tmp, /dev/shm)添加nosuid, noexec, nodev选项。例如:

tmpfs /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0

2. 控制SUID/SGID文件:定期搜索并审查不必要的setuid/setgid文件:

find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \;

对于非必要的(如旧版vim.basic的SUID位),使用chmod u-s移除。

3. 配置umask默认值:在/etc/profile/etc/bash.bashrc中设置更严格的默认umask,如umask 027

六、自动化审计与持续监控

安全加固不是一次性任务。你需要建立自动化审计流程:

1. 使用工具如lynis进行自动化安全扫描:

apt install lynis
lynis audit system

2. 配置日志集中管理(如rsyslog转发),并定期审查/var/log/auth.logsecure等关键日志。

3. 利用AIDE(高级入侵检测环境)建立文件完整性数据库,监测关键文件是否被篡改:

apt install aide
aideinit
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# 定期运行 aide --check 进行比对

总结:构建纵深防御体系

Debian安全加固的本质是遵循“最小权限原则”。本文提供的清单——从禁用非必要服务、调优网络与内核参数,到文件系统加固和自动化审计——构成了服务器基础安全的多层防线。请记住,没有“设置即忘”的安全。每次系统更新、新服务部署后,都应重新审视此清单。将上述步骤脚本化,并纳入你的服务器初始化流程,是确保环境一致性和安全性的最佳实践。真正的安全来自于对细节的持续关注和对系统行为的深刻理解。