在搭建配置Postfix之前首先要深刻理解其工作原理,以下是对电子邮件系统的简单概述:
邮件系统角色:
MUA(邮件用户代理):一般被称为邮件服务器软件,负责接收客户端软件发送的邮件,并将邮件传输给其他的MTA程序,是电子邮件系统中的核心部分;例如微软的Exchange,IBM公司的 Notes/Domino,以及下面将要介绍到的的Postfix都属于MTA类软件
MTA(邮件传输代理): 一般被称为邮件客户端软件,负责为用户提供发送、接收和管理电子邮件的界面;例如Outlook、Outlook Express、Foxmail等
MDA(邮件分发代理): 负责在服务器中将邮件分发到用户的邮箱目录,它并不直接面向邮件用户,而是在后台默默的工作。有时候MDA的功能可以直接集成在MTA软件中,因此经常被忽略;
邮件应用协议:
SMTP,简单邮件传输协议,TCP 25端口,用于传递信息的标准协议
POP3,第3版邮局协议,TCP 110端口,用户通常将所有的邮件下载到客户端
IMAP4,第4版因特网消息访问协议,TCP 143端口,允许用户通过网络要求服务器代为管理邮件
Postfix的可靠性、安全性、效率高、应用灵活、容易使用、完全兼容于sendmail等特性,使其成为现在流行的的开源邮件系统主要原因之一
基于RHEL虚拟系统的邮件系统架构:
在建立基于虚拟用户的postfix邮件系统之前,需要搭建配置LAMP平台。
1.建立虚拟用户的数据库
[root@localhost media]# tar zxvf extman-0.2.5.tar.gz -C /usr/src/
[root@localhost media]# cd /usr/src/extman-0.2.5/docs/
[root@localhost docs]# mysql -u root -p < extmail.sql
[root@localhost docs]# mysql -u root -p < init.sql
2.修改postfix的配置
[root@localhost postfix-2.4.6]# vi /etc/postfix/main.cf
virtual_mailbox_base = /mailbox
virtual_alias_maps = mysql:/etc/posrfix/mysql_virtual_alias_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_uid_maps = static:1000
virtual_gid_maps = static:1000
[root@localhost docs]# cp mysql_virtual_* /etc/postfix/
3.设置smtp认证 编译安装 courier-authlib包
[root@localhost media]# tar jxvf courier-authlib-0.60.2.tar.bz2 -C /usr/src/
[root@localhost courier-authlib-0.60.2]# rpm -e mysql --nodeps //卸除mysql rpm包
[root@localhost courier-authlib-0.60.2]# ./configure --prefix=/usr/local/courier-authlib --without-stdheaderdir --with-authmysql --with-RedHat --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql
[root@localhost courier-authlib-0.60.2]# make && make install
[root@localhost courier-authlib-0.60.2]# make install-configure
[root@localhost courier-authlib-0.60.2]# vi /etc/ld.so.conf
/usr/local/courier-athlib/lib/courier-authlib
[root@localhost courier-authlib-0.60.2]# ldconfig
[root@localhost courier-authlib-0.60.2]# cd /usr/local/courier-authlib/etc/authlib/
[root@localhost authlib]# cp authdaemonrc authdaemonrc.bak
[root@localhost authlib]# vi authdaemonrc
authmodulelist="authmysql"
authmodulelistorig="authmysql"
[root@localhost authlib]# chmod -R 755 /usr/local/courier-authlib/var/spool/authdaemon/
MYSQL_SERVER localhost
MYSQL_USERNAME extmail
MYSQL_PASSWORD extmail
MYSQL_DATABASE extmail
MYSQL_SOCKET /tmp/mysql.sock \\需要自己创建
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD uidnumber
MYSQL_GID_FIELD gidnumber
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD concat('/mailbox/',homedir)
MYSQL_NAME_FIELD name
[root@localhost courier-authlib-0.60.2]# cp courier-authlib.sysvinit /etc/init.d/courier-authlib
[root@localhost courier-authlib-0.60.2]# chmod 755 /etc/rc.d/init.d/courier-authlib
[root@localhost sasl2]# service courier-authlib start
[root@localhost courier-authlib-0.60.2]# chkconfig --level 35 courier-authlib on
4.修改dovecot的配置
[root@localhost sasl2]# vi /etc/dovecot.conf
mail_location = maildir:/mailbox/%d/%n/Maildir
auth default {
mechanisms = plain
passdb sql {
args = /etc/dovecot-mysql.conf
}
userdb sql {
args = /etc/dovecot-mysql.conf
}
[root@localhost sasl2]# vi /etc/dovecot-mysql.conf
driver = mysql
connect = host=localhost dbname=extmail user=extmail password=extmail
default_pass_scheme = CRYPT
password_query = SELECT username AS user,password AS password FROM mailbox WHERE
username='%u'
user_query = SELECT maildir,uidnumber AS uid,gidnumber AS gid FROM mailbox WHERE username = '%u'
[root@localhost sasl2]# mkdir -p /mailbox/extmail.org/postmaster/Maildir/
[root@localhost Maildir]# chown -R postfix:postfix /mailbox/
[root@localhost Maildir]# dovecot