Debian服务器要做到高稳定与高安全,核心不是装多少防护软件,而是先收紧系统默认暴露面,再建立最小权限与可审计的变更流程。很多人一拿到新装的Debian,第一件事是配置业务环境,却忽略了默认安装里可能已经启动了不必要的服务。先执行 ss -tulpn 查看所有监听端口,除了SSH和你明确需要的服务外,其余一律停用并禁止开机自启。对于不需要的systemd服务,用 systemctl disable --now 服务名 直接关闭。Debian最小化安装通常比默认安装更值得采用,因为后期添加服务比后期清理服务要安全得多。
SSH访问控制是运维的第一道闸门
远程管理几乎都依赖SSH,而SSH也是暴力破解的首要目标。不要使用默认22端口,虽然改端口不能阻止定向扫描,但能过滤掉巨量自动化攻击噪音。编辑 /etc/ssh/sshd_config,将 Port 22 改为一个高位端口,同时设置 PermitRootLogin no,禁止root直接登录。创建普通用户并加入sudo组,日常操作通过sudo提权。更关键的是启用密钥认证并关闭密码登录:
PubkeyAuthentication yes PasswordAuthentication no ChallengeResponseAuthentication no UsePAM yes
在修改前务必先把自己的公钥添加到 ~/.ssh/authorized_keys,并测试密钥登录成功,否则一旦断开连接可能无法再登录。对于必须保留密码登录的机器,至少安装fail2ban,配置SSH登录失败封禁策略。但长期来看,关闭密码登录是Debian服务器安全基线中最有效的一条。
自动更新与安全源必须分开策略
Debian的稳定版以可靠性著称,但稳定不代表没有安全漏洞。服务器应该配置 security.debian.org 安全更新源,并启用 unattended-upgrades 自动安装安全更新。注意只自动更新安全源,不要自动更新所有软件包,因为普通包更新可能引入配置变更或服务重启。安装并启用:
apt install unattended-upgrades apt-listchanges dpkg-reconfigure -plow unattended-upgrades
编辑 /etc/apt/apt.conf.d/50unattended-upgrades,确保只允许安全更新源自动升级。同时保留手动更新普通软件包的节奏,建议每月固定时间窗口执行 apt update && apt upgrade,并在升级前用 timeshift 或文件系统快照做好回滚准备。Debian的稳定版软件版本较旧,但安全补丁会及时回移,因此不要为了新版本去混用testing或第三方源,这会破坏稳定性。
防火墙策略从默认拒绝开始
Debian默认没有启用防火墙,但内核自带nftables。不要一上来就写一堆放行规则,而是先设置默认拒绝入站、允许出站,再逐条放行业务端口。nftables配置示例:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
iif lo accept
tcp dport 22 accept
tcp dport 443 accept
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
将上述规则保存到 /etc/nftables.conf,并用 systemctl enable --now nftables 启动。如果服务器有IPv6,inet表同时覆盖IPv4和IPv6,避免只防v4不防v6的情况。防火墙规则变更要走配置管理或至少记录在案,避免临时放行后忘记删除。
文件系统与权限加固
Debian安装时通常使用ext4,默认挂载选项已经比较合理,但 /tmp、/var/tmp、/dev/shm 这些可写目录经常被利用来放置恶意脚本。可以在 /etc/fstab 中对这些目录添加 noexec、nosuid 选项,防止执行其中的文件。例如:
tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev 0 0
同时检查系统中所有可写的目录和文件,尤其是 /var/www 下的Web目录。Web服务运行用户不应该对代码目录有写权限,只有部署用户可写,运行用户只读。定期使用 find / -perm -2 -type f 查找全局可写文件,排除 /proc、/sys 等虚拟文件系统。对于关键配置文件如 /etc/ssh/sshd_config、/etc/sudoers,使用 chattr +i 设置不可变属性,防止被篡改,需要修改时再 chattr -i。
日志审计与异常检测
很多服务器被入侵后长时间未被发现,原因是没有集中看日志。Debian默认的rsyslog已经记录大部分系统日志,但分散在 /var/log 下不方便分析。建议安装auditd监控关键文件访问和权限变更,同时配置logrotate防止日志占满磁盘。auditd可以记录对 /etc/passwd、/etc/shadow、/etc/sudoers 等文件的修改:
-w /etc/passwd -p wa -k identity_change -w /etc/shadow -p wa -k identity_change -w /etc/sudoers -p wa -k sudoers_change -w /etc/ssh/sshd_config -p wa -k sshd_config_change
将规则写入 /etc/audit/rules.d/audit.rules 后重启auditd。同时建议把关键日志通过远程syslog发送到独立日志服务器,这样即使服务器被攻破,攻击者也无法抹除已经传出的日志。对于Web服务,日志中频繁出现404或异常请求时,可以用简单的awk或goaccess分析,发现扫描行为后及时在防火墙层面封禁。
服务隔离与最小权限运行
Debian上运行数据库、Web服务、消息队列时,不要全部用root跑。每个服务都应该有独立系统用户,且家目录设为不可登录。例如MySQL默认会创建mysql用户,但有些第三方软件包可能直接用root运行。检查 systemctl status 各服务,确认User字段不是root。对于Web应用,PHP-FPM的进程池可以按站点隔离,每个站点使用不同用户运行,避免一个站点被入侵后读取其他站点文件。systemd单元文件中可以添加安全限制:
[Service] NoNewPrivileges=yes PrivateTmp=yes ProtectSystem=full ProtectHome=yes ReadWritePaths=/var/lib/应用目录
这些指令能阻止服务获取新权限、隔离临时目录、保护系统目录只读。对于容器化部署,Debian作为宿主机时,Docker容器默认以root运行,务必在Dockerfile或docker run中指定非root用户,并限制容器资源。
内核参数与网络层加固
Debian默认内核参数偏通用,服务器场景可以进一步收紧。编辑 /etc/sysctl.d/99-hardening.conf:
net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 kernel.randomize_va_space = 2 kernel.kptr_restrict = 2
这些参数开启反向路径过滤、TCP SYN cookie防护、禁止ICMP重定向,并加强内核地址空间随机化。执行 sysctl --system 生效。对于直接暴露在公网的服务器,还可以考虑限制ICMP响应速率,减少被用于DDoS反射的风险。但要注意不要过度调整TCP参数,Debian默认的TCP拥塞控制已经适合大多数场景,乱改可能降低网络性能。
备份与恢复验证才是最终防线
安全措施做得再多,也无法保证绝对不被入侵或不出故障。Debian服务器必须有一套可验证的备份机制。不要只备份数据文件,还要备份配置目录 /etc、用户列表、已安装软件包列表。用 dpkg --get-selections > packages.list 导出软件包清单,用 tar 打包 /etc 和 /var 关键目录。备份文件要离线保存,最好有异地副本。更重要的是定期做恢复演练,确认备份真的能还原。很多运维直到故障发生才发现备份文件损坏或备份脚本早已停止运行。自动化备份脚本中要加入校验步骤,例如用 sha256sum 生成校验值,并在备份完成后发送通知。
变更管理与最小化原则
Debian服务器长期稳定运行的关键是减少不必要变更。每次修改系统配置前,先备份原文件,记录变更原因和时间。使用 etckeeper 自动将 /etc 目录纳入版本控制,这样任何配置改动都能追踪和回滚。安装后执行 etckeeper init,之后每次apt操作都会自动提交变更。对于手动修改的配置文件,定期 git status 查看差异。服务器上不要安装与业务无关的软件包,不要用服务器做测试环境,不要随意运行网上复制来的脚本。很多安全事件源于运维人员图省事直接执行未经验证的安装脚本。所有部署操作应通过配置管理工具或至少通过脚本化执行,减少人为误操作。
Debian本身是一个以稳定著称的发行版,但稳定需要配合严格的运维纪律才能转化为真正的生产可靠性。安全不是一次性配置,而是持续监控、定期审计、及时响应和最小变更的综合结果。把上述措施落实到日常操作中,Debian服务器完全可以在极少重启、极少故障的情况下长期运行。
