如何使用 Dovecot 设置 Postfix 电子邮件服务器:动态邮件地址和 LMTP

预言


本教程是基于 如何用Dovecot设置邮件修复服务器,并将第一部分结束的地方收集。

请先通过此教程。

在本文中,我们将使用doveCot的LMTP服务器作为交付机制来分离系统帐户的邮箱,以及使用postgresql来保持用户记录。

不会再发送到标准的 linux 邮箱。

与第一个指南一样,本教程基于 Debian 7 wheezy、Postfix 2.9 和 dovecot 2.1 (+ Postgresql 9.1)。

包装


安装 postgresql:

1# aptitude install postgresql postfix-pgsql

dovecot 在版本 2.1 应该已经与 pgsql 启用。 如果你在一个系统,其中 dovecot 是模块化,运行

1# aptitude install dovecot-lmtpd dovecot-pgsql

安装必要的模块。

Postgres 数据库设置


如果你已经有 postgres 设置运行了! 但从新的 postgres 安装开始,让我们设置身份验证,以便我们可以为 dovecot 提供访问数据库。添加以下内容到 /etc/postgresql/9.1/main/pg_ident.conf:

1mailmap dovecot mailreader
2mailmap postfix mailreader
3mailmap root mailreader

以下是 /etc/postgresql/9.1/main/pg_hba.conf (警告:请确保在把你的实际配置放在这里评论块后直接添加它!否则,默认条目之一可能会先被捕获,而databse 身份验证将失败。

1local mail all peer map=mailmap

然后重新加载 postgresql (service postgresql reload) 现在设置数据库:

 1# sudo -u postgres psql
 2postgres=# CREATE USER mailreader;
 3postgres=# REVOKE CREATE ON SCHEMA public FROM PUBLIC;
 4postgres=# REVOKE USAGE ON SCHEMA public FROM PUBLIC;
 5postgres=# GRANT CREATE ON SCHEMA public TO postgres;
 6postgres=# GRANT USAGE ON SCHEMA public TO postgres;
 7postgres=# CREATE DATABASE mail WITH OWNER mailreader;
 8postgres=# \q 
 9# sudo psql -U mailreader -d mail
10postgres=# \c mail

邮件名称: 邮件名称: 邮件名称: 邮件名称: 邮件名称: 邮件名称: 邮件名称: 邮件名称: 邮件名称: 邮件名称: 邮件名称: 邮件名称: 邮件名称: 邮件名称: 邮件名称: 邮件名称:

然后,您可以添加这样的虚拟邮箱,从根板开始:

 1# doveadm pw -s sha512 -r 100
 2Enter new password: ...
 3Retype new password: ...
 4{SHA512}.............................................................==
 5# psql -U mailreader -d mail
 6mail=# INSERT INTO users (
 7    email,
 8    password,
 9    maildir
10) VALUES (
11    '[email protected]',
12    '{SHA512}.............................................................==',
13    'foo/'
14);

管理界面(可选)


如果您不希望使用命令行接口来维护邮件数据库,您可以设置管理接口。 首先,让我们添加一个数据库用户,只允许编辑邮件数据库。 回到 /etc/postgresql/9.1/main/pg_hba.conf 并在您之前添加的同行身份验证行下面添加此行:

1host pgadmin mail 127.0.0.1/32 md5

这将允许在端口 5432 上本地接口连接(postgres 的默认端口)

添加数据库用户:

1# sudo -u postgres psql
2postgres=# CREATE USER pgadmin WITH PASSWORD 'new password';
3postgres=# \q

给用户编辑邮件数据库的权限:

1# sudo psql -U mailreader -d mail
2mail=> GRANT SELECT, UPDATE, INSERT, DELETE ON users TO pgadmin;
3mail=> GRANT SELECT, UPDATE, INSERT, DELETE ON aliases TO pgadmin;
4mail=> \q

现在你可以使用一个管理界面,如pgAdmin,它可以使用SSH隧道直接连接到数据库,或者你可以设置一些类似phpPgAdmin的东西。

达沃斯 设置


我们需要将doveCot连接到数据库并设置LMTP服务器。设置一个新的用户(doveCot将拒绝处理邮件而没有系统用户为此设置)和邮件目录(你可以使用 /var/mail,但传统上使用mbox格式,而我们将使用优越的邮件格式)。

adduser --system --no-create-home --uid 500 --group --disabled-password --disabled-login --gecos 'dovecot virtual mail user' vmail

mkdir /home/mailboxes

chown vmail:vmail /home/mailboxes

ch 700 /home/mailboxes

现在将以下配置保存为 /etc/dovecot/dovecot-sql.conf:

1driver = pgsql
2connect = host=/var/run/postgresql/ dbname=mail user=mailreader
3default_pass_scheme = SHA512
4password_query = SELECT email as user, password FROM users WHERE email = '%u'
5user_query = SELECT email as user, 'maildir:/home/mailboxes/maildir/'||maildir as mail, '/home/mailboxes/home/'||maildir as home, 500 as uid, 500 as gid FROM users WHERE email = '%u'

确保它属于根和chmodded 600。

现在打开/etc/dovecot/dovecot.conf并编辑passdbuserdb设置以显示如下:

1userdb {
2  driver = prefetch
3}
4passdb {
5  args = /etc/dovecot/dovecot-sql.conf
6  driver = sql
7}

protocols stanza 更改为

1protocols = imap lmtp

并添加 lmtp 服务接口和一些 lmtp 协议设置:

 1service lmtp {
 2    unix_listener /var/spool/postfix/private/dovecot-lmtp {
 3    group = postfix
 4    mode = 0600
 5    user = postfix
 6    }
 7}
 8protocol lmtp {
 9    postmaster_address=postmaster@yourdomain.com
10    hostname=mail.yourdomain.com
11}

现在的 mail_location stanza 是多余的,可以删除。

邮局


现在我们需要告诉 postfix 将邮件直接发送到 dovecot. 打开 /etc/postfix/main.cf 并添加

1mailbox_transport = lmtp:unix:private/dovecot-lmtp

现在我们需要设置数据库 config for postfix。

创建文件 /etc/postfix/pgsql-aliases.cf 并输入:

1user=mailreader
2dbname=mail
3table=aliases
4select_field=alias
5where_field=email
6hosts=unix:/var/run/postgresql

然后创建文件 /etc/postfix/pgsql-boxes.cf 并输入:

1user=mailreader
2dbname=mail
3table=users
4select_field=email
5where_field=email
6hosts=unix:/var/run/postgresql/

现在更改 main.cf 中的 alias_maps 行以读取

1alias_maps = hash:/etc/aliases proxy:pgsql:/etc/postfix/pgsql-aliases.cf

和 local_recipient_maps 行阅读

1local_recipient_maps = proxy:pgsql:/etc/postfix/pgsql-boxes.cf $alias_maps

总的来说,你的 main.cf 应该看起来像这样:

1myhostname = mail.mydomain.com
2myorigin = mydomain.com
3mydestination = mydomain.com, mail.mydomain.com, localhost, localhost.localdomain
4relayhost =
5mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
6mailbox_size_limit = 0
7recipient_delimiter = +
8inet_interfaces = all

alias_maps = hash:/etc/aliases proxy:pgsql:/etc/postfix/pgsql-aliases.cf local_recipient_maps = proxy:pgsql:/etc/postfix/pgsql-boxes.cf $alias_maps mailbox_transport = lmtp:unix:private/dovecot-lmtp

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

完结


现在只需重新加载:

1# postfix reload

1# service dovecot restart

测试您的设置,就像您在第一篇文章之后一样,并确保邮件到[email protected]找到通往受访的邮箱!

经由: Lukas Erlacher )

Published At
Categories with 技术
comments powered by Disqus