Postfix + Dovecot + AWS + CloudFlare + SquirrelMail 无法接收消息

Postfix + Dovecot + AWS + CloudFlare + SquirrelMail 无法接收消息

不久前设置了这个东西,它可以很好地发送消息,但是我希望开始能够接收消息。

我尝试通过 telnet 进入端口 25,但是没有任何反应。

挖掘 dzwxgames.com mx:

dzwxgames.com.          60      IN      MX      10 34.210.135.57.

现在,AWS 需要使用 SES 中继来发送消息,这很好。但是当我尝试接收消息时,它表现得好像所有端口都被阻止了。

网络状态监测

tcp        0      0 0.0.0.0:25              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
tcp6       0      0 :::25                   :::*                    LISTEN
tcp6       0      0 :::443                  :::*                    LISTEN
tcp6       0      0 :::110                  :::*                    LISTEN
tcp6       0      0 :::143                  :::*                    LISTEN

但是 netstat 报告说他们也正在被监听。

因此我在 AWS 控制台上检查了我的安全组规则:

SMTP TCP 25 0.0.0.0/0
SMTPS TCP 465 0.0.0.0/0
POP3 TCP 110 0.0.0.0/0

看起来不错。好吧...也许 Postfix 不起作用?

后缀-n

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
home_mailbox = Maildir/
inet_interfaces = all
inet_protocols = all
mailbox_size_limit = 0
mydestination = $myhostname, dzwxgames.com, localhost, localhost.localdomain, localhost
myhostname = DZWXGamesWeb.dzwxgames.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost = [email-smtp.us-west-2.amazonaws.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_note_starttls_offer = yes
smtp_tls_security_level = encrypt
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_use_tls = yes
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes

好的...那么 postfix 只在本地主机上监听?

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

我进行了一些谷歌搜索,它说可能需要启用 dovecot?

好的,将其添加到 postfix 主配置中

/etc/postfix/master.cf:

ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix  -       n       n       -       2       pipe
  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman   unix  -       n       n       -       -       pipe
  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
  ${nexthop} ${user}
dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=mail:mail argv=/usr/lib/dovecot/deliver
  -f ${sender} -d ${recipient}

好的,仍然没有结果。也许 dovecot 没有监听正确的端口?

# 2.2.22 (fe789d2): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.13 (7b14904)
doveconf: Warning: NOTE: You can get a new clean config file with: doveconf -n > dovecot-new.conf
doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:103: 'imaps' protocol is no longer necessary, remove it
doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:103: 'pop3s' protocol is no longer necessary, remove it
# OS: Linux 4.4.0-45-generic x86_64 Ubuntu 16.04.5 LTS ext3
mail_location = maildir:/home/%u/Maildir
namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix =
}
passdb {
  driver = pam
}
protocols = pop3 imap
service imap-login {
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}
service imap {
  process_limit = 1024
}
service pop3-login {
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}
service pop3 {
  process_limit = 1024
}
ssl = no
userdb {
  driver = passwd
}

是的,我不明白这一点。我用来设置它的教程似乎早已消失。而且仍然有很多问题。

  1. 我这个配置哪里出错了?
  2. 我如何解决它?
  3. 如果我使用 Cloudflare 来屏蔽我的服务器 IP,这会破坏我的 MX 记录吗?
  4. 为什么我的 netstat 显示端口 25 正在被监听但我却无法与它对话?

我知道亚马逊会阻止来自端口 25 的大量通信,但似乎没有任何信息表明他们阻止了到该端口的通信。我也已经设置了发送限制。

并且日志甚至没有报告他们收到消息。

答案1

您的安全策略是否允许外部连接到端口 25?这可能是问题所在。

在机器上,您可以 telnet 到 127.0.0.1 25 吗?

答案2

终于明白了。

这是完整的检查表:确保 Postfix/dovecot/squrrelmail/mailbox 已设置。设置完成后,您应该会看到。注意:这仅用于接收电子邮件。发送则是另一个地狱。

sudo netstat -plnt
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      1612/master

您看到的一定是 0.0.0.0,而不是 127.0.0.1 或 192.0.0.ext。

确保您的 Amazon 上的安全组启用了端口 25 和 ssl/tls 端口。

接下来检查 /etc/postfix/master.cf 是否有:

smtp       inet  n       -       n       -       -       smtpd

它不是私有的,它在 inet 上,并且它不是 chrooted。不知道为什么。有时有帮助。只需确保您对文件夹具有适当的权限即可。

接下来确保您的 ufc 允许连接到 25。

sudo ufw status
25/tcp                     ALLOW       Anywhere

如果不:

sudo ufw allow 25/tcp

即使 netstat 显示 25 也在被监听,它也可能被防火墙阻止了。

最后检查以确保你在 iptables 中有一个 ACCEPT。

sudo iptables -I INPUT -p tcp -m tcp --dport 25 -j ACCEPT

现在执行外部端口测试:https://www.yougetsignal.com/tools/open-ports/

大多数 ISP 都会阻止家庭通过端口 25 进行端口通信。就是这样。全部阻止。您甚至可能无法 ping 通服务器。是的,太糟糕了。

如果一切都顺利,你应该会一切顺利。检查你的邮件日志。

sudo tail -f /var/log/mail.log

Apr 26 07:43:05 DZWXGamesWeb postfix/qmgr[6257]: 87EEE400EC: from=<[email protected]>, size=3266, nrcpt=1 (queue active)
Apr 26 07:43:05 DZWXGamesWeb postfix/local[27250]: 87EEE400EC: to=<[email protected]>, relay=local, delay=0.37, delays=0.36/0/0/0, dsn=2.0.0, status=sent (delivered to maildir)

显示正确路由的信件。如果有任何问题,请检查 /var/log/mail.err

相关内容