|
本文参考了http://www.extmail.org/docs/extmail_solution_freebsd/ 整个邮件解决方案由如下软件组成: 功能模块 内容 备注 操作系统(OS) FreeBSD FreeBSD是一个优秀的unix操作系统,基于宽松的BSD协议 邮件传输代理(MTA) Postfix 使用2.4.x,ports中的postfix已经是最新的2.4版 数据库/目录服务 mysql 5.0可选MySQL或其他mysql ,本文以mysql 5.0为蓝本 邮件投递代理(MDA) maildrop 2.0.x 支持过滤和强大功能 Web帐户管理后台 ExtMan-0.2.3 支持无限域名、无限用户 POP3 服务器 Courier-IMAP 支持pop3/pop3s/imap/imaps,功能强大,可根据需要选择 WebMail 系统 ExtMail-1.0.3 支持多语言、全部模板化,功能基本齐全 防病毒软件(Anti-Virus) ClamAV 0.92 最热门的开源杀毒软件 内容过滤器 Amavisd-new 2.5.x Content-Filter软件,支持与clamav/sa的挂接 内容级别的反垃圾邮件工具 SpamAssassin 著名的SA,可以支持大量规则,但速度较慢 SMTP认证库 Cyrus SASL 2.1x 标准的SASL实现库,可以支持Courier authlib 其他数据认证库 Courier Authlib 0.60 authlib是maildrop, courier-imap等服务的关键部件 日志分析及显示 mailgraph_ext 在ExtMan中已经包含了 Web 服务器 Apache 2.2.x 最新版的apache服务器,默认支持ssl模块 maillist软件 Mailman2.1.x 功能强大的邮件列表软件,支持基于web的管理 操作系统安装 操作系统的安装建议参考FreeBSD Handbook,在此仅给出链接,以避免不必要的重复劳动: 英文版 http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/install.html 中文版 http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/install.html 安装时的注意事项 1,磁盘分区 由于是邮件系统,相关的日志和queue都会保存在var分区内,因此var分区要有足够的空间。以一块硬盘73G/内存3G的服务器为例,可做如下分区: / 512m swap 4096m /var 5g /tmp 512m /usr 8g(尽量保证有10G左右) /home 50g(剩下所有的空间) 2,软件包的选择 我们的邮件系统是要对外服务的,所以尽可能少的选择软件包,安装时建议选择Minimal,然后进入Custom选择doc,info,man,src即可。 配置 1,编辑/etc/rc.conf确保有如下内容: sshd_enable="YES" named_enable="YES" sendmail_enable="NONE" 编辑/etc/resolv.conf确保第一条nameserver记录是127.0.0.1,这样本地DNS缓存才有效,类似如下: domain xxxxx.cn nameserver 127.0.0.1 nameserver 202.106.0.20 然后执行如下命令: /etc/rc.d/named start 2,根据硬件的配置重新编译内核,编译内核的办法参考FreeBSD Handbook,这里只给出链接: 英文版 http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html 中文版 http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/kernelconfig.html 编译后系统的性能将得到较大的提升. 更新ports 根据你的情况执行 cvsup -gL2 /usr/share/examples/cvsup/ports-supfile -h cvsup.freebsdchina.org 或者 portsnap fetch && portsnap update 下载配置包 基本假定 整个系统的安装全过程都要求以root身份执行。并能够访问Internet。 安装前的准备 增加一个存储邮件的帐号和组(vmail) 执行如下命令 pw group add vmail -g 1000 pw user add vmail -u 1000 -g 1000 -s /sbin/nologin -d /dev/null 给test用户创建路径 需要一个测试帐号[email]test@xxxxx.cn[/email],需要准备该账号的路径。 mkdir -p /home/domains/xxxxx.cn/test/Maildir/new mkdir -p /home/domains/xxxxx.cn/test/Maildir/cur mkdir -p /home/domains/xxxxx.cn/test/Maildir/tmp chown -R vmail:vmail /home/domains/ chmod -R 700 /home/domains/ ExtMan的安装 由于在安装过程中要使用ExtMan里面带的文件,因此在此先安装ExtMan。安装时根据个人需要选择MySQL或者mysql支持。 cd /usr/ports/mail/extman/ && make install clean 安装时选择mysql 安装mysql cd /usr/ports/databases/mysql50-server/ && make WITH_CHARSET=gbk WITH_XCHARSET=all WITH_PROC_SCOPE_PTH=yes BUILD_OPTIMIZED=yes BUILD_STATIC=yes SKIP_DNS_CHECK=yes WITHOUT_INNODB=yes install clean 编辑/etc/rc.conf ee /etc/rc.conf mysql_enable="YES" 复制 MySQL 配置文件 cp /usr/local/share/mysql/my-small.cnf /usr/local/etc/my.cnf ee /usr/local/etc/my.cnf 在[mysqld]组中加入下面的内容,部分内容看来如下 [mysqld] bind_address=127.0.0.1 将mysql端口绑定到127.0.0.1主要因为该服务器只为本站提供服务,为了增加安全性,所以这样做。 启动 mysql-server /usr/local/bin/mysql_install_db --user=mysql cp /usr/local/etc/rc.d/mysql-server /usr/local/etc/rc.d/mysql.sh /usr/local/etc/rc.d/mysql-server start 修改root用户的密码 /usr/local/bin/mysqladmin -u root -p password Enter password: 安装 openssl cd /usr/ports/security/openssl/ && make install clean 安装配置文件 cp /usr/local/openssl/openssl.cnf.sample /usr/local/openssl/openssl.cnf 安装配置courier-imap POP3/IMAP Courier-IMAP是一个提供POP3、IMAP服务的程序,能够很方便的配置使其支持加密协议POP3s、IMAPs。并良好的支持Maildir。 Courier-imap的安装 安装时选择(如果你使用MySQL认证,则选择AUTH_MYSQL): OPENSSL TRASHQUOTA AUTH_MYSQL cd /usr/ports/mail/courier-imap/ && make install clean 安装时选择 TRASHQUOTA AUTH_MYSQL Authlib的配置 mv /usr/local/etc/authlib/authdaemonrc /usr/local/etc/authlib/authdaemonrc.bak 编辑/usr/local/etc/authlib/authdaemonrc文件,内容类似如下: authmodulelist="authmysql" authmodulelistorig="authmysql" version="authdaemond.mysql" daemons=5 authdaemonvar=/var/run/authdaemond subsystem=mail DEBUG_LOGIN=0 DEFAULTOPTIONS="wbnodsn=1" LOGGEROPTS="" 增加/var/run/authdaemond的执行权限,在FreeBSD系统下,其他用户默认没有执行权限 chmod +x /var/run/authdaemond mv /usr/local/etc/authlib/authmysqlrc /usr/local/etc/authlib/authmysqlrc.bak 编辑/usr/local/etc/authlib/authmysqlrc文件,内容类似如下: MYSQL_SERVER localhost MYSQL_USERNAME extmail MYSQL_PASSWORD extmail MYSQL_PORT 0 MYSQL_OPT 0 MYSQL_DATABASE extmail MYSQL_SELECT_CLAUSE SELECT username,password,"",uidnumber,gidnumber,\ CONCAT('/home/domains/',homedir), \ CONCAT('/home/domains/',maildir), \ quota, \ name \ FROM mailbox \ WHERE username = '$(local_part)@$(domain)' 配置支持POP3s 拷贝一份配置文件 cp /usr/local/etc/courier-imap/pop3d.cnf.dist /usr/local/etc/courier-imap/pop3d.cnf 编辑/usr/local/etc/courier-imap/pop3d.cnf文件,类似如下: RANDFILE = /usr/local/share/courier-imap/pop3d.rand [ req ] default_bits = 1024 encrypt_key = yes distinguished_name = req_dn x509_extensions = cert_type prompt = no [ req_dn ] C=CN ST=BJ L=Bei Jing O=Extmail OU=Extmail CN=xxxxx.cn emailAddress=ppabc@qq.com [ cert_type ] nsCertType = server 执行如下命令产生供POP3s使用的证书 /usr/local/sbin/mkpop3dcert 配置支持IMAPs 拷贝一份配置文件 cp /usr/local/etc/courier-imap/imapd.cnf.dist /usr/local/etc/courier-imap/imapd.cnf 编辑/usr/local/etc/courier-imap/imapd.cnf文件,类似如下: RANDFILE = /usr/local/share/courier-imap/imapd.rand [ req ] default_bits = 1024 encrypt_key = yes distinguished_name = req_dn x509_extensions = cert_type prompt = no [ req_dn ] C=CN ST=BJ L=Bei Jing O=Extmail OU=Extmail CN=xxxxx.cn emailAddress=ppabc@qq.com [ cert_type ] nsCertType = server 执行如下命令产生供IMAP使用的证书 /usr/local/sbin/mkimapdcert 配置自动启动 编辑/etc/rc.conf文件,添加如下行: courier_authdaemond_enable="YES" courier_imap_pop3d_enable="YES" courier_imap_imapd_enable="YES" courier_imap_pop3d_ssl_enable="YES" courier_imap_imapd_ssl_enable="YES" 这5行的作用分别是在开机时:启动authdaemond,启动pop3d,启动imapd,启动pop3d-ssl,启动imapd-ssl。也可以使用命令行来控制这些进程的启动或者停止。 /usr/local/etc/rc.d/courier-authdaemond start/stop /usr/local/etc/rc.d/courier-imap-pop3d start/stop /usr/local/etc/rc.d/courier-imap-imapd start/stop /usr/local/etc/rc.d/courier-imap-pop3d-ssl start/stop /usr/local/etc/rc.d/courier-imap-imapd-ssl start/stop Postfix的安装和配置-MTA MTA在邮件系统中处于非常重要的位置,他负责接收其他人给你发的信,并且负责把你的信转发到目的地。选择一个靠谱的MTA对建立邮件来说意义重大,因此我们使用Postfix!! :-)。另外MTA部分在邮件系统中的开发难度是最高的,起到的作用也是最大的,因此我们也常拿MTA的名字来称呼自己的邮件系统,比如:我常说我的邮件系统是Postfix。 安装postfix 安装时选择(如果你使用MySQL验证,可以选择MYSQL): PCRE SASL2 TLS MYSQL VDA TEST cd /usr/ports/mail/postfix/ && make install clean 安装时选择PCRE SASL2 TLS MYSQL VDA TEST 配置postfix 编辑/etc/rc.conf,增加如下一行 postfix_enable="YES" 编辑/etc/aliases,确保有如下一行 postfix: root 替换掉系统带的sendmail程序 mv /usr/sbin/sendmail /usr/sbin/sendmail.bak cp /usr/local/sbin/sendmail /usr/sbin/sendmail 编辑/etc/periodic.conf,加入如下内容,禁掉sendmail的自动维护。 daily_clean_hoststat_enable="NO" daily_status_mail_rejects_enable="NO" daily_status_include_submit_mailq="NO" daily_submit_queuerun="NO" 执行如下命令 /usr/local/sbin/postalias /etc/aliases chown postfix:postfix /etc/opiekeys /usr/local/sbin/postconf -e 'mydomain = xxxxx.cn' /usr/local/sbin/postconf -e 'myhostname = mail.xxxxx.cn' /usr/local/sbin/postconf -e 'myorigin = $mydomain' /usr/local/sbin/postconf -e 'virtual_mailbox_base = /home/domains' /usr/local/sbin/postconf -e 'virtual_uid_maps=static:1000' /usr/local/sbin/postconf -e 'virtual_gid_maps=static:1000' 执行如下命令对查询表进行配置 cp /usr/local/www/extman/docs/mysql_virtual_* /usr/local/etc/postfix/ /usr/local/sbin/postconf -e 'virtual_alias_maps = $alias_maps, mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf' /usr/local/sbin/postconf -e 'virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf' /usr/local/sbin/postconf -e 'virtual_mailbox_domains = mysql:/usr/local/etc/postfix/mysql_virtual_domains_maps.cf' SMTP认证设置 编辑/usr/local/lib/sasl2/smtpd.conf pwcheck_method:authdaemond log_level:3 mech_list:PLAIN LOGIN authdaemond_path:/var/run/authdaemond/socket 对postfix做如下配置使支持smtp认证 /usr/local/sbin/postconf -e 'smtpd_sasl_auth_enable=yes' /usr/local/sbin/postconf -e 'broken_sasl_auth_clients = yes' /usr/local/sbin/postconf -e 'smtpd_sasl_local_domain = $myhostname' postfix反垃圾设置 此处的反垃圾邮件只是在MTA级的一些预防垃圾邮件的设置,可根据实际情况以及自己的需要进行调整。 /usr/local/sbin/postconf -e 'smtpd_helo_required=yes' /usr/local/sbin/postconf -e 'smtpd_delay_reject=yes' /usr/local/sbin/postconf -e 'disable_vrfy_command=yes' /usr/local/sbin/postconf -e 'smtpd_client_restrictions = check_client_access hash:/usr/local/etc/postfix/client_access' /usr/local/sbin/postconf -e 'smtpd_helo_restrictions=reject_invalid_hostname,check_helo_access hash:/usr/local/etc/postfix/helo_access' /usr/local/sbin/postconf -e 'smtpd_sender_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain, check_sender_access hash:/usr/local/etc/postfix/sender_access' /usr/local/sbin/postconf -e 'smtpd_recipient_restrictions=permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_non_fqdn_recipient, reject_unknown_recipient_domain' /usr/local/sbin/postconf -e 'smtpd_data_restrictions=reject_unauth_pipelining' /usr/local/sbin/postconf -e 'header_checks = regexp:/usr/local/etc/postfix/head_checks' /usr/local/sbin/postconf -e 'body_checks = regexp:/usr/local/etc/postfix/body_checks' touch /usr/local/etc/postfix/head_checks touch /usr/local/etc/postfix/body_checks touch /usr/local/etc/postfix/client_access touch /usr/local/etc/postfix/sender_access touch /usr/local/etc/postfix/helo_access /usr/local/sbin/postmap /usr/local/etc/postfix/head_checks /usr/local/sbin/postmap /usr/local/etc/postfix/body_checks /usr/local/sbin/postmap /usr/local/etc/postfix/client_access /usr/local/sbin/postmap /usr/local/etc/postfix/sender_access /usr/local/sbin/postmap /usr/local/etc/postfix/helo_access TLS设置 生成证书,在这里默认私钥的访问密码为123qwe98,请根据自己的情况决定,以后可能会用得到。 mkdir -p /usr/local/etc/postfix/certs/CA cd /usr/local/etc/postfix/certs/CA mkdir certs crl newcerts private echo "01" > serial touch index.txt cp /usr/local/openssl/openssl.cnf . 编辑openssl.cnf,确认dir参数的值是/usr/local/etc/postfix/certs/CA。然后继续执行如下命令,并根据情况输入信息。输入信息类似如下: Country Name (2 letter code) [AU]:CN State or Province Name (full name) [Some-State]:BJ Locality Name (eg, city) []:Bei Jing Organization Name (eg, company) [Internet Widgits Pty Ltd]:Extmail Organizational Unit Name (eg, section) []:extmail Common Name (eg, YOUR name) []:xxxxx.cn Email Address []:ppabc@qq.com 命令如下: openssl req -new -x509 -keyout private/cakey.pem -out cacert.pem -days 3650 -config openssl.cnf openssl req -nodes -new -x509 -keyout mykey.pem -out myreq.pem -days 3650 -config openssl.cnf openssl x509 -x509toreq -in myreq.pem -signkey mykey.pem -out tmp.pem openssl ca -config openssl.cnf -policy policy_anything -out mycert.pem -infiles tmp.pem rm tmp.pem cp cacert.pem /usr/local/etc/postfix/certs/ cp mycert.pem /usr/local/etc/postfix/certs/ cp mykey.pem /usr/local/etc/postfix/certs/ cd /usr/local/etc/postfix/certs/ chown root:wheel cacert.pem mycert.pem chown root:postfix mykey.pem chmod 755 cacert.pem chmod 644 mycert.pem chmod 440 mykey.pem ln -s cacert.pem `openssl x509 -noout -hash < cacert.pem `.0 配置postfix支持TLS /usr/local/sbin/postconf -e 'smtpd_use_tls=yes' /usr/local/sbin/postconf -e 'smtpd_tls_auth_only=no' /usr/local/sbin/postconf -e 'smtp_tls_CAfile = /usr/local/etc/postfix/certs/cacert.pem' /usr/local/sbin/postconf -e 'smtp_tls_cert_file = /usr/local/etc/postfix/certs/mycert.pem' /usr/local/sbin/postconf -e 'smtp_tls_key_file = /usr/local/etc/postfix/certs/mykey.pem' /usr/local/sbin/postconf -e 'smtpd_tls_CAfile=/usr/local/etc/postfix/certs/cacert.pem' /usr/local/sbin/postconf -e 'smtpd_tls_cert_file=/usr/local/etc/postfix/certs/mycert.pem' /usr/local/sbin/postconf -e 'smtpd_tls_key_file=/usr/local/etc/postfix/certs/mykey.pem' /usr/local/sbin/postconf -e 'smtpd_tls_received_header=yes' /usr/local/sbin/postconf -e 'smtpd_tls_loglevel=3' /usr/local/sbin/postconf -e 'smtpd_starttls_timeout=60s' /usr/local/etc/postfix/master.cf 配置master.cf,添加如下信息 smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject Maildrop的安装和配置-MDA MDA-邮件分发代理。他从MTA那儿拿到信,然后存入您的邮箱里面。MDA在投递邮件到您的目录里面时,会先对邮件进行一些过滤,过滤规则会根据您的配置文件来进行。1,进行全局过滤设置,读取/etc/maildroprc(Linux)或者/usr/local/etc/maildroprc(BSD),根据配置该配置文件执行相应的操作,影响到所有用户;2,根据每个用户的配置进行过滤,读取$HOME/.mailfilter,根据每个用户的设置进行相应的操作,仅影响单个用户。基于这样的特点,WEBMAIL通过编辑$HOME/.mailfilter可以实现一些特色化的东西,比如:黑白名单、SPAM自动转入垃圾邮件夹、SMS提醒等等。 安装maildrop cd /usr/ports/mail/maildrop/ && make WITH_AUTHLIB=yes install clean 安装时选择mysql 修改master.cf 修改master.cf的maildrop,类似修改为: #maildrop unix - n n - - pipe # flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient} maildrop unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/local/bin/maildrop -w 90 -d ${recipient} /usr/local/etc/postfix/main.cf 修改main.cf /usr/local/sbin/postconf -e 'virtual_transport=maildrop:' /usr/local/sbin/postconf -e 'maildrop_destination_concurrency_limit=1' /usr/local/sbin/postconf -e 'maildrop_destination_recipient_limit=1' 编辑文件/usr/local/etc/maildroprc 确保是如下内容: logfile "/home/domains/maildrop.log" #logfile "/var/log/maildrop.log" TEST="/bin/test -f" # # Check for custom user .mailfilter file # CUSTOM_FILTER="$HOME/.mailfilter" `$TEST $CUSTOM_FILTER && exit 1 || exit 0` if ( $RETURNCODE == 0 ) { to "$HOME/Maildir" } 安装配置Apache 安装apache 添加了这两个参数的意思是,支持suexec模块,改变suexec_docroot的路径。但在本文中并没有在虚拟主机中使用suexec,在此编译进去是为了方便测试,以及方便以后可能会使用到的朋友。其他选项使用默认的即可。 cd /usr/ports/www/apache22/ && make WITH_SUEXEC=yes SUEXEC_DOCROOT=/usr/local/www WITH_MPM=worker WITHOUT_IPV6=yes WITH_THREADS=yes install clean 使用默认的即可 配置/etc/rc.conf 添加如下一行 apache22_enable="YES" 修改apache的配置文件/usr/local/etc/apache22/httpd.conf,使apache运行时的权限为vmail:vmail User vmail Group vmail 虚拟主机配置 编辑/usr/local/etc/apache22/Includes/extmail.conf NameVirtualHost *:80 <VirtualHost *:80> ServerName mail.xxxxx.cn DocumentRoot /usr/local/www/extmail/html/ ScriptAlias /extmail/cgi /usr/local/www/extmail/cgi/ Alias /extmail /usr/local/www/extmail/html/ ScriptAlias /extman/cgi "/usr/local/www/extman/cgi/" Alias /extman "/usr/local/www/extman/html/" <Location "/extman/cgi"> SetHandler cgi-script Options +ExecCGI AllowOverride All </Location> <Directory "/usr/local/www"> AllowOverride None Options None Order allow,deny Allow from all </Directory> # SuexecUserGroup vmail vmail </VirtualHost> 配置支持https 复制一份证书到apache的目录 mkdir /usr/local/etc/apache22/certs/ cp /usr/local/etc/postfix/certs/*.pem /usr/local/etc/apache22/certs/ 编辑文件/usr/local/etc/apache22/Includes/extmail-ssl.conf,内容如下 Listen 443 AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl SSLPassPhraseDialog builtin SSLSessionCache shmcb:/var/run/ssl_scache(512000) SSLSessionCacheTimeout 300 SSLMutex file:/var/run/ssl_mutex <VirtualHost _default_:443> DocumentRoot "/usr/local/www/extmail/html" ServerName mail.xxxxx.cn:443 ScriptAlias /extmail/cgi /usr/local/www/extmail/cgi/ Alias /extmail /usr/local/www/extmail/html/ ScriptAlias /extman/cgi "/usr/local/www/extman/cgi/" Alias /extman "/usr/local/www/extman/html/" ServerAdmin [email]ppabc@qq.com[/email] ErrorLog /var/log/httpd-error.log TransferLog /var/log/httpd-access.log SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL #SSLCertificateFile /usr/local/etc/apache22/server.crt #SSLCertificateKeyFile /usr/local/etc/apache22/server.key SSLCertificateFile /usr/local/etc/apache22/certs/mycert.pem SSLCertificateKeyFile /usr/local/etc/apache22/certs/mykey.pem <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/usr/local/www/apache22/cgi-bin"> SSLOptions +StdEnvVars </Directory> BrowserMatch ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog /var/log/httpd-ssl_request.log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" #SuexecUserGroup vmail vmail </VirtualHost> 重起一下apache /usr/local/etc/rc.d/apache22.sh restart 安装配置Extmail Extmail 是一个以perl语言编写,面向大容量/ISP级应用,免费的高性能Webmail软件。完整的支持Maildir++, 多字符、多语言支持,支持模版技术、方便的为自己定制界面等等。 [ 本帖最后由 ppabc 于 2008-5-31 10:18 编辑 ] 查看全部评论(0)我来说两句 |
FreeBSD7.0+postfix+sasl2+mysql+maildrop+ExtMan+Mailman+ClamAv完全安装
发布时间: 2008-6-28 18:21 作者: ppabc 来源: http://www.chinaunix.net
