CentOS5下使用Postfix+Dovecot+MySQL搭建邮件服务器教程

声明:本教程基本译自Linode Library并有所删改,转载请注明转载自香菇肥牛的博客http://qing.su和Linode Library.

教程的操作环境:CentOS5-32bit,使用root登录的SSH。

Postfix是Linux下注明的邮件服务器软件,今天我们来介绍使用Postfix+Dovecot+MySQL在CentOS5下搭建邮件服务器的操作实例。由于需要用到很多数据库的内容,比较繁琐,大概整个配置时间在一小时左右,因此切勿仓促配置,以免出错。

第一步:设置服务器名。首先,查看hosts文件:
vi /etc/hosts
查看是否有一条类似于12.34.56.78 server.example.com  server的记录,其中server.example.com是你打算设置的邮件服务器的地址,对应的server是你的打算设置的服务器短域名(后文中一并对应),12.34.56.78是你的服务器(或者VPS)的IP地址。若没有,则按照实例修改或添加。
修改并保存后回到shell,执行:
echo ‘server’ > /etc/hostname
hostname -F /etc/hostname
到此,服务器名设置完毕,其中server.example.com为服务器全名(Fully Qualified Domain Name),server是短服务器名。

第二步:设置域名解析记录。
到你的域名注册商(或者DNS解析商)处,设置如下两条记录:
类型:MX. 优先级:10. 域名:example.com. 解析到:server.example.com
类型:A 域名:server.example.com 解析到:12.34.56.78.  TTL值默认即可。

第三步:安装需要的包。
回到shell,执行:
yum –y update
因为CentOS自带的Postfix不支持MySQL,因此需要用CentOS Plus包的内容。为了防止下载不支持MySQL的Postfix,我们做如下设定:
编辑文件:/etc/yum.repos.d/CentOS-Base.repo
找到其中[base]段,在其末尾添加exclude=postfix*
找到[updates]段,在其末尾添加exclude=postfix*
保存退出。回到shell,执行:
yum –enablerepo=centosplus install postfix
yum install dovecot mysql-server
此时相关的包都已经被安装。

第四步:设置MySQL.
执行如下指令,启动MySQL,并设置其为开机自启动:
chkconfig mysqld on
service mysqld start
然后我们进行一下MySQL安全设置。在shell中运行:
mysql_secure_installation
根据提示设置root密码,之后的设置都默认即可。回到shell后执行:
mysql -u root -p
此时进入了MySQL软件界面。依次执行如下指令,不要忘掉每句指令后的分号:
CREATE DATABASE mail;
USE mail;
下面我们新建一个管理员账户,并为其设置一个密码。请将如下指令中的mail_admin_password替换为你想设置的密码并依次执行:
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO ‘mail_admin’@’localhost’ IDENTIFIED BY ‘mail_admin_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO ‘mail_admin’@’localhost.localdomain’ IDENTIFIED BY ‘mail_admin_password’;
FLUSH PRIVILEGES;
下面我们新建需要的表,依次执行:
CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );
CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );
CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );
CREATE TABLE transport ( domain varchar(128) NOT NULL default ”, transport varchar(128) NOT NULL default ”, UNIQUE KEY domain (domain) );
quit
回到shell后编辑文件/etc/my.cnf,在[mysqld]段的末尾添加一行:
bind-address = 127.0.0.1
最后执行如下语句重启MySQL:
service mysqld restart
这样,MySQL的设置基本完成。

第五步:配置Postfix.
使用以下内容新建这几个文件,注意用刚才设置的密码替换掉mail_admin_password:
文件/etc/postfix/mysql-virtual_domains.cf
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT domain AS virtual FROM domains WHERE domain=’%s’
hosts = 127.0.0.1
文件/etc/postfix/mysql-virtual_forwardings.cf:
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT destination FROM forwardings WHERE source=’%s’
hosts = 127.0.0.1
文件/etc/postfix/mysql-virtual_mailboxes.cf:
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT CONCAT(SUBSTRING_INDEX(email,’@’,-1),’/’,SUBSTRING_INDEX(email,’@’,1),’/’) FROM users WHERE email=’%s’
hosts = 127.0.0.1
文件/etc/postfix/mysql-virtual_email2email.cf:
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT email FROM users WHERE email=’%s’
hosts = 127.0.0.1
回到shell后,依次执行:
chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf
然后我们新建一个用户和用户组,所有的邮件将存放在这个用户的/home目录下。执行:
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m
然后我们依次执行如下指令配置Postfix:
postconf -e ‘myhostname = server.example.com’
postconf -e ‘mydestination = $myhostname, localhost, localhost.localdomain’
postconf -e ‘mynetworks = 127.0.0.0/8’
postconf -e ‘inet_interfaces = all’
postconf -e ‘message_size_limit = 30720000’
postconf -e ‘virtual_alias_domains =’
postconf -e ‘virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf’
postconf -e ‘virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf’
postconf -e ‘virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf’
postconf -e ‘virtual_mailbox_base = /home/vmail’
postconf -e ‘virtual_uid_maps = static:5000’
postconf -e ‘virtual_gid_maps = static:5000’
postconf -e ‘smtpd_sasl_type = dovecot’
postconf -e ‘smtpd_sasl_path = private/auth’
postconf -e ‘smtpd_sasl_auth_enable = yes’
postconf -e ‘broken_sasl_auth_clients = yes’
postconf -e ‘smtpd_sasl_authenticated_header = yes’
postconf -e ‘smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination’
postconf -e ‘smtpd_use_tls = yes’
postconf -e ‘smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem’
postconf -e ‘smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem’
postconf -e ‘virtual_create_maildirsize = yes’
postconf -e ‘virtual_maildir_extended = yes’
postconf -e ‘proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps’
postconf -e ‘virtual_transport = dovecot’
postconf -e ‘dovecot_destination_recipient_limit = 1’
再编辑/etc/postfix/master.cf文件,在末尾添加Dovecot服务:
dovecot   unix  –       n       n       –       –       pipe
  flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}
最后,关闭系统自带的sendmail服务,并创建postfix开机启动:
service sendmail stop
chkconfig sendmail off
chkconfig postfix on
service postfix start
至此,Postfix基本配置完毕。

第六步:配置Dovecot.
首先我们备份一下配置文件,以免配置出错:
cp -a /etc/dovecot.conf /etc/dovecot.conf-backup
然后我们用如下内容替换掉原来的配置文件,记着使用你的域名替换example.com。重写文件/etc/dovecot.conf
protocols = imap imaps pop3 pop3s
log_timestamp = “%Y-%m-%d %H:%M:%S “
mail_location = maildir:/home/vmail/%d/%n/Maildir

ssl_cert_file = /etc/pki/dovecot/certs/dovecot.pem
ssl_key_file = /etc/pki/dovecot/private/dovecot.pem

namespace private {
    separator = .
    prefix = INBOX.
    inbox = yes
}

protocol lda {
    log_path = /home/vmail/dovecot-deliver.log
    auth_socket_path = /var/run/dovecot/auth-master
    postmaster_address = postmaster@example.com
}

protocol pop3 {
    pop3_uidl_format = %08Xu%08Xv
}

auth default {
    user = root

    passdb sql {
        args = /etc/dovecot-sql.conf
    }

    userdb static {
        args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
    }

    socket listen {
        master {
            path = /var/run/dovecot/auth-master
            mode = 0600
            user = vmail
        }

        client {
            path = /var/spool/postfix/private/auth
            mode = 0660
            user = postfix
            group = postfix
        }
    }
}
然后我们新建一个文件,记住用你之前的密码替换掉mail_admin_password。新建文件/etc/dovecot-sql.conf
driver = mysql
connect = host=127.0.0.1 dbname=mail user=mail_admin password=mail_admin_password
default_pass_scheme = CRYPT
password_query = SELECT email as user, password FROM users WHERE email=’%u’;
回到shell后执行:
chgrp dovecot /etc/dovecot-sql.conf
chmod o= /etc/dovecot-sql.conf
然后我们再设置Dovecot开机启动:
chkconfig dovecot on
service dovecot start
至此,Dovecot的设置基本完毕。

第七步,设置邮件别名。
编辑文件:/etc/aliases,在文件末尾添加:
root: postmaster@example.com
然后保存并回到shell。依次执行:
newaliases
service postfix restart
至此,别名设置完毕。

第八步,设置邮件账户、域名列表。
比如我们想要建立一个名为sales@example.com的邮箱。进入数据库:
mysql -u root -p
USE mail;
INSERT INTO domains (domain) VALUES (‘example.com’);
INSERT INTO users (email, password) VALUES (‘sales@example.com’, ENCRYPT(‘password’));
quit
其中example.com为你的域名,引号里的password是你为邮箱sales@example.com设置的密码。执行上述指令后,该邮箱的存在就写入了数据库了。
然后,我们需要为该邮箱发一封欢迎邮件,以建立收件箱文件夹。调用mailx组件执行:
yum install redhat-lsb
mailx sales@example.com
输入内容后按Ctrl+D结束并发送邮件。至此,邮件服务器全部搭建完毕。此时,你就可以用你的邮件客户端软件收发信了。

第九步:客户端收发信软件的配置。
这个配置和其他的邮箱差不多。用户名使用全名,比如上面的sales@example.com。服务器地址的话,收发信服务器地址都填写完全的服务器域名(Fully Qualified Domain Name),这里用server.example.com,端口保持默认即可。邮箱是完美支持中文的,但如果在shell下用mutt之类的程序看到的肯定是乱码了,所以只能使用类似Foxmail, DreamMail的客户端软件收发信了,或者再整合webmail程序。

好了,这个很长的Postfix邮件服务器的配置方法就说到这里,这样配置出来的邮件服务器有一个好处是可以很方便地通过PHP对MySQL的编程实现邮箱注册、发送接收之类的组件,毕竟注册的话只需要读写MySQL就可以了。

欢迎转载,转载请注明转自香菇肥牛的博客http://qing.su和Linode Library.

1 thought on “CentOS5下使用Postfix+Dovecot+MySQL搭建邮件服务器教程”

Leave a Comment