CentOS 7 服务器安装了 postfix、dovecot 和 mailx。我可以从本地 devbox 上运行的远程 Thunderbird 客户端与服务器建立 IMAP 连接。但我无法从安装在我的开发盒上的本地 Thunderbird 通过服务器发送电子邮件。经过大量研究,我发现原因是我的 devbox ISP 阻止了端口 25。所以我想将发送邮件端口更改为 465。这涉及服务器防火墙和 postfix 的更改,以及 devbox Thunderbird 中的更改。
这个问题与 stackexchange 网络上的类似问题不同,因为我问的是如何在 CentOS 7 中执行此操作,其中防火墙使事情变得复杂。
简单更改 SMTP 端口的问题是其他邮件服务器使用端口 25 相互发送电子邮件。如果我将 smtp 端口更改为 465,则没有人能够向我的服务器发送电子邮件。 如何更改 postfix、firewalld 和 Thunderbird,以便我的出站电子邮件通过端口 465,同时端口 25 保持开放状态以接收来自其他邮件服务器的邮件?
我需要特定配置文件的特定语法。我已经知道了答案涉及设置中继主机。但如何在 CentOS 7 中进行设置呢?
以下是我目前所做的:
1.)我将这一行添加465 inet n - - - - smtpd
到/etc/postfix/master.cf
:
# =========================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ====================================================================
smtp inet n - n - - smtpd
465 inet n - - - - smtpd
/usr/lib/firewalld/services/smtp.xml
2.)然后我通过如下 读取将firewalld中的SMTP端口号更改为465 :
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Mail (SMTP)</short>
<description>This option allows incoming SMTP mail delivery. If you need to allow remote hosts to connect directly to your machine to deliver mail, enable this option. You $
<port protocol="tcp" port="465"/>
</service>
3.) 仍在服务器上,我输入systemctl stop postfix
then systemctl start postfix
then systemctl status postfix
,一切顺利。然后我打字firewall-cmd --reload
就没有问题了。
4.) 接下来,我将 devbox 的 Thunderbird 中的传出 smtp 端口更改为 465。
5.) 在服务器上,我按照 @derobert 的建议,输入tcpdump -n -i any tcp port 465
并尝试使用我的 devbox Thunderbird 通过服务器发送电子邮件,并在服务器上打印出以下内容:
tcpdump -n -i any tcp port 465
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
18:07:36.276193 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.37589: Flags [S.], seq 3232257854, ack 2935370285, win 14480, options [mss 1460,sackOK,TS val 979486294 ecr 14200749,nop,wscale 7], length 0
18:07:36.361712 IP my.DEVBOX.ip.addr.37589 > my.SERVER.ip.addr.urd: Flags [.], ack 1, win 115, options [nop,nop,TS val 14200832 ecr 979486294], length 0
18:07:36.362152 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.37589: Flags [P.], seq 1:43, ack 1, win 114, options [nop,nop,TS val 979486380 ecr 14200832], length 42
18:07:36.366824 IP my.DEVBOX.ip.addr.37589 > my.SERVER.ip.addr.urd: Flags [P.], seq 1:186, ack 1, win 115, options [nop,nop,TS val 14200832 ecr 979486294], length 185
18:07:36.366865 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.37589: Flags [.], ack 186, win 122, options [nop,nop,TS val 979486385 ecr 14200832], length 0
18:07:36.454916 IP my.DEVBOX.ip.addr.37589 > my.SERVER.ip.addr.urd: Flags [.], ack 43, win 115, options [nop,nop,TS val 14200920 ecr 979486380], length 0
18:07:36.454961 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.37589: Flags [P.], seq 43:195, ack 186, win 122, options [nop,nop,TS val 979486473 ecr 14200920], length 152
18:07:36.539237 IP my.DEVBOX.ip.addr.37589 > my.SERVER.ip.addr.urd: Flags [.], ack 195, win 123, options [nop,nop,TS val 14201009 ecr 979486473], length 0
18:09:20.466757 IP my.DEVBOX.ip.addr.37589 > my.SERVER.ip.addr.urd: Flags [F.], seq 186, ack 195, win 123, options [nop,nop,TS val 14304941 ecr 979486473], length 0
18:09:20.467113 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.37589: Flags [F.], seq 195, ack 187, win 122, options [nop,nop,TS val 979590485 ecr 14304941], length 0
18:09:20.550693 IP my.DEVBOX.ip.addr.37589 > my.SERVER.ip.addr.urd: Flags [.], ack 196, win 123, options [nop,nop,TS val 14305025 ecr 979590485], length 0
^C
11 packets captured
12 packets received by filter
0 packets dropped by kernel
6.) 同样,也是基于@derobert 的建议,在我输入的 devbox 上nc my.server.ip.addr 465 < /dev/null
并在终端中打印了220 mydomain.com ESMTP Postfix
回复。
Thunderbird 中的发送服务器 (SMTP) 设置为:
Description: <Not Specified>
Server Name: mydomain.com
Port: 465
User Name: me
Authentication Method: Normal Password
Connection Security: SSL/TLS
但 Thunderbird 连接仍然超时,并且电子邮件未发送。我还需要做什么?
注意:当我/usr/lib/firewalld/services/smtp.xml
再次更改为指示端口 25,并保留上述其他 5 个步骤中的所有其他内容相同时,我重新获得从服务器接收电子邮件的能力,但无法通过服务器发送电子邮件。
编辑:
@jsbillings 建议我在 master.cf 中定义提交端口。为了进一步推进,我postconf -M
在终端中输入打印出master.cf的相关内容。我仍然无法发送电子邮件,但以下是我今天在处理此问题过程中所做的更改后的结果:
smtp inet n - n - - smtpd
587 inet n - - - - smtpd
submission inet n - - - - smtpd
-o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_sender_login_maps=hash:/etc/postfix/virtual
-o smtpd_sender_restrictions=reject_sender_login_mismatch
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
pickup unix n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
答案1
您不能指望其他人有 SMTP 服务器侦听端口 25 以外的任何端口。如果您的 ISP 阻止出站端口 25,您可以设置您的 postfix 系统通过 ISP 中继邮件,例如在康卡斯特的这个例子中。
不过,老实说,如果您在阻止出站端口 25 的 ISP 上运行自己的邮件服务,您可能需要考虑将服务切换到不阻止端口 25 的商业互联网提供商,或者将您的邮件移至托管允许 SMTP 的提供商。
编辑:
我现在更明白你在问什么了。您希望您的 SMTP 服务器都接收邮件和是 SMTP 提交主机。您需要添加第二个服务/etc/postfix/master.cf
并设置 SASL 身份验证。 Dovecot 维基有配置示例对于这个过程。