跳转至

通用安全基线配置规范 🔐

版本: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 设置为 permissivedisabled。任何因 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 扫描无高危未修复项