Linux服务器安全加固实战:从入站规则到入侵检测的全方位防护手册

为什么你的Linux服务器总在被“敲门”?

💡 推荐阅读:Nginx反向代理DERP全流程实操:从零搭建专属高速节点,告别自建网络卡顿

作为站长,想必都经历过这样的时刻:打开auth.log,满屏的 Failed password for root from 103.xxx.xxx.xxx。这并非个例,而是互联网公网IP面临的常态。只要你的服务器绑定了公网地址,每秒钟都有来自全球的扫描器在探测端口、猜测口令。

笔者在运维生涯中,见过太多因防护疏漏导致的数据泄露或挖矿病毒入侵案例。今天不聊虚的,直接拿出一套从入站过滤到纵深防御的生产环境最佳实践SOP,手把手带你加固你的Linux服务器,让它变成一块难啃的硬骨头。

第一道防线:网络层入站规则(防火墙)

🔥 【限时特惠福利】高性价比独享云服务器限时 1 折起

搭建网站或部署容器推荐选择高稳定性独享云服务器。限时特惠通道开放中,点击即可领取专属满减代金券与特惠折扣:

👉 立刻领取云服务器限时优惠券

💡 延伸阅读:从被挂马到彻底躺平: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,禁用或删除 gameslp 等系统自带但用不到的低权限账户。
  • 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):

  1. 基础配置:修改主机名、创建普通用户、配置 sudo 免密。
  2. 网络层:配置 firewalld 默认拒绝策略,放行必要端口。
  3. SSH 加固:生成密钥对、禁用密码登录、修改默认端口(可选,但能减少日志噪音)。
  4. 安装 Fail2ban:配置 SSH 保护规则,验证封禁功能。
  5. 内核调优:应用 sysctl.conf 安全参数,防止资源耗尽。
  6. 部署 AIDE:记录关键文件指纹,并配置定时任务。
  7. 日常巡检:每周查看 dmesglastbss -antlp,确认无异常连接。

服务器的安全不是一锤子买卖,而是一个持续对抗的过程。笔者建议,在条件允许的情况下,尽量选择信誉良好的正规云服务商,他们自带的安全组和云盾能力能作为第一道物理隔离层,为你省下不少精力。同时,保持系统补丁的及时更新(yum update / apt upgrade)同样至关重要。

把这套 SOP 吃透,你的 Linux 服务器不敢说固若金汤,但至少能让绝大多数自动化攻击工具“知难而退”。记住,黑客攻击的是“容易的目标”,而不是“最安全的目标”。你的防护每多一层,被攻破的概率就呈指数级下降。

相关技术专题与延伸阅读

📦 【资源免费领】本文全套实操配置文件与避坑手册下载

本文涉及的全套 Docker Compose 配置文件、服务器运维避坑清单及 AI 提效指令库已完整打包,可免费极速转存:

👉 点击前往夸克网盘免费极速转存(手机端领 1TB 空间)

💡 提示:推荐使用手机【夸克网盘 App】打开保存,新用户首月免费赠送 1TB 超大空间与免流量极速下载特权。

滚动至顶部