Debian服务器默认安装后并不是绝对安全的,很多基础防护措施没有被启用,防火墙策略、SSH访问控制、自动更新、内核参数加固这些环节都需要手动配置。极简配置的核心思路是:用最少的软件、最清晰的规则、最易维护的方式,把最常见的攻击面全部封堵,而不是堆砌一堆安全工具。

先处理SSH登录入口。默认情况下Debian允许root账户通过密码远程登录,这是暴力破解的首要目标。修改SSH配置,禁止root密码登录,改用密钥认证,同时限制登录用户和连接频率。编辑/etc/ssh/sshd_config,把PermitRootLogin设为prohibit-password,PasswordAuthentication设为no,再添加AllowUsers指定唯一的管理账户。改完后执行systemctl restart sshd使配置生效。如果只有一台固定IP的运维终端,还可以用Match Address指令进一步限制来源IP,这样即使密钥泄露,攻击者也无法从其他地址建立连接。

PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers deploy
MaxAuthTries 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2

防火墙策略用nftables就够了,Debian 11及之后的版本已经默认集成nftables框架,不需要额外安装iptables。极简策略只开放22、80、443端口,其余全部丢弃,同时限制SSH端口的新建连接速率。把规则写入/etc/nftables.conf,开机自动加载。入站默认drop,出站默认accept,允许已建立连接的回包,再对22端口做每分钟不超过5次新连接的限速。这样既保证了Web服务正常对外,又能有效拖慢扫描器和爆破工具的速度。

#!/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, 80, 443} ct state new accept
        tcp dport 22 ct state new limit rate 5/minute accept
        ip protocol icmp accept
    }
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

自动安全更新是Debian极简防护中性价比最高的一环。安装unattended-upgrades包,启用安全源自动升级,系统会在后台静默安装来自Debian安全团队的补丁,不需要人工干预。配置/etc/apt/apt.conf.d/50unattended-upgrades,只允许来自安全源的更新自动安装,其他源保持手动,避免业务依赖的软件包被意外升级导致不兼容。再配合20auto-upgrades文件开启每日更新检查。这样内核漏洞、OpenSSL漏洞、基础库漏洞都能在官方发布补丁后24小时内自动修复。

Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "false";

内核参数加固是很多人忽略的环节。通过sysctl调整网络层行为,可以阻断大量基于IP欺骗、ICMP重定向、源路由的攻击。在/etc/sysctl.d/99-hardening.conf中写入关键参数:关闭IP转发(除非做路由器或VPN网关)、忽略ICMP重定向、拒绝源路由包、开启SYN Cookie防护、记录可疑包、限制本地端口范围。这些参数对性能影响极小,但能显著提高攻击门槛。

net.ipv4.ip_forward = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.ip_local_port_range = 1024 65535

文件系统层面做最小权限控制。检查/etc/passwd中是否有除root外的UID为0账户,确保只有root一个超级用户。对/bin、/sbin、/usr/bin等关键目录,用chattr +i锁定关键配置文件如/etc/ssh/sshd_config和/etc/sysctl.conf,防止被篡改。不过加锁前必须确认配置已经稳定,否则后续修改会麻烦。另外把/tmp挂载为noexec和nosuid,防止攻击者上传脚本后在临时目录执行。

日志与审计不能省。安装auditd对关键文件做变更监控,比如/etc/passwd、/etc/shadow、/etc/ssh/sshd_config、/etc/sudoers。一旦这些文件被修改,auditd会记录详细的操作者、时间和命令。同时配置logrotate防止日志无限增长占满磁盘。极简方案下不需要上ELK之类的重型日志平台,本地audit日志加上系统journald已经足够定位绝大多数入侵行为。

-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /etc/sudoers -p wa -k sudoers

软件包层面坚持最小安装原则。部署时只选择SSH server和standard system utilities,不要安装桌面环境、打印服务、数据库等不需要的组件。定期用dpkg -l和apt list --installed审查已安装包,移除无用服务。每个运行的服务都是一个潜在攻击面,服务越少,被攻破的概率越低。对于必须运行的服务如Nginx或Apache,及时跟进其安全公告,优先使用Debian官方仓库版本而不是第三方源。

还有一个容易被忽视的点是DNS解析安全。在/etc/resolv.conf中使用可信的递归DNS服务器,并开启DNSSEC验证。如果服务器只作为客户端访问外部资源,用systemd-resolved统一管理DNS,开启DNSSEC=allow-downgrade,避免DNS劫持导致下载到被篡改的软件包或泄露查询记录。对于提供Web服务的机器,建议在应用层配置严格的Host头校验,防止DNS重绑定攻击。

权限管理方面,禁止普通用户使用su切换到root,统一通过sudo按需提权。在/etc/sudoers中只给特定用户授权特定命令,不要使用ALL=(ALL:ALL) ALL这种宽泛规则。同时设置visudo的默认编辑器为vi或nano,避免误操作。定期检查/etc/sudoers.d/目录下是否有异常文件,因为攻击者常在这里添加后门提权规则。

最后是备份与恢复策略。安全防护做得再好,也无法100%防止入侵或硬件故障。极简方案下用rsync配合cron定时任务,把关键配置文件和业务数据同步到另一台机器或离线存储。备份内容至少包括/etc目录、/var/lib/dpkg、/var/log、业务数据目录。恢复时先重装系统,再还原配置和数据,比在受损系统上排查修复更可靠。备份频率根据业务变化程度设定,每天一次或每周一次都可以,关键是备份要离线保存且定期验证可恢复性。

这套极简配置方案不需要安装任何商业安全产品,也不依赖复杂的自动化平台,全部基于Debian自带工具和内核能力。核心在于把SSH、防火墙、自动更新、内核参数、文件权限、审计日志这六个环节做扎实,就能抵御互联网上绝大多数自动化攻击和常见入侵手法。对于中小型业务或个人服务器,这种配置已经足够高效且易于长期维护。