全部文章

服务器安全加固

SSH 安全、防火墙配置、fail2ban、自动更新与安全检查清单

目录 24 节

服务器安全加固

这页适合作为“服务器上线前后的最小安全基线”。安全加固不是一次性把配置改得越狠越好,而是先把暴露面、登录入口、更新机制、日志和恢复手段按顺序补齐。

先按暴露面做

优先级通常建议这样排:

  1. 先保 SSH 入口:口令、Root、密钥、允许用户、端口与登录审计
  2. 再收网络暴露面:只开放必须端口,默认拒绝入站
  3. 再补自动封禁与自动更新:fail2ban、unattended-upgrades
  4. 最后做服务级安全:Web、数据库、容器、备份、监控和告警

如果机器上还没有正式业务,越早做这些越省事;一旦服务已经对外,补救成本会高很多。

SSH 安全

禁用密码登录

# /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
systemctl restart sshd

更改默认端口

# /etc/ssh/sshd_config
Port 2222

记得同时更新防火墙规则。

更稳的 SSH 做法

  • 优先使用 ed25519 密钥
  • 至少保留一个已验证可登录的普通 sudo 用户
  • 改端口只是降噪,不等于真正防护
  • 改完配置先开第二个 SSH 窗口验证,再关闭旧会话

限制登录用户

# /etc/ssh/sshd_config
AllowUsers deploy admin

防火墙

UFW(Ubuntu)

# 安装启用
apt install ufw -y
ufw default deny incoming
ufw default allow outgoing

# 允许端口
ufw allow 2222/tcp    # SSH
ufw allow 80/tcp      # HTTP
ufw allow 443/tcp     # HTTPS

# 启用
ufw enable
ufw status verbose

firewalld(CentOS/RHEL)

firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
firewall-cmd --list-all

最小可用加固顺序

新机推荐按这个顺序执行:

  1. 建普通用户并加 sudo
  2. 配好 SSH 密钥登录
  3. 禁 Root、禁密码登录
  4. 开防火墙,只放行 SSH / 80 / 443
  5. 配 fail2ban
  6. 开自动安全更新
  7. 检查日志、备份与时间同步

这套顺序的重点是:任何“可能把自己锁在门外”的操作,都要放在已经验证可登录之后。

fail2ban

自动封禁暴力破解 IP。

apt install fail2ban -y
# /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5

[sshd]
enabled = true
port = 2222
systemctl enable fail2ban
systemctl start fail2ban

# 查看状态
fail2ban-client status sshd

# 手动解封
fail2ban-client set sshd unbanip 1.2.3.4

如果你改了 SSH 端口、服务名或代理层结构,记得同步更新 fail2ban 的 jail 配置,不然它可能根本没有正确拦截目标流量。

自动安全更新

Ubuntu

apt install unattended-upgrades -y
dpkg-reconfigure -plow unattended-upgrades
# /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";

Web 服务额外要做

如果机器上要跑 Web 应用,至少再补这几项:

  • 反向代理只开放 80/443
  • TLS 证书自动续期并定期验证
  • 应用与数据库不要裸奔在公网
  • 管理面板、后台、监控面板尽量走内网、VPN 或额外鉴权
  • .env、备份文件、日志目录权限单独检查

用户管理

# 创建部署用户
adduser deploy
usermod -aG sudo deploy

# 禁用 root 密码
passwd -l root

# 查看登录记录
last
lastb    # 失败的登录

文件权限

# SSH 密钥权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519

# 敏感配置
chmod 600 /etc/shadow
chmod 644 /etc/passwd

日志与告警

最低限度建议建立下面这些观察点:

  • SSH 登录失败次数
  • fail2ban 封禁记录
  • 磁盘、内存、CPU 的异常飙高
  • 新开的可疑端口和新出现的常驻进程
  • TLS 证书到期时间

如果机器承载重要业务,建议把日志集中到外部平台,不要只依赖单机留痕。

安全检查清单

# 检查开放端口
ss -tlnp
netstat -tlnp

# 检查运行的服务
systemctl list-units --type=service --state=running

# 检查定时任务
crontab -l
ls /etc/cron.d/

# 检查 SUID 文件
find / -perm -4000 -type f 2>/dev/null

# 检查最近修改的文件
find /etc -mtime -7 -type f

常见误区

改 SSH 端口就算加固了

改端口只能减少扫描噪音,不能替代密钥登录、Root 禁用、防火墙和日志审计。

只看“能不能访问”,不看“谁在访问”

很多问题不是服务挂了,而是被持续扫描、撞库、弱口令尝试或异常爬取。日志、告警和访问控制同样重要。

只加固,不做恢复方案

没有备份、没有恢复演练、没有紧急回滚手段,再强的加固也不完整。

延伸阅读

参考链接

阅读建议
  • - 先读标题和摘要,再结合目录决定从哪个章节开始精读。
  • - 看到具体命令、配置或步骤时,尽量在自己的环境里同步验证。
  • - 如果你只是快速查资料,可先看目录和相关文档,再决定是否深入全文。
适合谁看
  • - 希望把零散经验整理成长期可复用工作流的人
  • - 需要处理网络链路或基础安全配置的人
  • - 希望阅读时顺手建立自己的操作清单或收藏体系的人
执行前检查
  • - 先浏览标题、摘要和目录,带着问题阅读会更高效
  • - 确认当前网络拓扑、路由权限以及是否会影响其他设备访问
  • - 如果页面里提到相关文档,尽量一起打开对照,效果通常更完整
同类内容
← 上一篇Windows 常用快捷键