我一直无法从我的服务器发送邮件。我连接到端口 587 上的 office365,但它一直循环回到运行在 587 上的本地 smtp 服务器。起初我以为是指向 127.0.0.1 的 DNS 问题,所以我改为使用 office365 ip,但仍然获取我的本地 smtp,所以我关闭了我的本地 smtp 以将其从问题中移除,但随后连接被拒绝。
我最终发现是防火墙在做一些鬼鬼祟祟的事情,于是禁用了它,现在我可以以 root 身份通过 netcat 连接到 IP 和端口,并获取 office365 ehlo
[root@web ~]# ncat 40.101.6.90 587
220 VI1PR0801CA0052.outlook.office365.com Microsoft ESMTP MAIL Service ready at Tue, 13 Dec 2016 11:51:16 +0000
但是从非 root 用户那里我得到连接被拒绝
[centos@web ~]$ ncat 40.101.6.90 587
Ncat: Connection refused.
我还禁用了 selinux。我不知道禁用防火墙时发生了什么,它似乎只对 root 执行此操作,而firewall-cmd --state 仍显示防火墙正在运行。
[root@web ~]# systemctl stop firewalld
[root@web ~]# systemctl disable firewalld
[root@web ~]# firewall-cmd --state
running
[root@web ~]#
我也不明白为什么它会像遇到混乱的 nat 之类的东西一样循环端口,然后默认阻止传出端口,这东西真是一团糟。我很怀念 iptables。
答案1
看来您成功地禁用了防火墙服务。尝试重新启动服务器 - 那时它不应该显示“正在运行”。如果您无法重新启动服务器,则防火墙是基于 iptables 的。因此,您可以使用以下 iptables 命令:
iptables -nvL
和
iptables -nvL -t nat
看看可能还剩下哪些规则。以下是如何清除任何规则的示例:
iptables -F POSTROUTING -t nat
iptables -F FORWARD
iptables -F INPUT
iptables -F OUTPUT
但要小心策略。如果将其设置为 DROP,则清除规则将拒绝所有流量。
一旦您重新启动或者清除了 iptables 中任何不需要的规则,您就可以关闭firewalld并重新使用 iptables!