温馨提示×

ubuntu邮件服务器如何限流发信

小樊
51
2026-09-10 22:48:35
栏目: 云计算

在 Ubuntu 上搭建邮件服务器(如 Postfix、Exim、Sendmail 等)时,“限流发信”通常涉及连接级限流、用户/域名级限流、队列限流等。下面以 Postfix(最常见) 为主,介绍常用限流方法,并补充其他方案。


一、Postfix 常见限流方式

1. 限制单个客户端连接与并发

编辑 /etc/postfix/main.cf

# 同一 IP 最大并发 SMTP 连接
smtpd_client_connection_count_limit = 5

# 同一 IP 每秒新建连接数
anvil_rate_time_unit = 60s
smtpd_client_connection_rate_limit = 20

# 同一 IP 在一定时间内最大邮件数
smtpd_client_message_rate_limit = 50

重启:

systemctl restart postfix

2. 限制单个发信用户(SASL 用户)

适用于 authenticated 用户:

# 每个用户每分钟最多发信
smtpd_sender_login_maps = hash:/etc/postfix/sender_login
smtpd_sender_restrictions =
    reject_authenticated_sender_login_mismatch

更精细限流(每用户):

# 使用 policy service(如 postfwd)

3. 限制目标域名发送速率(防外发轰炸)

# 每目标域名并发
default_destination_concurrency_limit = 5

# 每目标域名每分钟邮件数
default_destination_rate_delay = 1s

针对远程域:

smtp_destination_concurrency_limit = 5
smtp_destination_rate_delay = 2s

4. 限制队列与重试

# 队列最大长度
qmgr_message_active_limit = 20000

# 重试间隔
bounce_queue_lifetime = 1d
maximal_queue_lifetime = 1d

二、使用 postfwd 做高级限流(推荐)

postfwd 可基于 用户 / IP / 域名 做复杂限流。

安装

apt install postfwd

示例规则(每用户每分钟 30 封)

/etc/postfwd.cf

id=LIMIT_USER
  sasl_username=~./^([^@]+)@/
  action=rate(sasl_username/30/60)

id=LIMIT_IP
  client_address=~./^192\.168\./
  action=rate(client_address/50/60)

Postfix 调用

smtpd_recipient_restrictions =
    check_policy_service inet:127.0.0.1:10040

三、限制外发(防止被滥发)

禁止未认证发信

smtpd_relay_restrictions =
    permit_sasl_authenticated
    reject_unauth_destination

限制本地程序发信

# 修改 sendmail 权限
chmod 700 /usr/sbin/sendmail

四、其他邮件服务限流

Exim

smtp_accept_max = 20
smtp_accept_reserve = 5
ratelimit

Sendmail

通过 RateCtlconfCONNECTION_RATE_LIMIT


五、监控与日志

tail -f /var/log/mail.log
postqueue -p

如果你能告诉我:

  • 使用哪种邮件服务器(Postfix?)
  • 限流对象(用户 / IP / 外发域名?)
  • 场景(防垃圾、防爆破、云服务器出信?)

我可以给你一份可直接用的配置

0