📑 目录
1. NIST SP 800-53 概述与邮件安全映射框架
NIST SP 800-53(Security and Privacy Controls for Information Systems and Organizations,Rev. 5,2020年发布)是美国国家标准与技术研究院制定的信息系统安全与隐私控制标准。该标准依据FISMA(Federal Information Security Modernization Act of 2014)的要求,为联邦信息系统提供了一套全面的安全控制目录,同时也被全球各行业广泛采纳作为安全合规的参考框架。
SP 800-53 Rev. 5 包含 20 个控制大类(Control Families),合计超过 400 项安全控制。本指南针对邮件系统实际场景,精选 5 个最相关的控制系列进行深度映射。
| 系列ID | 控制系列名称 | 控制项数 | 邮件系统映射场景 |
|---|---|---|---|
| AC | Access Control(访问控制) | 25 | IMAP/POP3 访问策略、SMTP 中继权限、应用层访问控制 |
| AU | Audit and Accountability(审计与问责) | 16 | syslog 邮件审计、SMTP/IMAP 事件日志、安全事件追溯 |
| CM | Configuration Management(配置管理) | 14 | Postfix 基线配置、Dovecot 安全配置、变更管理 |
| IA | Identification and Authentication(标识与认证) | 14 | SMTP AUTH、Dovecot SASL、密码策略、多因素认证 |
| SC | System and Communications Protection(系统和通信保护) | 57 | STARTTLS、MTA-STS、DKIM 签名、传输加密、静态加密 |
本映射指南还参考了 NIST SP 800-177 Rev. 1(Trustworthy Email)中的邮件安全最佳实践。SP 800-177 直接针对企业邮件系统安全,与 800-53 的控制项形成了互补映射关系。在实际合规审计中,建议将两份文档交叉使用,以获得最完整的邮件安全控制覆盖。
2. 访问控制(AC)系列:IMAP/SMTP 策略映射
2.1 AC-2: Account Management(账户管理)
控制描述:定义信息系统中用户账户的创建、激活、修改、审查、禁用和删除规程,确保只有被授权的用户才能访问系统资源。
邮件系统实施:
# Dovecot 账户管理基础配置
# /etc/dovecot/conf.d/auth-passwd.conf
passdb {
driver = pam
# 生产环境推荐使用 SQL 后端
# driver = sql
# args = /etc/dovecot/dovecot-sql.conf.ext
}
# 创建邮件账户:useradd -m -s /sbin/nologin -G mail user@example.com
passwd user@example.com
# 禁用账户(保留邮箱数据但禁止登录)
passwd -l user@example.com
# 定期审查不活跃账户的脚本
cat > /usr/local/bin/audit-inactive-mail-accounts.sh << 'SH'
#!/bin/bash
# 审查 90 天未登录的邮件账户
INACTIVE_DAYS=${1:-90}
echo "=== 超过 ${INACTIVE_DAYS} 天未登录的账户 ==="
lastlog -b "${INACTIVE_DAYS}" | grep -v "Never logged in" | awk '{print $1}'
echo ""
echo "=== 从未登录过的账户 ==="
lastlog | grep "Never logged in" | awk '{print $1}'
SH
chmod 755 /usr/local/bin/audit-inactive-mail-accounts.sh
# AC-2(3) - 禁用账户的自动审核
cat > /usr/local/bin/check-disabled-accounts.sh << 'SH'
#!/bin/bash
echo "=== 当前被禁用的账户(passwd 状态为 L) ==="
passwd -S -a 2>/dev/null | grep " L " | awk '{print $1}'
SH
2.2 AC-3: Access Enforcement(访问实施)
控制描述:强制实施已授权的访问控制策略,确保主体对客体的访问符合安全策略规定。
邮件系统实施:
- SMTP 提交认证:强制要求提交端口 587/465 使用 SASL 认证
- IMAP 访问限制:绑定 IP 范围限制 IMAP 访问来源
- 中继控制:使用 Postfix
smtpd_relay_restrictions精确控制邮件中继
# /etc/postfix/main.cf 访问控制配置
# 中继权限控制:仅允许可信网络和已认证用户中继
smtpd_relay_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
# 强制提交端口(587)使用 SASL 认证
# /etc/postfix/master.cf
submission inet n - n - - smtpd
-o smtpd_sasl_auth_enable=yes
-o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# Dovecot 用户名规范化
# /etc/dovecot/conf.d/10-auth.conf
auth_username_format = %Lu
auth_username_translation = %Lu
# IMAP 访问的 IP 限制(iptables)
iptables -A INPUT -p tcp --dport 993 -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -p tcp --dport 993 -s 172.16.0.0/12 -j ACCEPT
iptables -A INPUT -p tcp --dport 993 -j DROP
2.3 AC-6: Least Privilege(最小权限)
控制描述:确保系统用户和服务仅拥有完成任务所需的最小权限,降低权限滥用风险。
邮件系统实施:
# Postfix 进程以最小权限运行(非 root)
# /etc/postfix/main.cf
mail_owner = postfix
setgid_group = postdrop
# Dovecot 进程隔离
# Dovecot 各服务进程以 auth、dovecot 等独立用户运行
# 存储用户使用虚拟用户 vmail 隔离
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/%d/%u
}
# Postfix 使用 smtpd chroot 隔离
# /etc/postfix/main.cf
# smtpd 进程 chroot 到队列目录,降低提权风险
smtpd_chroot = yes
2.4 AC-7: Unsuccessful Logon Attempts(登录失败处理)
控制描述:限制一段时间内允许的连续登录失败次数,并在超过阈值后采取锁定或延迟措施。
邮件系统实施:
# Dovecot 登录失败延迟
# /etc/dovecot/conf.d/10-auth.conf
auth_failure_delay = 2 secs
# Postfix SMTP AUTH 暴力破解防护(fail2ban)
# /etc/fail2ban/jail.d/postfix-auth.conf
[postfix-auth]
enabled = true
port = smtp,submission,submissions,smtps
filter = postfix-auth
logpath = /var/log/mail.log
maxretry = 5
bantime = 3600
3. 审计与问责(AU)系列:邮件审计配置
3.1 AU-2: Event Logging(事件日志记录)
控制描述:确定信息系统需要记录的安全事件类型,确保可审计事件得到充分记录。
邮件系统各组件日志映射:
| 审计事件类型 | Postfix 日志 | Dovecot 日志 |
|---|---|---|
| SMTP 连接/断开 | /var/log/mail.log | 不适用 |
| 邮件接收与投递 | /var/log/mail.log | 不适用 |
| SMTP 认证成功/失败 | /var/log/mail.log | 不适用 |
| IMAP/POP3 登录/登出 | 不适用 | /var/log/dovecot.log 或 mail.log |
| TLS 握手成功/失败 | /var/log/mail.log | /var/log/dovecot.log |
| 配置变更 | 使用 auditd 监控 | 使用 auditd 监控 |
| 账户禁用/状态变更 | /var/log/auth.log | /var/log/auth.log |
# Postfix 日志详细级别配置
# /etc/postfix/main.cf
# 开启 TLS 日志以便审计加密连接
smtpd_tls_loglevel = 1 # 1=摘要, 2=详细握手信息
smtp_tls_loglevel = 1
# 通知类别配置
smtpd_log_access_permit_actions = all
notify_classes = resource,software,bounce,2bounce,delay,policy,protocol
# Dovecot 日志配置
# /etc/dovecot/conf.d/10-logging.conf
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot-info.log
debug_log_path = /var/log/dovecot-debug.log
auth_verbose = yes
auth_debug = no
mail_debug = no
# 邮件操作日志插件
mail_log_prefix = "%s(%u): "
plugin {
mail_log_events = delete undelete expunge copy mailbox_create mailbox_delete
mail_log_fields = uid box msgid size
}
3.2 AU-3: Content of Audit Records(审计记录内容)
控制描述:要求审计记录包含足够的信息以确定事件发生的时间、来源、类型和结果。
SP 800-53 Rev.5 要求的审计记录字段:
- 事件类型
- 事件发生时间
- 事件来源(用户/进程/IP地址)
- 事件结果(成功/失败)
- 事件相关的系统组件标识
# Postfix 日志满足 AU-3 要求的示例
# 日志格式(RFC 3164 syslog):
# Jul 20 14:23:45 mx postfix/smtpd[12345]: connect from unknown[203.0.113.5]
# - 事件类型: SMTP 连接
# - 时间戳: Jul 20 14:23:45
# - 来源IP: 203.0.113.5
# - 结果: success (connect)
# - 组件: postfix/smtpd
# 使用 rsyslog 结构化日志(RFC 5424 格式)
# /etc/rsyslog.d/22-mail-structured.conf
$template MailStructured,"<%pri%>1 %timegenerated:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [mail@28301 source="%syslogtag%" facility="%syslogfacility-text%"] %msg%
"
if $programname startswith 'postfix' or $programname startswith 'dovecot'
then /var/log/structured-mail.log;MailStructured
# 集中日志审计服务器转发
# 将日志发送到集中式 SIEM 系统(TCP 加密传输)
# /etc/rsyslog.conf
*.* @@logserver.example.com:514 # TCP 传输 (RFC 5425 TLS)
3.3 AU-6: Audit Record Review, Analysis, and Reporting(审计记录审查与分析)
控制描述:定期审查和分析审计记录,识别异常行为并生成安全报告。
# 自动化审计报告生成脚本
cat > /usr/local/bin/daily-auth-audit.sh << 'SH'
#!/bin/bash
# 分析过去 24 小时的登录失败事件
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
REPORT="/var/reports/auth-failures-${YESTERDAY}.txt"
echo "=== SMTP 登录失败统计 ($YESTERDAY) ===" > "$REPORT"
grep "$YESTERDAY" /var/log/mail.log | grep "SASL LOGIN authentication failed" | sed 's/.*client=\(.*\)\]$//' | sort | uniq -c | sort -rn | head -20 >> "$REPORT"
echo "" >> "$REPORT"
echo "=== IMAP 登录失败统计 ($YESTERDAY) ===" >> "$REPORT"
grep "$YESTERDAY" /var/log/dovecot.log | grep "auth failed" | sed 's/.*rip=\([^,]*\).*//' | sort | uniq -c | sort -rn | head -20 >> "$REPORT"
# 阈值告警:超过 50 次失败则发送告警
ABNORMAL_COUNT=$(wc -l < "$REPORT")
if [ "$ABNORMAL_COUNT" -gt 50 ]; then
mail -s "[SECURITY] 邮件认证异常告警 - ${YESTERDAY} (${ABNORMAL_COUNT}次)" security@example.com < "$REPORT"
fi
SH
chmod 755 /usr/local/bin/daily-auth-audit.sh
# crontab: 每天早上 08:00 执行
echo "0 8 * * * /usr/local/bin/daily-auth-audit.sh" > /etc/cron.d/mail-auth-audit
3.4 AU-9: Protection of Audit Information(审计信息保护)
控制描述:保护审计记录和审计工具的完整性,防止未授权的访问、修改或删除。
# 审计日志保护措施
# 1. 设置日志文件为 append-only(仅追加)属性
chattr +a /var/log/mail.log
chattr +a /var/log/dovecot.log
chattr +a /var/log/structured-mail.log
# 2. 日志异地备份到专门的日志服务器(防止攻击者篡改本地日志)
# 在 rsyslog 配置中设置远程日志转发
# $template RemoteMail, "/var/log/remote/%HOSTNAME%/mail.log"
# if $syslogfacility-text == 'mail' then -?RemoteMail
# & stop
# 3. 可选:使用 syslog-ng + HSM 审计日志哈希验证
# /etc/syslog-ng/conf.d/mail-hash.conf
# 需要 syslog-ng PE 版本 + Linux Audit 子系统
4. 配置管理(CM)系列:Postfix/Dovecot 基线
4.1 CM-2: Baseline Configuration(基线配置)
控制描述:制定和维护信息系统的基线配置,确保系统部署和运行的一致性。
# 邮件系统基线配置文件(参考 SP 800-177 Rev.1)
cat > /etc/mail-baseline.conf << 'CONF'
# ===== Postfix TLS 基线 (SP 800-177 Rev.1 要求) =====
SMTPD_TLS_SECURITY_LEVEL = may
SMTPD_TLS_MANDATORY_PROTOCOLS = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
SMTPD_TLS_PROTOCOLS = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
SMTP_TLS_SECURITY_LEVEL = may
SMTP_TLS_MANDATORY_PROTOCOLS = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
# ===== Dovecot 基线配置 =====
SSL = required
SSL_MIN_PROTOCOL = TLSv1.2
AUTH_FAILURE_DELAY = 2
# ===== 审计日志基线 =====
SMTPD_TLS_LOGLEVEL >= 1
SMTP_TLS_LOGLEVEL >= 1
AUTH_VERBOSE = yes
CONF
# 基线合规检查脚本
cat > /usr/local/bin/check-mail-baseline.sh << 'SH'
#!/bin/bash
# 自动比对 Postfix 当前配置与基线配置
echo "=== Postfix 基线检查 ==="
BASELINE="/etc/mail-baseline.conf"
CURRENT_POSTFIX=$(postconf -n)
while IFS='=' read -r param value; do
param=$(echo "$param" | xargs)
value=$(echo "$value" | xargs)
[ -z "$param" ] && continue
current=$(postconf -n "$param" 2>/dev/null | cut -d= -f2 | xargs)
if [ "$current" != "$value" ]; then
echo " 不符合: $param = $current (期望值: $value)"
FAIL=1
else
echo " 符合: $param = $current"
fi
done < <(grep -E '^[A-Z_]+\s*=' "$BASELINE" | grep -v '^#')
echo ""
echo "=== Dovecot 基线检查 ==="
doveconf -n 2>/dev/null | grep -E "ssl|auth_failure" | while read line; do
echo " $line"
done
SH
chmod 755 /usr/local/bin/check-mail-baseline.sh
4.2 CM-6: Configuration Settings(配置设置)
控制描述:建立和维护信息系统的安全配置清单(checklist),通常参考 CIS Benchmarks 或 DISA STIG 等业界标准。
# Postfix 安全配置清单(参考 CIS Postfix Benchmark v2.0)
# 1. banner 隐藏 — 不泄露软件版本
smtpd_banner = $myhostname ESMTP
# /etc/postfix/main.cf
# 2. 禁用 VRFY 和 EXPN 命令
disable_vrfy_command = yes
# 3. 限制邮件大小(防止 DoS 攻击)
message_size_limit = 25600000
# 4. 限制单次连接收件人数
smtpd_recipient_limit = 100
# 5. 限制错误次数
smtpd_soft_error_limit = 10
smtpd_hard_error_limit = 20
# 6. 禁用不必要的内部服务
# /etc/postfix/master.cf 中注释掉不需要的服务
# 127.0.0.1:10025 inet n - n - - smtpd
# pickup fifo n - n 60 1 pickup
4.3 CM-8: Information System Component Inventory(系统组件清单)
控制描述:建立信息系统的组件清单,包括软硬件版本和配置状态。
# 邮件系统组件清单生成脚本
cat > /usr/local/bin/mail-component-inventory.sh << 'SH'
#!/bin/bash
# 生成 JSON 格式的组件清单元数据
VERSION=$(date +%Y%m%d)
cat << JSON
{
"inventory_version": "$VERSION",
"system_name": "ztpop-email",
"components": [
{
"name": "postfix",
"version": "$(postconf -d mail_version 2>/dev/null | cut -d= -f2 | xargs || echo 'unknown')",
"role": "MTA (SMTP daemon)",
"config_files": ["/etc/postfix/main.cf", "/etc/postfix/master.cf"]
},
{
"name": "dovecot",
"version": "$(dovecot --version 2>/dev/null || echo 'unknown')",
"role": "MDA/IMAP/POP3",
"config_files": ["/etc/dovecot/dovecot.conf", "/etc/dovecot/conf.d/*.conf"]
},
{
"name": "opendkim",
"version": "$(opendkim -V 2>&1 | head -1 || echo 'unknown')",
"role": "DKIM signing and verification",
"config_files": ["/etc/opendkim.conf"]
}
],
"listening_ports": [
$(ss -tlnp | grep -E 'master|dovecot' | awk '{printf "{"port":%s,"process":"%s"},", $4, $7}')
]
}
JSON
SH
chmod 755 /usr/local/bin/mail-component-inventory.sh
5. 标识与认证(IA)系列:SMTP AUTH/SASL 映射
5.1 IA-2: Identification and Authentication (Organizational Users)(用户标识与认证)
控制描述:要求信息系统为组织用户提供唯一的标识,并采用安全的认证机制验证用户身份。
# Dovecot 认证配置
# /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain login
# IA-2(1) 要求使用网络级认证——启用 CRAM-MD5
# auth_mechanisms = cram-md5 plain login
# IA-5 要求的密码查询策略
# /etc/dovecot/conf.d/auth-sql.conf.ext
password_query = SELECT username AS user, password AS password, 'maildir:/var/mail/%d/%n' AS userdb_mail FROM mailbox WHERE username = '%u' AND active = '1'
# 密码存储使用强哈希算法(SHA512-CRYPT / BLF-CRYPT)
# Dovecot 密码生成:doveadm pw -s SHA512-CRYPT
# 生成格式:{SHA512-CRYPT}$6$rounds=5000$...
5.2 IA-5: Authenticator Management(认证凭据管理)
控制描述:管理信息系统认证凭据的生成、分发、存储、变更、撤销和销毁全生命周期。
# 密码复杂度策略(PAM 配置)
# /etc/pam.d/dovecot 和 /etc/pam.d/passwd
password requisite pam_pwquality.so minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 enforce_for_root
# Dovecot 密码过期检查脚本
cat > /usr/local/bin/password-expiry-check.sh << 'SH'
#!/bin/bash
# 检查 Dovecot 用户密码到期情况
# 依赖 passwd-file 存储或系统 shadow 文件
PASSWD_FILE="/etc/dovecot/users"
if [ ! -f "$PASSWD_FILE" ]; then
echo "password-file 未配置,使用系统 shadow 审计"
exit 0
fi
while IFS=':' read -r user passwd_info; do
# 从系统 shadow 获取过期信息
shadow_entry=$(grep "^${user}:" /etc/shadow)
if [ -n "$shadow_entry" ]; then
last_change=$(echo "$shadow_entry" | cut -d: -f3)
max_days=$(echo "$shadow_entry" | cut -d: -f5)
if [ -n "$max_days" ] && [ "$max_days" -gt 0 ]; then
days_left=$(( last_change + max_days - $(date +%s) / 86400 ))
if [ "$days_left" -lt 30 ]; then
echo "WARNING: Password for $user expires in $days_left days"
fi
fi
fi
done < /etc/passwd | grep -E '^/{0,1}home' 2>/dev/null || true
SH
5.3 IA-2(1): Multi-factor Authentication(多因素认证)
控制描述:对特权账户和远程访问实施多因素认证,提升邮件系统登录安全性。
# Dovecot 多因素认证实施(密码 + TOTP)
# 第一因素:密码(something you know)
# 第二因素:TOTP(something you have)通过 PAM oath 模块集成
# 安装依赖
apt install oathtool libpam-oath
# 为用户配置 TOTP 密钥
cat > /usr/local/bin/setup-totp-for-user.sh << 'SH'
#!/bin/bash
USER=$1
if [ -z "$USER" ]; then
echo "使用方法: $0 "
exit 1
fi
SECRET=$(head -c 1024 /dev/urandom | base32 | head -1 | tr -d '=' | cut -c1-32)
echo "${USER}:${SECRET}" >> /etc/oath/users.oath
echo "TOTP 密钥: $SECRET"
echo "URI: otpauth://totp/${USER}?secret=${SECRET}&issuer=email.example.com"
echo "请使用 Authenticator App 扫描配置"
SH
# /etc/pam.d/dovecot 配置
# auth required pam_oath.so usersfile=/etc/oath/users.oath
# @include common-auth # 保留密码认证作为第一因素
6. 系统和通信保护(SC)系列:TLS/加密/反恶意邮件
6.1 SC-8: Transmission Confidentiality and Integrity(传输机密性与完整性)
控制描述:保护信息在传输过程中的机密性和完整性,防止未授权的数据泄露和篡改。
针对 SC-8 的邮件系统实施:参考 SP 800-177 Rev.1 传输安全要求
- SMTP 机会式 TLS(STARTTLS,RFC 3207)
- MTA-STS(RFC 8461)强制出站 TLS
- IMAP/POP3 强制 TLS(RFC 8314 不再支持明文)
- HTTPS 管理接口强制 TLS 1.2+
# Postfix 传输加密配置
# /etc/postfix/main.cf
# 入站 TLS(接收邮件时)
smtpd_tls_security_level = may
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_mandatory_ciphers = high
smtpd_tls_eecdh_grade = strong
# 出站 TLS(发送邮件时,使用 STARTTLS)
smtp_tls_security_level = may
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_ciphers = high
smtp_tls_eecdh_grade = strong
# 启用 MTA-STS 策略查询
smtp_tls_policy_maps = socketmap:inet:127.0.0.1:8461:postfix
6.2 SC-12: Cryptographic Key Establishment and Management(密码密钥建立与管理)
控制描述:建立和管理用于加密保护的密码密钥,包括密钥的生成、分发、存储、轮换和销毁。
# DKIM 密钥生成与管理
# 生成 DKIM 密钥对(2048 位 RSA)
opendkim-genkey -D /etc/opendkim/keys/ -d example.com -s 20260701
# /etc/opendkim.conf
Domain example.com
Selector 20260701
KeyFile /etc/opendkim/keys/20260701.private
Socket inet:8891@localhost
Canonicalization relaxed/simple
Mode sv
SubDomains no
AutoRestart yes
AutoRestartRate 5/1M
Background yes
DNSTimeout 5
SignatureAlgorithm rsa-sha256
# 密钥轮换策略(参考 NIST SP 800-57 Part 1 Rev.5)
# - RSA 2048 位密钥:1-2 年轮换一次
# - ECDSA P-256:2-3 年轮换一次
# - 旧密钥保留 30 天用于验证过渡期
cat > /usr/local/bin/dkim-key-rotation.sh << 'SH'
#!/bin/bash
# DKIM 密钥自动轮换脚本
DOMAIN="$1"
NEW_SELECTOR=$(date +%Y%m%d)
KEY_DIR="/etc/opendkim/keys"
# 生成新密钥
opendkim-genkey -D "$KEY_DIR" -d "$DOMAIN" -s "$NEW_SELECTOR"
chown opendkim:opendkim "$KEY_DIR/${NEW_SELECTOR}.private"
chmod 600 "$KEY_DIR/${NEW_SELECTOR}.private"
echo "新密钥选择器: $NEW_SELECTOR"
echo "DNS TXT 记录:"
cat "$KEY_DIR/${NEW_SELECTOR}.txt"
echo ""
echo "操作步骤:"
echo "1. 将上述 DNS TXT 记录发布到 ${NEW_SELECTOR}._domainkey.${DOMAIN}"
echo "2. 等待 48 小时确保 DNS 传播完毕"
echo "3. 更新 opendkim.conf 中的 Selector 为 $NEW_SELECTOR"
echo "4. 重启 opendkim 服务"
echo "5. 保留旧密钥 30 天后从 DNS 中移除"
SH
6.3 SC-13: Cryptographic Protection(密码保护)
控制描述:使用 FIPS 140-3 验证过的密码模块实现系统的密码保护功能。
# OpenSSL FIPS 模式配置(OpenSSL 3.x + FIPS 模块)
# /etc/ssl/openssl.cnf
# .include /etc/ssl/fipsmodule.cnf
# [openssl_init]
# fips = fips_sect
# 验证 OpenSSL 是否启用 FIPS 提供者
openssl list -providers | grep fips
# Postfix TLS 密码套件(符合 FIPS 140-3 要求)
# 参考 NIST SP 800-52 Rev.2 指南
smtpd_tls_mandatory_ciphers = high
smtpd_tls_eecdh_grade = strong
# 仅允许强密码套件
smtpd_tls_ciphers = high
tls_high_cipherlist = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
# Dovecot TLS 密码套件
# /etc/dovecot/conf.d/10-ssl.conf
ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
6.4 SC-28: Protection of Information at Rest(静态信息保护)
控制描述:保护存储在介质上的信息的机密性和完整性,防止未授权的访问和篡改。
# 邮件存储卷加密(dm-crypt/LUKS)
# 使用全盘加密保护邮件存储
cryptsetup luksFormat /dev/sdb1
cryptsetup luksOpen /dev/sdb1 mailstore_vault
mkfs.ext4 /dev/mapper/mailstore_vault
mount /dev/mapper/mailstore_vault /var/mail
# /etc/crypttab
mailstore_vault /dev/sdb1 none luks,discard,keyscript=/usr/local/bin/open-mail-keyscript.sh
# 可选:使用 eCryptfs 实现每个用户的加密存储
# 适用于多租户环境
ecryptfs-setup-private
# Dovecot 邮件加密插件(mail_crypt)
# 实现存储层自动加密
mail_plugins = $mail_plugins mail_crypt
plugin {
mail_crypt_save_version = 2
mail_crypt_global_private_key =
6.5 跨控制系列综合映射表
以下综合映射表展示了邮件系统各安全机制与多个 NIST SP 800-53 控制系列的交叉关联:
| 邮件安全机制 | 关联控制系列 | 详细映射 |
|---|---|---|
| SMTP 认证 + Dovecot SASL | IA + AC + AU | IA-2 用户标识 | AC-3 访问实施 | AU-2 事件日志 |
| TLS 传输加密 | SC + CM + AU | SC-8 传输保护 | CM-2 基线配置 | AU-2 TLS握手日志 |
| DKIM 域名签名 | SC + CM + IA | SC-12 密钥管理 | CM-3 配置变更 | IA-5 凭证管理 |
| 密码策略与多因素认证 | IA + AC + AU | IA-5 密码管理 | AC-7 失败处理 | AU-6 审计分析 |
6.6 OpenSCAP 自动化合规检查
# 使用 OpenSCAP 自动化 NIST SP 800-53 合规扫描
apt install libopenscap8 scap-security-guide
# 查看可用的 NIST SP 800-53 Rev.5 Profile
# 例如:DISA STIG for Postfix
oscap info /usr/share/scap-security-guide/ssg-rhel9-ds.xml | grep -i postfix
# 执行 CIS 基准扫描
oscap oval eval --results /tmp/postfix-oval-results.xml /usr/share/scap-security-guide/ssg-rhel9-ds.xml --profile xccdf_org.ssgproject.content_profile_cis
# 自定义邮件合规检查脚本
cat > /usr/local/bin/scap-mail-scan.sh << 'SH'
#!/bin/bash
# NIST SP 800-53 邮件系统自动化合规检查
REPORT_DIR="/var/reports/scap"
mkdir -p "$REPORT_DIR"
DATE=$(date +%Y%m%d)
REPORT="${REPORT_DIR}/mail-scap-${DATE}.html"
cat > /tmp/mail-check-probes.sh << 'CHK'
#!/bin/bash
SCORE=0
TOTAL=0
# AC-2: 检查不活跃账户数量
TOTAL=$((TOTAL + 1))
INACTIVE=$(lastlog -b 90 | grep -v "Never logged in" | grep -v "^Username" | wc -l)
if [ "$INACTIVE" -le 5 ]; then SCORE=$((SCORE + 1)); fi
# AC-7: 检查 fail2ban 是否运行
TOTAL=$((TOTAL + 1))
if systemctl is-active --quiet fail2ban; then SCORE=$((SCORE + 1)); fi
# SC-8: 检查 TLS 配置
TOTAL=$((TOTAL + 1))
if postconf -n smtpd_tls_security_level 2>/dev/null | grep -q "may\|encrypt"; then
SCORE=$((SCORE + 1))
fi
# SC-12: 检查 DKIM 密钥是否发布
TOTAL=$((TOTAL + 1))
if dig TXT 20260701._domainkey.example.com +short | grep -q 'v=DKIM1'; then
SCORE=$((SCORE + 1))
fi
# AU-2: 检查日志轮转是否正常运行
TOTAL=$((TOTAL + 1))
if [ -f /var/log/mail.log.1 ]; then SCORE=$((SCORE + 1)); fi
echo "Compliance Score: ${SCORE}/${TOTAL}"
CHK
bash /tmp/mail-check-probes.sh > "$REPORT" 2>&1
# 将结果发送到安全团队
mail -s "[COMPLIANCE] 邮件系统 NIST SP 800-53 合规检查报告" security-team@example.com < "$REPORT"
SH
chmod 755 /usr/local/bin/scap-mail-scan.sh
参考文献
- NIST SP 800-53 Rev. 5. "Security and Privacy Controls for Information Systems and Organizations." NIST, September 2020.
- NIST SP 800-177 Rev. 1. "Trustworthy Email." NIST, June 2021 (Updated 2026 Draft).
- NIST SP 800-45 Version 2. "Guidelines on Electronic Mail Security." NIST, February 2007.
- NIST SP 800-52 Rev. 2. "Guidelines for the Selection, Configuration, and Use of Transport Layer Security (TLS) Implementations." NIST, August 2019.
- NIST SP 800-57 Part 1 Rev. 5. "Recommendation for Key Management, Part 1: General." NIST, May 2020.
- FIPS 140-3. "Security Requirements for Cryptographic Modules." NIST, March 2019.
- RFC 8314. "Cleartext Considered Obsolete: Use of TLS for Email Submission and Access." IETF, February 2018.
- CIS Benchmark for Postfix. Center for Internet Security, Version 2.0 (2025).
- DISA Application Security and Development STIG V5R1. "Postfix SRG Requirements."
- M3AAWG. "Email Security Controls Mapping to NIST SP 800-53 (2025 Technical Reference)."
引用本文
ztpop.net 知识库编辑. "NIST SP 800-53 邮件系统安全控制映射指南:从 AU/Access Control 到 SI/SC 系列全系控制落地" ztpop.net 知识库. 2026年7月24日.
本站技术文章采用 CC-BY 4.0 许可,可自由引用,仅需标注来源 ztpop.net。
