Debian服务器上线后默认配置离生产环境的安全标准还有很大距离。很多运维人员装完系统直接部署业务,等于把一台未经加固的主机暴露在公网。本文从实际攻防角度出发,梳理Debian服务器在安全运维和性能优化上必须落地的配置项,每一条都能直接执行。

最小化安装与内核参数调优

安装Debian时不要勾选桌面环境和无关服务。系统安装完成后,先执行dpkg -l列出已安装包,移除不需要的软件。减少组件数量就是减少攻击面。内核参数方面,重点调整网络层和文件系统相关配置。编辑/etc/sysctl.conf,加入以下内容:

net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_tw_reuse = 1
fs.file-max = 65535
fs.inotify.max_user_watches = 524288
vm.swappiness = 10

执行sysctl -p使配置生效。syncookies开启后能缓解SYN Flood攻击,rp_filter开启反向路径过滤可防止IP欺骗。swapiness调低让系统优先使用物理内存,对数据库和缓存服务性能提升明显。

SSH安全加固是第一步

SSH是远程管理的命脉,也是暴力破解的首要目标。修改/etc/ssh/sshd_config,至少配置以下参数:

Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers deploy
Protocol 2
X11Forwarding no
AllowTcpForwarding no

端口改为非默认值能过滤大量自动化扫描。禁止root直接登录,创建普通用户deploy并加入sudo组。密码登录关闭后必须提前配置好密钥,否则会把自己锁在门外。MaxAuthTries限制尝试次数,LoginGraceTime缩短未认证连接存活时间。ClientAliveInterval和CountMax配合可以断开僵死连接,防止资源耗尽。重启sshd服务后,新配置立即生效。

防火墙策略:从默认拒绝开始

Debian默认使用nftables作为防火墙后端。不建议直接操作nft命令,用iptables-nft或firewalld管理更直观。如果业务简单,直接写nftables规则更清晰。创建/etc/nftables.conf:

#!/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
        ct state invalid drop
        ip protocol icmp accept
        ip6 nexthdr ipv6-icmp accept
        tcp dport 2222 accept
        tcp dport { 80, 443 } accept
    }
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

策略默认drop,只放行回环、已建立连接、ICMP和必要的服务端口。如果服务器运行数据库且只被本机应用访问,数据库端口不要对外开放,让应用通过本地socket或127.0.0.1连接。启用防火墙:systemctl enable nftables && systemctl start nftables。每次修改规则前先测试,避免把自己锁在外面。

自动更新与安全源配置

Debian的安全更新必须及时安装。配置/etc/apt/sources.list使用官方安全源:

deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware

安装unattended-upgrades实现自动安全更新:

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

编辑/etc/apt/apt.conf.d/50unattended-upgrades,确保只自动更新安全源,避免自动升级大版本导致业务中断。生产环境建议在测试机验证后再批量更新,但安全补丁可以设置每日自动安装。定期执行apt update && apt upgrade -y检查非安全更新。

用户权限与文件系统加固

检查/etc/passwd中所有可登录用户,移除或锁定不需要登录的账户。对关键目录设置严格权限:/tmp挂载时加noexec,nosuid,nodev选项,防止攻击者在临时目录执行恶意程序。编辑/etc/fstab:

tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev 0 0

对/var/tmp同样处理,但注意部分软件可能依赖/tmp执行脚本,部署前先测试。使用chattr +i锁定关键文件如/etc/ssh/sshd_config、/etc/sysctl.conf,防止被篡改。修改前需要先chattr -i解锁。启用进程记账acct可以记录系统命令执行历史,便于事后审计。

日志审计与入侵检测

默认rsyslog只记录基础日志,需要配置更详细的审计规则。安装auditd:

apt install auditd
systemctl enable auditd && systemctl start auditd

在/etc/audit/rules.d/audit.rules中添加对关键文件和系统调用的监控:

-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-w /etc/ssh/sshd_config -p wa -k sshd
-w /var/log/auth.log -p wa -k authlog
-a always,exit -F arch=b64 -S execve -k exec

重启auditd后,所有对敏感文件的写入和程序执行都会被记录。配合logwatch或自写脚本定期分析日志。安装fail2ban自动封禁暴力破解IP:

apt install fail2ban

创建/etc/fail2ban/jail.local,针对SSH和Web服务配置封禁策略:

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5

[sshd]
enabled = true
port = 2222

[nginx-limit-req]
enabled = true
filter = nginx-limit-req
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 10

fail2ban能有效阻断自动化攻击,但要注意不要误封正常用户,白名单IP加入ignoreip参数。

服务最小化与进程隔离

用systemd管理服务时,为每个服务配置安全限制。编辑服务单元文件,在[Service]段添加:

NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=full
ProtectHome=yes
ReadWritePaths=/var/lib/应用目录
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
SystemCallFilter=@system-service

这些参数能防止服务提权、限制文件系统访问范围、过滤系统调用。对Web服务、数据库等关键进程,用systemd-analyze security检查安全评分,根据提示逐项加固。容器化部署时,Docker容器默认权限过大,需要配合seccomp、capabilities限制和只读根文件系统使用。

性能监控与资源限制

安全加固不能牺牲性能。安装netdata或Prometheus+node_exporter监控系统指标。重点关注CPU负载、内存使用、磁盘IO和网络连接数。对关键服务用systemd设置资源限制:

[Service]
CPUQuota=200%
MemoryMax=2G
MemoryHigh=1.5G
TasksMax=512
LimitNOFILE=65535

CPUQuota限制CPU使用上限,MemoryHigh设置软限制,MemoryMax设置硬限制,防止单个服务耗尽资源。LimitNOFILE提高文件描述符上限,对高并发Web服务和数据库至关重要。定期用vmstat、iostat、ss -s检查系统瓶颈,根据实际负载调整内核参数和服务配置。

备份与灾难恢复

安全运维的最后一道防线是备份。使用rsync或borgbackup定期备份关键数据。创建备份脚本:

#!/bin/bash
BACKUP_DIR=/backup
DATE=$(date +%Y%m%d)
rsync -aAXv --delete /etc $BACKUP_DIR/$DATE/
rsync -aAXv --delete /var/lib/mysql $BACKUP_DIR/$DATE/
rsync -aAXv --delete /var/www $BACKUP_DIR/$DATE/
tar -czf $BACKUP_DIR/$DATE.tar.gz $BACKUP_DIR/$DATE/
find $BACKUP_DIR -type d -mtime +30 -exec rm -rf {} \;

备份要异地存储,至少保留30天。定期演练恢复流程,确保备份可用。数据库备份用mysqldump或pg_dump导出,避免直接复制数据文件导致不一致。关键配置文件纳入版本控制,修改前先备份,修改后测试再上线。

Debian服务器的安全运维是一个持续过程,不是一次性配置。每次业务变更后重新评估安全策略,定期审查日志和权限,保持系统更新。安全与性能往往需要权衡,但上述配置在绝大多数场景下不会造成明显性能损失,反而通过资源限制和内核调优提升稳定性。