Postfix 正在运行但无法访问

Postfix 正在运行但无法访问

我的 Debian 10 系统上正在运行 postfix(或看起来如此):

user@leah ~ # service postfix status
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/lib/systemd/system/postfix.service; enabled; vendor preset: enabled)
   Active: active (exited) since Sat 2020-01-04 10:41:52 CET; 5min ago
  Process: 24700 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 24700 (code=exited, status=0/SUCCESS)
Jan 04 10:41:52 leah.softworks.nl systemd[1]: Starting Postfix Mail Transport Agent...
Jan 04 10:41:52 leah.softworks.nl systemd[1]: Started Postfix Mail Transport Agent.

但事实似乎并非如此:

user@leah ~ # telnet localhost 25
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection timed out

postfix 设置为仅监听本地主机,因为它应该仅发送詹金斯的电子邮件。

inet_interfaces = localhost

我可以使用邮件命令发送电子邮件:

echo "It works" | mail -s "Does it work?" [email protected]

看来 25 端口是开放的

user@leah ~ # netstat -pln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      1502/java
tcp        0      0 127.0.0.1:44789         0.0.0.0:*               LISTEN      1502/java
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1176/sshd
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      6665/postgres
tcp      101      0 0.0.0.0:25              0.0.0.0:*               LISTEN      1609/master
tcp6       0      0 :::8080                 :::*                    LISTEN      10419/java
tcp6       0      0 :::80                   :::*                    LISTEN      1685/apache2
tcp6       0      0 :::8082                 :::*                    LISTEN      1336/java
tcp6       0      0 :::21                   :::*                    LISTEN      2021/proftpd: (acce
tcp6       0      0 :::22                   :::*                    LISTEN      1176/sshd
tcp6       0      0 :::5432                 :::*                    LISTEN      6665/postgres
tcp6       0      0 :::42361                :::*                    LISTEN      1336/java
tcp6       0      0 :::25                   :::*                    LISTEN      1609/master
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      10419/java
udp        0      0 172.9.25.211:123        0.0.0.0:*                           1147/ntpd
udp        0      0 127.0.0.1:123           0.0.0.0:*                           1147/ntpd
udp        0      0 0.0.0.0:123             0.0.0.0:*                           1147/ntpd
udp        0      0 0.0.0.0:1900            0.0.0.0:*                           1146/minissdpd
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           698/avahi-daemon: r
udp        0      0 0.0.0.0:39980           0.0.0.0:*                           698/avahi-daemon: r
udp6       0      0 fe90::6e62:6dff:fec:123 :::*                                1147/ntpd
udp6       0      0 ::1:123                 :::*                                1147/ntpd
udp6       0      0 :::123                  :::*                                1147/ntpd
udp6       0      0 :::33848                :::*                                1336/java
udp6       0      0 :::5353                 :::*                                1336/java
udp6       0      0 :::5353                 :::*                                698/avahi-daemon: r
udp6       0      0 :::41184                :::*                                698/avahi-daemon: r

并且 postfix 正在监听该端口(进程 1609):

user@leah ~ # ps -ef | grep 1609
root      1609     1  0 Jan02 ?        00:00:03 /usr/lib/postfix/sbin/master -w

为什么 Postfix 无法通过端口 25 访问?

答案1

您正在运行什么防火墙?如果您正在运行 IPtables,请尝试运行此命令,这将使“接受所有环回流量”成为 iptables 中的第一条规则。:

/usr/sbin/iptables -t filter -I INPUT 1 -i lo -j ACCEPT

另一个可能的问题是您正在使用 IPv6,而您的防火墙只是 IPv4 防火墙。尝试运行此命令,它将仅使用 IPv4 上的 telnet,而不是 IPv6。:

telnet -4 localhost 25

另外,尝试使用 127.0.0.1,而不是 localhost,因为 localhost 需要 DNS 解析:

telnet -4 127.0.0.1 25

我看到的另一个问题是运行在端口 25 上的 Postfix 进程的 Recv-Q 列。它显示内核已收到 101 个字节,但 Postfix 尚未请求它们。这里有一篇文章更深入地解释了这个问题:

https://www.ibm.com/support/pages/node/6537582

高 Recv-Q 意味着数据放在 TCP/IP 接收缓冲区中,但应用程序不会调用 recv() 将其从 TCP/IP 缓冲区复制到应用程序缓冲区。

也许您应该确保 Postifx 没有限制最大连接数。换句话说,您的问题可能出在应用程序层。您应该做两件事。根据您的用例调整值:

  1. 在main.cf中:

    smtpd_client_connection_rate_limit = 50

  2. 在master.cf中:

https://serverfault.com/questions/658156/limit-concurrent-connections-to-postfix-server

如果您想要更改正在运行的 smtpd 的最大数量,则应在 /etc/postfix/master.cf 中进行更改。将第 7 列中的 - 更改为 50,然后使用 postfix restart(或特定于发行版的替代方法)重新启动 postfix。

smtp inet n - - - 50 smtpd

我最后想到的可能是你的问题与 TLS 有关。尝试运行:

openssl s_client -starttls smtp -crlf -connect 127.0.0.1:25

如果您仍然遇到问题,请尝试在 Postfix 中的端口 25 上完全禁用 TLS,然后看看是否可以连接。

我真的希望这有帮助!!

相关内容