Linux服务器安全加固完整指南:从入门到专家

17老师 · 2026-06-17 · 阅读约20分钟

← 返回博客列表

前言

Linux服务器是互联网的基石,但默认配置往往存在安全隐患。本文将从SSH安全、防火墙配置、系统加固、入侵检测等多个维度,提供一套完整的安全加固方案,适合生产环境直接使用。

一、SSH安全加固

SSH是远程管理服务器的主要方式,也是攻击者的首要目标。

1.1 修改SSH端口

# 编辑SSH配置
sudo vim /etc/ssh/sshd_config

# 修改以下配置
Port 22222                    # 改为非标准端口
PermitRootLogin no            # 禁止root直接登录
PasswordAuthentication no     # 禁用密码登录(仅允许密钥)
MaxAuthTries 3                # 最大尝试次数
ClientAliveInterval 300       # 空闲超时
ClientAliveCountMax 2

1.2 配置SSH密钥登录

# 在本地生成密钥对
ssh-keygen -t ed25519 -C "your_email@example.com"

# 将公钥复制到服务器
ssh-copy-id -p 22222 user@server_ip

# 测试无密码登录
ssh -p 22222 user@server_ip

1.3 安装fail2ban防暴力破解

# 安装fail2ban
sudo apt install fail2ban -y

# 配置
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vim /etc/fail2ban/jail.local

# 添加SSH防护
[sshd]
enabled = true
port = 22222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600

# 启动服务
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

二、防火墙配置

2.1 UFW基础配置

# 启用UFW
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 允许SSH(自定义端口)
sudo ufw allow 22222/tcp

# 允许Web服务
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 启用防火墙
sudo ufw enable
sudo ufw status verbose

2.2 高级防火墙规则

# 限制SSH连接频率
sudo ufw limit 22222/tcp

# 只允许特定IP访问管理端口
sudo ufw allow from 1.2.3.4 to any port 3306

# 拒绝特定IP
sudo ufw deny from 10.10.10.10

# 配置日志
sudo ufw logging on
sudo ufw logging medium

三、系统安全加固

3.1 用户和权限管理

# 创建普通用户
sudo adduser deployer
sudo usermod -aG sudo deployer

# 禁用不必要的用户
sudo passwd -l nobody
sudo passwd -l daemon

# 设置密码策略
sudo apt install libpam-pwquality -y
sudo vim /etc/security/pwquality.conf
# 最小长度12位,包含大小写、数字、特殊字符
minlen = 12
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1

# 设置登录超时
echo "TMOUT=600" >> /etc/profile
echo "readonly TMOUT" >> /etc/profile

3.2 文件权限加固

# 查找并修复危险权限文件
find / -type f -perm -4000 -ls          # 查找SUID文件
find / -type f -perm -2000 -ls          # 查找SGID文件
find / -type f -perm -o+w -ls           # 查找全局可写文件

# 保护关键文件权限
chmod 600 /etc/shadow
chmod 600 /etc/gshadow
chmod 644 /etc/passwd
chmod 644 /etc/group
chmod 700 /root

3.3 内核安全参数

# 编辑sysctl配置
sudo vim /etc/sysctl.conf

# 添加以下安全参数
# 禁用IP转发
net.ipv4.ip_forward = 0

# 防止ICMP重定向攻击
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0

# 启用SYN Cookie保护
net.ipv4.tcp_syncookies = 1

# 禁用源路由
net.ipv4.conf.all.accept_source_route = 0

# 启用反向路径过滤
net.ipv4.conf.all.rp_filter = 1

# 应用配置
sudo sysctl -p

四、服务安全配置

4.1 Nginx安全配置

# /etc/nginx/conf.d/security.conf

# 隐藏版本号
server_tokens off;

# 安全头
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self'" always;

# 限制请求大小
client_max_body_size 10m;

# 超时设置
client_body_timeout 12
client_header_timeout 12
keepalive_timeout 15
send_timeout 10

4.2 MySQL安全配置

# 运行安全安装脚本
sudo mysql_secure_installation

# 配置my.cnf
[mysqld]
# 禁用远程root登录
bind-address = 127.0.0.1

# 禁用本地文件加载
local-infile = 0

# 记录所有查询
general_log = 1
general_log_file = /var/log/mysql/query.log

五、入侵检测系统

5.1 安装AIDE(文件完整性检查)

# 安装AIDE
sudo apt install aide -y

# 初始化数据库
sudo aideinit

# 添加定时检查
echo "0 3 * * * /usr/bin/aide --check" | sudo crontab -

5.2 安装Rootkit检测

# 安装rkhunter
sudo apt install rkhunter -y

# 更新数据库
sudo rkhunter --update

# 运行检查
sudo rkhunter --check --skip-keypress

# 定时检查
echo "0 4 * * * /usr/bin/rkhunter --check --skip-keypress --report-warnings-only" | sudo crontab -

六、日志审计

# 安装审计框架
sudo apt install auditd -y

# 配置审计规则
sudo vim /etc/audit/rules.d/audit.rules

# 监控关键文件修改
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-w /etc/ssh/sshd_config -p wa -k sshd

# 监控用户操作
-a always,exit -F arch=b64 -C uid!=euid -F euid=0 -k privilege_escalation

# 重启审计服务
sudo systemctl restart auditd

七、自动化安全扫描脚本

#!/bin/bash
# security-scan.sh - 服务器安全扫描脚本

echo "========== 服务器安全扫描 =========="
echo "时间: $(date)"
echo ""

# 检查SSH配置
echo "[SSH配置检查]"
grep -E "^(Port|PermitRootLogin|PasswordAuthentication)" /etc/ssh/sshd_config
echo ""

# 检查开放端口
echo "[开放端口]"
ss -tlnp
echo ""

# 检查失败登录
echo "[最近失败登录]"
grep "Failed password" /var/log/auth.log | tail -10
echo ""

# 检查系统更新
echo "[待更新包]"
apt list --upgradable 2>/dev/null | head -10
echo ""

# 检查磁盘使用
echo "[磁盘使用]"
df -h
echo ""

# 检查异常进程
echo "[高CPU进程]"
ps aux --sort=-%cpu | head -5
echo ""

echo "========== 扫描完成 =========="

八、安全检查清单

生产环境安全Checklist:
  • ✅ SSH已修改端口,禁用密码登录
  • ✅ fail2ban已安装并配置
  • ✅ 防火墙已启用,仅开放必要端口
  • ✅ root登录已禁用
  • ✅ 系统已更新到最新版本
  • ✅ 文件权限已检查并修复
  • ✅ 日志审计已配置
  • ✅ 入侵检测系统已安装
  • ✅ 自动备份已配置
  • ✅ 安全扫描脚本已部署

总结

服务器安全是一个持续的过程,需要定期检查和更新。本文提供的加固方案涵盖了SSH、防火墙、系统、服务、检测、日志等多个层面,按照这个清单执行可以显著提升服务器安全性。

如果需要专业的安全评估和加固服务,欢迎联系17老师。

关于17老师:AI应用·数字化管理·全栈开发·网络安全全栈专家。联系邮箱:j.d88888888@qq.com,微信:AFIST17
上一篇
MES系统开发实战
下一篇
Docker+K8s部署指南