1.
检查云供应商和运营商的端口策略
第一步:登录云服务商控制台(AWS、Google Cloud、Azure、Vultr、DigitalOcean等),查看安全组或防火墙规则是否默认屏蔽25端口。
第二步:检查是否为出站阻断(很多供应商阻断出站25以防滥发)。若被阻断,准备好企业资质与邮件场景说明,提交工单或开通票据请求解除限制。
第三步:如无法解除,考虑使用SMTP中继(如Amazon SES、SendGrid、Mailgun)或改用587/465端口并启用认证与加密。
2.
服务器防火墙与系统级端口开放
在服务器上执行开放端口命令(以Debian/Ubuntu为例):
ufw allow 25/tcp && ufw reload;或使用iptables:iptables -I INPUT -p tcp --dport 25 -j ACCEPT && iptables-save。
如果使用nftables:nft add rule inet filter input tcp dport 25 accept。确认防火墙与云控制台规则一致后,使用netstat -tlnp或ss -tln检查端口监听。
3.
安装并配置Postfix作为邮件传输代理(MTA)
安装:apt-get update && apt-get install postfix -y,选择“Internet Site”或“Satellite system”视需求。
编辑 /etc/postfix/main.cf:设置myhostname, mydomain, myorigin, mynetworks。示例:myhostname = mail.example.com;mydestination = $myhostname, localhost.$mydomain, localhost。
设置TLS:smtpd_tls_cert_file=/etc/ssl/certs/mail.crt;smtpd_tls_key_file=/etc/ssl/private/mail.key;smtpd_use_tls=yes。
4.
配置发送限制与队列控制(Postfix 内置参数)
数个重要参数直接控制发信量:
- default_destination_concurrency_limit 控制并发到同一目的域的连接数(例如 20);
- smtp_destination_rate_delay 控制同一目的域的发送速率(例如 1s);
- smtp_client_connection_count_limit 和 smtpd_client_connection_rate_limit 控制客户端连接频次。
示例在 /etc/postfix/main.cf 添加:default_destination_concurrency_limit = 10;smtp_destination_rate_delay = 2s;smtpd_client_message_rate_limit = 100。
5.
基于发送者的限速(细粒度)
使用 sender_dependent_default_transport_maps 创建不同发信通道:
在 /etc/postfix/main.cf 添加:sender_dependent_default_transport_maps = hash:/etc/postfix/sender_transport。
在 /etc/postfix/sender_transport 写入类似:sales@example.com slowsmtp:;工程账号使用 normalsmtp:。然后在 /etc/postfix/master.cf 定义 slowsmtp transport,限制 concurrency、rate 等(在transport段使用 -o 选项覆盖参数)。执行 postmap /etc/postfix/sender_transport 并 reload postfix。
6.
引入策略服务(policed)实现动态限速
推荐使用 postfwd 或 postfix-policyd(policyd-weight)做限速规则:
安装 postfwd:apt-get install postfwd 或从源码。配置规则例如按发件人每小时限制、按IP并发限制。
在 /etc/postfix/main.cf 中配置 smtpd_recipient_restrictions 包含 check_policy_service inet:127.0.0.1:10040,将postfwd与Postfix连通实现动态拒绝或延迟策略。
7.
邮件认证(SPF / DKIM / DMARC / rDNS)强制合规
DNS端:添加 SPF TXT 记录:v=spf1 ip4:AAA.BBB.CCC.DDD include:relay.example.com -all。
部署 OpenDKIM:apt-get install opendkim opendkim-tools,配置 /etc/opendkim.conf、KeyTable、SigningTable,生成私钥并在DNS添加DKIM TXT。
配置PTR(反向DNS):如果使用云VPS,需在云商控制台或提交工单设置IP的rDNS为mail.example.com。设置DMARC记录:_dmarc.example.com TXT "v=DMARC1; p=quarantine; rua=mailto:postmaster@example.com;".
8.
测试与验收(Telnet / swaks / openssl)
使用telnet测试25端口:telnet mail.example.com 25,观察220响应并尝试EHLO。
使用 swaks 发送测试邮件:swaks --to test@recipient.com --from me@example.com --server mail.example.com --auth PLAIN --data "Subject: test\r\n\r\nbody"。
用 openssl s_client -starttls smtp -crlf -connect mail.example.com:25 测试TLS握手;检查 /var/log/mail.log 或 /var/log/maillog 以定位错误。
9.
监控、退信处理与信誉维护
建立日志与监控:配置rsyslog或Filebeat收集 /var/log/mail.log,使用Grafana/Prometheus监控队列长度和拒收率。
实现Bounce处理:解析退信并把硬退回(Hard bounce)地址列入停发列表;使用 VERP 或 Bounce 管理脚本。
定期检查黑名单(spamhaus, barracuda等),出现黑名单需查原因并提交解封申请,优化邮件内容和发送速度。
10.
无法开放端口25时的替代方案
若云商拒绝开启25端口:
- 使用第三方SMTP中继(Amazon SES、SendGrid、Mailgun、SMTP2GO)并配置Postfix的relayhost;
- 使用端口587/465并强制SMTP AUTH/TLS发送;
- 申请专用托管或租用拥有端口支持的IP段。
11.
常见问题与排错流程
若邮件无法发送:先检查端口连通(telnet),再看Postfix队列(postqueue -p),检查日志定位具体错误(如 421/450/550 等)。
常见为 rDNS 不匹配、SPF/DKIM 缺失或发信速率过高被接收方临时拒绝(421 4.7.1)。按错误逐条修复并慢速重发队列(postsuper -r ALL 后使用慢速 transport)。
12.
问:海外服务器开启端口25需要准备哪些材料向云商申请?
答:准备公司营业执照或企业资质说明、业务场景说明(批量邮件还是事务性通知)、预计每小时/每天发信量、发件域名与IP反向解析计划、以及已配置的SPF/DKIM/DMARC记录截图或文本,提交工单并耐心配合审核。
13.
问:如何在Postfix中实现按用户限速(例如每小时不超过200封)?
答:可结合 postfwd 或 postfix-policyd 实现按发件人限速;也可通过外部脚本维护发送计数并将超限发件人临时列入拒绝表。具体做法:安装 postfwd,写规则(sender_rate 200/3600s),在 main.cf 加入 check_policy_service 指向 postfwd 服务,然后 reload。
14.
问:如果端口25无法长期开放,企业如何保证大批量通知送达?
答:推荐使用受信赖的SMTP中继服务(SES/SendGrid等),它们负责IP信誉与投递优化,企业通过API或SMTP认证发送;并继续做好SPF/DKIM/DMARC,设置退信与反馈循环(FBL),分批次、渐进式发送以保护域名信誉。
来源:海外服务器开端口25 企业邮件系统部署与发信量控制策略