如下是详细的配置指南,教你如何在Ubuntu 24.04上结合Postfix 3.8和postfwd实现SASL用户的发信频率控制。
首先安装postfwd包:
sudo apt update
sudo apt install postfwd
创建postfwd的主配置文件:
sudo nano /etc/postfix/postfwd.cf
添加以下配置内容:
# SASL用户发信频率控制规则
# 每个SASL认证用户每天最多发送100封邮件
# 定义时间窗口:24小时
id=SASL_RATE_LIMIT
sasl_username=~^.+$
action=rate(sasl_username/100/86400/REJECT sender $sasl_username: mail quota exceeded (100 mails per day))
# 默认允许通过的规则(必须放在最后)
id=DEFAULT
action=DUNNO
配置说明:
sasl_username=~^.+$:匹配所有已通过SASL认证的用户rate(sasl_username/100/86400/REJECT ...):限制每个用户在86400秒(24小时)内最多发送100封邮件编辑postfwd的systemd服务配置:
sudo nano /etc/default/postfwd
确保包含以下配置:
# postfwd daemon options
DAEMON_OPTS="--daemon --file=/etc/postfix/postfwd.cf --interface=127.0.0.1 --port=10040 --user=postfwd --group=postfwd --pidfile=/var/run/postfwd.pid"
编辑Postfix主配置文件:
sudo nano /etc/postfix/main.cf
在smtpd_recipient_restrictions或smtpd_data_restrictions中添加postfwd检查。推荐在数据检查阶段进行,这样可以获取更准确的SASL用户信息:
# 在现有的smtpd_data_restrictions中添加,或者创建新的
smtpd_data_restrictions =
check_policy_service inet:127.0.0.1:10040,
permit
# 确保SASL认证已正确配置
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
# 确保submission端口需要认证
# 在master.cf中配置submission服务
编辑master.cf确保submission服务正确配置:
sudo nano /etc/postfix/master.cf
确保包含以下submission配置:
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yes
-o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=$mta_client_restrictions
-o smtpd_helo_restrictions=$mta_helo_restrictions
-o smtpd_sender_restrictions=$mta_sender_restrictions
-o smtpd_recipient_restrictions=
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o smtpd_data_restrictions=check_policy_service inet:127.0.0.1:10040,permit
-o milter_macro_daemon_name=ORIGINATING
sudo mkdir -p /var/lib/postfwd
sudo chown postfwd:postfwd /var/lib/postfwd
sudo chmod 755 /var/lib/postfwd
# 启动postfwd服务
sudo systemctl start postfwd
sudo systemctl enable postfwd
# 重新加载Postfix配置
sudo systemctl reload postfix
# 检查服务状态
sudo systemctl status postfwd
sudo systemctl status postfix
检查postfwd是否正常监听:
sudo netstat -tlnp | grep :10040
查看postfwd日志:
sudo tail -f /var/log/mail.log | grep postfwd
使用postfwd测试工具验证配置:
# 安装测试工具
sudo apt install postfwd-tools
# 模拟测试
postfwd-client --ip=127.0.0.1 --port=10040 --test --sasl_username=[email protected]
监控发信频率和限制情况:
# 查看Postfix日志中的频率限制记录
sudo grep "mail quota exceeded" /var/log/mail.log
# 实时监控邮件发送
sudo tail -f /var/log/mail.log | grep sasl_username
如果你需要更精细的控制,可以修改postfwd.cf:
# 不同用户组的不同限制
id=VIP_USERS
sasl_username=~(admin|manager)@example\.com$
action=rate(sasl_username/500/86400/REJECT VIP user $sasl_username: mail quota exceeded (500 mails per day))
id=NORMAL_USERS
sasl_username=~^.+@example\.com$
action=rate(sasl_username/100/86400/REJECT Normal user $sasl_username: mail quota exceeded (100 mails per day))
# 按小时限制
id=HOURLY_LIMIT
sasl_username=~^.+$
action=rate(sasl_username/20/3600/REJECT sender $sasl_username: hourly mail quota exceeded (20 mails per hour))
id=DEFAULT
action=DUNNO
如果遇到问题,检查以下几点:
sudo systemctl status postfwdsudo netstat -tlnp | grep 10040sudo journalctl -u postfwd -f/var/log/mail.log中的SASL认证记录telnet 127.0.0.1 10040配置完成后,每个通过SASL认证的用户每天最多只能发送100封邮件,超出限制的邮件将被拒绝并记录在日志中。