首页 / 帮助文档 / debian服务器安全防护体系搭建指南

debian服务器安全防护体系搭建指南

Debian服务器上线后默认配置远谈不上安全,很多漏洞并非来自系统本身,而是管理员没有及时收紧配置。要搭建一套真正有效的安全防护体系,不能只靠安装某个工具,而是要从攻击面收敛、访问控制、入侵检测、自动更新、日志审计这几个维度同时下手。下面直接讲具体做法。

先做最小化安装与攻击面收敛

装系统时不要勾选任何图形桌面、打印服务、文件共享等用不到的组件。服务器只需要SSH和基础系统工具。安装完成后第一件事是列出所有监听端口,执行

ss -tulnp
查看哪些服务在对外监听。除了22端口的SSH,其他一律停用或卸载。如果发现Exim4、Avahi、RPCBind这类默认服务,直接执行
apt purge exim4 avahi-daemon rpcbind
移除。攻击面越小,被利用的概率越低。

内核参数也需要同步收紧。编辑

/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.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
kernel.randomize_va_space = 2
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1

执行

sysctl --system
让配置立即生效。这些参数可以防御IP欺骗、SYN洪水、重定向劫持和部分内核信息泄露。

SSH访问控制是第一道门

SSH是远程管理的唯一入口,必须重点加固。不要直接改22端口,端口混淆对自动化扫描有一定作用,但真正有效的是密钥认证和来源限制。编辑

/etc/ssh/sshd_config
,修改或确认以下参数:

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

这里假设你创建了一个名为deploy的普通用户用于日常管理。root禁止密码登录,只允许密钥。PasswordAuthentication设为no意味着所有密码登录都被拒绝,这是最有效的防爆破手段。改完后执行

systemctl reload ssh
重载配置。注意在断开当前会话前,先测试新开一个终端能否用密钥正常登录,否则可能把自己锁在门外。

如果服务器有固定办公出口IP,可以在防火墙层面直接限制SSH来源。使用nftables实现:

nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
nft add rule inet filter input ct state established,related accept
nft add rule inet filter input iif lo accept
nft add rule inet filter input ip saddr 203.0.113.0/24 tcp dport 22 accept
nft add rule inet filter input ip6 saddr 2001:db8::/32 tcp dport 22 accept
nft add rule inet filter input tcp dport 22 limit rate 5/minute burst 3 accept

最后一条规则对非白名单来源的SSH连接做了速率限制,即使不限制来源IP,也能大幅降低爆破效率。将规则保存到

/etc/nftables.conf
并设置开机加载。

系统与软件更新必须自动化

Debian的稳定版仓库更新频率不高,但安全更新必须及时安装。安装unattended-upgrades:

apt install unattended-upgrades apt-listchanges
dpkg-reconfigure -plow unattended-upgrades

编辑

/etc/apt/apt.conf.d/50unattended-upgrades
,至少确保以下内容生效:

Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
    "${distro_id}ESMApps:${distro_codename}-apps-security";
    "${distro_id}ESM:${distro_codename}-infra-security";
};
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";

这样每天系统会自动检查安全源并安装补丁,内核更新后会在凌晨4点自动重启。对于生产服务器,自动重启有风险,可以设置Automatic-Reboot为false,改为手动计划重启,但至少保证补丁已安装。

部署入侵检测与文件完整性监控

只靠防火墙挡不住所有攻击,需要部署主机型入侵检测。AIDE用于监控关键系统文件的哈希变化,是Debian上最直接的文件完整性工具。安装并初始化:

apt install aide
aideinit
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

之后每天执行一次检查,可以用cron定时任务:

0 3 * * * /usr/bin/aide.wrapper --check | mail -s "AIDE Report $(hostname)" root

任何二进制文件、配置文件的非预期修改都会触发告警。注意系统更新后需要更新AIDE数据库,否则会产生大量误报。

对于实时行为检测,可以部署auditd监控敏感路径和系统调用。安装后添加规则到

/etc/audit/rules.d/hardening.rules
:

-w /etc/passwd -p wa -k identity_changes
-w /etc/shadow -p wa -k identity_changes
-w /etc/sudoers -p wa -k sudo_changes
-w /etc/ssh/sshd_config -p wa -k sshd_changes
-w /var/log/auth.log -p wa -k auth_log_changes
-w /usr/bin/passwd -p x -k passwd_exec
-w /usr/bin/su -p x -k su_exec
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_exec

执行

systemctl restart auditd
生效。最后一条规则记录所有以root身份执行的命令,配合
ausearch -k root_exec
可以回溯攻击者的操作轨迹。

防火墙策略与出站控制

很多人只关注入站规则,忽略出站控制。服务器被入侵后,攻击者通常需要外联下载工具或回传数据。默认出站策略应该设为拒绝,只放行必要的出站流量。继续使用nftables,在output链上设置:

nft add chain inet filter output { type filter hook output priority 0 \; policy drop \; }
nft add rule inet filter output ct state established,related accept
nft add rule inet filter output oif lo accept
nft add rule inet filter output tcp dport { 53, 80, 443, 123 } accept
nft add rule inet filter output udp dport { 53, 123 } accept

如果服务器需要访问Debian安全源,确保放行对应IP或域名解析后的端口。出站白名单能显著增加攻击者的横向移动难度,同时降低服务器被用作僵尸网络节点的风险。

日志集中与异常告警

日志是事后追溯的唯一依据,但本地日志容易被攻击者清除。建议将关键日志同步到独立的日志服务器或至少写入只追加的存储。使用rsyslog的远程转发功能,在

/etc/rsyslog.d/remote.conf
中配置:

*.* @192.168.10.50:514

同时保留本地日志,并设置日志轮转和权限。Debian默认的logrotate已经够用,但需要确认

/var/log/auth.log
和
/var/log/syslog
的权限为640,防止普通用户读取敏感信息。

对于实时告警,可以部署轻量级的日志分析工具,比如使用fail2ban配合SSH和Web服务的日志,自动封禁暴力破解来源。安装配置:

apt install fail2ban

创建

/etc/fail2ban/jail.local
:

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
destemail = admin@example.com
action = %(action_mwl)s

[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log

执行

systemctl enable --now fail2ban
启动。fail2ban会在检测到多次失败尝试后自动将来源IP加入nftables黑名单,有效期1小时。对于分布式爆破,这个时间可以适当延长到24小时。

服务隔离与权限最小化

如果服务器上运行Web服务或数据库,不要用root直接启动。Debian的软件包通常会自动创建专用系统用户,但自定义部署的应用需要手动配置。以Nginx为例,确认配置中

user www-data;
且网站目录权限为755,文件属主为deploy,属组为www-data。PHP-FPM的池配置中,每个站点使用独立的用户和组,避免一个站点被攻破后读取其他站点的文件。

对于数据库,只监听本地回环地址。编辑

/etc/mysql/mariadb.conf.d/50-server.cnf
确认:

bind-address = 127.0.0.1

如果必须远程访问,使用SSH隧道转发,而不是直接开放3306端口。应用连接数据库时使用最小权限账号,只授予对应库的SELECT、INSERT、UPDATE、DELETE权限,禁止GRANT和DDL操作。

容器化部署时,避免使用privileged容器,通过capabilities按需添加权限。Docker的默认网桥模式会绕过部分主机防火墙规则,建议使用自定义网络并显式发布端口,同时在容器内部也做相应的安全配置。

定期审计与基线核查

安全防护不是一次性的配置,需要定期核查。Debian提供了几个有用的审计工具。lynis是一个系统安全审计工具,可以快速检查配置问题:

apt install lynis
lynis audit system

它会生成一份详细报告,指出需要修复的项目。结合

debsecan
可以查看当前系统缺失的安全补丁:

apt install debsecan
debsecan --format detail

每月至少执行一次完整审计,并对比历史报告,确认没有新增的异常配置。对于暴露在公网的服务器,建议每季度做一次渗透测试,重点验证SSH配置、Web应用输入过滤、文件上传限制和数据库访问控制。

安全体系的核心是持续收紧和监控。上述配置覆盖了Debian服务器从系统层到应用层的主要攻击面,但真正的防护效果取决于管理员是否持续关注日志和更新。把基础打好,后续的维护成本会低很多。