为什么你的Linux服务器总在被“敲门”?
💡 推荐阅读:Nginx反向代理DERP全流程实操:从零搭建专属高速节点,告别自建网络卡顿
作为站长,想必都经历过这样的时刻:打开auth.log,满屏的 Failed password for root from 103.xxx.xxx.xxx。这并非个例,而是互联网公网IP面临的常态。只要你的服务器绑定了公网地址,每秒钟都有来自全球的扫描器在探测端口、猜测口令。
笔者在运维生涯中,见过太多因防护疏漏导致的数据泄露或挖矿病毒入侵案例。今天不聊虚的,直接拿出一套从入站过滤到纵深防御的生产环境最佳实践SOP,手把手带你加固你的Linux服务器,让它变成一块难啃的硬骨头。
第一道防线:网络层入站规则(防火墙)
💡 延伸阅读:从被挂马到彻底躺平:Linux服务器安全攻防实战记录与加固指南
很多新手买完服务器,第一件事就是关闭防火墙,理由是“装了软件连不上”。这是极其危险的操作。正确的姿势应该是白名单制。
1. 默认拒绝,显式放行
无论是iptables还是firewalld,核心原则是:默认丢弃 INPUT 链,只放行必要的端口。
以firewalld为例,基础加固命令如下:
# 设置默认区域为 public,并拒绝所有未匹配的入站流量
firewall-cmd --set-default-zone=public
# 仅放行 SSH、HTTP、HTTPS 端口
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
# 重新加载配置生效
firewall-cmd --reload
关键点:千万别为了图省事放行 1:65535。如果你的业务只需要 80/443,那就只开这两个。对于数据库端口(如 3306),务必在云控制台的安全组和服务器内部防火墙双重限制,且源地址只允许你的办公网IP。
2. 封禁暴力破解IP(Fail2ban)
光有防火墙还不够,SSH 的 22 端口是重灾区。人工封IP不现实,必须上自动化工具。
Fail2ban 是业界标配,它能扫描日志文件,匹配到连续失败尝试后,自动调用防火墙规则临时封禁该IP。
# 安装(CentOS/Debian 均适用)
yum install fail2ban -y # 或 apt install fail2ban -y
# 配置本地 jail
cat > /etc/fail2ban/jail.local <<'EOF'
[DEFAULT]
# 封禁时间 1 小时
bantime = 3600
# 在 10 分钟内
findtime = 600
# 超过 5 次失败
maxretry = 5
[sshd]
enabled = true
port = ssh
logpath = %(sshd_backend)s
EOF
# 启动并开机自启
systemctl enable fail2ban
systemctl start fail2ban
配置完成后,你可以通过 fail2ban-client status sshd 查看当前被封禁的IP列表。这套机制能挡掉 99% 的脚本小子。
第二道防线:服务与应用层加固
💡 深度技术指南:还在手动改端口?Nginx反向代理配置实战:从入门到高可用,三种方案横评对比
网络层守住了,接下来要处理服务本身的漏洞。
1. SSH 深度防护:告别密码登录
密码爆破是常态,最彻底的解决办法就是禁用密码登录,仅保留密钥认证。
编辑 /etc/ssh/sshd_config,修改以下参数:
# 禁止 root 直接登录(使用普通用户 + sudo)
PermitRootLogin no
# 禁用密码认证
PasswordAuthentication no
# 启用密钥认证
PubkeyAuthentication yes
# 限制允许登录的用户(可选但推荐)
AllowUsers admin_user
操作顺序很重要:在改配置之前,务必先确认你的公钥已经写入 ~/.ssh/authorized_keys。并且不要关闭当前SSH连接,先重启服务测试新连接,确认没问题再断开旧连接,避免把自己锁在门外。
2. 系统账户与权限最小化
- 删除无用账户:检查
/etc/passwd,禁用或删除games、lp等系统自带但用不到的低权限账户。 - sudo 权限收敛:给运维人员分配普通账户,通过
visudo精细化配置命令权限,避免直接给 ALL 权限。 - 文件权限检查:确保
.ssh目录权限为 700,authorized_keys文件权限为 600,防止其他用户读取。
第三道防线:系统资源与内核参数调优
有时候服务器被入侵,不是被攻破,而是被资源耗尽导致崩溃(例如 SYN Flood 攻击)。
| 参数 | 推荐值 | 作用 |
|---|---|---|
| net.ipv4.tcp_syncookies | 1 | 开启 SYN Cookies,防止 SYN Flood 攻击 |
| net.ipv4.tcp_tw_reuse | 1 | 允许将 TIME-WAIT sockets 用于新连接,提升并发 |
| net.ipv4.ip_local_port_range | 1024 65535 | 扩大本地端口范围,增加并发连接数 |
| fs.file-max | 6553560 | 提升系统全局文件句柄数限制 |
修改 /etc/sysctl.conf 并执行 sysctl -p 生效。这些参数能显著提升服务器在高并发或恶意攻击下的稳定性。
第四道防线:入侵检测与日志审计
防住了大部分攻击,我们还需要知道服务器上正在发生什么。
1. 日志监控三件套
- auth.log / secure:重点监控 SSH 登录记录,配合 Logwatch 或 Logrotate 定期分析。
- history 记录:为所有用户配置
history时间戳,并同步到 syslog 服务器,防止入侵者清理痕迹。 - 文件完整性校验:使用
AIDE(Advanced Intrusion Detection Environment)对关键二进制文件和配置文件做哈希快照,定时比对。一旦发现/bin/ls或/sbin/sshd被替换,立即告警。
# 初始化 AIDE 数据库
aide --init
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
# 每日比对(添加 crontab)
0 2 * * * /usr/sbin/aide --check | mail -s "AIDE Report" admin@example.com
SOP 总结:从零到一的加固流程清单
为了方便你落地,笔者将上述内容整理为一份可复制的执行清单(SOP):
- 基础配置:修改主机名、创建普通用户、配置 sudo 免密。
- 网络层:配置 firewalld 默认拒绝策略,放行必要端口。
- SSH 加固:生成密钥对、禁用密码登录、修改默认端口(可选,但能减少日志噪音)。
- 安装 Fail2ban:配置 SSH 保护规则,验证封禁功能。
- 内核调优:应用
sysctl.conf安全参数,防止资源耗尽。 - 部署 AIDE:记录关键文件指纹,并配置定时任务。
- 日常巡检:每周查看
dmesg、lastb和ss -antlp,确认无异常连接。
服务器的安全不是一锤子买卖,而是一个持续对抗的过程。笔者建议,在条件允许的情况下,尽量选择信誉良好的正规云服务商,他们自带的安全组和云盾能力能作为第一道物理隔离层,为你省下不少精力。同时,保持系统补丁的及时更新(yum update / apt upgrade)同样至关重要。
把这套 SOP 吃透,你的 Linux 服务器不敢说固若金汤,但至少能让绝大多数自动化攻击工具“知难而退”。记住,黑客攻击的是“容易的目标”,而不是“最安全的目标”。你的防护每多一层,被攻破的概率就呈指数级下降。
相关技术专题与延伸阅读
- Nginx反向代理DERP全流程实操:从零搭建专属高速节点,告别自建网络卡顿
- 从被挂马到彻底躺平:Linux服务器安全攻防实战记录与加固指南
- 还在手动改端口?Nginx反向代理配置实战:从入门到高可用,三种方案横评对比
- Linux服务器刚上线就被黑?这份安全加固实操指南请收好
📦 【资源免费领】本文全套实操配置文件与避坑手册下载
本文涉及的全套 Docker Compose 配置文件、服务器运维避坑清单及 AI 提效指令库已完整打包,可免费极速转存:
💡 提示:推荐使用手机【夸克网盘 App】打开保存,新用户首月免费赠送 1TB 超大空间与免流量极速下载特权。