前言
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