当前位置:首页>Linux>Linux服务器安全加固速查手册:SSH、防火墙、审计一步到位

Linux服务器安全加固速查手册:SSH、防火墙、审计一步到位

  • 2026-09-10 17:15:18
Linux服务器安全加固速查手册:SSH、防火墙、审计一步到位

写在前面:一台裸奔的Linux服务器

一台默认安装的Linux服务器,暴露的攻击面远超想象:多余的RPM包、开放的网络服务、宽松的SSH配置、未启用的审计系统。

安全加固不是一次性操作,而是一套从安装到运行的全生命周期清单。本文按CIS Benchmark框架梳理加固要点,每一步都给出可直接执行的配置。


阅读指南

•适合谁:Linux运维、DevOps、安全工程师

•阅读时间:18分钟

•实操占比:80%命令可直接复制执行

•难度:中高级


一、系统最小化:只装需要的

核心思路:只装需要的,不装可能需要的。

包管理裁剪

# RHEL/CentOS:审计已安装的包
rpm -qa --queryformat '%{SIZE} %{NAME}\n' | sort -rn | head -30

# 移除已知不需要的危险包
dnf remove -y ypbind rsh-server ypserv telnet-server talk-server

# Debian/Ubuntu:查看手动安装的包
apt-mark showmanual

# 移除不需要的服务包
apt purge -y rsh-client rsh-redone-server telnetd tftpd xinetd

服务裁剪

# 列出所有已启用的服务
systemctl list-unit-files --type=service --state=enabled

# 关闭非必要服务(常见可关闭项)
systemctl disable --now avahi-daemon cups bluetooth nfs-server 2>/dev/null

二、SSH加固:服务器的第一道门

SSH是Linux服务器最主要的远程入口,也是攻击者首要目标。

生产环境推荐配置

# /etc/ssh/sshd_config
Port 22022 # 修改默认端口
Protocol 2

# 认证
PermitRootLogin no # 禁止root直接登录
PasswordAuthentication no # 禁用密码认证
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30

# 会话管理
ClientAliveInterval 300
ClientAliveCountMax 2
X11Forwarding no
AllowTcpForwarding no

# 访问控制
AllowGroups sshusers # 仅允许指定组
LogLevel VERBOSE # 记录详细日志

创建SSH用户组

# 创建专用SSH用户组
groupadd sshusers
usermod -aG sshusers ops_user

# 配置密钥认证
mkdir -p /home/ops_user/.ssh
chmod 700 /home/ops_user/.ssh
echo "ssh-ed25519 AAAAC3Nza... user@workstation" > /home/ops_user/.ssh/authorized_keys
chmod 600 /home/ops_user/.ssh/authorized_keys

# 重启前务必验证配置语法
sshd -t && systemctl restart sshd

重要:修改SSH配置后,不要关闭当前终端,另开一个终端验证能正常登录后再退出旧会话。

Fail2ban暴力破解防护

# 安装
dnf install -y fail2ban # RHEL
apt install -y fail2ban # Debian/Ubuntu

# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 22022
filter = sshd
maxretry = 3
bantime = 3600

systemctl enable --now fail2ban
fail2ban-client status sshd # 查看封禁状态

三、强制访问控制:SELinux与AppArmor

SELinux(RHEL/CentOS/Fedora)

生产环境应保持Enforcing模式,而非简单关闭。

# 查看当前模式
getenforce

# 临时切换
setenforce 0 # Permissive(仅记录,不拦截)
setenforce 1 # Enforcing(实际拦截)

# 永久设置
sed -i 's/^SELINUX=.*/SELINUX=enforcing/' /etc/selinux/config

排查方式:服务因SELinux无法正常工作时,分析审计日志而非关闭SELinux。

# 查看最近的AVC拒绝日志
ausearch -m AVC -ts recent

# 生成并应用自定义策略模块
ausearch -m AVC -ts today | audit2allow -M mycustompol
semodule -i mycustompol.pp

AppArmor(Ubuntu/Debian)

# 查看状态
apparmor_status

# 切换profile模式
aa-complain /etc/apparmor.d/usr.sbin.mysqld # 仅记录
aa-enforce /etc/apparmor.d/usr.sbin.mysqld # 实际拦截

四、auditd审计系统

auditd记录系统调用和关键文件访问,是合规审计的核心工具。

安装与配置

dnf install -y audit           # RHEL
apt install -y auditd # Debian/Ubuntu
systemctl enable --now auditd

核心审计规则

# /etc/audit/rules.d/audit.rules

# 1. 监控登录相关文件篡改
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity

# 2. 监控SSH配置变更
-w /etc/ssh/sshd_config -p wa -k ssh_config

# 3. 监控系统时间修改
-a always,exit -F arch=b64 -S adjtimex,settimeofday,clock_settime -k time-change

# 4. 监控内核模块加载
-w /sbin/insmod -p x -k modules
-w /sbin/rmmod -p x -k modules
# 重新加载规则
augenrules --load
auditctl -l

# 日志分析
ausearch -ts recent # 最近10分钟
ausearch -k identity # 按key查询
aureport --summary # 生成可读报告

五、防火墙规则

firewalld(RHEL/CentOS)

# 查看当前区域和规则
firewall-cmd --get-default-zone
firewall-cmd --list-all

# 放行业务端口(永久生效)
firewall-cmd --permanent --add-port=22022/tcp # SSH
firewall-cmd --permanent --add-port=443/tcp # HTTPS

# 限制SSH来源IP(仅允许运维网段)
firewall-cmd --permanent --new-zone=ssh-restricted
firewall-cmd --permanent --zone=ssh-restricted --add-source=10.0.1.0/24
firewall-cmd --permanent --zone=ssh-restricted --add-port=22022/tcp

# 重新加载
firewall-cmd --reload

nftables(现代Linux推荐)

nftables是iptables的继任者,配置语法更统一:

# /etc/nftables.conf
#!/usr/sbin/nft -f

flush ruleset

table inet filter {
chain input {
type filter hook input priority 0; policy drop;
iif "lo" accept
ct state established,related accept
icmp type echo-request limit rate 5/second accept
tcp dport 22022 ct state new limit rate 5/minute accept
tcp dport { 80, 443 } accept
limit rate 10/minute log prefix "nft-drop: " drop
}
}

nft -f /etc/nftables.conf
systemctl enable nftables

六、安全基线检查脚本

以下脚本整合上述检查项,可作为定期巡检工具:

#!/bin/bash
# security_baseline_check.sh
# 执行只读检查,不修改任何系统配置

PASS=0; FAIL=0; WARN=0
REPORT="/tmp/security_baseline_$(date +%Y%m%d_%H%M%S).txt"

check() {
local desc="$1"; local result="$2"; local detail="${3:-}"
if [ "$result" = "PASS" ]; then
echo "[PASS] $desc" | tee -a "$REPORT"; PASS=$((PASS + 1))
elif [ "$result" = "FAIL" ]; then
echo "[FAIL] $desc - $detail" | tee -a "$REPORT"; FAIL=$((FAIL + 1))
else
echo "[WARN] $desc - $detail" | tee -a "$REPORT"; WARN=$((WARN + 1))
fi
}

# 检查SSH加固
SSHD_CONFIG="/etc/ssh/sshd_config"
grep -q "^PermitRootLogin.*no" "$SSHD_CONFIG" && check "SSH禁止root登录" "PASS" || check "SSH禁止root登录" "FAIL" "未配置"
grep -q "^PasswordAuthentication.*no" "$SSHD_CONFIG" && check "SSH禁用密码认证" "PASS" || check "SSH禁用密码认证" "FAIL" "未配置"

# 检查防火墙
systemctl is-active --quiet firewalld 2>/dev/null || systemctl is-active --quiet nftables 2>/dev/null || systemctl is-active --quiet ufw 2>/dev/null
if [ $? -eq 0 ]; then
check "防火墙运行状态" "PASS"
else
check "防火墙运行状态" "FAIL" "未检测到运行中的防火墙"
fi

# 检查SELinux/AppArmor
if command -v getenforce >/dev/null 2>&1; then
[ "$(getenforce)" = "Enforcing" ] && check "SELinux模式" "PASS" || check "SELinux模式" "WARN" "建议Enforcing"
fi

# 检查auditd
systemctl is-active --quiet auditd 2>/dev/null && check "auditd运行中" "PASS" || check "auditd运行状态" "WARN" "未运行"

# 检查危险服务
DANGER_SERVICES="telnet rsh rlogin tftp xinetd ypbind"
for svc in $DANGER_SERVICES; do
systemctl is-enabled "$svc" 2>/dev/null | grep -q enabled && check "危险服务$svc" "FAIL" "已启用"
done

echo "===============================" | tee -a "$REPORT"
echo "汇总: PASS=$PASS FAIL=$FAIL WARN=$WARN" | tee -a "$REPORT"
echo "详细报告: $REPORT"

[ "$FAIL" -gt 0 ] && exit 1 || exit 0

部署定时检查:

chmod +x security_baseline_check.sh
sudo ./security_baseline_check.sh

# 配置定时检查(每周一早上8点)
# crontab -e
0 8 * * 1 /opt/scripts/security_baseline_check.sh >> /var/log/security_baseline.log 2>&1

七、加固清单速查表

类别 关键措施 优先级
系统最小化 最小安装、裁剪服务、移除危险包 高
SSH加固 密钥认证、改端口、禁root、Fail2ban 高
强制访问控制 SELinux Enforcing / AppArmor 高
审计系统 auditd配置规则、定期分析 中
防火墙 默认拒绝、最小端口放行 高
密码策略 最小长度12、复杂度、定期检查 中
内核加固 SYN Cookies、禁IP转发 中
定期巡检 基线脚本定时运行、漏洞修复 中

思考题

1.你的生产环境SELinux是Enforcing还是Disabled? 如果禁用了,考虑过重新启用吗?

2.你的SSH配置中MaxAuthTries设了多少? 默认值6在暴力破解面前够用吗?

3.文中基线检查脚本你能跑通几项? FAIL项有多少?打算怎么修?


本文是公众号速查版,原文含完整CIS Benchmark框架对照、详细auditd规则解析、nftables高级配置及安全合规检查方案。点击文章底部左侧「阅读原文」查看完整版,网站所有文章均中英双语,方便技术团队对照学习。

喜欢这篇文章? 点击「在看」让更多人看到,或转发给你的运维小伙伴。安全无小事,加固从清单开始。

最新文章

随机文章