Postfix-开放中继。如何配置才能不开放?

Postfix-开放中继。如何配置才能不开放?

我已经设置了 Postfix,但是在设置时遇到了问题。

每当我向服务器发送电子邮件时,它都会拒绝我的邮件并说“拒绝中继”,因此我更改了以下内容main.cf

mynetworks = 0.0.0.0/0
mynetworks_style = subnet

我现在可以发送电子邮件并且它可以正常工作,但是 MX 测试表明它是一个开放中继(显然是非预期的)。

我该如何解决这个问题?我当然希望任何人都能给我的域名发送电子邮件,但我不确定该如何配置。

我知道我可以更改mynetworks,但是这不会限制谁可以向服务器发送电子邮件吗?

答案1

让你面临的问题是

mynetworks = 0.0.0.0/0

因为下面某处你可能已经列出了它

smtpd_recipient_restrictions = ... permit_mynetworks ...

如果你需要能够从任何 IP 发送电子邮件,那么你只需启用用户/密码来发送电子邮件,最常见的是 sasl

答案2

mynetworks 必须仅包含可以使用服务器将邮件转发到其他域的受信任用户 - 否则,正如您所发现的,它是一个开放中继。如果您在内部网络上使用 RFC 1918 地址,您可能需要将其设置为 192.168.0.0/16、10/8 或 172.16.0.0/12。

控制人们是否可以向您的服务器发送邮件的设置包括 mydestination 和 virtual_mailbox_domains - 阅读文档这里或者这里

答案3

记录于http://www.postfix.org/postconf.5.html#mynetworks

mynetworks(默认:参见“postconf -d”输出)
比“陌生人”拥有更多权限的“受信任”远程 SMTP 客户端列表。

特别是,“受信任的” SMTP 客户端被允许通过 Postfix 中继邮件。
请参阅 postconf(5) 手册中的 smtpd_recipient_restrictions 参数描述。

答案4

仅对您的 IP 使用身份验证:main.cf

smtpd_recipient_restrictions =
    permit_mynetworks
    reject_unauth_destination

使用文件来存储你的ip main.cf:

mynetworks = hash:/etc/postfix/network_table 

如果发生改变,使用脚本来更新你的 IP(在 cron 中运行)

#!/bin/bash
###
## sh /sx_sys/postfix_mynetwork_ip_checker.sh
LOGFILE="/var/log/smtp_relay.log"

curent_ip=$(dig @exemple.com exemple.com | awk '/^;; ANSWER SECTION:$/ { getline ; print $5 }')
#echo $curent_ip

saved_ip=$(</etc/postfix/network_table )
#echo $saved_ip
if [ "$curent_ip OK" != "$saved_ip" && -n "$curent_ip"]; then
echo "$curent_ip OK" > "/etc/postfix/network_table"
postmap /etc/postfix/network_table
echo "$(date) smtp allow for $curent_ip" >> $LOGFILE 2>&1
mail -s "smtp allow for $curent_ip $(date)" [email protected] < /dev/null
fi
exit 0

相关内容