Debian服务器拿到手第一件事不是装应用,而是砍掉所有你用不上的服务、锁死SSH登录入口。这两步做完,你的服务器被扫描、被爆破的概率直接降低80%以上。下面我从实际操作角度,一步步告诉你怎么做、为什么这么做、做完之后怎么验证。

很多人装完Debian就直接跑业务,默认开着的sshd、cups、avahi-daemon、exim4、rpcbind这些服务,每一个都是攻击面。你不用它,它就在后台监听端口等着被人利用。所以安全加固的核心逻辑就一句话:最小权限原则加最小服务原则,不需要的全部关掉,必须留的全部加固。

第一步:盘点当前运行的服务,找出不必要的进程

先看你服务器上到底跑了什么。用这条命令列出所有正在监听端口的服务:

ss -tlnp

或者用更传统的方式:

netstat -tlnp

你会看到一堆东西,比如22端口是sshd,111端口是rpcbind,631端口是cups打印服务,5353是avahi-daemon的mDNS。如果你这台机器只是跑Web应用或者数据库,那cups、avahi、rpcbind、exim4、rsync、nfs-common这些统统可以干掉。判断标准很简单:这个服务跟你的业务有没有直接关系?没有就关。

第二步:用systemctl精准禁用不必要的服务

Debian 10之后全面用systemd管理服务,禁用服务不是删包,而是禁止它开机自启并停止当前运行。操作命令如下:

systemctl stop cups
systemctl disable cups

systemctl stop avahi-daemon
systemctl disable avahi-daemon

systemctl stop rpcbind
systemctl disable rpcbind

systemctl stop exim4
systemctl disable exim4

systemctl stop rsync
systemctl disable rsync

如果你不确定某个服务是干什么的,先查一下:

systemctl status cups
man cups

确认没用再禁用。特别提醒:如果你用了NFS共享或者需要rsync同步,那rpcbind和rsync就不能关。安全加固不是无脑删,是根据你的实际场景做减法。

第三步:清理不必要的软件包,减少攻击面

Debian最小化安装本身就比较干净,但如果你装了桌面环境或者选了很多推荐包,里面会有大量你根本用不到的东西。用apt列出可以自动移除的孤立包:

apt autoremove --purge

再看看有哪些包你明确不需要:

apt list --installed | grep -i "cups\|avahi\|exim\|rpcbind\|nfs\|samba"

确认后逐个卸载:

apt purge cups avahi-daemon exim4-base rpcbind nfs-common

卸载完之后执行一次:

apt autoremove --purge
apt clean

把缓存和依赖也清掉。系统越干净,潜在漏洞越少。这不是洁癖,是实战经验。

第四步:强化SSH登录防护,这是重中之重

SSH是你管理服务器的唯一通道,也是攻击者最喜欢爆破的入口。默认配置基本等于裸奔,必须改。编辑SSH配置文件:

nano /etc/ssh/sshd_config

以下是我建议的核心配置项,逐条说明:

4.1 禁止root直接登录

root用户名全世界都知道,爆破的时候第一个试的就是root。改成:

PermitRootLogin no

你先用普通用户登录,再sudo提权,多一步操作但安全提升巨大。

4.2 修改默认端口

22端口是所有扫描器的默认目标。改成一个不常用的高位端口,比如22222:

Port 22222

改完之后记得在防火墙里放行新端口,否则你自己也连不上了。

4.3 限制登录用户

只允许特定用户通过SSH登录,其他人一律拒绝:

AllowUsers yourusername deploy_user

把yourusername换成你实际的用户名。这样即使别人拿到了密码,用户名不对也进不来。

4.4 强制使用密钥登录,禁用密码认证

密码可以被暴力破解,密钥几乎不可能。在配置文件里加上:

PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

注意:改这个之前你必须先把自己的公钥部署到服务器上,否则改完你就登不进去了。生成密钥对的方法:

ssh-keygen -t ed25519 -C "your_email@example.com"
ssh-copy-id -p 22222 yourusername@your_server_ip

ed25519比RSA更安全更快,强烈推荐。如果你的SSH客户端不支持ed25519,退而求其次用RSA 4096位:

ssh-keygen -t rsa -b 4096

4.5 限制登录尝试次数和超时

防止暴力破解的有效手段是限制尝试频率:

MaxAuthTries 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2

MaxAuthTries设为3,三次输错就断开。LoginGraceTime是登录超时时间,30秒够用。ClientAliveInterval是心跳检测间隔,防止死连接占用资源。

4.6 禁用空密码和弱加密算法

PermitEmptyPasswords no
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
HostKeyAlgorithms ssh-ed25519

这一段是把过时的、有已知弱点的算法全部禁掉,只留当前最安全的。如果你的客户端连不上,说明客户端版本太老,该升级了。

第五步:配置防火墙,只开放必要端口

Debian自带的ufw是最简单的防火墙工具。先启用:

ufw enable
ufw default deny incoming
ufw default allow outgoing

然后只开放你需要的端口。比如你改了SSH到22222,开放Web的80和443:

ufw allow 22222/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 3306/tcp

如果你用了其他服务比如Redis的6379、PostgreSQL的5432,按需开放。开放完查看状态:

ufw status verbose

原则就一条:默认拒绝所有入站,只白名单放行。这比任何入侵检测都有效。

第六步:安装fail2ban自动封禁暴力破解IP

fail2ban会监控日志文件,发现有人反复尝试登录就自动把对方IP拉黑。安装:

apt install fail2ban -y
systemctl enable fail2ban
systemctl start fail2ban

创建本地配置文件:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

编辑jail.local,重点配置SSH防护:

[sshd]
enabled = true
port = 22222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600

maxretry=3表示三次失败就封禁,bantime=3600是封禁一小时。你可以根据需要调大。改完重启:

systemctl restart fail2ban

查看被封的IP:

fail2ban-client status sshd

第七步:定期更新系统,修补已知漏洞

安全加固不是一次性的事。Debian的安全更新要及时打:

apt update
apt upgrade -y

如果你只想打安全相关的补丁,可以用:

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

配置自动安全更新,让系统在后台自动修补漏洞。同时定期检查:

apt list --upgradable

看看有没有遗漏的包。

第八步:加固完成后的验证清单

做完以上所有步骤,你需要验证效果。按这个清单逐一检查:

1. ss -tlnp 确认只有必要端口在监听
2. systemctl list-unit-files --state=enabled 确认不需要的服务没自启
3. ssh -p 22222 yourusername@server_ip 用密钥登录测试
4. 故意输错密码3次,确认连接被断开
5. ufw status 确认防火墙规则正确
6. fail2ban-client status sshd 确认服务正常运行
7. nmap -sT server_ip 从外部扫描,确认多余端口已关闭

如果每一项都通过,说明你的Debian服务器已经达到了生产环境的基本安全标准。

总结:安全加固的核心思维

Debian安全加固不是靠某一个工具或者某一条命令,而是一套组合拳。移除不必要服务是减少攻击面,强化SSH是守住管理入口,防火墙是建立边界,fail2ban是主动防御,系统更新是持续修补。这五层叠加在一起,才能真正让你的服务器扛住绝大多数自动化扫描和暴力攻击。不要觉得麻烦,被入侵之后恢复数据、排查后门的代价,是现在花半小时加固的一百倍。

最后说一句实在话:安全没有银弹,没有任何配置能保证百分之百不被攻破。但你把该做的都做了,攻击者的成本会高到他去找别的目标。这就是安全加固的真正意义——不是让你无敌,而是让你不值得被打。