Postfix、saslauthd、mysql、smtp 认证问题

Postfix、saslauthd、mysql、smtp 认证问题

尝试在运行的邮件服务器 (ubuntu 10.04) 上进行身份验证,但遇到了问题。我有一台带有 postfix 的服务器用于 smtp 设置,还有带有 courier 设置的 imap 服务器。我的 postfix 身份验证使用的是 cyrus(我实际上还没有尝试过 dovecot)saslauth。用户名和密码存储在 MySql 数据库中。使用 imap-ssl 登录可以在远程客户端 (thunderbird) 上使用,我可以阅读我的邮件。我无法让 SMTP 端工作,并将问题集中在 saslauth 上。

测试

testsaslauthd -u 'username' -p 'passowrd' -s smtp 

返回

connect() : Permission denied

数据库中的密码是加密的,我猜这个 testsaslauthd 将采用纯文本密码并对其进行加密。

想找人指导我如何让这个工作正常。我是邮件服务器的新手,从来没有让一个完全正常工作过。谢谢。问我应该查看/发布哪些日志文件,运行哪些测试,检查哪些权限。

编辑: (2012 年 3 月 26 日)有关更多信息,我无法使用任何邮件客户端,它们会给出如下错误

The message could not be sent because connecting to SMTP server <mydomain.com> failed. The server may be unavailable or is refusing SMTP connections

我在 iptables 上打开了相应的端口,但我猜这是一个内部问题,因为我运行了上面的测试。我还运行了telnetmail.mydomain.com 25得到ehlo localhost了以下结果

250-mail.domain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

编辑:(2012 年 3 月 28 日下午 2:45)

~$ postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
config_directory = /etc/postfix
inet_interfaces = all
inet_protocols = all
mailbox_size_limit = 0
mime_header_checks = regexp:/etc/postfix/mime_header_checks
mydestination = mail.mydomain.co, localhost, localhost.localdomain
myhostname = mail.mydomain.co
mynetworks = 127.0.0.0/8
myorigin = /etc/mailname
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps
readme_directory = no
recipient_delimiter = +
relayhost =
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_tls_cert_file = /etc/ssl/certs/mailcert.pem
smtpd_tls_key_file = $smtpd_tls_cert_file
smtpd_tls_session_cache_timeout = 3600s
smtpd_use_tls = yes
virtual_alias_domains =
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-forwards.cf, mysql:/etc/postfix/mysql-email.cf
virtual_gid_maps = static:5000
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-mailboxes.cf
virtual_uid_maps = static:5000

编辑:已解决(2012 年 3 月 29 日) 感谢@AveryPane和@malloc4k为我指明了正确的方向。我必须做几件事,确保我的MX记录顺序正确。我使用了工具 intodns.com,还http://www.mxtoolbox.com检查我的服务器是否接受连接。然后使用 tail -f 查看日志中是否有任何错误,我很高兴看到在理清 DNS 记录并调整一些配置文件后确实有内容被记录下来。

有两件事我不知道,其中之一是一些 ISP 会阻止端口 25,这可能是我遇到的问题,为什么 thunderbird 无法在端口 25 上看到我的服务器。第二个文件中/etc/postfix/master.cf有关于允许 postfix 监听哪些端口的设置。默认端口 25 是

smtp      inet  n       -       -       -       -       smtpd

基本上就是在说“嗨,我是 postfix,我在 25 端口上运行”。如果你想在另一个端口(邮件服务器常用的 587 端口)上运行 postfix,请在 master.cf 的附近添加此行

587      inet  n       -       -       -       -       smtpd

运行重新启动/etc/init.d/postfix restart,然后就设置好了。这对我来说就是解决方案。

答案1

想找人指导我如何让这个工作正常。我是邮件服务器的新手,从来没有让它完全正常工作过。

欢迎来到电子邮件地狱,我的朋友。你并不孤单。首先,如果你真的想运行电子邮件服务器,你需要好好学习一下。电子邮件就像大多数公用事业服务一样——理所当然,但没有人愿意考虑让它发挥作用所需的努力。我推荐一本优秀的(谢天谢地,简短的)O'Reilly 书Postfix:权威指南,这是有关如何运行 Postfix 的极好信息来源。

我还会花时间阅读一些基本的“游戏规则”,因为很多全球电子邮件系统基本上都是君子协定,不互相干扰对方的投递。当然,你可以仔细阅读厚厚的文件,比如RFC 2142以及其他一些规则,但我认为我们可以将其归结为几个简单的规则:

  • 做一名负责任的管理员。 这意味着拥有一个功能齐全的[电子邮件保护]地址,以及 [电子邮件保护]这些实际上会进入除位桶之外的其他位置。将这些发送到 /dev/null 是另一种进入黑名单的好方法。毕竟,谁愿意和一个不听别人谈论问题的人打交道他们正在制作?
  • 您现在已成为社区的一员。这意味着你会遇到其他做过以下事情的管理员,呃,不同地他们会对如何做事有不同的意见。只要他们的观点合理或有理由,就放松地听他们说。
  • 在这个社区里,你要对自己的服务器负责。 如果其他人发现您做不合适的事情(例如成为垃圾邮件开放中继 - 稍后会详细介绍),您将很快被列入黑名单。尽最大努力做正确的事。
  • 运行自己的服务器意味着你已将自己的资源投入其中. 不要被垃圾邮件发送者(冒充“电子邮件营销人员”)所欺骗他们有权做任何他们想做的事你的资源。我经常听到这样的回答:“但这不是你的决定,这是收件人的决定,你应该让我的电子邮件通过”。你的回答应该总是:“这是我的决定,这是我的服务器,以及现在已成为我黑名单上渐渐淡去的记忆。”
  • 其他服务器不是您可以使用的资源;您可以出于他人的善意和考虑来使用它们。 善待其他管理员,并牢记向其服务器发送大量电子邮件的“黄金法则”。如果有人将电子邮件转发到您服务器上的 2,000 个不同邮箱,导致邮件传递延迟几分钟,您会喜欢吗?
  • 一切设置完毕并运行一段时间后,定期回去检查你的日志。是的,每小时的数千条记录都是垃圾邮件发送者试图 (a) 将他们的猪肉副产品发送到您的收件箱或 (b) 利用您作为跳板将其发送给其他人。这引出了我们...
  • 垃圾邮件发送者每隔几个月就会改变策略。 通常,对反垃圾邮件设置进行一点调整就足以消除骚扰。
  • 出于对${DIETY} 的热爱,请不要在互联网的公共端运行开放中继。 开放中继的概念,即一台机器,可以接收任何人的电子邮件并将其发送到任何地方,是旧时代的遗物,那时的互联网是一个更友善、更温和的地方。在当今时代,垃圾邮件发送者会找到您,他们会将您的机器变成他们自己的私人电子邮件机枪,最终他们会在此过程中玷污您的名誉。
  • 你会遇到不关心服务器的管理员,就像防御性驾驶员会在路上留意其他(愚蠢的)驾驶员一样,您也需要留意他们。
  • 糟糕的管理员通常会配置糟糕的服务器。 有一些商业提供商只想快速赚钱,他们不在乎其他人在“破坏”他们的服务器时会发生什么。这意味着你会遇到做蠢事的服务器,一些管理员会打电话给你,想和你争辩为什么这是“你的问题”而不是他们的。仔细检查您的服务器并确保它确实不是您,然后礼貌地用线索四告知他们他们的错误......

还有更多,但是这些基本的东西应该可以为你指明正确的方向。


我无法使用任何邮件客户端,

关于您问题中的“客户端无法发送”部分,该问题与您接受电子邮件的域有关。具体来说,您的帖子提到:

mydestination =
myhostname = my.domain.com

这两种说法都是错误的。看看这里设置mydestination参数,以及这里对于myhostname参数。这两个参数基本上告诉 postfix 它将接受哪些邮件进行投递,具体取决于收件人:电子邮件地址的右半部分。将它们设置为空意味着my.domain.com它只会接受投递,my.domain.com但仍然不会投递,因为mydestination是空白的。我可能错了,但我认为这不是你想要的。

答案2

问题可能出在您的 Cyrus 设置或 PAM 设置中(在您的设置中,Cyrus SASL 可能使用 PAM 与 MySQL 通信)。

我建议你两件事:

  1. 仔细阅读 Postfix 文档中的相应部分: SASL自述文件

  2. 检查你的/var/log/auth.log

相关内容