Linux.中国 - 开源社区

 找回密码
 骑士注册

QQ登录

微博登录


权威指南:构建个人私有云,拿回你的数据隐私的控制权!

2015-3-25 21:48    评论: 37 收藏: 12 分享: 59    

设置postfix和dovecot来收发电子邮件

postfix

apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-mysql mysql-server dovecot-lmtpd postgrey

Postfix的配置菜单里,选择Internet Site,设置这个系统的邮件名称为jhausse.net

现在开始添加一个数据库用于保存主机上管理的域名列表,和每个域名下的用户列表(同时也包括他们各自的密码),以及邮件别名列表(用于从一个地址往另一个地址转发邮件)。

mysqladmin -p create mailserver
mysql -p mailserver
mysql> GRANT SELECT ON mailserver.* TO 'mailuser'@'localhost' IDENTIFIED BY 'mailuserpass';
mysql> FLUSH PRIVILEGES;
mysql> CREATE TABLE `virtual_domains` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> CREATE TABLE `virtual_users` (
  `id` int(11) NOT NULL auto_increment,
  `domain_id` int(11) NOT NULL,
  `password` varchar(106) NOT NULL,
  `email` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`),
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> CREATE TABLE `virtual_aliases` (
  `id` int(11) NOT NULL auto_increment,
  `domain_id` int(11) NOT NULL,
  `source` varchar(100) NOT NULL,
  `destination` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这里我们为jhausse.net域名提供邮件服务。如果还需要加入其他域名,也没问题。我们也会为每个域名设置一个邮件管理地址(postmaster),转寄给roudy@jhausse.net

mysql> INSERT INTO virtual_domains (`name`) VALUES ('jhausse.net');
mysql> INSERT INTO virtual_domains (`name`) VALUES ('otherdomain.net');
mysql> INSERT INTO virtual_aliases (`domain_id`, `source`, `destination`) VALUES ('1', 'postmaster', 'roudy@jhausse.net');
mysql> INSERT INTO virtual_aliases (`domain_id`, `source`, `destination`) VALUES ('2', 'postmaster', 'roudy@jhausse.net');

现在已经添加了一个本地邮件账号roudy@jhausse.net。首先,为它生成一个密码的哈希串:

doveadm pw -s SHA512-CRYPT

然后把哈希值加入到数据库中:

mysql> INSERT INTO `mailserver`.`virtual_users` (`domain_id`, `password`, `email`) VALUES ('1', '$6$YOURPASSWORDHASH', 'roudy@jhausse.net');

现在我们的域名、别名和用户列表都设置好了,然后开始设置postfix(这是一个SMTP服务器,用来发送邮件)。把文件/etc/postfix/main.cf替换为下面的内容:

myhostname = cloud.jhausse.net
myorigin = /etc/mailname
mydestination = localhost.localdomain, localhost
mynetworks_style = host

# We disable relaying in the general case
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
# Requirements on servers that contact us: we verify the client is not a
# known spammer (reject_rbl_client) and use a graylist mechanism
# (postgrey) to help reducing spam (check_policy_service)
smtpd_client_restrictions = permit_mynetworks, reject_rbl_client zen.spamhaus.org, check_policy_service inet:127.0.0.1:10023
disable_vrfy_command = yes
inet_interfaces = all
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/cloud.crt
smtpd_tls_key_file=/etc/ssl/private/cloud.key
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
smtp_tls_security_level=may
smtp_tls_loglevel = 1
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# Delivery
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
message_size_limit = 50000000
recipient_delimiter = +

# The next lines are useful to set up a backup MX for myfriendsdomain.org
# relay_domains = myfriendsdomain.org
# relay_recipient_maps =

# Virtual domains
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
local_recipient_maps = $virtual_mailbox_maps

现在我们要让postfix知道如何从我们设定的数据库里找出需要接收邮件的域名。建立一个新文件/etc/postfix/mysql-virtual-mailbox-domains.cf并添加以下内容:

user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'

我们可以让postfix判断给定的电子邮件账号是否存在,创建文件/etc/postfix/mysql-virtual-mailbox-maps.cf并写入以下内容:

user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_users WHERE email='%s'

最后,postfix会根据文件/etc/postfix/mysql-virtual-alias-maps.cf的内容来查找邮件别名

user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT virtual_aliases.destination as destination FROM virtual_aliases, virtual_domains WHERE virtual_aliases.source='%u' AND virtual_aliases.domain_id = virtual_domains.id AND virtual_domains.name='%d'

在配置好这些后,现在要测试一下postfix是否能正常查询数据库。我们可以用postmap命令测试:

postmap -q jhausse.net mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
postmap -q roudy@jhausse.net mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
postmap -q postmaster@jhausse.net mysql:/etc/postfix/mysql-virtual-alias-maps.cf
postmap -q bob@jhausse.net mysql:/etc/postfix/mysql-virtual-alias-maps.cf

如果一切都正常配置了的话,头两个查询应该输出1,第3个查询应该输出roudy@jhausse.net,而最后一个应该什么都不输出。

查看其它分页:

发表评论


最新评论

我也要发表评论

吉法师之艾露 2015-3-26 20:33  新浪微博网友评论
//@Linux中国:这篇鸿篇巨制(64K)不但剖析了在你被那些“免费”的服务供养的背后所损失的隐私。事实上,Google、百度、360们比你更了解你自己;而且提出了具体的解决方案,对于稍有技术基础的人来,完整地指导了如何搭建私有云,提供全功能、商业级的邮件服务和云服务。
回复
billy_rrr 2015-3-26 15:03  新浪微博网友评论
是时候买专线了//@Linux中国:这篇鸿篇巨制(64K)不但剖析了在你被那些“免费”的服务供养的背后所损失的隐私。事实上,Google、百度、360们比你更了解你自己;而且提出了具体的解决方案,对于稍有技术基础的人来,完整地指导了如何搭建私有云,提供全功能、商业级的邮件服务和云服务。
回复
SilvaSong 2015-3-26 14:03  新浪微博网友评论
mr
回复
code猪 2015-3-26 13:03  新浪微博网友评论
这个可以,如果有朋友想要一起来构建,我将会做,现在只要你的一个想法就可以,域名主机都准备好了。
回复
半天河 2015-3-26 12:33  新浪微博网友评论
@mywiz
回复
张大航死在了去写作业的路上 2015-3-26 12:03  新浪微博网友评论
//@Linux中国:这篇鸿篇巨制(64K)不但剖析了在你被那些“免费”的服务供养的背后所损失的隐私。事实上,Google、百度、360们比你更了解你自己;而且提出了具体的解决方案,对于稍有技术基础的人来,完整地指导了如何搭建私有云,提供全功能、商业级的邮件服务和云服务。
回复
24K东北人 2015-3-26 11:33  新浪微博网友评论
//@Linux中国:作为邮件技术专家,我认为,其中邮件系统部分相当完善,而且,文章的思路清晰,简明扼要。其中包括基础的 SMTP/IMAP 服务自不必提,反垃圾邮件服务、灰名单、SPF、DKIM、Webmail,应有尽有,可以作为搭建产品环境中的邮件系统参考。
回复
WakingDreamer 2015-3-26 11:33  新浪微博网友评论
好东西
回复
LPW-2015 2015-3-26 11:33  新浪微博网友评论
@我的印象笔记
回复
shanlinzi 2015-3-26 11:33  新浪微博网友评论
mark
回复
我的滑板鞋在金坷垃上摩擦 2015-3-26 11:03  新浪微博网友评论
想想自己有什么隐私?呵呵//@Linux中国:这篇鸿篇巨制(64K)不但剖析了在你被那些“免费”的服务供养的背后所损失的隐私。事实上,Google、百度、360们比你更了解你自己;而且提出了具体的解决方案,对于稍有技术基础的人来,完整地指导了如何搭建私有云,提供全功能、商业级的邮件服务和云服务。
回复
V郭小伟 2015-3-26 11:03  新浪微博网友评论
需要
回复
wktback 2015-3-26 10:33  新浪微博网友评论
@mark
回复
多多的小强 2015-3-26 10:33  新浪微博网友评论
[good][good][good]//@Linux中国:这篇鸿篇巨制(64K)不但剖析了在你被那些“免费”的服务供养的背后所损失的隐私。事实上,Google、百度、360们比你更了解你自己;而且提出了具体的解决方案,对于稍有技术基础的人来,完整地指导了如何搭建私有云,提供全功能、商业级的邮件服务和云服务。
回复
theNewID 2015-3-26 10:03  新浪微博网友评论
马//@Revil_Wang:干货很多,而且太基础了//@Linux中国:作为邮件技术专家,我认为,其中邮件系统部分相当完善,而且,文章的思路清晰,简明扼要。其中包括基础的 SMTP/IMAP 服务自不必提,反垃圾邮件服务、灰名单、SPF、DKIM、Webmail,应有尽有,可以作为搭建产品环境中的邮件系统参考。
回复
Bevisy-C 2015-3-26 10:03  新浪微博网友评论
//@Linux中国:这篇鸿篇巨制(64K)不但剖析了在你被那些“免费”的服务供养的背后所损失的隐私。事实上,Google、百度、360们比你更了解你自己;而且提出了具体的解决方案,对于稍有技术基础的人来,完整地指导了如何搭建私有云,提供全功能、商业级的邮件服务和云服务。
回复
等打鸣的鸡 2015-3-26 10:03  新浪微博网友评论
太累了……//@Linux中国:作为邮件技术专家,我认为,其中邮件系统部分相当完善,而且,文章的思路清晰,简明扼要。其中包括基础的 SMTP/IMAP 服务自不必提,反垃圾邮件服务、灰名单、SPF、DKIM、Webmail,应有尽有,可以作为搭建产品环境中的邮件系统参考。
回复
酒千觞箫 2015-3-26 09:33  新浪微博网友评论
赞!//@Linux中国: 作为邮件技术专家,我认为,其中邮件系统部分相当完善,而且,文章的思路清晰,简明扼要。其中包括基础的 SMTP/IMAP 服务自不必提,反垃圾邮件服务、灰名单、SPF、DKIM、Webmail,应有尽有,可以作为搭建产品环境中的邮件系统参考。
回复
after_sunday 2015-3-26 09:33  新浪微博网友评论
@mywiz
回复
Revil_Wang 2015-3-26 09:33  新浪微博网友评论
干货很多,而且太基础了//@Linux中国:作为邮件技术专家,我认为,其中邮件系统部分相当完善,而且,文章的思路清晰,简明扼要。其中包括基础的 SMTP/IMAP 服务自不必提,反垃圾邮件服务、灰名单、SPF、DKIM、Webmail,应有尽有,可以作为搭建产品环境中的邮件系统参考。
回复
12下一页

热点评论

来自 - 广东中山 的 Firefox/Linux 用户 2015-3-25 23:20
看了第一页
终于知道墙的作用了
9
返回顶部

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”将网页分享至朋友圈。