预言
本教程是基于 如何用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
并编辑passdb
和userdb
设置以显示如下:
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 )