Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} Debian etch 邮件解决方案 前言:由于之前做过postfix sasl webmail pop3 的邮件系统,这次相对比较轻松,但是还是有惨痛的教训,由于升级软件不当,导致整个系统崩溃,还好在最短的时间内得到恢复,感谢这次教训,感谢CU的战友们,感谢extmail 系统:debian etch 4.0r3 内核:2.6.18-6-amd64 Apt源: deb http://debian.cn99.com/debian/ stable main contrib non-free deb-src http://debian.cn99.com/debian/ stable main contrib non-free 注:intel 64位其实采用的是amd64的架构,apt源尽量用稳定版 我在这方面吃了不少亏 1.postfix的logic frame (了解本质后,才能事半功倍) Smtp stream :用户从MUA发送邮件到邮件服务器这个地方牵扯到smtp验证的问题,顾名思义就是验证用户的合法性。 Smtp验证的实施: 1) 用户发请求到postfix 2) Potsfix 调用saslauthd 3) Saslauthd调用其他的验证模块(pam authdaemond .etc) 4) Pam 调用 libmysql-pam 来连接后台数据库 mysql 一般都是这样的 题外话:很多人对SMTP验证很熟悉,其实也有POP验证,只是很少有人提起 Pop验证实施: 1) 用户连接到pop服务器 2) Pop调用authdaemon 3) Authdaemon 连接后台数据库,达到验证目的 以上过程我没找资料佐证,只是我觉得应该是这个流程,如有误请大家指出 关于virtual:为什么要virtual,其实大家有目共睹,就是为了安全,virtual的概念就是能用邮件服务器收发邮件,不需要登入系统 闲话少说开始动工 首先确定自己的mx记录 #nslookup #set type=mx #you.domain.com 显示结果应该是象这样 mail.test.com internet address = 1.1.1.1 安装软件: apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl postfix-tls libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql 可能出现这个情况:Create directories for web-based administration ? General type of configuration? Mail name? SSL certificate required 打上quota补丁: 安装软件: apt-get install build-essential dpkg-dev fakeroot debhelper libgdbm-dev libldap2-dev libpcre3-dev libssl-dev libsasl2-dev postgresql-dev po-debconf dpatch libdb4.3-dev libmysqlclient15-dev lsb-release libcdb-dev 注意观察安装的软件信息,有些包可能没有了,因为源一直在更新,不用理会所缺的包,大部分都是有的 #cd /usr/src #apt-get source postfix postconf -d | grep mail_version 查看postfix version 象这样: server1:~# postconf -d | grep mail_version mail_version = 2.3.8 milter_macro_v = $mail_name $mail_version下载相应的补丁包 做如下操作: wget http://vda.sourceforge.net/VDA/postfix-2.3.8-vda.patch.gz gunzip postfix-2.3.8-vda.patch.gz cd postfix-2.3.8 patch -p1 如果出现error 信息 请加上-d 参数 祈祷吧,可能出现其他的问题,之前我用测试版的时候 要更改debian/ruls 所以还是尽量用stable 版 最后的warning 信息可以忽略 最后会剩下这个包postfix_2.3.8-2_amd64.deb 64位的 32的为应该是postfix_2.3.8-2_i386.deb #dpkg –i postfix_2.3.8-2_amd64.deb 安装extmail 废话:以前我装的是postfixadmin squirrel webmail 我很难受,postfixadmin 一点都好用,特别是添加alias的时候,这次改extmail 下载extmail www.extmail.org 我用的是:extmail-1.0.4.tar.gz extman-0.2.4.tar.gz 先安装apache2: apt-get install apache2 libapache2-mod-fastcgi libfcgi-perl apt-get install build-essential libtool libnet-server-perl libnet-cidr-perl libberkeleydb-perl arc zoo lzop liblzo1 rar libstdc 5 libgd-gd2-perl libfile-tail-perl libdigest-sha1-perl libdigest-HMAC-perl libnet-ip-perl libnet-dns-perl libhtml-tagset-perl libhtml-parser-perl libio-stringy-perl libio-multiplex-perl libio-socket-ssl-perl libio-zlib-perl libnet-ssleay-perl libunix-syslog-perl libtimedate-perl libmailtools-perl libconvert-binhex-perl libmime-tools-perl libconvert-tnef-perl libconvert-uulib-perl libcompress-zlib-perl libarchive-zip-perl libarchive-tar-perl 大概是这些软件 装不上的不用理会,我也参照别人的文档,具体是哪个装不上去我忘了 tar zxvf extmail-1.0.4.tar.gztar zxvf extman-0.2.4.tar.gzmkdir /var/www/extsuite/mv extmail-1.0.4 /var/www/extsuite/extmailmv extman-0.2.4 /var/www/extsuite/extman 将extman/docs下的几个mysql配置文件拷贝到postfix的配置目录下,并设置其权限为属于postfix组,同组人可读,其他用户无权限 同时编辑复制过来的所有文件把“localhost”改为“127.0.0.1” cp /var/www/extsuite/extman/docs/mysql_*.cf /etc/postfix/chmod o= /etc/postfix/mysql_*.cfchgrp postfix /etc/postfix/mysql_*.cf 数据库初始化 这个要注意:修改/var/www/extsuite/extman/docs/init.sql 第18行INSERT INTO `mailbox` VALUES ('postmaster@extmail.org','postmaster','$1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0','','PostMaster','','extmail.org/postmaster/Maildir/','extmail.org/postmaster','104857600S','52428800S','extmail.org',1000,1000,'2007-02-14 15:10:04','2010-11-08',1,0,0,0,0,0,0,0,'',''); 象这样 mysql -uroot -p mysql -uroot -p mkdir /tmp/extmanchown -R vuser:vuser /tmp/extman debian在装系统的时候会要求你创建一个用户,正好uid是1000 而extmail也正好用的是1000 注意更改/ect/passwd 信息,讲创建用户的shell改成false 编辑rc.local,加入下面内容以实现开机自动建立 if [ ! -d /tmp/extman ]; then mkdir /tmp/extman chown -R vuser:vuser /tmp/extmanfi cd /var/www/extsuite/extman/tools ./maildirmake.pl /home/vuser/extmail.org/postmaster/Maildir chown -R vuser:vuser /home/domains/extmail.org cd - 编辑webmail.cf与webman.cf cp /var/www/extsuite/extmail/webmail.cf.default /var/www/extsuite/extmail/webmail.cf 修改/var/www/extsuite/extmail/webmail.cf里的其他参数,主要变动的内容见下: SYS_USER_LANG = zh_CNSYS_USER_CHARSET = gb2312 SYS_MYSQL_USER = extmailSYS_MYSQL_PASS = extmailSYS_MYSQL_DB = extmailSYS_MYSQL_SOCKET = /var/run/mysqld/mysqld.sockSYS_AUTHLIB_SOCKET = /var/run/courier/authdaemon/socket SYS_G_ABOOK_FILE_CHARSET = gb2312 具体情况看自己的机器上的配置 主要是SYS_MYSQL_SOCKET = /var/run/mysqld/mysqld.sock 标红颜色的字段很重要 编辑vhosts #cd /var/apache2/sites-enable/ #vim 001-mail.test.com 象这样 ServerName mail.test.com DocumentRoot /var/www/extsuite/extmail/html/ Alias /extmail/cgi/ /usr/bin/dispatch.fcgi/ Alias /extmail /var/www/extsuite/extmail/html Alias /extman/cgi/ /usr/bin/dispatch.fcgi/ Alias /extman /var/www/extsuite/extman/html SetHandler fastcgi-script SetHandler fastcgi-script FastCgiExternalServer /usr/bin/dispatch.fcgi -host 127.0.0.1:8888 -idle-timeout 240 注意:FastCgiExternalServer /usr/bin/dispatch.fcgi -host 127.0.0.1:8888 -idle-timeout 240 不能在vhost里面 ,不知道为什么debian跟其他的不一样 更改apache2的启动用户 vuser group vuser 然后编辑/var/www/extsuite/extmail/dispatch-init文件,修改如下: MAXFORK=10 最后启动fastcgi server: /var/www/extsuite/extmail/dispatch-init start 如果没有意外将启动10个dispatch.fcgi守护进程,可以通过以下命令将启动命令加到rc.local中,实现自启动: echo "/var/www/extsuite/extmail/dispatch-init start" >> /etc/rc.local #ps aux | grep cgi 能看见10个cgi 进程 http://virtualhost 看看extmail ok了没有 root@extmail.org password:extmail*123* 这边会出现 access denied 的错误 解决方案主要是看webmail.cf 和webman.cf的配置文件 主要是用户名 数据库 密码是否正确 如果还是不行 进入数据库执行:flush privileges 还有一点要提的是关于验证码的问题,自己可以去掉 这个自己去找找 SMTP验证: 之前也说了smtp验证的,我用的是mysql作为backend, 1.更还saslauthd # vim /etc/default/saslauthd 更改如下几项 START=yes 设置开机自动启动 MECHANISMS="pam" 选择验证框架 我选择pam OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r" 这一项我没仔细研究好像跟登入名字有关系 注意不要忘记 “–r” 2.之前说了逻辑关系,编辑pam 关于pam是什么东西 大家可以上网找找资料 #vim /etc/pam.d/smtp 内容如下: auth required pam_mysql.so user=extmail passwd=extmail host=127.0.0.1 db=extmail table=mailbox usercolumn=username passwdcolumn=password crypt=1 account sufficient pam_mysql.so user=extmail passwd=extmail host=127.0.0.1 db=extmail table=mailbox usercolumn=username passwdcolumn=password crypt=1 解释一下:其实就是定义一个查询的方式 crypt=1或者0 表示加密或者不加密 注意对照你的数据库 还有用户名 密码 请保持跟自己的一致 3.由于postfix处于chroot jail 要想调用到saslauthd 必须更改socket文件 #mkdir /var/spool/postfix/var/run/saslauthd #vim /etc/postfix/sasl/smtpd.conf 内容如下: pwcheck_method:saslauthd mech_list:plain login allow_plaintext: true auxprop_plugin: mysql sql_hostnames: 127.0.0.1 sql_user: extmail sql_password: extmail sql_database: extmail log_level:7 sql_select: SELECT password FROM mailbox WHERE username='%u@%r' and domain='%r' 4.更改main.cf 文件 ###########SASL###################### broken_sasl_auth_clients = yes smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_sasl_security_options = noanonymous 加入以上的内容 5.重启postfix saslauthd / /etc/init.d/postfix restart /etc/init.d/saslauthd restart telnet localhost 25 ehlo localhost 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 出现这两项表示 sasl 配置成功 如何检查SMTP验证是否成功,其实就是检查数据库的连接成功没有 继续上面的操作 先这样操作一下 #perl -e 'use MIME::Base64; print encode_base64("postmaster\@extmail.org")'cG9zdG1hc3RlckBleHRtYWlsLm9yZw==#perl -e 'use MIME::Base64; print encode_base64("extmail")'如果出错的话:请用如下脚本#vim encode.pl#!/usr/bin/perlUse strict;Use MIME::Base64;If ($#ARGV !=1) { Die “Usage:encode.pl \n;”}Print encode_base64(“$ARGV[0]\0$ARGV[0]\$ARGV[1]”);Exit 0; ZXh0bWFpbA==telnet localhost 25Trying 127.0.0.1...Connected to localhost.localdomain (127.0.0.1).Escape character is '^]'.220 mail.extmail.org ESMTP Postfix - by extmail.orgehlo demo.domain.tld250-mail.extmail.org250-PIPELINING250-SIZE 10240000250-VRFY250-ETRN250-AUTH LOGIN PLAIN250-AUTH=LOGIN PLAIN250-ENHANCEDSTATUSCODES250-8BITMIME250 DSNauth login334 VXNlcm5hbWU6cG9zdG1hc3RlckBleHRtYWlsLm9yZw==334 UGFzc3dvcmQ6ZXh0bWFpbA==235 2.0.0 Authentication successfulquit221 2.0.0 Bye 如果出现 Authentication successful 表示没有问题了 6.pop3验证 之前也说过了pop3的验证 其实是靠authdaemon 工作,软件都安装好了吧?再插点题外话, pwcheck_method: authdaemon 这一项大家看好咯,说明smtp 和 pop3 可以用同一个“中间人”之前smtp验证是用pam. 这方面的资料大家自己去整理,事实上可以的 # vim /etc/courier/authdaemonrc更改如下一项 authmodulelist="authmysql" # cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig #cat /dev/null > /etc/courier/authmysqlrc #vim /etc/courier/authmysqlrc 内容如下: MYSQL_SERVER 127.0.0.1MYSQL_USERNAME extmailMYSQL_PASSWORD extmailMYSQL_SOCKET /var/lib/mysql/mysql.sockMYSQL_PORT 3306MYSQL_OPT 0MYSQL_DATABASE extmailMYSQL_USER_TABLE mailboxMYSQL_CRYPT_PWFIELD passwordMYSQL_UID_FIELD uidnumberMYSQL_GID_FIELD gidnumberMYSQL_LOGIN_FIELD usernameMYSQL_HOME_FIELD homedirMYSQL_NAME_FIELD nameMYSQL_MAILDIR_FIELD maildirMYSQL_QUOTA_FIELD quotaMYSQL_SELECT_CLAUSE SELECT username,password,"",uidnumber,gidnumber,\ CONCAT('/home/vuser/',homedir), \ CONCAT('/home/vuser/',maildir), \ quota, \ name, \ CONCAT("disablesmtpd=",disablesmtpd, \ ",disablesmtp=",disablesmtp, \ ",disablewebmail=",disablewebmail, \ ",disablenetdisk=",disablenetdisk, \ ",disableimap=",disableimap, \ ",disablepop3=",disablepop3, \ ",netdiskquota=",netdiskquota) \ FROM mailbox \ WHERE username = '$(local_part)@$(domain)' 注意红色部分 7.重启daemon 配置Courier-POP3 编辑/etc/courier/pop3d修改下面参数 MAILDIRPATH=/home/vuser/ 配置Courier-IMAP 编辑/etc/courier/imapd修改下面参数 MAILDIRPATH=/home/vuser/ /etc/init.d/courier-authdaemon restart 测试Courier-Authlib是否能成功连接mysql authtest -s login postmaster@extmail.org extmail 如果成功应该有如下显示 Authentication succeeded. Authenticated: postmaster@extmail.org (uid 1000, gid 1000) Home Directory: /home/vuser/extmail.org/postmaster Maildir: /home/vuser/extmail.org/postmaster/Maildir/ Quota: 104857600S Encrypted Password: $1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0 Cleartext Password: extmail Options: disablesmtpd=0,disablesmtp=0,disablewebmail=0,disablenetdisk=0,disableimap=0,disablepop3=0,netdiskquota=52428800S 如果出现error 请检查数据库连接 分析mail.log 一般都是input/output Tips: chown daemon:vuser /var/run/courier/authdaemon 可能避免错误 还有 MYSQL_SERVER 127.0.0.1 这一项比较重要,主要是tcp连接跟socket连接的区别 我猜测如果采用localhost 是socket连接 因为postfix是chroot环境,也就是对这个socket文件没有操作权限而影响数据库连接最好还是用tcp连接 关于tcp和socket 的区别 问了N多人没有搞懂,或者说找到我要的答案 测试pop3 telnet localhost 110Trying 127.0.0.1...Connected to localhost.localdomain (127.0.0.1).Escape character is '^]'. OK Hello there.user postmaster@extmail.org OK Password required.pass extmail OK logged in.list OK POP3 clients that break here, they violate STD53..quit OK Bye-bye.Connection closed by foreign host. 出现问题请仔细分析日志 至此,验证方面的东西都搞定了,如有问题。请仔细分析日志一般都是权限问题 第二部分:MDA配置 概念:MDA mail deliver agent其实就是邮件投递代理,postfix本身有很多邮件投递代理,由于我们的环境 虚拟域 所以可以使用postfix自己的virtual 这个代理,但是它必须创建一个用户来执行投递操作,main.cf中有记录 象这样: virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_transport = virtual 下面介绍另一种MDA maildrop maildrop 关于他的性能我没怎么看,因为这次用的extmail 不想冒险 呵呵。。。对了,用postfixadmin的朋友 请用virtual 否则会出现创建目录不成功的情况,据说是有bug的 安装Maildrop 首先运行 debfoster,保留上面已经安装的所有软件。因为下面安装的软件,在使用完之后就马上卸掉了,因为它们只是一些编译工具,对我们的服务器没有用处,仅仅在编译时使用一次而已。 apt-get install debfosterdebfoster 现在开始安装编译工具,首先安装 mysql 开发库,之所以先安装它,是因为它有多个版本,否则,后面需要选择。 apt-get install libmysqlclient15-dev apt-get build-dep maildropapt-get install fakeroot 现在进入 /usr/src 目录,下载 maildrop 源码包 cd /usr/srcapt-get source maildropcd maildrop-2.0.3 #vim debian/rules 修改DEB_CONFIGURE_EXTRA_FLAGS的参数 DEB_CONFIGURE_EXTRA_FLAGS := --enable-use-dotlock=1 --enable-use-flock=1 \--enable-sendmail=/usr/sbin/sendmail --enable-maildirquota \--enable-authlib-tempreject=0 --enable-syslog=1 --enable-maildropmysql \--with-mysqlconfig=/etc/maildropmysql.config --without-db \--enable-maildrop-uid=1000 --enable-maildrop-gid=1000 \--enable-trusted-users="root postfix vuser" dpkg-buildpackage -rfakeroot -uc -bcd ..ls 应该会出现maildrop_2.0.2-11_amd64.deb 或者32位的maildrop_2.0.3-1_i386.deb dpkg -i maildrop_2.0.3-1_i386.deb 创建 /etc/maildropmysql.config内容如下 hostname 127.0.0.1port 3306database extmaildbuser extmaildbpw extmaildbtable mailboxdefault_uidnumber 1000default_gidnumber 1000uidnumber_field uidnumbergidnumber_field gidnumberuid_field usernamehomedirectory_field concat('/home/vuser/',homedir,'/')maildir_field concat('/home/vuser/',maildir)quota_field quotamailstatus_field active 修改 /etc/maildroprc,添加如下: logfile "/var/log/maildrop.log" 手动创建日志 vi /var/log/maildrop.logchown vuser:vuser /var/log/maildrop.logchmod 766 /var/log/maildrop.log 创建 /etc/logrotate.d/maildrop /var/log/maildrop.log { daily notifempty missingok rotate 5 compress create 766 vuser vgroup sharedscripts } 编辑/etc/postfix/master.cf,注释原来maildrop的配置内容并改为: maildrop unix - n n - - pipe flags=DRhu user=vuser argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop} 由于maildrop不支持一次接收多个收件人,因此必须在/etc/postfix/main.cf增加如下参数: maildrop_destination_recipient_limit = 1 创建 /etc/quotawarnmsg,里面为邮箱空间超过配额时的警告邮件内容 重新启动postfix 9.图形日志extmail cp -r /var/www/extsuite/extman/addon/mailgraph_ext/ /usr/local/mailgraph_ext 修改/usr/local/mailgraph_ext/mailgraph-init为: MAIL_LOG=/var/log/mail.log 启动mailgraph_ext及qmonitor: 这时你有可能要装rddtools Apt-get install rrdtools 如果出现Can't locate File/Tail.pm in @INC (@INC contains: /etc/perl /usr/local/lib/p。。。。。)等错误需要安装 perl File::tail perl -MCPAN -e shell 如果第一次安装 一路回车就好了 cpan>install File::Tail cpan>quit /usr/local/mailgraph_ext/mailgraph-init start /usr/local/mailgraph_ext/qmonitor-init start 反病毒/内容过滤配置 这个东西主要看自己的应用,请参考这篇文档 http://www.ohsc.cn/docs/ 没有什么大的问题 FAQ 这些都是我摘录的一部分希望对大家有帮助 Random thoughtsQ.: Can Postfix query the MySQL db directly? A.: No. Q.: Why do you use libpam-mysql? saslauthd natively supports SQL. A.: Because saslauthd only supports unencrypted password if you use a sql db as an authentication backend. That's the reason for interfacing saslauthd with PAM. PAM, in turn, can use just anything. Q.: My friend told me that /etc/postfix/sasl/smtpd.conf should contain "pwcheck_method: pam" A.: That was true for SASL 全篇完 |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-29 23:36 , Processed in 0.219190 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.