通用安全基线配置规范 🔐
版本:1.0
适用范围:所有生产服务器(RHEL 9.x+、Rocky Linux 9、AlmaLinux 9、Debian Stable、Ubuntu LTS)
1. 核心原则
- 最小化:仅安装和启用业务必需的服务与端口
- 默认拒绝:所有访问控制默认禁止,显式放行
- 强制审计:关键文件、命令、登录行为全部留痕
- 纵深防御:内核参数 + SELinux + 防火墙 + 服务加固多层叠加
- 定期验证:上线前、变更后、每季度执行合规扫描
2. 系统级安全基线
2.1 最小化安装与包清理
生产服务器推荐使用 Minimal Install 模式。安装完成后移除高危或非必需软件包(执行前确认业务不依赖):
dnf -y remove \
telnet ftp rsh tftp ypbind xinetd \
avahi cups nfs-utils samba
禁用不必要的服务:
systemctl disable --now \
avahi-daemon cups postfix
2.2 SELinux(必须 enforcing 模式)
强制要求
生产环境严禁将 SELinux 设置为 permissive 或 disabled。任何因 SELinux 导致的服务问题必须通过正确的上下文修复,而非关闭 SELinux。
检查当前模式:
getenforce
# 必须返回 Enforcing
sestatus | grep "Current mode"
# Current mode: enforcing
确认配置文件持久化:
grep SELINUX= /etc/selinux/config
# SELINUX=enforcing
修复文件上下文错误(服务启动失败常见原因):
restorecon -Rv /var/www /opt/app /opt/logs
2.3 防火墙基线(firewalld)
默认 zone 策略设置为 drop,仅显式放行必要端口:
# 设置默认 zone 为 drop
firewall-cmd --set-default-zone=drop
# 放行业务端口(以典型 Web + 自定义 SSH 为例)
firewall-cmd --permanent --zone=drop --add-service=http
firewall-cmd --permanent --zone=drop --add-service=https
firewall-cmd --permanent --zone=drop --add-port=2222/tcp
# 重载生效
firewall-cmd --reload
# 验证
firewall-cmd --list-all
ss -tuln | grep -v "127.0.0.1"
2.4 SSH 服务加固
编辑 /etc/ssh/sshd_config,核心配置如下:
Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 0
X11Forwarding no
AllowTcpForwarding no
UseDNS no
Banner /etc/ssh/banner.txt
# 可选:限制允许登录的用户和来源 IP
AllowUsers ops
应用变更(SELinux + 防火墙 + 服务三步联动):
# 1. SELinux 放行新端口
semanage port -a -t ssh_port_t -p tcp 2222
# 2. 防火墙放行新端口
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
# 3. 验证语法并重启服务
sshd -t && systemctl restart sshd
# 验证
ss -tuln | grep :2222
2.5 密码与账户策略
编辑 /etc/security/pwquality.conf:
minlen = 14
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
maxrepeat = 3
maxclassrepeat = 3
dictcheck = 1
usercheck = 1
编辑 /etc/login.defs:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_WARN_AGE 7
锁定无用系统账户:
passwd -l games news uucp gopher ftp
配置登录失败锁定(/etc/security/faillock.conf):
deny = 5
unlock_time = 600
fail_interval = 900
even_deny_root = true
2.6 关键 sysctl 安全参数
创建 /etc/sysctl.d/99-security.conf:
# 禁止接受 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
# 禁止 IP 转发(非路由器节点)
net.ipv4.ip_forward = 0
# 防 SYN Flood
net.ipv4.tcp_syncookies = 1
# 反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 禁止广播 ping
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 信息泄露防护
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
kernel.randomize_va_space = 2
# 文件系统硬链接 / 软链接保护
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
应用:
sysctl --system
2.7 auditd 审计基线
启用 auditd 并添加核心规则(/etc/audit/rules.d/99-baseline.rules):
# 删除所有已有规则,重新加载
-D
# 缓冲区大小
-b 8192
# 监控特权命令执行
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_commands
# 监控关键身份文件变更
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d -p wa -k sudoers
# 监控 SSH 配置变更
-w /etc/ssh/sshd_config -p wa -k sshd_config
# 监控登录事件
-w /var/log/lastlog -p wa -k login
-w /var/run/faillock -p wa -k login
# 监控网络配置变更
-w /etc/NetworkManager/system-connections -p wa -k network_config
# 监控 SELinux 配置变更
-w /etc/selinux -p wa -k selinux_config
加载规则:
augenrules --load
systemctl restart auditd
# 验证规则已加载
auditctl -l
3. 合规扫描
快速扫描(lynis)
dnf install -y lynis
lynis audit system
OpenSCAP(等保对标)
dnf install -y openscap-scanner scap-security-guide
oscap xccdf eval \
--profile xccdf_org.ssgproject.content_profile_stig \
--results /tmp/stig-results.xml \
--report /tmp/stig-report.html \
/usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml
4. 检查清单(上线 / 变更必验)
-
getenforce返回Enforcing -
firewall-cmd --list-all仅显示业务必需端口,默认 zone 为drop - SSH:禁用 root 登录 + 禁用密码认证 + 端口已修改
- 密码复杂度 ≥ 14 位 + 90 天过期 + 失败锁定已配置
-
sysctl --system安全参数已加载并验证 -
auditctl -l显示核心规则已生效 -
systemctl is-active auditd返回active - lynis / OpenSCAP 扫描无高危未修复项