我的 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 没有限制最大连接数。换句话说,您的问题可能出在应用程序层。您应该做两件事。根据您的用例调整值:
在main.cf中:
smtpd_client_connection_rate_limit = 50
在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,然后看看是否可以连接。
我真的希望这有帮助!!