基于postfix邮件解决方案Postfix2

zhiguozh

贡献于2014-04-14

字数:11633 关键词: 邮件服务器 方案

基于postfix邮件解决方案Postfix2 项目 我们接下来架设一个完整的邮件系统,要求支持mysql认证,支持pop3,imap,支持sasl,拥有web界面的操作,拥有垃圾邮件过滤功能。确认了需要后我们开始选择不同的程序来完成我们的需求,本案例使用的是在RHEL6U2 64位环境下的postfix+courier-imap+maildrop+courierauthlib+extmail+extman+ spamassassin的组合,我们先来了解一下每个部件的作用。Postfix 是一种电子邮件服务器,它是由任职于IBM华生研究中心(T.J. WatsonResearch Center)的荷兰籍研究员Wietse Venema为了改良sendmail邮件服务器而产生的。最早在1990年代晚期出现,是一个开放源代码的软件。courier-authlib 其他数据认证库authlib是maildrop, courier-imap等服务的关键部件courier-imap POP3 服务器 支持pop3/pop3s/imap/imaps,功能强大,可以方便与courier-authlib联合使用,配置简单,稳定性好。maildrop 邮件投递代理(MDA)支持过滤和强大功能extmail extmail是一个webmail程序,webmail是一种收发邮件的方式,也就是通过网站来进行收发邮件,通过该webmail程序,我们可以通过网站来收发邮件 ,像平时我们登录mail.163.com 来收发网易的邮件一样extman是一个管理邮件用户数据的软件 ,管理以下数据:某个域的邮箱个数与该域的总容量大小域管理员还可以通过extman群发邮件给该域下的所有用户邮箱用户的帐号密码,容量大小,建立日期,到期时间,是否激活,邮件的邮件存储位置(目录),用户别名 等等spamassassin是一个非常优秀的垃圾邮件过滤软件。在配置此安全之前,你应该已经有一套完整的DNS系统,保证所有需要的资源记录都配置正确。 Apache通过perl脚本运行Extman与Extmail,当用户登录时通过Authlib从mysql进行认证,当认证通过后则从用户MailDir中取出邮件。POP与IMAP则由courier-imap负责,同样通过authlib从mysql进行认证。Postfix的发信认证同样是通过mysql,MDA则使用MailDrop,他可以方便的帮我们调用spamassassin。虽然Postfix也可以自己调用spamassassin,但是使用MailDrop的优点在于速度快。 需建DNS.然后发送邮件测试是否成功。再结合下面装的环境,在网页中测试收发邮件。 打开 浏 览 器,输 入 http://your_domain_name/extman 用户 为 :root@extmail.org 密码 为 :extmail*123* //打开网页报权限问题, setenforce=0 建个域 发个信 测试 打开 浏 览 器,输 入 http://your_ip_address/extmail 流程 1. 装包 光盘自带,光盘以外。 2.Mysql 建库、建表、授权。通过sql脚本完成 3.安装一个认证用的中间件,courierauthlib,统一由此中间键来访问mysql。 rpm -ivh courier-authlib-mysql courier-authlib 1) authdaemonrc:指定使用mysql验证 2) authmysqlrc:详细的mysql连接参数。(host/user/password/db/table/select) 以下sql语句为一行。 SELECT username,password,"",uidnumber,gidnumber,CONCAT('/home/data/domains/',homedir),CONCAT('/home/data/domains/',maildir),quota,name FROM mailbox WHERE username = '$(local_part)@$(domain)' 4. rpm -ivh courier-imap-4.12.20130220-1.x86_64.rpm service courier-imap start chkconfig courier-imap on 5. sasl认证 安装src.rpm rpm -ivh cyrus-sasl-2.1.23-13.el6.src.rpm 1) 修改cyrus-sasl.spec文件 2) 构建rpm包 rpmbuild -ba cyrus-sasl.spec //rpm-build需安装此包 3) 卸载原有的cyrus-sasl,安装新cyrus-sasl //一定要构建成功再操作此步骤 for i in $(rpm -qa | grep sasl | awk -F"-2.1.23" '{ print $1 }') ; do rpm -e $i --nodeps >/dev/null ; done //可以手工操作 4) 创建配置文件 6. 配置postfix a) 装包 b) 修改配置文件-----/虚拟域的定义/sasl认证的启用/maildrop指定 7. 安装maildrop(MDA) a) rpm -ivh maildrop*.rpm b) 指定邮件投递用户 groupadd -g 1000 vgroup useradd -g 1000 -u 1000 -s /sbin/nologin -d /dev/null vuser c) 配置 /etc/postfix/master.cf 文件 ,让postfix可以调用maildrop 8. 启动postfix/couurier-authlib/mysql,测试authlib,maildrop 9. Webmail安装 a) 修改/etc/httpd/conf/httpd.conf b) apache配置完后安装extmail和extman c) 启动日志分析工具 d) 重启一下服务,测试一下 10. 垃圾邮件过滤 a) yum install spamassassin cat > /etc/maildroprc << ENDF to "$HOME/$DEFAULT/.Spam/" 文件或地址需修改 项目(6-postfix1, 6-postfix2) 192.168.0.60 desktop60.example.com 192.168.0.60 desktop61.example.com 60域:postfix.com 61域:post.com 1. 装包 装光盘自带的包 yum install gd pam-devel httpd-devel mysql-devel mysql-server php-xml php-pdo openldap-servers pcre-devel apr-devel apr-util-devel perl-DBD-MySQL libtool-ltdl expect php-gd postgresql postgresql-devel libdbi ruby ruby-libs ruby-devel php-common php php-cli xorg-x11-fonts-Type1 febootstrap febootstrap-supermin-helper perl-CGI –y 装光盘以外的包用rpm方式一个个装 gdbm-devel libmcrypt libmcrypt-devel perl-GD perl-rrdtool ////单独装会报错,需要2个包一起装rpm -ivh perl-rrdtool-1.4.7-1.el6.rfx.x86_64.rpm rrdtool-1.4.7-1.el6.rfx.x86_64.rpm rrdtool perl-Unix-Syslog php-mcrypt ruby-rrdtool libtool-ltdl-devel 共享目录下有安装包,直接装包(跳过以下src rpm方式) rpm -ivh perl-File-Tail-0.99.3-1.2.el6.noarch.rpm libmhash-0.9.1-1.dag.x86_64.rpm 还有几个包没有现在的rpm包,所以使用src rpm的方式来安装。 rpm -ivh libmhash-0.9.1-1.dag.src.rpm perl-File-Tail-0.99.3-1.2.src.rpm cd ~/rpmbuild/SPECS/ rpmbuild -ba libmhash-0.9.1-dag.spec // yum install rpm-build -y rpmbuild -ba perl-File-Tail.spec cd ../RPMS/ rpm -ivh noarch/perl-File-Tail-0.99.3-1.2.el6.noarch.rpm x86_64/libmhash-* 安装完后我们将http服务和mysql服务启动看看是否安装正确 service mysqld start service httpd start 2. 认证数据库mysql 环境准备好了,接下来我们可以开始安装我们的postfix了,以安装之前,我们先生成 认证需要使用的mysql库。同时不要忘了给你的mysql加个密码。extmail.sql脚本会生成 一个mysql库,而init.sql脚本会初始化此库。 cp extman-1.1.tar.gz /tmp/rpms tar zxf extman-1.1.tar.gz cd extman-1.1/docs mysqladmin -uroot password "uplooking" mysql -puplooking < extmail.sql mysql -puplooking < init.sql 3. 安装一个认证用的中间件,courierauthlib,统一由此中间键来访问mysql。 要让MTA,MAA来访问mysql,我们可以安装一个认证用的中间件,courierauthlib, 统一由此中间键来访问mysql。 rpm -ivh courier-authlib-mysql-0.65.0.20130314-1.el6.x86_64.rpm courier-authlib-0.65.0.20130314-1.el6.x86_64.rpm 安装完后创建并修改其配置文件 ,配置文件中我们需要告诉他认证使用mysql,并且 将连接mysql所需要的一些参数写入配置文件。 cd /etc/authlib/ vi authdaemonrc 修改如下两个选项 authmodulelist="authmysql" authmodulelistorig="authmysql" 修改authmysqlrc 的配置文件 vi authmysqlrc MYSQL_SERVER localhost MYSQL_USERNAME extmail MYSQL_PASSWORD extmail MYSQL_SOCKET /var/lib/mysql/mysql.sock MYSQL_DATABASE extmail MYSQL_SELECT_CLAUSE SELECT username,password,"",uidnumber,gidnumber,CONCAT('/home/data/domains/',homedir),CONCAT('/home/data/domains/',maildir),quota,name FROM mailbox WHERE username = '$(local_part)@$(domain)' [root@desktop60 authlib]# service courier-authlib start Starting Courier authentication services: authdaemond //启动成功 chkconfig courier-authlib on chmod 755 /var/spool/authdaemon 4. 接着我们来安装courier-imap 以提供pop3的支持和imap 支持。 rpm -ivh courier-imap-4.12.20130220-1.x86_64.rpm service courier-imap start chkconfig courier-imap on 5. sasl认证 安装src.rpm 当需要发信认证时,我们会用到sasl包,可惜的是自带的rpm包不支持mysql或者是 authlib,那么我们就卸载原来所有sasl有关的包,自己重新编译安装一个新的。 rpm -ivh cyrus-sasl-2.1.23-13.el6.src.rpm cd ~/rpmbuild/SPECS/ 修改cyrus-sasl.spec文件 vi cyrus-sasl.spec 在234行的地方加入如下语句 --with-authdaemond=/var/spool/authdaemon/socket \ 修改完成后执行后续操作 rpmbuild -ba cyrus-sasl.spec //rpmbulid命令yum install rpm-bulid -y for i in $(rpm -qa | grep sasl | awk -F"-2.1.23" '{ print $1 }') ; do rpm -e $i --nodeps > /dev/null ; done 生成sasl 的相关配置文件 ,Postfix会调用smtp.conf配置文件,所以你应该手工将此 文件生成,并且在此文件中声名使用authlib来认证。 cat > /usr/lib64/sasl2/smtpd.conf << ENDF pwcheck_method:authdaemond log_level:3 mech_list:PLAIN LOGIN authdaemond_path:/var/spool/authdaemon/socket ENDF 6. 配置postfix 为了让postfix支持虚拟域,我们在配置文件后面加入虚拟域支持。 message_size_limit = 14680064 virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_mailbox_base = /home/data/domains virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_limit_maps.cf virtual_transport = maildrop maildrop_destination_recipient_limit = 1 smtpd_sasl_auth_enable = yes smtpd_sasl2_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_path = smtpd smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname (红色字需要缩进) 为了让postfix可以和extman 联用 所以将extman目录下mysql_virtual开头的配置 文件拷到postfix 目录下 cp /tmp/rpms/extman-1.1/docs/mysql_virtual_* /etc/postfix 7.安装maildrop(MDA) 安装maildrop 以扩展邮件投递功能 ,maildrop是一个优秀的MDA,我们让postfix 在投递邮件时使用maildrop。 rpm -ivh maildrop*.rpm 我们并不希望maildrop在投递邮件是以root身份投递,所以建个普通用户。 groupadd -g 1000 vgroup useradd -g 1000 -u 1000 -s /sbin/nologin -d /dev/null vuser 配置 /etc/postfix/master.cf 文件 ,让postfix可以调用maildrop。 vi /etc/postfix/master.cf 在最后面加入下面内容: maildrop unix - n n - - pipe flags=DRhu user=vuser argv=/usr/bin/maildrop -d ${user}@${nexthop} ${recipient} ${user} ${extension} ${nexthop} (注意缩进)不然web收发邮件将找不到vuser用户,缩进表示是一行参数? 创建邮件存储目录 并建个测试域 mkdir -p /home/data/domains/extmail.org/postmaster maildirmake /home/data/domains/extmail.org/postmaster/Maildir chown -R vuser:vgroup /home/data/domains/ service postfix restart 测试 maildrop root@localhost ~]# echo "test" | maildrop -V 10 -d postmaster@extmail.org maildrop: authlib: groupid=1000 maildrop: authlib: userid=1000 maildrop: authlib: logname=postmaster@extmail.org, home=/home/data/domains/extmail.org/postmaster, mail=/home/data/domains/extmail.org/postmaster/Maildir/ maildrop: Changing to /home/data/domains/extmail.org/postmaster Message start at 0 bytes, envelope sender=postmaster@extmail.org maildrop: Attempting .mailfilter maildrop: Delivery complete. 出现上以信息说明 authlib,maildrop 工作正常(如果报错,查main.cf select语句是否正确 | 查日志) 11. Webmail安装 项目中我们还需要通过web方式进行收发邮件,所以需要修改apache 配置 修改/etc/httpd/conf/httpd.conf,因为投递邮件时maildrop 是以 vuser:group用户身 份投递,所以 修改apache所有者,生成extman和extmail所需要的配置信息。 vi /etc/httpd/conf/httpd.conf User vuser Group vgroup [root@localhost ~]# cd /etc/httpd/conf.d/ [root@localhost conf.d]# vim extmail.conf Alias /extman/cgi/ /var/www/extsuite/extman/cgi/ Alias /extman /var/www/extsuite/extman/html/ SetHandler cgi-script Options +ExecCGI # config for ExtMail Alias /extmail/cgi/ /var/www/extsuite/extmail/cgi/ Alias /extmail /var/www/extsuite/extmail/html/ SetHandler cgi-script Options +ExecCGI apache配置完后安装extmail和extman mkdir /var/www/extsuite 解压extman和extmail 并cp到apache 目录下 cp -r extmail-1.2 /var/www/extsuite/extmail cp -r extman-1.1 /var/www/extsuite/extman 切换到/var/www/extsuite/extmail 目录下 ,配置extman和extmail。首先生成主配 置文件,并在主配置文件中修改相应选项。 cp webmail.cf.default webmail.cf 修改 webmail.cf 下面的选项 SYS_SESS_DIR = /tmp/extmail SYS_MAILDIR_BASE = /home/data/domains SYS_MYSQL_USER = extmail SYS_MYSQL_PASS = extmail 切换到/var/www/extsuite/extman 目录下 cp webman.cf.default webman.cf 修改 webman.cf 下面的选项为邮件目录: SYS_MAILDIR_BASE = /home/data/domains 修改完成之后创建相应session目录 mkdir /tmp/{extman,extmail} chown vuser:vgroup /tmp/ext* 另外extman为我们提供了一个友好的图形化日志工具,可以配置并启用这个后台日志 分析工具。 cd /var/www/extsuite/extman/addon/ cp -r mailgraph_ext /usr/local/ 启动日志分析工具 /usr/local/mailgraph_ext/mailgraph-init start echo '/usr/local/mailgraph_ext/mailgraph-init start' >> /etc/rc.local 重启一下服务,测试一下 service httpd restart service postfix restart chown -R vuser:vgroup /var/lib/php/session/ 打开 浏 览 器,输 入 http://your_domain_name/extman 用户 为 :root@extmail.org 密码 为 :extmail*123* //打开网页报权限问题, setenforce=0 建个域 建个用户。 登录http://192.168.0.60/extmail 用该用户登录, 发个信 测试(postfix.com DNS需建立),2台机器互发信件,还需反向解析。 打开 浏 览 器,输 入 http://your_ip_address/extmail 10. 垃圾邮件过滤 最后我们加入垃圾邮件的过滤,安装spamassassin,并生成/etc/maildroprc文件,以 便让maildrop在投递过程中调用spamassassin。 yum install spamassassin vim /etc/maildroprc if ( $SIZE < 26144 ) { exception { xfilter "/usr/bin/spamassassin --prefspath=$HOME/$DEFAULT/.spamassassin/user_prefs" } } if (/^X-Spam-Flag: *YES/) { exception { to "$HOME/$DEFAULT/.Spam/" } } else { exception { to "$HOME/$DEFAULT" } } spamassassin的过滤模板在/etc/mail/spamassassin/local.cf,修改为: required_score 5.0 rewrite_header Subject ********SPAM******** report_safe 1 use_bayes 1 skip_rbl_checks 0 ok_languages zh en ok_locales en ko score HEAD_ILLEGAL_CHARS 0 score SUBJ_ILLEGAL_CHARS 0 score DATE_IN_PAST_03_06 0 score UPPERCASE_25_50 0 score UPPERCASE_50_75 0 score UPPERCASE_75_100 0 score X_MSMAIL_PRIORITY_HIGH 0 score X_PRIORITY_HIGH 0 score TO_TXT 100 score RATWARE_HASH_2 100 score RATWARE_HASH_2_V2 100 score BAYES_99 0.1 score BAYES_80 0.1 score BAYES_60 0.1 score FROM_ILLEGAL_CHARS 0.1 score MIME_BASE64_TEXT 0.1 score NO_RDNS_DOTCOM_HELO 0.1 score CHINA_HEADER 0.1 score NO_REAL_NAME 0.2 score HTML_MESSAGE 0.2 score MIME_HTML_ONLY 0.2 score MIME_HTML_ONLY_MULTI 0.2 score FORGED_MUA_OUTLOOK 0.2 score FORGED_HOTMAIL_RCVD 0.2 score FORGED_OUTLOOK_TAGS 0.2 score MAILTO_TO_SPAM_ADDR 0.2 ## 黑白名单 whitelist_from *@test.com blacklist_from ## 使用中国反垃圾邮件联盟的CBL/CDL ## URL: http://www.anti-spam.org.cn/ header RCVD_IN_CBL eval:check_rbl('cbl', 'cbl.anti-spam.org.cn.') # describe RCVD_IN_CBL Received via a relay in cbl.anti-spam.org.cn tflags RCVD_IN_CBL net header RCVD_IN_CDL eval:check_rbl('cdl-notfirsthop', 'cdl.anti-spam.org.cn.') describe RCVD_IN_CDL CDL: dialup sender did non-local SMTP tflags RCVD_IN_CDL net score RCVD_IN_CBL 4.0 score RCVD_IN_CDL 3.0 将spamassassin设定的为开机运行 chkconfig spamassassin on # 使用CCERT 中文垃圾邮件过滤规则集Chinese_rules.cf //以下实验未操作 wget -N -P /usr/share/spamassassin http://www.ccert.edu.cn/spam/sa/Chinese_rules.cf //需网上下载 service spamassassin start 定期自动更新中文反垃圾邮件规则 crontab –e # 加入 0 0 1 * * wget -N -P /usr/share/spamassassin http://www.ccert.edu.cn/spam/sa/Chinese_rules.cf ; /etc/init.d/spamassassin restart //需要联外网,没验证过格式是否正确 建立SpamAssassin的学习系统 sa-learn --sync -D -p user_prefs 查看自学习的数据信息 sa-learn --dump all # 查看调试信息 spamassassin --lint –D 再次打开浏览器测试。 分离mysql服务器 如果你的mysql不在本地,在一台单独的服务器之上,那你需要修改如下几个配置文件中的mysql主机地址 /etc/authlib/authmysqlrc /etc/postfix/mysql_virtual_domains_maps.cf /etc/postfix/mysql_virtual_domains_maps.cf /etc/postfix/mysql_virtual_mailbox_maps.cf /etc/postfix/mysql_virtual_limit_maps.cf /var/www/extsuite/extmail/webmail.cf /var/www/extsuite/extman/webman.cf 不要忘了mysql的授权,有关extmail用户的权限。

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ]
0 人已下载

下载文档

相关文档