介绍
在本教程中,我们将在Ubuntu 12.04上使用Postfix,Dovecot,MySQL和SpamAssassin配置邮件服务器。 按照本教程,您将能够添加虚拟域,用户和别名。此外,您的虚拟服务器将安全从垃圾邮件中心。
先决条件
在设置邮件服务器之前,您的VPS必须具有以下功能: *域名被转发到你的服务器(
安装域 ) * MySQL的安装和配置(
安装的MySQL ) *用户以root权限(
建立新用户 -省略第5步) *配置和识别您的FQDN(
设置FQDN )
可选 :SSL证书(
安装免费签名的SSL证书 )
可选的 (以root身份登录的用户) 以root用户身份安装软件包很有用,因为您拥有所有权限。
sudo -i
介绍您的用户密码。一旦它的成功,你会看到,
$
符号变为
#
。
第1步:安装软件包
apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql
当Postfix配置被提示时选择Internet站点:
Stapling配置将询问系统邮件名称 - 您可以使用您的FDQN或主域。
第2步:创建MySQL数据库,虚拟域,用户和别名
安装完成后,我们将创建一个MySQL数据库来配置三个不同的表:一个用于域,一个用于用户,最后一个用于别名。 我们将数据库名称
servermail
,但你可以使用任何你想要的名称。 创建servermail数据库:
mysqladmin -p create servermail
以MySQL root用户身份登录
mysql -u root -p
输入您的MySQL root的密码;如果它的成功,你会看到:
mysql >
首先,我们需要创建一个新用户,特定于邮件身份验证,我们将授予SELECT权限。
mysql > GRANT SELECT ON servermail.* TO 'usermail'@'127.0.0.1' IDENTIFIED BY 'mailpassword';
之后,我们需要重新加载MySQL权限,以确保它成功应用这些权限:
mysql > FLUSH PRIVILEGES;
最后,我们需要使用数据库创建表并介绍我们的数据:
mysql> USE servermail;
我们将为被识别为授权域的特定域创建一个表。
CREATE TABLE `virtual_domains` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我们将创建一个表来介绍用户。在这里您将添加电子邮件地址和密码。必须将每个用户与一个域相关联。
CREATE TABLE `virtual_users` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`password` VARCHAR(106) NOT NULL,
`email` VARCHAR(120) 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;
最后,我们将创建一个虚拟别名表,以指定要转发到其他电子邮件的所有电子邮件。
CREATE TABLE `virtual_aliases` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT 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;
我们已经成功创建了三个表。现在我们要介绍数据。
虚拟域
这里我们将在virtual_domains表中引入您的域。您可以添加所有您需要的域,但在本教程中,我们将只介绍主域(example.com)和您的FQDN(hostname.example.com)。
INSERT INTO `servermail`.`virtual_domains`
(`id` ,`name`)
VALUES
('1', 'example.com'),
('2', 'hostname.example.com');
虚拟电子邮件
我们将介绍与每个域相关联的电子邮件地址和密码。请确保您更改所有信息与您的具体信息。
INSERT INTO `servermail`.`virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', ENCRYPT('firstpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email1@example.com'),
('2', '1', ENCRYPT('secondpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email2@example.com');
虚拟别名
我们将介绍我们要转发到其他电子邮件地址(目标)的电子邮件地址(来源)。
INSERT INTO `servermail`.`virtual_aliases`
(`id`, `domain_id`, `source`, `destination`)
VALUES
('1', '1', 'alias@example.com', 'email1@example.com');
退出MySQL
mysql > exit
第3步:配置Postfix
我们将配置Postfix来处理SMTP连接,并为MySQL数据库中引入的每个用户发送消息。 首先,我们需要创建默认文件的副本,以防您想要恢复为默认配置。
cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
打开main.cf文件以修改它:
nano /etc/postfix/main.cf
首先,我们需要注释TLS参数并追加其他参数。在本教程中,我们使用的是免费SSL证书,并且在本教程(建议的路径
链接 ),但你可以根据你个人的配置修改。
# TLS parameters
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.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_cert_file=/etc/ssl/certs/dovecot.pem
smtpd_tls_key_file=/etc/ssl/private/dovecot.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
然后我们将在我们在上一步中更改的TLS设置下面附加以下参数:
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
我们需要发表意见
mydestination
的默认设置和替换
localhost
。此更改允许您的VPS使用MySQL表内的虚拟域。
#mydestination = example.com, hostname.example.com, localhost.example.com, localhost
mydestination = localhost
验证myhostname参数是否与您的FQDN一起设置。
myhostname = hostname.example.com
将本地邮件传递附加到MySQL表中列出的所有虚拟域。
virtual_transport = lmtp:unix:private/dovecot-lmtp
最后,我们需要添加这三个参数来告诉Postfix配置虚拟域,用户和别名。
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
注意:将这些更改与此文件进行比较以检测错误或错误:
https://www.dropbox.com/s/x9fpm9v1dr86gkw/etc-postfix-main.cf.txt
我们将创建我们在main.cf文件中附加的最后三个文件,告诉Postfix如何连接MySQL。 首先,我们需要创建
mysql-virtual-mailbox-domains.cf
文件。有必要根据您的个人配置更改值。
nano /etc/postfix/mysql-virtual-mailbox-domains.cf
user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_domains WHERE name='%s'
然后我们需要重新启动Postfix。
service postfix restart
我们需要确保Postfix找到您的域,所以我们需要使用以下命令进行测试。如果它成功,它应该返回1:
postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
然后我们需要创建mysql-virtual-mailbox-maps.cf文件。
nano /etc/postfix/mysql-virtual-mailbox-maps.cf
user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_users WHERE email='%s'
我们需要重新启动Postfix。
service postfix restart
此时,我们将确保Postfix使用以下命令找到您的第一个电子邮件地址。如果成功,则返回1:
postmap -q email1@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
最后,我们将创建最后一个文件来配置Postfix和MySQL之间的连接。
nano /etc/postfix/mysql-virtual-alias-maps.cf
user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT destination FROM virtual_aliases WHERE source='%s'
重新启动Stapling
service postfix restart
我们需要验证Postfix可以找到您的别名。输入以下命令,它应该返回转发到别名的邮件:
postmap -q alias@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf
如果要启用端口587与电子邮件客户端安全连接,则有必要修改/etc/postfix/master.cf文件
nano /etc/postfix/master.cf
我们需要取消注释这些行并附加其他参数:
submission inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
在某些情况下,我们需要重新启动Postfix以确保端口587已打开。
service postfix restart
注意:您可以使用此工具来扫描你的域端口,并确认端口25和587是开放的(
http://mxtoolbox.com/SuperTool.aspx )
第4步:配置Dovecot
我们将复制要修改的7个文件,以便您可以将其还原为默认值(如果需要)。逐个输入以下命令:
cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig
cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig
从Dovecot编辑配置文件。
nano /etc/dovecot/dovecot.conf
验证此选项已取消注释。
!include conf.d/*.conf
我们要实现以下协议(如果要添加POP3)
!include_try /usr/share/dovecot/protocols.d/*.protocol line
。
!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap lmtp
注意:将这些更改与此文件进行比较以检测错误或错误:
https://www.dropbox.com/s/wmbe3bwy0vcficj/etc-dovecot-dovecot.conf.txt
然后我们要编辑邮件配置文件:
nano /etc/dovecot/conf.d/10-mail.conf
查找
mail_location
线,取消它,并把下面的参数:
mail_location = maildir:/var/mail/vhosts/%d/%n
查找
mail_privileged_group
线,取消它,并添加邮件参数,如下所示:
mail_privileged_group = mail
注意:将这些更改与此文件进行比较以检测错误或错误:
https://www.dropbox.com/s/hnfeieuy77m5b0a/etc.dovecot.conf.d-10-mail.conf.txt
验证权限
输入此命令:
ls -ld /var/mail
确保权限是这样的:
drwxrwsr-x 3 root vmail 4096 Jan 24 21:23 /var/mail
我们将为我们在MySQL表中注册的每个域创建一个文件夹:
mkdir -p /var/mail/vhosts/example.com
创建一个ID为5000的vmail用户和组
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/mail
我们需要的的所有者更改
/var/mail
文件夹中的语音邮件的用户。
chown -R vmail:vmail /var/mail
然后,我们需要编辑
/etc/dovecot/conf.d/10-auth.conf
文件:
nano /etc/dovecot/conf.d/10-auth.conf
取消注释纯文本身份验证,并添加以下行:
disable_plaintext_auth = yes
修改
auth_mechanisms
参数:
auth_mechanisms = plain login
评论这行:
#!include auth-system.conf.ext
取消注释此行即可启用MySQL授权:
!include auth-sql.conf.ext
注意:将这些更改与此文件进行比较以检测错误或错误:
https://www.dropbox.com/s/4h472nqrj700pqk/etc.dovecot.conf.d.10-auth.conf.txt
我们需要创建/etc/dovecot/dovecot-sql.conf.ext文件以及您的身份验证信息:
nano /etc/dovecot/conf.d/auth-sql.conf.ext
在文件中输入以下代码:
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}
我们需要修改
/etc/dovecot/dovecot-sql.conf.ext
文件,我们自定义的MySQL的信息:
nano /etc/dovecot/dovecot-sql.conf.ext
取消注释驱动程序参数并将mysql设置为参数:
driver = mysql
取消注释连接线并介绍您的MySQL特定信息:
connect = host=127.0.0.1 dbname=servermail user=usermail password=mailpassword
取消对
default_pass_scheme
行并将其更改为
SHA-512
。
default_pass_scheme = SHA512-CRYPT
取消对
password_query
线,并添加以下信息:
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';
注意:将这些更改与此文件进行比较以检测错误或错误:
https://www.dropbox.com/s/48a5r0mtgdz25cz/etc.dovecot.dovecot-sql.conf.ext.txt
将dovecot文件夹的所有者和组更改为vmail用户:
chown -R vmail:dovecot /etc/dovecot
chmod -R o-rwx /etc/dovecot
打开并修改
/etc/dovecot/conf.d/10-master.conf
文件(要小心,因为不同的参数将被改变)。
nano /etc/dovecot/conf.d/10-master.conf
##Uncomment inet_listener_imap and modify to port 0
service imap-login {
inet_listener imap {
port = 0
}
#Create LMTP socket and this configurations
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
#inet_listener lmtp {
# Avoid making LMTP visible for the entire internet
#address =
#port =
#}
}
修改
unix_listener
参数
service_auth
是这样的:
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
#group =
}
#unix_listener /var/spool/postfix/private/auth {
# mode = 0666
#}
user = dovecot
}
修改
service auth-worker
是这样的:
service auth-worker {
# Auth worker process is run as root by default, so that it can access
# /etc/shadow. If this isn't necessary, the user should be changed to
# $default_internal_user.
user = vmail
}
注意:将这些更改与此文件进行比较以检测错误或错误:
https://www.dropbox.com/s/g0vnt233obh6v2h/etc.dovecot.conf.d.10-master.conf.txt
最后,我们将从Dovecot修改SSL配置文件(如果要使用默认配置,请跳过此步骤)。
# nano /etc/dovecot/conf.d/10-ssl.conf
将ssl参数更改为必需:
ssl = required
并修改路径
ssl_cert
和
ssl_key
:
ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.pem
重新启动Dovecot
service dovecot restart
你应该检查端口993是否打开和工作(如果你启用pop3;你也应该检查端口995)。
telnet example.com 993
恭喜你已经成功地配置您的邮件服务器,你可以使用电子邮件客户端测试您的帐户:
- Username: email1@example.com
- Password: email1's password
- IMAP: example.com
- SMTP: example.com
注意:使用端口993作为安全IMAP,端口587或25用于SMTP。
第5步:配置SpamAssassin
首先我们需要安装SpamAssassin。
apt-get install spamassassin spamc
然后我们需要为SpamAssassin创建一个用户。
adduser spamd --disabled-login
要成功配置SpamAssassin,需要打开和修改配置设置。
nano /etc/default/spamassassin
我们需要改变
ENABLED
参数启用SpamAssassin的守护进程。
ENABLED=1
我们需要配置home和options参数。
SPAMD_HOME="/home/spamd/"
OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SPAMD_HOME} -s ${SPAMD_HOME}spamd.log"
然后,我们需要指定
PID_File
这样的参数:
PIDFILE="${SPAMD_HOME}spamd.pid"
最后,我们需要指定SpamAssassin的规则将自动更新。
CRON=1
注意:将这些更改与此文件进行比较以检测错误或错误:
https://www.dropbox.com/s/ndvpgc2jipdd4bk/etc.default.spamassassin.txt
我们需要打开
/etc/spamassassin/local.cf
成立了反垃圾邮件规则。
nano /etc/spamassassin/local.cf
SpamAssassin将对每封邮件进行分数,如果它确定此邮件的垃圾邮件检查大于5.0,则会自动被视为垃圾邮件。您可以使用以下参数配置反垃圾邮件规则:
rewrite_header Subject ***** SPAM _SCORE_ *****
report_safe 0
required_score 5.0
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1
skip_rbl_checks 0
use_razor2 0
use_dcc 0
use_pyzor 0
我们需要更改Stapling
/etc/postfix/master.cf
文件来告诉它每封邮件将与SpamAssassin的检查。
nano /etc/postfix/master.cf
然后我们需要找到以下行并添加spamassassin过滤器:
smtp inet n - - - - smtpd
-o content_filter=spamassassin
最后,我们需要附加以下参数:
spamassassin unix - n n - - pipe
user=spamd argv=/usr/bin/spamc -f -e
/usr/sbin/sendmail -oi -f ${sender} ${recipient}
有必要启动SpamAssassin并重新启动Postfix以开始验证来自电子邮件的垃圾邮件。
service spamassassin start
service postfix restart
恭喜!您已成功设置邮件服务器Postfix和Dovecot与MySQL认证和垃圾邮件过滤与SpamAssassin的!