TLSPROXY(8) TLSPROXY(8)
名称
tlsproxy - Postfix TLS 代理服务
概要
tlsproxy [通用 Postfix 守护进程选项]
描述
tlsproxy(8) 服务实现双向 TLS 代理功能。主要被以下组件使用:
- postscreen(8) 服务用于与未加入白名单的远程 SMTP 客户端(包括白名单状态已过期的客户端)建立 SMTP-over-TLS 连接
- smtp(8) 客户端用于支持 TLS 连接复用
同时也支持非 SMTP 协议的场景。
虽然单个 tlsproxy(8) 进程可同时服务多个会话,但建议根据负载情况动态增加进程数量,以保持服务响应能力。
协议示例
以下示例以 postscreen(8) 为例。由于 tlsproxy(8) 服务本身与具体应用协议无关,该示例可轻松适配其他应用场景。
当收到有效的远程 SMTP 客户端 STARTTLS 命令后:
1. postscreen(8) 向 tlsproxy(8) 发送:
- 远程 SMTP 客户端端点字符串
- 请求的角色(server)
- 请求的超时时间
2. postscreen(8) 从 tlsproxy(8) 接收"TLS可用"状态指示
3. 若 TLS 服务可用:
- 将远程 SMTP 客户端的文件描述符传递给 tlsproxy(8)
- 向客户端发送纯文本的 220 问候语
4. 这将触发客户端与 tlsproxy(8) 之间的 TLS 协商
5. TLS 握手完成后,tlsproxy(8) 负责:
- 与 postscreen(8) 的纯文本通信
- 与客户端的加密通信转换
安全性
tlsproxy(8) 服务具有中等安全敏感性,因为它需要与网络上的不可信客户端通信。建议以固定低权限运行该进程,并可启用 chroot 环境。
诊断
所有问题和事务都会记录到 syslogd(8) 或 postlogd(8) 日志服务。
配置参数
由于 tlsproxy(8) 进程可能因邮件服务器负载而长期运行,对 main.cf 的更改不会自动生效。可使用"postfix reload"命令加速配置更新。
下文仅提供参数摘要,完整说明及示例请参考 postconf(5) 手册。
STARTTLS 全局控制
以下为全局设置,不能被 tlsproxy(8) 客户端请求中的信息覆盖:
tls_append_default_CA (no)
是否将系统默认的证书颁发机构(CA)证书附加到 *_tls_CApath 或 *_tls_CAfile 指定的证书后
tls_daemon_random_bytes (32)
smtp(8) 或 smtpd(8) 进程向 tlsmgr(8) 服务请求的伪随机字节数,用于初始化内部伪随机数生成器(PRNG)
tls_high_cipherlist (参见'postconf -d'输出)
用于"高"强度加密的 OpenSSL 密码套件列表
tls_medium_cipherlist (参见'postconf -d'输出)
用于"中"或更高强度加密的 OpenSSL 密码套件列表
tls_null_cipherlist (eNULL:!aNULL)
用于"NULL"级加密(仅认证不加密)的 OpenSSL 密码套件列表
tls_eecdh_strong_curve (prime256v1)
Postfix SMTP 服务器用于适度强度的临时椭圆曲线 Diffie-Hellman(ECDH)密钥交换的曲线
tls_eecdh_ultra_curve (secp384r1)
Postfix SMTP 服务器用于最高强度的临时 ECDH 密钥交换的曲线
tls_disable_workarounds (参见'postconf -d'输出)
要禁用的 OpenSSL 漏洞变通方案列表或位掩码
tls_preempt_cipherlist (no)
对于 SSLv3 及更高版本,是否使用 Postfix SMTP 服务器的密码套件优先顺序(而非远程客户端的优先顺序)
Postfix 2.8-3.7 版本新增:
tls_low_cipherlist (参见'postconf -d'输出)
用于"低"或更高强度加密的 OpenSSL 密码套件列表
tls_export_cipherlist (参见'postconf -d'输出)
用于"出口"或更高强度加密的 OpenSSL 密码套件列表
Postfix 2.9 及更高版本新增:
tls_legacy_public_key_fingerprints (no)
临时迁移辅助工具,用于处理 Postfix 2.9.0-2.9.5 版本中使用错误算法生成的证书公钥指纹
Postfix 2.11-3.1 版本新增:
tls_dane_digest_agility (on)
配置 RFC7671 DANE TLSA 摘要算法灵活性
tls_dane_trust_anchor_digest_enable (yes)
启用对 RFC 6698 (DANE TLSA) DNS 记录的支持,这些记录包含证书用途为"2"的信任锚摘要
Postfix 2.11 及更高版本新增:
tlsmgr_service_name (tlsmgr)
master.cf 中 tlsmgr(8) 服务的入口名称
Postfix 3.0 及更高版本新增:
tls_session_ticket_cipher (Postfix >= 3.0: aes-256-cbc, Postfix < 3.0:
aes-128-cbc)
用于加密 RFC5077 TLS 会话票据的算法
openssl_path (openssl)
OpenSSL 命令行工具 openssl(1) 的路径
Postfix 3.2 及更高版本新增:
tls_eecdh_auto_curves (参见'postconf -d'输出)
Postfix SMTP 客户端和服务器应启用的椭圆曲线优先级列表
Postfix 3.4 及更高版本新增:
tls_server_sni_maps (empty)
可选的查找表,用于将通过 TLS 服务器名称指示(SNI)扩展从远程 SMTP 客户端接收的名称映射到相应的密钥和证书链
Postfix 3.5/3.4.6/3.3.5/3.2.10/3.1.13 及更高版本新增:
tls_fast_shutdown_enable (yes)
解决某些实现导致 Postfix 在关闭 TLS 会话时挂起直到超时的问题
Postfix 3.8 及更高版本新增:
tls_ffdhe_auto_groups (参见'postconf -d'输出)
Postfix SMTP 客户端和服务器支持的有限域 Diffie-Hellman 临时(FFDHE)密钥交换组的优先级列表
Postfix 3.9/3.8.1/3.7.6/3.6.10/3.5.20 及更高版本新增:
tls_config_file (default)
包含基础 OpenSSL 设置的可选配置文件
tls_config_name (empty)
Postfix 传递给 OpenSSL 库初始化函数的应用名称
STARTTLS 服务器控制
这些参数克隆自 Postfix SMTP 服务器设置,允许 tlsproxy(8) 在降低权限前加载与 Postfix SMTP 服务器相同的证书和私钥信息,从而保持密钥文件对 root 只读。当前这些设置不能被 tlsproxy(8) 客户端请求中的信息覆盖,但此限制可能在将来版本中移除。
tlsproxy_tls_CAfile ($smtpd_tls_CAfile)
包含(PEM格式)根CA证书的文件,这些CA被信任用于签署远程SMTP客户端证书或中间CA证书
tlsproxy_tls_CApath ($smtpd_tls_CApath)
包含(PEM格式)根CA证书的目录,这些CA被信任用于签署远程SMTP客户端证书或中间CA证书
tlsproxy_tls_always_issue_session_ids ($smtpd_tls_always_issue_ses-
sion_ids)
强制 Postfix tlsproxy(8) 服务器发出TLS会话ID,即使TLS会话缓存已关闭
tlsproxy_tls_ask_ccert ($smtpd_tls_ask_ccert)
是否向远程SMTP客户端请求客户端证书
tlsproxy_tls_ccert_verifydepth ($smtpd_tls_ccert_verifydepth)
远程SMTP客户端证书的验证深度
tlsproxy_tls_cert_file ($smtpd_tls_cert_file)
包含Postfix tlsproxy(8)服务器RSA证书(PEM格式)的文件
tlsproxy_tls_ciphers ($smtpd_tls_ciphers)
Postfix tlsproxy(8)服务器在机会性TLS加密中使用的最低TLS密码强度
tlsproxy_tls_dcert_file ($smtpd_tls_dcert_file)
包含Postfix tlsproxy(8)服务器DSA证书(PEM格式)的文件
tlsproxy_tls_dh1024_param_file ($smtpd_tls_dh1024_param_file)
包含Postfix tlsproxy(8)服务器在非出口级EDH密码中使用的DH参数的文件
tlsproxy_tls_dh512_param_file ($smtpd_tls_dh512_param_file)
包含Postfix tlsproxy(8)服务器在出口级EDH密码中使用的DH参数的文件
tlsproxy_tls_dkey_file ($smtpd_tls_dkey_file)
包含Postfix tlsproxy(8)服务器DSA私钥(PEM格式)的文件
tlsproxy_tls_eccert_file ($smtpd_tls_eccert_file)
包含Postfix tlsproxy(8)服务器ECDSA证书(PEM格式)的文件
tlsproxy_tls_eckey_file ($smtpd_tls_eckey_file)
包含Postfix tlsproxy(8)服务器ECDSA私钥(PEM格式)的文件
tlsproxy_tls_eecdh_grade ($smtpd_tls_eecdh_grade)
Postfix tlsproxy(8)服务器用于临时椭圆曲线Diffie-Hellman(EECDH)密钥交换的安全等级
tlsproxy_tls_exclude_ciphers ($smtpd_tls_exclude_ciphers)
要从tlsproxy(8)服务器密码列表中排除的密码或密码类型列表
tlsproxy_tls_fingerprint_digest ($smtpd_tls_fingerprint_digest)
用于生成远程SMTP客户端证书指纹的消息摘要算法
tlsproxy_tls_key_file ($smtpd_tls_key_file)
包含Postfix tlsproxy(8)服务器RSA私钥(PEM格式)的文件
tlsproxy_tls_loglevel ($smtpd_tls_loglevel)
启用Postfix tlsproxy(8)服务器TLS活动的额外日志记录
tlsproxy_tls_mandatory_ciphers ($smtpd_tls_mandatory_ciphers)
Postfix tlsproxy(8)服务器在强制TLS加密中使用的最低TLS密码强度
tlsproxy_tls_mandatory_exclude_ciphers ($smtpd_tls_manda-
tory_exclude_ciphers)
在强制TLS安全级别下,要从tlsproxy(8)服务器密码列表中额外排除的密码或密码类型列表
tlsproxy_tls_mandatory_protocols ($smtpd_tls_mandatory_protocols)
Postfix tlsproxy(8)服务器在强制TLS加密下接受的SSL/TLS协议
tlsproxy_tls_protocols ($smtpd_tls_protocols)
Postfix tlsproxy(8)服务器在机会性TLS加密中要排除或包含的TLS协议列表
tlsproxy_tls_req_ccert ($smtpd_tls_req_ccert)
在强制TLS加密下,是否要求可信的远程SMTP客户端证书才能继续TLS连接
tlsproxy_tls_security_level ($smtpd_tls_security_level)
Postfix tlsproxy(8)服务器的SMTP TLS安全级别;当指定非空值时,将覆盖已废弃的参数smtpd_use_tls和smtpd_enforce_tls
tlsproxy_tls_chain_files ($smtpd_tls_chain_files)
包含Postfix tlsproxy(8)服务器密钥和证书链(PEM格式)的文件
Postfix 3.9及更高版本新增:
tlsproxy_tls_enable_rpk ($smtpd_tls_enable_rpk)
当请求或要求客户端认证时,是否要求远程SMTP客户端发送RFC7250原始公钥而非X.509证书
STARTTLS 客户端控制
这些参数克隆自 Postfix SMTP 客户端设置,允许 tlsproxy(8) 在降低权限前加载与 Postfix SMTP 客户端相同的证书和私钥信息,从而保持密钥文件对 root 只读。部分设置可能被 tlsproxy(8) 客户端请求中的信息覆盖。
Postfix 3.4 及更高版本新增:
tlsproxy_client_CAfile ($smtp_tls_CAfile)
包含(PEM格式)根CA证书的文件,这些CA被信任用于签署远程TLS服务器证书或中间CA证书
tlsproxy_client_CApath ($smtp_tls_CApath)
包含(PEM格式)CA证书的目录,Postfix tlsproxy(8) 客户端使用这些证书验证远程TLS服务器证书
tlsproxy_client_chain_files ($smtp_tls_chain_files)
包含Postfix tlsproxy(8)客户端密钥和证书链(PEM格式)的文件
tlsproxy_client_cert_file ($smtp_tls_cert_file)
包含Postfix tlsproxy(8)客户端RSA证书(PEM格式)的文件
tlsproxy_client_key_file ($smtp_tls_key_file)
包含Postfix tlsproxy(8)客户端RSA私钥(PEM格式)的文件
tlsproxy_client_dcert_file ($smtp_tls_dcert_file)
包含Postfix tlsproxy(8)客户端DSA证书(PEM格式)的文件
tlsproxy_client_dkey_file ($smtp_tls_dkey_file)
包含Postfix tlsproxy(8)客户端DSA私钥(PEM格式)的文件
tlsproxy_client_eccert_file ($smtp_tls_eccert_file)
包含Postfix tlsproxy(8)客户端ECDSA证书(PEM格式)的文件
tlsproxy_client_eckey_file ($smtp_tls_eckey_file)
包含Postfix tlsproxy(8)客户端ECDSA私钥(PEM格式)的文件
tlsproxy_client_fingerprint_digest ($smtp_tls_fingerprint_digest)
用于生成远程TLS服务器证书指纹的消息摘要算法
tlsproxy_client_loglevel ($smtp_tls_loglevel)
启用Postfix tlsproxy(8)客户端TLS活动的额外日志记录
tlsproxy_client_loglevel_parameter (smtp_tls_loglevel)
提供tlsproxy_client_loglevel值的参数名称
tlsproxy_client_scert_verifydepth ($smtp_tls_scert_verifydepth)
远程TLS服务器证书的验证深度
tlsproxy_client_use_tls ($smtp_use_tls)
机会模式:当远程服务器宣布支持TLS时使用TLS
tlsproxy_client_enforce_tls ($smtp_enforce_tls)
强制模式:要求SMTP服务器使用TLS加密
tlsproxy_client_per_site ($smtp_tls_per_site)
可选的查找表,包含按下一跳目标和远程TLS服务器主机名设置的Postfix tlsproxy(8)客户端TLS使用策略
Postfix 3.4-3.6版本新增:
tlsproxy_client_level ($smtp_tls_security_level)
Postfix tlsproxy(8)客户端的默认TLS安全级别
tlsproxy_client_policy ($smtp_tls_policy_maps)
可选的查找表,包含按下一跳目标设置的Postfix tlsproxy(8)客户端TLS安全策略
Postfix 3.7及更高版本新增:
tlsproxy_client_security_level ($smtp_tls_security_level)
Postfix tlsproxy(8)客户端的默认TLS安全级别
tlsproxy_client_policy_maps ($smtp_tls_policy_maps)
可选的查找表,包含按下一跳目标设置的Postfix tlsproxy(8)客户端TLS安全策略
过时的STARTTLS支持控制
这些参数用于保持与smtpd(8)传统参数的兼容性
tlsproxy_use_tls ($smtpd_use_tls)
机会性TLS:向远程SMTP客户端宣布支持STARTTLS,但不要求客户端使用TLS加密
tlsproxy_enforce_tls ($smtpd_enforce_tls)
强制TLS:向远程SMTP客户端宣布支持STARTTLS,并要求客户端使用TLS加密
tlsproxy_client_use_tls ($smtp_use_tls)
机会模式:当远程服务器宣布支持TLS时使用TLS
tlsproxy_client_enforce_tls ($smtp_enforce_tls)
强制模式:要求SMTP服务器使用TLS加密
资源控制
tlsproxy_watchdog_timeout (10s)
tlsproxy(8)进程处理本地或远程I/O操作的最大允许时间,超过此时限将被内置看门狗定时器终止
杂项控制
config_directory (参见'postconf -d'输出)
Postfix main.cf和master.cf配置文件的默认位置
process_id (只读)
Postfix命令或守护进程的进程ID
process_name (只读)
Postfix命令或守护进程的进程名称
syslog_facility (mail)
Postfix日志记录使用的syslog设施
syslog_name (参见'postconf -d'输出)
在syslog记录中添加到进程名称前的前缀,例如"smtpd"变为"prefix/smtpd"
Postfix 3.3及更高版本新增:
service_name (只读)
Postfix守护进程在master.cf中的服务名称
参见
postscreen(8), Postfix僵尸拦截器
smtpd(8), Postfix SMTP服务器
postconf(5), 配置参数
postlogd(8), Postfix日志记录
syslogd(8), 系统日志记录
许可
本软件必须随附Secure Mailer许可证
历史
本服务随Postfix 2.8版本引入
作者
Wietse Venema
IBM T.J. Watson研究中心
邮政信箱704
美国纽约州约克镇高地,邮编10598
Wietse Venema
谷歌公司
纽约第八大道111号
美国纽约州纽约市,邮编10011
TLSPROXY(8)