服务器安全运维进阶:从 SSH 加固到入侵排查

服务器安全运维进阶:从 SSH 加固到入侵排查

适合对象:负责云服务器、网站服务器、业务服务器维护的运维人员。
核心目标:建立服务器安全加固和入侵排查思路,降低被爆破、提权、植入后门和数据泄露的风险。


一、服务器安全不是装个防火墙就结束

很多服务器被入侵,并不是因为黑客用了多高级的技术,而是因为基础安全没有做好。

常见问题包括:

  • SSH 使用默认 22 端口
  • root 用户允许直接登录
  • 密码过于简单
  • 没有限制登录失败次数
  • 面板、数据库、Redis 暴露到公网
  • 网站程序长期不更新
  • 使用破解版插件或主题
  • 服务器没有备份
  • 日志没有保留
  • 权限设置过于宽松

服务器安全运维的重点是:

减少暴露面、降低爆破成功率、限制权限、及时发现异常、保证可恢复。


二、SSH 登录安全加固

SSH 是服务器最常见的入口,也是最容易被爆破的地方。

配置文件通常在:

/etc/ssh/sshd_config

建议重点修改以下配置。

1. 禁止 root 直接登录

PermitRootLogin no

做法是创建普通用户,通过普通用户登录后再使用 sudo

2. 禁用密码登录,改用密钥登录

PasswordAuthentication no
PubkeyAuthentication yes

前提是你已经确认密钥可以正常登录,否则可能把自己锁在服务器外面。

3. 修改默认端口

Port 22222

修改端口不能替代安全措施,但可以减少低级扫描和爆破日志。

4. 限制允许登录的用户

AllowUsers deploy adminuser

只允许指定用户通过 SSH 登录。

5. 重启 SSH 服务

修改后先测试配置:

sshd -t

确认无误后重启:

systemctl restart sshd

重要提醒:

修改 SSH 配置时,务必保留一个已登录窗口,不要立刻断开,避免配置错误导致无法登录。


三、防火墙与端口暴露控制

服务器不应该把所有服务都暴露到公网。

查看监听端口:

ss -lntp

常见端口:

服务端口
SSH22
HTTP80
HTTPS443
MySQL3306
Redis6379
PostgreSQL5432
MongoDB27017
面板服务8888 / 自定义

数据库、Redis、后台管理面板等服务,不建议直接暴露公网。

UFW 示例

ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 22222/tcp
ufw deny 3306/tcp
ufw deny 6379/tcp
ufw enable
ufw status

firewalld 示例

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

安全原则:

只开放必须端口,其余全部关闭。


四、使用 Fail2ban 防爆破

Fail2ban 可以根据日志自动封禁多次登录失败的 IP。

安装:

apt install fail2ban -y
# 或
 yum install fail2ban -y

创建配置:

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

SSH 示例配置:

[sshd]
enabled = true
port = 22222
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
findtime = 10m
bantime = 1h

CentOS/RHEL 日志路径可能是:

/var/log/secure

启动服务:

systemctl enable --now fail2ban
fail2ban-client status sshd

Fail2ban 不能替代密钥登录,但可以减少暴力破解压力。


五、账号和权限管理

服务器上不要长期使用 root 直接操作。

建议:

  • 使用普通用户登录
  • 必要时通过 sudo 提权
  • 删除无用账号
  • 检查异常用户
  • 控制 sudo 权限
  • 不给网站目录 777 权限

查看系统用户:

cat /etc/passwd

查看可登录用户:

awk -F: '$7 !~ /nologin|false/ {print $1, $7}' /etc/passwd

查看 sudo 权限:

cat /etc/sudoers
ls /etc/sudoers.d/

查找 777 权限目录:

find / -type d -perm 0777 2>/dev/null

网站目录权限建议遵循最小权限原则,不要为了省事全站 chmod -R 777


六、Web 服务安全加固

如果服务器运行网站,需要重点关注 Web 层安全。

1. 隐藏版本信息

Nginx:

server_tokens off;

PHP:

expose_php = Off

2. 禁止访问敏感文件

Nginx 示例:

location ~ /\. {
    deny all;
}

location ~* /(composer\.json|composer\.lock|\.env|\.git) {
    deny all;
}

3. 限制上传目录执行脚本

如果是 PHP 网站,上传目录不应该执行 PHP。

location ~* /uploads/.*\.php$ {
    deny all;
}

4. 配置 HTTPS

建议开启 HTTPS,并定期检查证书是否过期。

可以使用 Let’s Encrypt 免费证书。


七、数据库和中间件安全

数据库和缓存服务不要直接暴露公网。

MySQL

建议:

  • 只监听本地地址
  • 不允许 root 远程登录
  • 设置强密码
  • 按业务创建独立账号
  • 限制账号权限

配置示例:

bind-address = 127.0.0.1

查看远程账号:

SELECT user, host FROM mysql.user;

Redis

Redis 暴露公网风险很高。

建议:

bind 127.0.0.1
protected-mode yes
requirepass 强密码

如果业务需要远程访问,应通过内网、安全组或 VPN,不要直接开放到公网。


八、日志审计与异常排查

安全问题发生后,日志是最重要的证据。

常看日志:

/var/log/auth.log
/var/log/secure
/var/log/syslog
/var/log/messages
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/audit/audit.log

查看最近登录记录

last

查看失败登录

Ubuntu/Debian:

grep "Failed password" /var/log/auth.log

CentOS/RHEL:

grep "Failed password" /var/log/secure

查看当前登录用户

who
w

查看命令历史

history
cat ~/.bash_history

注意:攻击者可能清理 history,所以不能只依赖命令历史。


九、入侵排查常用检查项

怀疑服务器被入侵时,可以从以下方向排查。

1. 异常进程

ps aux --sort=-%cpu | head -20
ps aux --sort=-%mem | head -20

查看进程路径:

ls -l /proc/<PID>/exe

2. 异常端口

ss -lntp

重点关注陌生端口和陌生进程。

3. 定时任务

crontab -l
ls -la /etc/cron.*
cat /etc/crontab

攻击者常通过 cron 保持后门持续运行。

4. 开机启动项

systemctl list-unit-files --type=service | grep enabled
ls /etc/systemd/system/

5. SSH 后门

cat ~/.ssh/authorized_keys
find / -name authorized_keys 2>/dev/null

检查是否被写入陌生公钥。

6. 可疑文件

查找最近修改文件:

find / -mtime -3 -type f 2>/dev/null

查找隐藏文件:

find / -name ".*" -type f 2>/dev/null | head

十、备份与恢复策略

安全运维不能只关注防护,还要关注恢复能力。

建议至少做到:

  • 网站文件定期备份
  • 数据库定期备份
  • 备份文件异地保存
  • 定期测试恢复
  • 重要配置文件纳入备份
  • 保留多个时间点版本

备份建议遵循 3-2-1 原则:

3 份数据副本
2 种不同存储介质
1 份异地备份

很多时候,服务器被入侵后,最快的恢复方式不是在原系统上慢慢清理,而是:

重新部署干净系统,再从可信备份恢复业务数据。


十一、安全加固清单

可以按下面清单定期检查服务器:

## SSH
- [ ] 禁止 root 直接登录
- [ ] 使用密钥登录
- [ ] 禁用密码登录
- [ ] 修改默认端口
- [ ] 限制允许登录用户

## 防火墙
- [ ] 只开放必要端口
- [ ] 数据库未暴露公网
- [ ] Redis 未暴露公网
- [ ] 面板入口有限制

## 账号权限
- [ ] 删除无用账号
- [ ] 检查 sudo 权限
- [ ] 网站目录未设置 777
- [ ] 普通业务使用独立用户

## Web 服务
- [ ] 隐藏版本信息
- [ ] 禁止访问 .env/.git 等敏感文件
- [ ] 上传目录禁止执行脚本
- [ ] HTTPS 正常

## 日志和监控
- [ ] SSH 登录日志正常保留
- [ ] Web 访问日志正常保留
- [ ] 开启登录失败告警
- [ ] 定期检查异常进程和端口

## 备份
- [ ] 网站文件定期备份
- [ ] 数据库定期备份
- [ ] 备份异地保存
- [ ] 测试过恢复流程

十二、总结

服务器安全运维的核心,不是依赖某一个安全工具,而是建立完整的防护体系:

减少暴露面
↓
加强身份认证
↓
限制账号权限
↓
保护 Web 和数据库服务
↓
保留日志证据
↓
及时发现异常
↓
具备恢复能力

真正安全的服务器,不是永远不会被攻击,而是在面对攻击时:

  • 不容易被攻破
  • 被攻击时能发现
  • 出问题后能定位
  • 最坏情况下能恢复

对于个人站长和中小型业务来说,把 SSH、防火墙、数据库暴露、网站权限、日志和备份这些基础做好,就已经能避免大多数常见安全事故。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容