无法使用 tls 从外部 postfix/dovercot 连接 587 端口

无法使用 tls 从外部 postfix/dovercot 连接 587 端口

无法连接到 smtp 端口 567

我搭建了邮件服务器postfix+dovecot。

openssl s_client -starttls smtp -crlf -connect localhost:587

这有效并且能够手动发送电子邮件。

openssl s_client -starttls smtp -crlf -connect smtp.example.com:587

显示此错误

connect: Connection refused
connect:errno=61

我检查过的是netstat,iptables。

两者对于 587 提交来说看起来都运行良好。

网络状态-anutp

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:465             0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:58592         127.0.0.1:587           ESTABLISHED 2793/openssl    
tcp        0    388 133.242.184.252:22      210.149.252.243:46415   ESTABLISHED -               
tcp        0      0 127.0.0.1:587           127.0.0.1:58592         ESTABLISHED -               
tcp6       0      0 :::22                   :::*                    LISTEN      -               
udp        0      0 133.242.184.252:123     0.0.0.0:*                           -               
udp        0      0 127.0.0.1:123           0.0.0.0:*                           -               
udp        0      0 0.0.0.0:123             0.0.0.0:*                           -               
udp6       0      0 :::123                  :::*                                -    

iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:3000
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:submission
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:pop3
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:smtp

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

还有其他我应该检查的点吗?

答案1

请记住,iptables 规则是读取从上到下。当您添加一条规则并将-A其附加在末尾(或给定数字之后)时,使用时-I它会插入到前面。

现在你基本上有:

  1. 接受 ICMP、HTTP、SSH……
  2. 拒绝一切
  3. 接受 SMTP、POP3

因此,您需要移动“接受 SMTP...”规则多于一律拒绝。

您可以删除它们并通过手动指定位置重新添加:

     iptables-A 输入 7-p tcp…
(或)iptables-I 输入 8-p tcp…

(用于iptables -L --line查看规则编号。)

或者,立即编辑整个列表 – 只需交换各行即可:

iptables-save > rules.txt
nano rules.txt
iptables-restore < rules.txt

附注:

  • 将来,如果您使用iptables -S或 甚至发布规则可能会更好iptables-save;这比大量重新格式化的输出更容易扫描-L。(或者两者兼而有之。)

  • Dovecot 仅支持 POP/IMAP/LMTP,不支持 SMTP。您的 SMTP 服务器是 Postfix。

  • 当使用netstat-p选项时,您应该以 root 身份运行该命令,否则它实际上不会显示任何进程信息。

答案2

Iptables 会按照规则出现的顺序依次尝试匹配规则。对于您的情况(正如评论中所说,请提供命令的结果iptables -S,因为我们缺少iptables -L匹配界面的信息

  1. 如果数据包state RELATED,ESTABLISHED在接口上匹配,它们被接受并且不再对这些数据包进行匹配;
  2. 否则,如果数据包icmp在接口上匹配它们被接受,并且不再对这些数据包进行匹配;
  3. 否则,iptables 接受接口上的所有数据包
  4. ....

因此,鉴于我们不知道在哪个接口上执行规则,我认为您的唯一 REJECT 规则(在 INPUT 表上)与您的tcp dpt:smtp规则在同一个接口上匹配。由于您的 REJECT 规则匹配您的 snmp 规则,最后一个永远不会匹配。

编辑写这篇文章太长了……

相关内容