深入解析:Linux 安全加固:SSH 安全、sudo 权限、防火墙、入侵检测实战(企业级安全指南)
文章目录
前言
你的服务器是否经历过:
- SSH 被暴力破解,日志中全是
Failed password? - 普通用户误操作,执行了
rm -rf /? - 黑客提权成功,在系统中植入后门?
- 未知进程监听端口,怀疑已被入侵?
在云时代,Linux 服务器是黑客的首要目标。一个未加固的系统,可能在上线几分钟内就被扫描并攻击。
据 Verizon《2024 数据泄露调查报告》,83% 的云服务器入侵源于配置不当和弱密码。
本文将带你从 SSH 安全、sudo 权限控制、防火墙策略、日志监控到入侵检测,系统性地完成一次企业级 Linux 安全加固,打造“铜墙铁壁”般的服务器防线。
一、安全加固核心原则
在动手前,牢记三大安全原则:
- 最小权限原则:用户/服务只拥有完成任务所需的最小权限
- 纵深防御(Defense in Depth):多层防护,即使一层被突破,仍有后备
- 持续监控与审计:及时发现异常行为
二、SSH 安全:第一道防线
SSH 是远程管理的入口,也是攻击最频繁的端口(默认 22)。
✅ 1. 禁用 root 登录
编辑 /etc/ssh/sshd_config:
# 禁止 root 直接登录
PermitRootLogin no
# 推荐使用普通用户 + sudo
✅ 2. 禁用密码登录,改用密钥认证
# 禁用密码
PasswordAuthentication no
# 启用公钥认证
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
✅ 配置流程:
# 本地生成密钥对
ssh-keygen -t rsa -b 4096 -C "admin@company.com"
# 将公钥上传到服务器
ssh-copy-id user@server_ip
# 重启 SSH 服务
sudo systemctl restart sshd
✅ 优势:免密登录 + 防暴力破解
✅ 3. 修改默认端口(可选)
# 改为非常用端口,减少扫描
Port 22222
⚠️ 注意:需同步更新防火墙规则。
✅ 4. 限制登录用户和来源 IP
# 只允许特定用户登录
AllowUsers alice bob
# 限制来源 IP(配合防火墙更佳)
AllowUsers alice@192.168.1.100
✅ 5. 设置登录超时与失败锁定
# 登录超时
LoginGraceTime 60
# 最大尝试次数
MaxAuthTries 3
# 空闲断开
ClientAliveInterval 300
ClientAliveCountMax 2
✅ 6. 重启并验证
sudo systemctl restart sshd
# 新开终端测试,避免锁死!
三、sudo 权限精细化管理
sudo 允许普通用户执行特权命令,但必须严格控制。
✅ 1. 查看当前 sudo 配置
sudo cat /etc/sudoers
# 或使用 visudo(推荐)
sudo visudo
✅ 2. 为用户分配最小权限
# 允许 alice 重启 nginx,无需密码
alice ALL=(root) NOPASSWD: /usr/sbin/service nginx restart
# 允许 devops 组执行所有命令(谨慎!)
%devops ALL=(ALL:ALL) ALL
✅ 3. 禁用 shell 转义
# 防止通过 sudo su 获取 root shell
Defaults !shell_escape
✅ 4. 记录 sudo 操作日志
# 默认记录在 /var/log/auth.log 或 /var/log/secure
# 可配置集中日志系统(如 ELK)
四、防火墙配置:网络层防护
✅ 1. firewalld(CentOS/RHEL 7+)
# 启动并开机自启
sudo systemctl enable firewalld --now
# 查看状态
sudo firewall-cmd --state
# 添加 SSH 端口(如果改了)
sudo firewall-cmd --permanent --add-port=22222/tcp
# 开放 HTTP/HTTPS
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 重新加载
sudo firewall-cmd --reload
✅ 2. ufw(Ubuntu 简化防火墙)
# 安装
sudo apt install ufw
# 允许 SSH
sudo ufw allow OpenSSH
# 或指定端口
sudo ufw allow 22222/tcp
# 启用
sudo ufw enable
✅ 3. iptables(传统,灵活但复杂)
# 允许已建立的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许 SSH
sudo iptables -A INPUT -p tcp --dport 22222 -j ACCEPT
# 默认拒绝
sudo iptables -P INPUT DROP
✅ 建议:生产环境优先使用
firewalld或ufw。
五、fail2ban:自动封禁暴力破解
fail2ban 能监控日志,自动封禁频繁失败的 IP。
✅ 1. 安装
# Ubuntu/Debian
sudo apt install fail2ban
# CentOS/RHEL
sudo yum install fail2ban
✅ 2. 配置 SSH 防护
创建 /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 22222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
maxretry=3:10分钟内失败3次即封禁bantime=3600:封禁1小时
✅ 3. 启动服务
sudo systemctl enable fail2ban --now
sudo systemctl status fail2ban
✅ 4. 查看封禁状态
sudo fail2ban-client status sshd
️ 六、入侵检测与安全审计
✅ 1. 检查异常登录
# 查看最近登录
last
# 查看失败登录
sudo grep "Failed password" /var/log/auth.log | tail -20
# 查看所有用户
cat /etc/passwd
✅ 2. 检查监听端口
ss -tuln
# 或
netstat -tuln
查找未知端口(如 6667、12345 等)
✅ 3. 检查计划任务
# 所有用户的 crontab
for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l 2>/dev/null; done
# 系统级任务
ls /etc/cron.d/
✅ 4. 检查启动项
systemctl list-unit-files --type=service | grep enabled
✅ 5. 使用 rkhunter 检测后门
# 安装
sudo apt install rkhunter
# 扫描
sudo rkhunter --check
# 更新特征库
sudo rkhunter --update
七、安全加固检查清单(建议收藏)
| 项目 | 是否完成 | 备注 |
|---|---|---|
| ✅ 禁用 root SSH 登录 | ☐ | PermitRootLogin no |
| ✅ 启用 SSH 密钥认证 | ☐ | PasswordAuthentication no |
| ✅ 修改 SSH 默认端口 | ☐ | 可选 |
| ✅ 配置防火墙 | ☐ | firewalld / ufw |
| ✅ 安装 fail2ban | ☐ | 防暴力破解 |
| ✅ 配置 sudo 权限 | ☐ | 最小权限原则 |
| ✅ 禁用不必要的服务 | ☐ | systemctl disable xxx |
| ✅ 定期更新系统 | ☐ | apt upgrade / yum update |
| ✅ 备份重要数据 | ☐ | 3-2-1 原则 |
| ✅ 监控关键日志 | ☐ | auth.log, secure |
写在最后
安全不是“一劳永逸”的任务,而是持续的过程。一次彻底的加固,能极大降低被入侵的风险。
记住:
- SSH 是生命线,必须加固
- 最小权限 + 日志审计 = 安全基石
- fail2ban 是自动化防御利器
- 定期检查 = 防患于未然
不要等到数据被加密、服务器被挖矿才后悔——从今天开始,为你的 Linux 服务器穿上“防弹衣”。
如需获取更多关于 Linux 内核调优、企业级服务部署、自动化运维与容器安全 等深度实战内容,请持续关注本专栏 《Linux企业级运维实战》 系列文章。
浙公网安备 33010602011771号