标签 postfix 下的文章

 title=

在这个系列的文章中,我们将通过使用 Postfix、Dovecot 和 openssl 这三款工具来为你展示如何在 ubuntu 系统上搭建一个既可靠又易于配置的邮件服务器。

在这个容器和微服务技术日新月异的时代,值得庆幸的是有些事情并没有改变,例如搭建一个 Linux 下的邮件服务器,仍然需要许多步骤才能间隔各种服务器耦合在一起,而当你将这些配置好,放在一起,却又非常可靠稳定,不会像微服务那样一睁眼有了,一闭眼又没了。 在这个系列教程中我们将通过使用 Postfix、Dovecot 和 openssl 这三款工具在 ubuntu 系统上搭建一个既可靠又易于配置的邮件服务器。

Postfix 是一个古老又可靠的软件,它比原始的 Unix 系统的 MTA 软件 sendmail 更加容易配置和使用(还有人仍然在用sendmail 吗?)。 Exim 是 Debain 系统上的默认 MTA 软件,它比 Postfix 更加轻量而且超级容易配置,因此我们在将来的教程中会推出 Exim 的教程。

Dovecot(LCTT 译注:详情请阅读维基百科)和 Courier 是两个非常受欢迎的优秀的 IMAP/POP3 协议的服务器软件,Dovecot 更加的轻量并且易于配置。

你必须要保证你的邮件通讯是安全的,因此我们就需要使用到 OpenSSL 这个软件,OpenSSL 也提供了一些很好用的工具来测试你的邮件服务器。

为了简单起见,在这一系列的教程中,我们将指导大家安装一个在局域网上的邮件服务器,你应该拥有一个局域网内的域名服务,并确保它是启用且正常工作的,查看这篇“使用 dnsmasq 为局域网轻松提供 DNS 服务”会有些帮助,然后,你就可以通过注册域名并相应地配置防火墙,来将这台局域网服务器变成互联网可访问邮件服务器。这个过程网上已经有很多很详细的教程了,这里不再赘述,请大家继续跟着教程进行即可。

一些术语

让我们先来快速了解一些术语,因为当我们了解了这些术语的时候就能知道这些见鬼的东西到底是什么。 :D

  • MTA 邮件传输代理 Mail Transfer Agent ,基于 SMTP 协议(简单邮件传输协议)的服务端,比如 Postfix、Exim、Sendmail 等。SMTP 服务端彼此之间进行相互通信(LCTT 译注 : 详情请阅读维基百科)。
  • MUA 邮件用户代理 Mail User Agent ,你本地的邮件客户端,例如 : Evolution、KMail、Claws Mail 或者 Thunderbird(LCTT 译注 : 例如国内的 Foxmail)。
  • POP3 邮局协议 Post-Office Protocol 版本 3,将邮件从 SMTP 服务器传输到你的邮件客户端的的最简单的协议。POP 服务端是非常简单小巧的,单一的一台机器可以为数以千计的用户提供服务。
  • IMAP 交互式消息访问协议 Interactive Message Access Protocol ,许多企业使用这个协议因为邮件可以被保存在服务器上,而用户不必担心会丢失消息。IMAP 服务器需要大量的内存和存储空间。
  • TLS 传输套接层 Transport socket layer 是 SSL( 安全套接层 Secure Sockets Layer )的改良版,为 SASL 身份认证提供了加密的传输服务层。
  • SASL 简单身份认证与安全层 Simple Authentication and Security Layer ,用于认证用户。SASL进行身份认证,而上面说的 TLS 提供认证数据的加密传输。
  • StartTLS: 也被称为伺机 TLS 。如果服务器双方都支持 SSL/TLS,StartTLS 就会将纯文本连接升级为加密连接(TLS 或 SSL)。如果有一方不支持加密,则使用明文传输。StartTLS 会使用标准的未加密端口 25 (SMTP)、 110(POP3)和 143 (IMAP)而不是对应的加密端口 465(SMTP)、995(POP3) 和 993 (IMAP)。

啊,我们仍然有 sendmail

绝大多数的 Linux 版本仍然还保留着 /usr/sbin/sendmail 。 这是在那个 MTA 只有一个 sendmail 的古代遗留下来的痕迹。在大多数 Linux 发行版中,/usr/sbin/sendmail 会符号链接到你安装的 MTA 软件上。如果你的 Linux 中有它,不用管它,你的发行版会自己处理好的。

安装 Postfix

使用 apt-get install postfix 来做基本安装时要注意(图 1),安装程序会打开一个向导,询问你想要搭建的服务器类型,你要选择“Internet Server”,虽然这里是局域网服务器。它会让你输入完全限定的服务器域名(例如: myserver.mydomain.net)。对于局域网服务器,假设你的域名服务已经正确配置,(我多次提到这个是因为经常有人在这里出现错误),你也可以只使用主机名。

 title=

图 1:Postfix 的配置。

Ubuntu 系统会为 Postfix 创建一个配置文件,并启动三个守护进程 : masterqmgrpickup,这里没用一个叫 Postfix 的命令或守护进程。(LCTT 译注:名为 postfix 的命令是管理命令。)

$ ps ax 
 6494 ? Ss 0:00 /usr/lib/postfix/master 
 6497 ? S 0:00 pickup -l -t unix -u -c 
 6498 ? S 0:00 qmgr -l -t unix -u 

你可以使用 Postfix 内置的配置语法检查来测试你的配置文件,如果没用发现语法错误,不会输出任何内容。

$ sudo postfix check 
[sudo] password for carla: 

使用 netstat 来验证 postfix 是否正在监听 25 端口。

$ netstat -ant 
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 
tcp6 0 0 :::25  :::*  LISTEN 

现在让我们再操起古老的 telnet 来进行测试 :

$ telnet myserver 25 
Trying 127.0.1.1... 
Connected to myserver. 
Escape character is '^]'. 
220 myserver ESMTP Postfix (Ubuntu) 
EHLO myserver
250-myserver 
250-PIPELINING 
250-SIZE 10240000 
250-VRFY 
250-ETRN 
250-STARTTLS 
250-ENHANCEDSTATUSCODES 
250-8BITMIME 
250 DSN 
^]

telnet> 

嘿,我们已经验证了我们的服务器名,而且 Postfix 正在监听 SMTP 的 25 端口而且响应了我们键入的命令。

按下 ^] 终止连接,返回 telnet。输入 quit 来退出 telnet。输出的 ESMTP(扩展的 SMTP ) 250 状态码如下。 (LCTT 译注: ESMTP (Extended SMTP),即扩展 SMTP,就是对标准 SMTP 协议进行的扩展。详情请阅读维基百科

  • PIPELINING 允许多个命令流式发出,而不必对每个命令作出响应。
  • SIZE 表示服务器可接收的最大消息大小。
  • VRFY 可以告诉客户端某一个特定的邮箱地址是否存在,这通常应该被取消,因为这是一个安全漏洞。
  • ETRN 适用于非持久互联网连接的服务器。这样的站点可以使用 ETRN 从上游服务器请求邮件投递,Postfix 可以配置成延迟投递邮件到 ETRN 客户端。
  • STARTTLS (详情见上述说明)。
  • ENHANCEDSTATUSCODES,服务器支撑增强型的状态码和错误码。
  • 8BITMIME,支持 8 位 MIME,这意味着完整的 ASCII 字符集。最初,原始的 ASCII 是 7 位。
  • DSN,投递状态通知,用于通知你投递时的错误。

Postfix 的主配置文件是: /etc/postfix/main.cf,这个文件是安装程序创建的,可以参考这个资料来查看完整的 main.cf 参数列表, /etc/postfix/postfix-files 这个文件描述了 Postfix 完整的安装文件。

下一篇教程我们会讲解 Dovecot 的安装和测试,然后会给我们自己发送一些邮件。


via: https://www.linux.com/learn/how-build-email-server-ubuntu-linux

作者:CARLA SCHRODER 译者:WangYihang 校对:wxy

本文由 LCTT 组织编译,Linux中国 荣誉推出

Postfix 3.0.0 正式版发布了,这次发布也标志着对其 2.8 版本的支持结束。

Postfix 2.x 系列从2003年开始发表,已经维护了十余年了。这次大版本跨越,带来了许多有趣的特性改进,主要如下:

  • 增加了SMTPUTF8 支持,支持使用国际化的域名和本地地址部分,它们由 RFC 6530 及相关文档定义(即支持类似这样的邮件地址: 商务@公司.中国,支持@技术.翻墙)。该实现是基于由 CNNIC 赞助的 Arnt Gulbrandsen 所提供的代码的。SMTPUTF8 的支持还在持续开发中, 预计会在 3.1 中完成。参见 SMTPUTF8\_README 。
  • 支持 Postfix 使用动态链接库和数据库插件。参见 INSTALL 查看可用选项的描述。
  • 由于 3.0 和2.x 系列的一些默认值不同,因此 Postfix 提供了一种安全网机制(compatibility\_level),可以用来兼容老版本的 2.x 设置。参见 COMPATIBILITY\_README 了解更多细节。
  • 支持对多个查询表的复合查询。如 pipemap:{map1,map2...} 支持多个查询表以管道方式连接起来(即前一个查询表的结果作为后一个查询表的查询条件);而 unionmap:{map1,map2,...} 会将同样的查询发送到多个查询表,并将结果联合起来返回。
  • 支持简单的伪查询表。如 inline:{key1=value1,key2=value2,...} 可以用于替代只有几个值的外部文件查询;而 randmap{value1,value2,...} 则可以从几个特定值内随机选择一个。
  • 支持对DNS 查询结果和投递状态代码和信息的查表转换。典型的,可以使用 PCRE 表来修复 DNS 查询的错误或投递错误信息。参见 smtp\_dns\_reply\_filter、 smtp\_delivery\_status\_filter 和 similarly-named 等参数。
  • 配置文件支持三元操作符,如 ${name?{iftrue}:{iffalse}};比较操作符,如 ${{expr1}==${expr2}?{iftrue}:{iffalse}};对每个过滤器/策略服务器指定超时及其它设置; master.cf 参数支持空格,输入和输出的环境变量可以包含空格,静态表查询结果可以包含空格;对 accsess(5)和 header/body\_checks(5) 的多表查询支持预期在 3.1 版本完成。
  • 入站邮件会话的命令交互情况按照会话进行记录。例如,一个暴力攻击密码的机器人会记录为: "disconnect from name[addr] ehlo=1 auth=0/1 commands=1/2",这代表着该客户端发送了一个成功的 EHLO 命令,而 AUTH 命令失败,并且没有 QUIT 即断开会话了。这些信息有助于你从大量日志中梳理出问题脉络。

更多细节信息可以参阅发布公告,及源代码中附带的 README\_FILES、INSTALL 等文档。

Postfix 3.0.0 下载地址: <ftp://mir1.ovh.net/ftp.postfix.org/postfix-release/index.html> (或选择其他的镜像)。

当你启动并运行应用服务器后,你就需要一台好的邮件服务器来为你传递邮件。我为我所有的服务器开通了postfix邮件服务,下面就是我常用的配置。

CentOS 6上安装Postfix

yum install postfix

默认安装了Sendmail,所以最好将它停掉并移除。

service sendmail stop
yum remove sendmail

Postfix包含了两个配置文件main.cf和master.cf,对于基本的配置,你需要修改main.cf。同时,postfix可以像shell变量一样定义参数,并通过$来调用。这些参数不需要再使用前定义,Postfix只在运行中需要时才会查询某个参数。

配置postfix

vim /etc/postfix/main.cf

去掉以下行的注释

# 你的主机名
myhostname = yourhostname.com

# 你的发件域
myorigin = $myhostname

# 指定用于接收邮件的网络接口,这里指定 localhost 是因为我们只用来接受本地的程序投递
inet_interfaces = localhost

# 指定所使用的协议,可以使用“all”来增加 IPv6 支持
inet_protocols = ipv4


# 指定所接受的邮件域    
mydestination = $myhostname, localhost.$mydomain, localhost

# 仅转发本地主机的邮件,而不是主机所在的网络
mynetworks_style = host

启动postfix

service postfix start

这些基本的postfix配置可以让你的机器发送邮件,你可以通过发送邮件并检查“maillog”日志文件来验证。

echo test mail | mail -s "test"  [email protected] && sudo tail -f /var/log/maillog

# 输出的日志类似如下
Aug 25 14:16:21 vps postfix/smtp[32622]: E6A372DC065D: to=, relay=smtp.mailserver.org[50.56.21.176], delay=0.8, delays=0.1/0/0.43/0.27, dsn=2.0.0, status=sent (250 Great success)
Aug 25 14:16:21 vps postfix/qmgr[5355]: E6A372DC065D: removed

但是,上述配置并不够,因为邮件服务大多数时候都会被垃圾邮件挤满,你需要添加SPF、PTR和DKIM记录。即便如此,你的邮件仍然可能被当作垃圾邮件来投递,因为你的IP地址被列入了黑名单,大多数时候是因为你的vps先前被入侵了。

还有另外一种选择,或者说是更好的方式是使用第三方邮件提供商提供的邮件服务,如Gmail,或者甚至是Mailgun。我使用Mailgun,因为它们提供了每个月10000封免费电子邮件,而Gmail则提供了每天100封左右的邮件。

在“/etc/postfix/main.cf”中,你需要添加“smtp.mailgun.com”作为你的“转发主机”,并启用“SASL”验证,这样postfix就可以连接并验证到远程Mailgun服务器。

添加或取消以下行的注释。

relayhost = [smtp.mailgun.org]
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps=static:your_username:your_password
smtp_sasl_security_options=noanonymous

Postfix本身不会实施“SASL”验证,因此你需要安装“cyrus-sasl-plain”。

sudo yum install cyrus-sasl-plain

如果你不安装此包,那么你就会收到这条错误信息“SASL authentication failed; cannot authenticate to server smtp.mailgun.org[50.56.21.176]: no mechanism available)”

重启postfix

sudo service postfix restart

使用TLS加固Postfix安全

Postfix支持TLS,它是SSL的后继者,允许你使用基于密钥的验证来加密数据。我推荐你阅读 http://www.postfix.org/TLS_README.html ,以了解TLS是怎么和postfix一起工作的。

为了使用TLS,你需要生成一个私钥和一个由证书授权机构颁发的证书。在本例中,我将使用自颁发的证书。

sudo yum install mod_ssl openssl
# 生成私钥 
openssl genrsa -out smtp.key 2048 

# 生成 CSR 
openssl req -new -key smtp.key -out smtp.csr

# 生成自签名的钥匙
openssl x509 -req -days 365 -in smtp.csr -signkey smtp.key -out smtp.crt

# 将文件复制到正确的位置
cp smtp.crt /etc/pki/tls/certs
cp smtp.key /etc/pki/tls/private/smtp.key
cp smtp.csr /etc/pki/tls/private/smtp.csr

打开postfix配置文件,然后添加以下参数。

sudo vim /etc/postfix/main.cf

smtp_tls_security_level = may
smtpd_tls_security_level = may
smtp_tls_note_starttls_offer = yes

smtpd_tls_key_file = /etc/pki/tls/private/smtp.key
smtpd_tls_cert_file = /etc/pki/tls/certs
smtp_tls_CAfile = /etc/ssl/certs/ca.crt
smtp_tls_loglevel = 1

安全级别“may”意味着宣告对远程SMTP客户端上的STARTTLS的支持,但是客户端不需要使用加密。我在这里按照mailgun文档提示使用“may”,但是如果你想要强制使用TLS加密,可以使用“encrypt”。

service postfix restart
# 发送一封测试邮件
echo test mail | mail -s "test"  [email protected] && sudo tail -f /var/log/maillog

你应该会看到以下信息

Aug 21 00:00:06 vps postfix/smtp[4997]: setting up TLS connection to smtp.mailgun.org[50.56.21.176]:587
Aug 21 00:00:06 vps postfix/smtp[4997]: Trusted TLS connection established to smtp.mailgun.org[50.56.21.176]:587: TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)

如果一切正常,你可以注释掉以下参数。

“smtp\_tls\_loglevel = 1”

对于故障排除,我推荐你阅读Postfix小建议和排障命令


via: http://techarena51.com/index.php/configure-secure-postfix-email-server/

作者:Leo G 译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

这里是一些我每天用的命令,当然,其他的email管理员也会使用,因此我写下来,以防我忘记。

列出/打印当前邮件队列

# postqueue –p

# mailq

如果队列太长,可以使用tail管道读取。

# mailq | tail

清理队列

# postqueue -f

立即投递某domain.com域名的所有邮件

# postqueue -s domain.com

删除所有队列

# postsuper -d ALL

删除指定的消息

# postsuper -d messageid

重新排队邮件或者重新发送指定邮件

#postfix -r msgid

查找邮件版本

#postconf -d mail_version
mail_version = 2.6.6

你也可以查看下面的连接,这个连接有很多例子和不错的可用的解释文档,可以用来配置postfix:Postfix Configuration


via: http://techarena51.com/index.php/postfix-configuration-and-explanation-of-parameters/

作者:Leo G 译者:Vic020 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

问题1:什么是 Postfix,它的默认端口是多少?

答:Postfix 是一个开源的 MTA(邮件传送代理,英文名:Mail Transfer Agent),用于转发 email。相信很多人知道 Sendmail,而 Postfix 是它的替代品。默认端口是25。

问题2:Postfix 和 Sendmail 有什么区别?

答:Postfix 使用模块化设计,由多个独立的可执行程序组成;而 Sendmail 被设计成有一个强大的后台进程提供所有服务。

问题3:什么是 MTA,它在邮件系统中扮演什么角色?

答:MTA 是 Mail Transfer Agent (邮件传输代理)的缩写。MTA 负责接收和发送邮件、确定发送路径和地址重写(LCTT译注:address rewriting,就是完善发送地址,比如将“username”这个地址重写为“[email protected]”)。本地转发就是将邮件发送给 MDA。Qmail、Postix、Sendmail 都是 MTA。

问题4:什么是 MDA?

答:MDA 是 Mail Delivery Agent (邮件投递代理)的缩写。MDA 这个程序用于从 MTA 获取邮件并投递至本地收件人的邮箱。MDA 通常可以过滤邮件或为邮件分类。一个 MDA 也能决定一封邮件是否需要转发到另一个邮箱地址。Procmail 就是一个 MDA。

问题5:什么是 MUA?

答:MUA 是 Mail User Agent (邮件用户代理)的缩写。MUA 是一个邮件客户端软件,可以用来写邮件、发送邮件、接收邮件。发送邮件时使用的是 MTA;接收邮件时可以从邮件存储区直接收取,也可以通过 POP/IMAP 服务器间接收取。Outlook、Thunkerbird、Evolution 都是 MUA。

问题6:邮件服务器里 postmaster 的作用是什么?

答:邮件管理者一般就是 postmaster。一个 postmaster 的责任就是保证邮件系统正常工作、更新系统配置、添加/删除邮箱帐号,以及其他工作。每个域中必须存在一个 postmaster 的别名(LCTT译注:postmaster 别名用于接受一些其它服务器/用户对该邮件系统的沟通邮件,如关于垃圾邮件拒收的投诉等,通常都会直接被邮件服务器的管理员所接受。一些系统错误和提示的邮件,也往往以postmaster 作为发件人),用于将邮件发往正确的用户。

问题7:Postfix 都有些什么重要的进程?

答:以下是 Postfix 邮件系统里最重要的后台进程列表:

  • master:这条进程是 Postfix 邮件系统的大脑,它产生所有其他进程。
  • smtpd:作为服务器端程序处理所有外部连进来的请求。
  • smtp:作为客户端程序处理所有对外发起连接的请求。
  • qmgr:它是 Postfix 邮件系统的心脏,处理和控制邮件队列里面的所有消息。
  • local:这是 Postfix 自有的本地投递代理MDA,就是它负责把邮件保存到邮箱里。

问题8:Postfix 服务器的配置文件是什么?

答:有两个主要配置文件:

  • /etc/postfix/main.cf:这个文件保存全局配置信息,所有进程都会用到,除非这些配置在 master.cf 文件中被重新设置了。
  • /etc/postfix/master.cf:这个文件保存了额外的进程运行时环境参数,在 main.cf 文件中定义的配置可能会被本文件的配置覆盖掉。

问题9:如何将 Postfix 重启以及设为开机启动?

答:使用这个命令重启:service postfix restart;使用这个命令设为开机启动:chkconfig postfix on

问题10:怎么查看 Postfix 的邮件队列?

答:Postfix 维护两个队列:未决邮件队列(pending mails queue)和等待邮件队列(deferred mail queue)。等待队列包含了暂时发送失败、需要重新发送的邮件,Postfix 会定期重发(默认5分钟,可自定义设置)。(LCTT译注:其实 Postfix 维护5个队列:输入队列,邮件进入 Postfix 系统的第一站;活动队列,qmgr 将输入队列的邮件移到活动队列;等待队列,保存暂时不能发送出去的邮件;故障队列,保存受损或无法解读的邮件;保留队列,将邮件无限期留在 Postfix 队列系统中。)

列出邮件队列里面所有邮件:

# postqueue -p

保存邮件队列名单:

# postqueue -p > /mnt/queue-backup.txt

让 Postfix 马上处理队列:

# postqueue -f

问题11:如何删除邮件队列里面的邮件?

答:以下命令删除所有邮件:

# postsuper -d ALL

以下命令只删除等待队列中的邮件:

# postsuper -d ALL deferred

问题12:如何通过命令来检查 Postfix 配置信息?

答:使用postconf -n命令可以查看,它会过滤掉配置文件里面被注释掉的配置信息。

问题13:实时查看邮件日志要用什么命令?

答:

tail -f /var/log/maillog 或 tailf /var/log/maillog

问题14:如何通过命令行发送测试邮件?

答:参考下面的命令:

# echo "Test mail from postfix" | mail -s "Plz ignore" [email protected]

问题15:什么是“开放邮件转发(Open Relay)”?

答:开放邮件转发是 SMTP 服务器的一项设定,允许因特网上任意的其他用户能通过该服务器转发邮件,而不是直接发送到某个帐号的服务器或只允许授权用户通过它来发送邮件。过去,这项功能在许多邮件服务器中都是默认开启的,但是现在已经不再流行了,因为邮件转发会导致大量垃圾邮件和病毒邮件在网络上肆虐。

问题16:什么是 Postfix 上的邮件转发主机?

答:转发主机是 SMTP 的地址,如果在配置文件中有配置,那么所有输入邮件都将被 SMTP 服务器转发。

问题17:什么是灰名单?

答:灰名单(LCTT译注:介于白名单和黑名单之间)是一种用于拦截垃圾邮件的技术。一个 MTA 使用灰名单时就会“暂时拒绝”未被识别的发送者发来的所有邮件。如果邮件是正当合理的,发起者会在一段时间后重新发送,然后这份邮件就能被接收。(LCTT译注:灰名单基于这样一个事实,就是大多数的垃圾邮件服务器和僵尸网络的邮件只发送一次,而会忽略要求它们在一定的时间间隔后再次发送的请求。)

问题18:邮件系统中 SPF 记录有什么重要作用?

答:SPF 是 Sender Policy Framework 的缩写,用于帮助邮件域的拥有者确认发送方是否来自他们的域,目的是其他邮件系统能够保证发送方在发送邮件时来自经过授权的来源 —— 这种方法可以减小遇到邮件地址欺骗、网络钓鱼和垃圾邮件的风险。

问题19:邮件系统中 DKIM 有什么用处?

答:域名密匙是一套电子邮件身份认证系统,用于验证邮件发送方的 DNS 域和邮件的完整性。域名密匙规范采用互联网电子邮件认证技术,建立了一套加强版协议:域名密匙识别邮件(就是 DKIM)。

问题20:邮件系统中 ASSP 的规则是什么?

答:ASSP(Anti-Spam SMTP Proxy,反垃圾代理) 是一个网关服务器,安装在你的 MTA 前面,通过自建白名单、自动学习贝叶斯算法、灰名单、DNS 黑名单(DNSBL)、DNS 白名单(DNSWL)、URI黑名单(URIBL)、SPF、SRS、Backscatter、病毒扫描功能、附件阻拦功能、基于发送方等多种方法来反垃圾邮件。


via: http://www.linuxtechi.com/postfix-interview-questions-answers/

作者:Pradeep Kumar 译者:bazz2 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出