4/28/2009

postfix+sasl+mysql+dovecot+apache+php 邮件服务器成功配置笔记(AS5环境)

postfix的优势自然不必我说了,国内若干个大型email ISP(如163.net/tom.com/163.com及sohu等)过去都使用qmail,后来全部更换成postfix。

1,准备安装包如下:
cyrus-sasl-2.1.22.tar.gz
dovecot-1.0.rc5.tar.gz
mysql-5.0.22.tar.gz
postfix-2.3.16.tar.gz
postfixadmin-2.3beta.tar.gz


2,安装mysql
mysql大多数情况都会有系统自带,测试安装postfix时,需要mysql安装包的支持,所以这里编译一个,但只是做DEV使用
tar xzvf mysql-5.0.22.tar.gz
cd mysql-5.0.22
./configure --prefix=/usr/local/mysql
make
make install


3,增加mysql的数据库与表
mysql
CREATE DATABASE postfix;
CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'choose_a_password';
GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';


4,sasl认证
这里是postfix安装的关键,系统自带的sasl安装包是没有mysql安装参数的,google找到的资料没有一个对此进行了说明,
postfix通过mysql虚拟用户认证,sasl不重新编译是不可能.这里的尝试费了我三天以上的时间,希望读过我文章的,不要在这里再费时间.
tar xzvf cyrus-sasl-2.1.22.tar.gz
cd cyrus-sasl-2.1.22
./configure --enable-login --enable-sql --with-mysql=/usr/local/mysql/
make
mv /usr/lib/sasl /usr/lib/sasl.off #备份老的sasl安装包
mv /usr/lib/sasl2 /usr/lib/sasl2.off #备份老的sasl安装包
mv /usr/lib64/sasl2 /usr/lib64/sasl2.off #64位机器上需要运行
make install
ln -s /usr/local/lib/sasl2 /usr/lib/sasl2
ln -s /usr/local/lib/sasl2 /usr/lib64/sasl2
echo "/usr/local/lib" >> /etc/ld.so.conf


5,postfix编译安装
postfix的大部分RPM包都不会带有mysql的支持,当你需要用mysql时,此时也不必浪费时间去找rpm包了
/etc/init.d/sendmail stop
rpm -e sendmail --nodeps
chkconfig --level 0123456 sendmail off
mv /usr/bin/newaliases /usr/bin/newaliases.orig
mv /usr/bin/mailq /usr/bin/mailq.orig
mv /usr/sbin/sendmail /usr/sbin/sendmail.orig
chkconfig -level 3 sendmail off #以上去掉sendmail
groupadd -g postfix
useradd -g postfix -c postfix -d /dev/null -s /bin/false postfix
groupadd postdrop
id postfix #增加postfix的运行用户与组
tar xzvf postfix-2.3.16.tar.gz
make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/include/sasl AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/local/lib -lsasl2'make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/include/sasl AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/local/lib -lsasl2'
make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/include/sasl -L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/local/lib -lsasl2'
make
make install
postconf -a #查找是否有cyrus的支持
postconf -m #查找是否有mysql的支持
postconf -n
echo postfix: root >>/etc/aliases
/usr/bin/newaliases
postfix start
ps -ef | grep postfix 若有如下进程,就能证明postfix已经正确安装
root 21452 1 0 03:20 ? 00:00:00 /usr/libexec/postfix/master
postfix 28344 21452 0 05:51 ? 00:00:00 pickup -l -t fifo -u
postfix 28345 21452 0 05:51 ? 00:00:00 qmgr -l -t fifo -u

6,postfix默认main.cf设置

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
html_directory = /usr/share/doc/postfix-2.5.1-documentation/html

mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man

newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.5.1-documentation/readme
sample_directory = /etc/postfix
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550
data_directory = /var/lib/postfix

myhostname = apache #一定要设置成你的linux的主机名
mydomain = 3ren.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

virtual_mailbox_base = /var/mailbox
virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf
virtual_uid_maps = static:1007
virtual_gid_maps = static:1007
virtual_transport = virtual

message_size_limit = 14336000
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes

smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_application_name = smtpd

7,postfix的mysql配置

[root@xxxx mysql]#vi mysql_virtual_alias_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = 1
[root@xxx mysql]#vi mysql_virtual_domains_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s'
[root@xxx mysql]#vi mysql_virtual_mailbox_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
[root@xxx mysql]#vi mysql_virtual_mailbox_limit_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT quota FROM mailbox WHERE username='%s'

8,sasl认证的配置smtpd.conf

pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: plain login
sql_engine: mysql
sql_hostnames: localhost
sql_user: postfix
sql_passwd: postfix
sql_database: postfix
sql_select: SELECT password FROM mailbox WHERE username='%u@%r' and domain='%r' and active='1'

没有评论:

发表评论

欢迎拍砖!

蒙你厚爱,多谢捧场,内容大多来自RSS to Google reader