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是主动防御,系统更新是持续修补。这五层叠加在一起,才能真正让你的服务器扛住绝大多数自动化扫描和暴力攻击。不要觉得麻烦,被入侵之后恢复数据、排查后门的代价,是现在花半小时加固的一百倍。
最后说一句实在话:安全没有银弹,没有任何配置能保证百分之百不被攻破。但你把该做的都做了,攻击者的成本会高到他去找别的目标。这就是安全加固的真正意义——不是让你无敌,而是让你不值得被打。
