使用 phpmailer 和 iptables 发送邮件时出现问题

使用 phpmailer 和 iptables 发送邮件时出现问题

我在 ubuntu 和 apache 网络服务器上有一个 wordpress 网站。

出于安全原因,我必须使用 iptables 阻止“高”端口(从 11000 开始)上的出站流量。

不幸的是,自从我设置了这条规则后,联系表单就不再起作用了。我收到以下错误

Connection: opening to mail.xxxxxxx.it 25, timeout = 300, options = array ....
Connection: Failed to connect to server. Error number 2. "Error notice: stream_socket_client (): unable to connect to mail.xxxxxxx. (Connection timed out)
SMTP ERROR: Failed to connect to server: Connection timed out (110)

我使用外部 smtp 服务器发送邮件,因此我安装了 WP-Mail-SMTP 插件,该插件又使用 PhpMailer。在插件设置中明确规定必须使用端口 25、SMTP 身份验证且不加密。简而言之,如果我应用上述规则,我将无法发送邮件。如果我删除它,我可以再次发送邮件。

是否有人知道 PhpMailer 或 ubuntu 使用的大于 10000 的网络端口,但具体是多少没有明确记录?

答案1

当你与 SMTP 服务器建立传出连接时,你将连接到偏僻的服务器端口 25。您机器上的本地端口是从临时端口。当您尝试建立传出连接时,操作系统将自动(或多或少随机地)为套接字分配一个高端口号。

如果你阻止临时端口,您通常无法从机器建立出站连接。

根据 IANA 的建议,通常范围是 49152-65535。某些操作系统,特别是 Windows XP 和 2003(及更早版本)为此使用了较低的端口。对于 Ubuntu,我相信默认值是 32768-60999:

$ sysctl net.ipv4.ip_local_port_range 
net.ipv4.ip_local_port_range = 32768    60999

当 iptables 阻止此连接时,传出连接将不起作用。这就是您在此处观察到的情况。

当然,您可以更改此端口范围,但这样做的安全优势为零。您可能想要的是阻止传入流量到这些端口。如果你使用 ufw,可以通过丢弃所有传入流量来实现,并允许你指定的特定传入端口想听一下。

您可能会注意到其他东西,例如sudo apt update由于这些端口被阻止而损坏。如果您确实想更改临时端口范围(没有任何好处),您可以查看U&L SE 网站上的这个答案

相关内容