如何使用Dovecot设置Postfix电子邮件服务器

本教程将告诉您如何设置基本的邮件服务器,并尝试在此过程中向您介绍Postfix MTA(邮件传输代理)。

Stapling简介


本教程将告诉您如何设置一个基本的邮件服务器,并在过程中教你一些关于Postfix MTA(邮件传输代理)。

Stapling是非常灵活。 它的架构基于一个松散的服务组合,它接收电子邮件并将它们传递给其他服务(在接收外边缘上具有“smtp”服务,在传递外边缘具有“本地”和“虚拟”服务)重看接收邮件)。 Postfix本身实现了接收,路由和传递邮件的核心要求,并依赖第三方扩展来完成其他任务。

Stapling具有几百配置参数 如果你想管理可靠地传送业务需求,以一个相当大的组织中的邮件服务器,你应该让自己的亲密与他们(的人5 postconf )。 本教程是不够的,对自己,让你一个称职的专业的电子邮件管理。 但是,如果你想熟悉postfix或为自己和几个朋友设置邮件服务器,本教程和后面的教程将是你的朋友。

Dovecot简介


我不会在dovecot上花很多介绍性的话。 Dovecot也是巨大的(这里是为Dovecot2维基 ),但我们只需要一个很小的一套从dovecot的功能。

本文解释几乎每一个设置要详细设置。 你可以继续前进,如果你想掠过的解释- 风险自担

本教程假定(并且使用)以下设置:

  • Debian 7 .1 Wheezy x64_86
  • Stapling2.9.6-2
  • dovecot 1:2.1.7-7

虽然任何基于Debian的操作系统应该是很好的,Postfix正在使用的广泛的版本,包括Postfix 1.x,Postfix 2.9和Postfix 2.10,它们有一些相互不兼容的设置和功能 - 并使用Postfix 2.9,本教程不在流血的边缘。

本教程还假设了一些关于你的事情:

  • 你对GNU / Linux命令行感到舒服,并且有像Debian这样的GNU / Linux系统的一般布局和工作原理。

  • 您的本地系统是GNU / Linux或合理兼容(MinGW,Cygwin,Mac OS X,* BSD)

  • 你知道如何在你的Droplet上得到一个根茎

  • 那你知道如何使用文本编辑器(如VIM,纳米,emacs或标准编辑器, ed )在Linux


    默认情况下,将输入命令,并从Droplet上的roothell编辑文件。 在大多数其他DigitalOcean文章,你需要自定义的命令部分将以红色突出显示

系统设置


以下成分是必要的,使您的Droplet准备成为邮件服务器:

  • 一个域,让我们假设它是“mydomain.com”

  • 邮件服务器的主机名,让我们假设“mail.mydomain.com”

  • 对“mail.mydomain.com”有效的SSL证书

设置SSL证书


对于SSL,您需要一个证书和一个私钥。 在本教程中,我们将假定证书保存在/etc/ssl/certs/mailcert.pem和密钥保存在/etc/ssl/private/mail.key 确保密钥只有root用户可读!

如何为您的网站和电子邮件设置SSL证书取决于您的网站结构和您使用的CA(例如,自签名,组织(子)-ca或商业ca)。 创建自签名测试证书与执行一样简单

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/mail.key -out /etc/ssl/certs/mailcert.pem

并留下默认值,只需点击回答所有问题。 不要在生产中使用此证书!

大多数CA将要求您提交证书签名请求。 (CSR)您可以生成一个这样:

sudo openssl req -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/mail.key -out mailcert.csr

填写正确查询的信息,如在本抄本中:(与您打算使用哪个CA需要在CSR中的信息的CA检查)

Generating a 2048 bit RSA private key
.............................+++
................+++
writing new private key to 'mail.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: US
State or Province Name (full name) [Some-State]: Virginia
Locality Name (eg, city) []: Langley
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Network Services Association
Organizational Unit Name (eg, section) []: Infrastructure Services
Common Name (e.g. server FQDN or YOUR name) []: mail.mydomain.com
Email Address []: postmaster@mydomain.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

(请注意,这样你就不能创建适用于使用多个域证书subjectAltName字段中没有一些额外的工作-再次检查CA的文档)

设置DNS


您必须使用指向邮件服务器IP的A记录和指向邮件服务器主机名的MX记录来设置DNS。

这里是如何做到,如果你使用DigitalOcean的DNS:

  • 转到您的DigitalOcean面板中的“DNS”区域
  • 创建新域或选择之前创建的域
  • 点击右上角的“添加记录”按钮
  • 添加A记录:

添加A记录

  • 再次点击“添加记录”,然后添加指向A记录的MX记录:

添加MX记录

更多信息可在发现主机名设置DNS的技巧和窍门的文章。

验证DNS


DNS将需要几个小时的时间通过互联网传播,但应该在几分钟后在您的DNS服务器上设置。 你可以主机检查:

[root@yourbase] ~# dig MX mydomain.com +short @ns1.digitalocean.com
50 mail.mydomain.com.
[root@yourbase] ~# host mail.mydomain.com ns1.digitalocean.com
Using domain server:
Name: ns1.digitalocean.com
Address: 198.199.120.125#53
Aliases:

mail.mydomain.com has address 82.196.9.119

Stapling


我们现在将设置Postfix以接收和传递本地用户的邮件。


Debian上的默认MTA是exim。 关闭它! 我们还会停止postfix安装后,因为我们不想它的运行。

aptitude remove exim4 && aptitude install postfix && postfix stop

一个小插入:Postfix自己管理它的守护进程,不需要服务(init.d)系统。 Stapling开始,Stapling停止和Stapling重新加载等效于服务Stapling启动,服务Stapling停止和服务Stapling重新加载。

Stapling配置


Postfix的主要有两个配置文件:main.cf,它规定你会认为的配置选项,和master.cf,指定服务Stapling应该运行。

首先,配置master.cf文件( /etc/postfix/ )。 添加一个额外的“smtpd”实例,称为“提交”,将邮件从可信任的客户端传送到整个世界,我们不允许任何人。
要做到这一点,打开master.cf(看看男人5主 ,如果你想了解这是怎么回事),并取消对提交的配置,并添加选项来启用SASL:

submission inet n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_wrappermode=no
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth

这需要一点解释。 -o ...选项覆盖从默认拍摄设置,或在配置,我们将在以后设置定义。
简而言之,这里发生的是,这使得“提交”守护进程与TLS安全外部连接,以及dovecot介导的SASL检查连接客户端的用户名和密码。 (我们将在以后的dovecot中设置)。

的重要细节是一个不能被看到:在smtpd_recipient_restrictions缺少reject_unauth_destination ,这是目前作为默认并限制中继。

然后我们转移到main.cf。 我们会用干净的石板这里开始-运行cp /etc/postfix/main.cf /etc/postfix/main.cf.orig如果要保存默认配置文件(它也是/usr/share/postfix/main.cf.dist虽然),然后打开它并清除它!

让我们先设置网络信息:(有关域postfix正在处理邮件的信息,以及一些额外的信息)

myhostname = mail.domain.com
myorigin = /etc/mailname
mydestination = mail.domain.com, domain.com, localhost, localhost.localdomain
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

我们设置了主机名和默认原点,这是从/ etc /邮件名为能被debian约定采购。 你可以将它设置明确的,如果你没有在/ etc /邮件名 默认原点用于构建“发件人”地址为本地用户。mydestination中设置postfix接受作为最终目的地的邮件域,我们将“中继主机”空禁止转发邮件(中继方式接受邮件,然后转发到一邮件服务器不是邮件的最终目的地,我们不需要这样做;这在例如公司内部网中是有用的,其中中央邮件服务器应该在邮件离开网络之前检查邮件)。

附加说明:这与术语“开放中继”无关,这是一个邮件服务器,接受来自任何人的电子邮件而不进行身份验证,并将其发送到不在自己的网络中的域的MTA - 对于其他`relay_ `使用设置,我们保留默认和禁用)

让我们现在设置本地别名映射。 我们不必设置这个设置,因为我们只是保持默认设置,但它是好的,使它显式,以防后来我们想添加另一种定义别名映射的方法。 (像一个真正的DBMS)

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

然后我们设置SSL:

smtpd_tls_cert_file=/etc/ssl/certs/mailcert.pem
smtpd_tls_key_file=/etc/ssl/private/mail.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_security_level=may
smtpd_tls_protocols = !SSLv2, !SSLv3

我们设置cert文件和它的密钥,启用tls,并设置缓存文件。 然后,我们让TLS可选的,因为我们不能让每一个公共SMTP服务器上需要TLS RFC2487 我们还禁止使用SSLv2和SSLv3,因此只允许使用TLSv1.0和更高版本(如果您想知道为什么,请阅读SSL教程 - 简而言之,SSLv2和SSLv3已过时)。

这是罚款,但默认情况下应该要添加到它的情况下,明确指定其他设置后是本地收件人地图

local_recipient_maps = proxy:unix:passwd.byname $alias_maps

此设置告诉Postfix检查查找表,并拒绝向表中找不到的用户发送电子邮件。 这是因为另类行为的重要,如果local_recipient_maps没有设置,是先接受邮件,再后来反弹了。 这将导致“反向散射”:如果Stapling不能确定所有有效用户立即(在smtpd的服务),就像当local_recipients_maps没有设置,它将接受邮件,然后稍后发送的未送达通知(当它发现邮件无法送达后,它已经由smptd传递)。 这些未送达的通知通常打击无辜的人,他们的地址已被欺骗的垃圾邮件和诈骗电子邮件,并有助于垃圾邮件问题。

Sane别名配置


有一些邮件帐户,你应该设置在您的别名配置是重要的。 例如, SMTP RFC ,任何可公开访问的邮件服务器接受任何邮件都还必须接受邮件到“邮政局长”账户,有些人可能会想到“hostmaster”,“滥用”,“站长”,和其他邮箱的任务是当下。 您可以将这些邮件地址重定向到root或特定用户。 这是一个理智的默认/etc/aliases ,假设您检查电子邮件

mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root

如果你想把所有的重定向到一个特定的本地用户,说,“你的名称”只是添加

root: yourname

Postfix将为您解析整个别名链,并将所有这些邮件地址转发到“yourname”。 (这是由做局部使用后台驻留程序的别名规范。)

“别名”说,更新/ etc / aliases文件后,你必须运行

newaliases

将文件编译成数据库Postfix用于快速查找。

Dovecot


这将是更少的文本y! 深吸一口气,我们差不多完成了。


aptitude install dovecot-core dovecot-imapd

应该做。 如果需要所有默认包,请运行

aptitude install dovecot-common

然后进入/etc/dovecot/dovecot.conf ,并再次清除出该文件。 (这是重要的这个时候-默认的配置包括了一堆的下属配置文件/etc/dovecot/conf.d ,我们不希望)。

现在输入以下配置:

disable_plaintext_auth = no
mail_privileged_group = mail
mail_location = mbox:~/mail:INBOX=/var/mail/%u
userdb {
  driver = passwd
}
passdb {
  args = %s
  driver = pam
}
protocols = " imap"

这使得明文身份验证(其中“纯文本”认证将通过TLS进行隧道),讲述Dovecot使用mail系统组来访问本地邮箱(加上邮箱的位置),使用Unix认证系统来验证用户身份,并启用仅imap。

如果需要,您可以让dovecot自动向邮箱添加“垃圾箱”和“发送”文件夹:

protocol imap {
  mail_plugins = " autocreate"
}
plugin {
  autocreate = Trash
  autocreate2 = Sent
  autosubscribe = Trash
  autosubscribe2 = Sent
}

接下来,我们需要打开一个套接字,postfix可以用来搭载dovecot的身份验证:

service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix
  }
}

最后是ssl config:

ssl=required
ssl_cert = </etc/ssl/certs/mailcert.pem
ssl_key = </etc/ssl/private/mail.key

注意尖括号! 他们告诉dovecot从文件中读取。

结束


保存并关闭所有配置文件,并执行

newaliases
postfix start
service dovecot restart

你应该很好去。 使用邮件客户端(例如Mozilla Thunderbird)测试配置。 你应该能够发送和接收来自无处不在的邮件!

继续


如果你想添加的虚拟邮箱(即不依赖于本地用户帐户邮箱,而是可以使用本地数据库进行配置)继续进行第2部分 。***

你现在可以测试发送电子邮件两种方式工作,从Droplet上的终端:

~# mail someotheremail@gmail.com
Subject: test email from postfix
this is a test
.
EOT

从“邮件root@yourdomain.com ”应该会很快到达“ someotheremail@gmail.com ”(填你操控的电子邮件地址,很明显)。 如果您回复它,并再次调用邮件 ,你应该看到这一点:(可能需要一分钟时间,邮件到达)。

~# mail
Heirloom mailx version 12.5 6/20/10.  Type ? for help.
"/var/mail/root": 1 message
>N  1 Your Name          Wed Nov 13 23:45   41/1966  Re: test email from postf

如果你按Enter键,它将显示消息。 (然后键入q,然后按Enter离开邮件客户端)

同样的事情将与本地电子邮件客户端一起工作。 设置新的系统用户:

~# adduser joe
Adding user `joe' ...
Adding new group `joe' (1001) ...
Adding new user `joe' (1001) with group `joe' ...
Creating home directory `/home/joe' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: Enter password here
Retype new UNIX password: Enter password here
passwd: password updated successfully
Changing the user information for joe
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] Y

您在此处输入的密码是用于电子邮件的密码。 乔现在可以使用地址joe@yourdomain.com与本地邮件客户端Thunderbird的一样。 在雷鸟,只需添加一个新的帐户( File -> New -> Existing Mail Account ),并输入joe@yourdomain.com并在对话框中输入密码。

如果你的邮件客户端不会自动侦测必要的设置:对IMAP连接的用户名是joe ,端口是143,认证方法是通过STARTTLS未加密的口令。 对于SMTP,它是相同的,但端口587。

如果有什么不工作,检查错误消息的系统日志, tail -n 50 /var/log/syslog ,并在邮件日志, tail -n 50 /var/log/mail.log