Linux服务器安全加固完整指南:从入门到企业级防护

6 阅读2分钟

前言

根据统计,一台暴露在公网的Linux服务器,平均每天会遭受数千次SSH暴力破解尝试。本文从实战角度,系统讲解Linux服务器安全加固的完整方案。

一、SSH安全加固

1.1 禁用root直接登录

风险:root账号权限最高,一旦被破解后果严重

加固方案

# 创建普通用户
useradd -m -s /bin/bash admin
passwd admin

# 添加sudo权限
echo "admin ALL=(ALL:ALL) ALL" >> /etc/sudoers

# 禁用root登录
sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart sshd

1.2 修改默认SSH端口

风险:22端口是黑客扫描器的首要目标

加固方案

# 修改为随机端口(如 23456)
sed -i 's/^#Port 22/Port 23456/' /etc/ssh/sshd_config

# 防火墙放行新端口
ufw allow 23456/tcp
ufw delete allow 22/tcp

systemctl restart sshd

1.3 禁用密码登录,强制密钥认证

风险:密码可被暴力破解,密钥几乎无法破解

加固方案

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

# 上传公钥到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@server_ip

# 禁用密码登录
sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

systemctl restart sshd

二、自动化防御:fail2ban

2.1 安装配置

# 安装
apt install fail2ban -y

# 配置 /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 23456
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600

systemctl restart fail2ban

2.2 查看封禁状态

# 查看被封IP
fail2ban-client status sshd

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

三、防火墙配置

3.1 UFW基础配置

# 启用防火墙
ufw enable

# 默认策略:拒绝所有入站,允许所有出站
ufw default deny incoming
ufw default allow outgoing

# 只开放必要端口
ufw allow 23456/tcp  # SSH
ufw allow 80/tcp     # HTTP
ufw allow 443/tcp    # HTTPS

# 查看规则
ufw status numbered

四、系统安全加固

4.1 内核参数优化

# /etc/sysctl.conf 添加
# 防止SYN洪水攻击
net.ipv4.tcp_syncookies = 1

# 忽略ICMP ping请求
net.ipv4.icmp_echo_ignore_all = 1

# 防止IP欺骗
net.ipv4.conf.all.rp_filter = 1

# 应用配置
sysctl -p

4.2 定期更新系统

# 自动安全更新
apt install unattended-upgrades -y
dpkg-reconfigure -plow unattended-upgrades

五、日志审计与监控

5.1 登录日志监控

# 查看SSH登录记录
last -a

# 查看失败登录
lastb

# 实时监控登录尝试
tail -f /var/log/auth.log | grep sshd

5.2 异常检测脚本

#!/bin/bash
# 检测异常登录尝试
THRESHOLD=100
COUNT=$(grep "Failed password" /var/log/auth.log | wc -l)

if [ $COUNT -gt $THRESHOLD ]; then
    echo "⚠️ 检测到 $COUNT 次失败登录尝试!" | mail -s "安全告警" admin@example.com
fi

六、安全检查清单

#!/bin/bash
# 安全检查脚本

echo "=== SSH配置检查 ==="
grep "^PermitRootLogin" /etc/ssh/sshd_config
grep "^PasswordAuthentication" /etc/ssh/sshd_config
grep "^Port" /etc/ssh/sshd_config

echo "=== 防火墙状态 ==="
ufw status

echo "=== fail2ban状态 ==="
fail2ban-client status

echo "=== 最近登录记录 ==="
last -10

echo "=== 失败登录统计 ==="
lastb | wc -l

总结

防护层级措施难度
基础改端口+禁root+密钥登录
进阶fail2ban+防火墙+日志监控⭐⭐
高级堡垒机+IDS+SELinux⭐⭐⭐

记住:安全加固不是一次性工作,需要持续监控和更新。