首页 / 资讯动态 / debian服务器防入侵安全防护核心策略

debian服务器防入侵安全防护核心策略

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服务器的安全基线,让绝大多数自动化攻击和机会主义入侵者无功而返。