Debian安全加固不是一个单一动作,而是从系统安装那一刻起就要贯穿始终的完整工程链。最小化安装砍掉不必要的软件包,减少攻击面;内核参数锁定封堵提权和网络利用路径;中间还要覆盖用户权限、SSH配置、防火墙规则、日志审计、文件完整性监控等多个层面。这篇文章直接给你一份可以照着执行的完整清单,从裸机部署到运行时防护,每一步都讲清楚怎么做、为什么这么做。
一、最小化安装:从源头砍掉攻击面
Debian安装时选择"netinstall"网络安装镜像,在软件选择界面只勾选"标准系统工具",不要选桌面环境、不要选打印服务器、不要选任何你用不到的东西。安装完成后,系统自带的软件包数量可以控制在200个以内,这比带桌面的默认安装少了上千个潜在漏洞入口。
安装完毕第一件事,执行以下命令清理不需要的包:
apt-get autoremove --purge apt-get clean apt-get autoclean
然后用deborphan找出孤儿依赖包:
apt-get install deborphan deborphan --guess-all | xargs apt-get -y remove --purge
这一步做完,你的系统就是一个真正的"最小可用"状态。攻击面从几千个包缩减到几十个核心组件,后续加固的工作量和出错概率都会大幅降低。
二、用户与权限管理:最小权限原则落地
默认安装的Debian会创建一个普通用户,但很多人直接用root登录或者给普通用户加sudo不设限制,这是最常见的安全隐患。正确做法:创建一个专门的运维用户,加入sudo组,然后修改sudoers配置要求输入密码:
useradd -m -s /bin/bash deploy usermod -aG sudo deploy visudo
在visudo中找到sudo组的配置行,改为:
%sudo ALL=(ALL:ALL) ALL
确保没有NOPASSWD选项。同时禁止root直接SSH登录:
sed -i 's/^#*PermitRootLogin.*/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
另外,锁定系统中不需要登录的账号:
usermod -L games usermod -L lp usermod -L mail passwd -l nobody
把/etc/passwd和/etc/shadow的权限设为644和600:
chmod 644 /etc/passwd chmod 600 /etc/shadow chmod 644 /etc/group chmod 644 /etc/gshadow
三、SSH服务硬化:远程入口的第一道锁
SSH是服务器最常被扫描和攻击的端口,必须严格加固。修改/etc/ssh/sshd_config,建议配置如下:
Port 2222 Protocol 2 PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes MaxAuthTries 3 MaxSessions 2 LoginGraceTime 30 ClientAliveInterval 300 ClientAliveCountMax 2 AllowUsers deploy X11Forwarding no PermitEmptyPasswords no Banner /etc/ssh/banner.txt
把端口从默认22改成2222或者其他非标准端口,不是为了"隐藏",而是为了过滤掉90%以上的自动化扫描脚本。禁用密码登录只用密钥认证,这一步能彻底杜绝暴力破解。同时设置Banner文件,内容写明"未经授权禁止访问",虽然不是技术防护,但在法律层面有威慑作用。
密钥生成建议用ed25519算法:
ssh-keygen -t ed25519 -C "deploy@server" -f ~/.ssh/id_ed25519
四、内核参数锁定:从底层封堵利用路径
这是整篇文章最核心的部分。Linux内核有上百个可调参数,很多默认配置是为了兼容性和调试方便,在生产环境中反而成了漏洞。通过sysctl.conf和sysctl.d目录进行参数锁定,是内核级加固的关键。
创建专门的内核参数配置文件:
cat > /etc/sysctl.d/99-security.conf << 'EOF' # 禁用IP转发 net.ipv4.ip_forward = 0 net.ipv6.conf.all.forwarding = 0 # 防止SYN洪水攻击 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 4096 # 禁用ICMP重定向 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 # 启用源地址验证 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # 禁用IPv6(如果不用的话) net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 # 限制dmesg访问 kernel.dmesg_restrict = 1 # ASLR强化 kernel.randomize_va_space = 2 # 限制core dump kernel.core_pattern = |/usr/sbin/apport -p %p -s %s -c %c -P %P fs.suid_dumpable = 0 # 限制内核指针暴露 kernel.kptr_restrict = 2 # 禁用kexec kernel.kexec_load_disabled = 1 # 网络缓冲区优化 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 EOF
执行sysctl -p --system使配置生效。这些参数的作用:ip_forward=0防止服务器被当作跳板机;syncookies防SYN Flood;rp_filter防IP欺骗;kptr_restrict=2让内核地址对普通用户不可见,直接封堵KASLR绕过类漏洞;kexec_load_disabled=1防止通过kexec加载恶意内核。
五、防火墙与网络层防护
Debian 12默认用nftables,但很多人还在用iptables,建议直接用nftables,语法更清晰。默认策略全部DROP,只开放必要端口:
cat > /etc/nftables.conf << 'EOF'
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
# 允许已建立的连接
ct state established,related accept
# 允许本地回环
iif lo accept
# 允许SSH(改成你的端口)
tcp dport 2222 accept
# 允许ICMP(可选)
ip protocol icmp accept
# 允许HTTP/HTTPS(如果有Web服务)
tcp dport { 80, 443 } accept
# 记录并丢弃其他
log prefix "nftables dropped: " drop
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
EOF
启用并启动:
systemctl enable nftables systemctl start nftables
六、文件完整性监控与日志审计
安装AIDE做文件完整性监控,它会记录所有关键文件的哈希值,一旦被篡改立刻报警:
apt-get install aide aideinit cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
设置定时任务每天检查:
cat > /etc/cron.daily/aide << 'EOF' #!/bin/bash /usr/bin/aide --check | mail -s "AIDE Report" root@localhost EOF chmod +x /etc/cron.daily/aide
日志方面,确保rsyslog在运行,并且把日志发到远程日志服务器或者至少本地保留足够长时间。修改/etc/rsyslog.conf中的轮转策略:
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat *.* /var/log/syslog auth,authpriv.* /var/log/auth.log kern.* /var/log/kern.log
配合logrotate设置日志保留90天以上,这对事后溯源至关重要。
七、自动更新与漏洞管理
Debian的安全更新仓库默认是启用的,但要确认/etc/apt/sources.list中有security.debian.org源。安装unattended-upgrades实现自动安全补丁:
apt-get install unattended-upgrades dpkg-reconfigure -plow unattended-upgrades
配置文件/etc/apt/apt.conf.d/20auto-upgrades中确保:
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1";
这样系统每天自动检查安全更新并安装,不需要人工干预。但注意,自动更新只针对安全补丁,大版本升级还是要手动评估。
八、进阶加固:AppArmor与SELinux考虑
Debian默认启用AppArmor,这是一个基于路径的强制访问控制系统。检查状态:
aa-status
确保所有已安装的服务都有对应的AppArmor profile在enforce模式。对于Web服务、数据库等高风险组件,AppArmor能有效限制它们的文件访问范围,即使被攻破也跑不出预定的沙箱。
如果你的安全需求极高,可以考虑迁移到SELinux,但Debian对SELinux的支持不如Red Hat系,迁移成本较大,一般生产环境AppArmor足够。
九、总结:加固是持续过程不是一次性操作
这份清单覆盖了从安装到运行的完整加固链路。但必须强调,安全加固不是做完就结束了。你需要定期用lynis做安全扫描:
apt-get install lynis lynis audit system
每次内核更新后重新审视sysctl参数,每次新装软件后重新评估攻击面。安全是一个动态对抗的过程,清单给你起点,持续运营才是终点。
