首页 / 帮助文档 / debian安全加固清单从最小化安装到内核参数锁定

debian安全加固清单从最小化安装到内核参数锁定

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参数,每次新装软件后重新评估攻击面。安全是一个动态对抗的过程,清单给你起点,持续运营才是终点。