Debian服务器的安全防护不能停留在安装个fail2ban就完事的层面。真正有效的防入侵策略,核心在于缩小攻击面、控制权限蔓延、以及让入侵行为在早期就被发现和阻断。下面直接讲具体怎么做。
先关闭一切不必要的网络服务
很多人装完Debian后,默认的SSH、Avahi、CUPS打印服务、Exim4邮件服务都在运行。攻击者扫描端口时,每一个开放的服务都是一个潜在的入口。先执行ss -tulnp查看当前监听的端口,把不需要的服务全部停掉并禁止开机自启。比如Avahi是局域网服务发现协议,服务器上完全用不到,直接apt purge avahi-daemon。Exim4如果服务器不发邮件,也一并移除。每少一个监听端口,就少一条被攻击的路径。
SSH登录策略要动真格
SSH是服务器管理的命脉,也是暴力破解的首要目标。密码登录是最薄弱的环节,必须改用密钥认证。编辑/etc/ssh/sshd_config,做以下设置:
PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes MaxAuthTries 3 ClientAliveInterval 300 ClientAliveCountMax 2
PermitRootLogin no直接禁止root远程登录,所有管理员先以普通用户登录再sudo提权。PasswordAuthentication no彻底关闭密码认证,只允许密钥登录。MaxAuthTries 3限制单次连接最多尝试3次认证,超过即断开。ClientAliveInterval和ClientAliveCountMax用来踢掉空闲连接,防止有人占着连接不干活。改完执行systemctl restart sshd生效。
如果必须保留密码登录的例外场景,可以结合AllowUsers或AllowGroups限制只有特定用户能从特定IP登录。但原则上,能不用密码就不用密码。
防火墙策略要默认拒绝
Debian自带的nftables比iptables更现代,配置也更清晰。核心思路是默认拒绝所有入站流量,只放行明确需要的端口。下面是一个基础配置示例:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
# 允许回环接口
iif lo accept
# 允许已建立和相关的连接
ct state established,related accept
# 允许ICMP ping
ip protocol icmp icmp type echo-request accept
ip6 nexthdr icmpv6 icmpv6 type echo-request accept
# 开放SSH端口(建议改成非标准端口)
tcp dport 22 accept
# 开放Web端口
tcp dport 80 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,然后启用nftables服务。policy drop意味着所有没被明确允许的入站流量全部丢弃,这是最关键的一步。如果服务器只跑Web服务,那就只开80和443,其他端口一律不通。SSH端口建议改成2222之类的高位端口,能过滤掉大量自动化扫描的噪音。
自动更新安全补丁不能偷懒
Debian的unattended-upgrades包可以自动安装安全更新。很多入侵事件利用的都是早已有补丁的已知漏洞,就是因为管理员没及时更新。安装并启用:
apt install unattended-upgrades apt-listchanges dpkg-reconfigure -plow unattended-upgrades
然后编辑/etc/apt/apt.conf.d/50unattended-upgrades,确保至少包含安全更新源:
Unattended-Upgrade::Origins-Pattern {
"origin=Debian,codename=${distro_codename},label=Debian-Security";
};
这样系统会自动下载并安装安全更新,减少暴露在已知漏洞下的时间窗口。内核更新需要重启才能生效,可以配合needrestart包自动检测并提示需要重启的服务。
用AppArmor限制服务权限
Debian默认启用了AppArmor,但很多人没有为关键服务配置策略。AppArmor能让一个服务即使被攻破,攻击者也只能在受限的文件系统路径和权限范围内活动。查看当前状态用aa-status。对于Web服务器、数据库这类直接暴露的服务,应该配置对应的AppArmor配置文件。比如Nginx和MySQL都有现成的配置文件模板,放在/etc/apparmor.d/目录下,用aa-enforce强制执行:
aa-enforce /etc/apparmor.d/usr.sbin.nginx aa-enforce /etc/apparmor.d/usr.sbin.mysqld
这样即使Nginx被远程代码执行,攻击者也无法读取/etc/shadow或写入其他系统目录,因为AppArmor会拦截这些越权操作。
审计与入侵检测要主动
被动防御总有疏漏,主动监控才能及时发现异常。auditd可以记录关键文件的访问和修改。安装后配置规则监控敏感路径:
apt install auditd auditctl -w /etc/passwd -p wa -k identity_changes auditctl -w /etc/shadow -p wa -k identity_changes auditctl -w /etc/ssh/sshd_config -p wa -k ssh_config_changes auditctl -w /var/www -p wa -k web_changes
这些规则会记录谁在什么时间修改了这些文件。配合ausearch命令可以回溯分析。对于文件完整性监控,AIDE比auditd更适合做基线对比。安装aide后先初始化数据库,然后定期运行aide --check,任何文件被篡改都会被发现。
日志集中管理也很重要。把/var/log/auth.log、/var/log/syslog这些关键日志实时发送到远程日志服务器,防止攻击者入侵后清除本地日志。rsyslog配置一个远程转发规则即可,这样即使服务器被完全控制,攻击行为在日志服务器上仍然留有记录。
限制用户权限和提权路径
sudo权限的分配要遵循最小权限原则。不要给普通用户无限制的sudo ALL权限。在/etc/sudoers.d/目录下为每个管理员创建单独的配置文件,只授予必要的命令。比如只允许某个用户重启nginx:
username ALL=(root) /usr/sbin/nginx -s reload, /usr/bin/systemctl restart nginx
同时设置sudo的日志记录,在/etc/sudoers中加入:
Defaults logfile="/var/log/sudo.log" Defaults log_input, log_output
这样每次sudo操作都会被完整记录,包括输入的命令和输出结果,便于事后审计。
对于系统中已有的服务账户,比如www-data、mysql,要确保它们的shell设置为/usr/sbin/nologin或/bin/false,防止攻击者利用这些账户获得交互式shell。用chsh或直接编辑/etc/passwd修改。
内核参数加固
通过sysctl调整内核网络参数,可以防御部分网络层攻击。编辑/etc/sysctl.d/99-security.conf:
# 防止SYN洪水攻击 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_syn_retries = 3 net.ipv4.tcp_synack_retries = 3 # 忽略ICMP重定向 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 # 启用反向路径过滤 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # 记录可疑包 net.ipv4.conf.all.log_martians = 1 # 禁用IP转发(如果不是路由器) net.ipv4.ip_forward = 0
执行sysctl -p /etc/sysctl.d/99-security.conf立即生效。这些设置能抵御常见的网络欺骗和洪水攻击。
定期备份与恢复演练
安全策略的最后一道防线是备份。即使所有防御都被突破,只要有可靠的备份,就能快速恢复。备份要遵循3-2-1原则:至少3份副本,存储在2种不同介质上,其中1份在异地。对于Debian服务器,用rsync或borgbackup定期备份关键目录和数据库。更重要的是定期做恢复演练,验证备份真的能恢复。很多人在真正需要恢复时才发现备份文件损坏或恢复流程不熟悉,这是致命的。
防入侵不是一次性的配置,而是一个持续的过程。定期检查日志、审计用户行为、更新安全策略,才能让服务器在面对不断演变的攻击手段时保持足够的防御能力。上述策略组合起来,能显著提高Debian服务器的安全基线,让绝大多数自动化攻击和机会主义入侵者无功而返。
