基于FreeBSD和Postfix的反垃圾、反病毒邮件系统与web mail安装

jackxiang 2008-2-3 15:53 | |
本文介绍使用
  FreeBSD+Postfix+Cyrus-sasl+Courier-imap+Webmail+spamassassin+Clamav+mailscanner +maildrop来架构一个具有多域名,webmail、防病毒、防垃圾邮件、web管理界面的邮件系统。
  Jacky, $Revision: 5.1 bate $Date: 2006-10-31
  杨廷勇 QQ:187159779
  Copyright © 2004、2005、2006
  欢迎转载,保留版权和出处[http://www.thismail.org]
  系统主要采用MailScanner+clamav+Spamd来对病毒过滤和垃圾邮件过滤。

----------------------------------
新增加对smtpd,imap,pop3,webmail的登录控制
新增加简单的邮件分组
新增邮件监控
加强对垃圾邮件的过滤
增加系统黑名单
-----------------------------------

  本文在4.10、5.3、5.4、5.5、6.0、6.1上安装测试通过,采用MailSanner来对邮件过滤和垃圾邮件过滤,配置更容易,并且降低了 系统开消。让系统更加稳定,经过严格病毒邮件测试成功率达到了98%。垃圾邮件过滤基本上达到了95%的成功率。
  本人水平有限,如有错误之处请发邮件到scyz2 at 163.com (at = @),本人不对本文档对你的系统造成的损失负任何连带责任。
――――――――――――――――――――――――――――――――――

第一章 FreeBSD 简介

1.1 什么是FreeBSD?
1.2 postfix简介

第二章 操作系统FreeBSD安装

第三章 更新ports

3.1 安装CVSUP
3.2 更新ports树

第四章 软件安装

4.1 安装perl
4.2 安装mysql
4.3 安装apache22
4.4 安装mod_php5
4.5 安装php5的扩展
4.6 安装openssl
4.7 安装phpMyAdmin
4.8 设置数据库
4.9 安装cyrus-sasl2
4.10 安装postfix2
4.11 安装Courier-imap
4.12 安装MailScanner
4.13 安装maildrop

第五章 软件系统配置

5.1 配置cyrus-sasl
5.2 配置postfix
5.3 配置Courier-imap
5.4 安装Tmail管理工具
5.5 登录测试
5.6 垃圾邮件和病毒邮件过滤设置

第六章 安装webmail

附一、常见问题

附二、MailScanner.conf中文参数说明
――――――――――――――――――――――――――――――――――

第一章 FreeBSD 简介

1.1 什么是FreeBSD?

我 想大家都知道 Microsoft Windows 是一套作业系统,FreeBSD 也是一套作业系统。FreeBSD 是一个可以在 Intel 相容个人计算机、DEC Alpha 或 PC98 架构的计算机上执行的 UNIX 作业系统。大家应该听过另一套UNIX的作业系统 Linux,FreeBSD 也是一套免费的作业系统。它可以让我们的个人计算机变成先进的工作站,更稳定的提供你所需的网络服务。

BSD UNIX 系统可以说是网络作业系统的始祖,FreeBSD 是众多 BSD UNIX 分支中的一个,它继承了 BSD 系统的高性能与可靠性。自从1993 年 FreeBSD 推出 1.0-RELEASE 以来,FreeBSD 开发团队便致力于系统的调校,使其发挥绝佳的效能。在 FreeBSD 团队的统筹努力下,使它比起其它免费的 UNIX 作业系统更有结构。在 FreeBSD 上有许多支援的免费软件,这些软件大都已移植收录于 FreeBSD ports 中,使得我们在安装软件时变得十分轻松。FreeBSD 支援 32 位元、64 位元的许多不同平台,具有高效能核心架构、动态函式库共享、绝佳的网络功能,比起其它商用 UNIX 系统毫不逊色。

FreeBSD 作业系统相当容易取得及安装,除了经由传统的光盘安装外,它也可以经由网络安装、MS-DOS 分割区安装等等。当然,我们也可以在计算机中同时安装多种不同的作业系统,例如 Windwos 98 和 FreeBSD 同时并存也是件十分容易的事。

在 FreeBSD 上的应用软件相当的多,也都可以免费取得,由于 FreeBSD 的稳定性高且功能强大,因此许多大型网站都以它为作业平台,其中最知名的就是 YAHOO!。YAHOO! 是一个流量相当大的入口网站,他们选择以 FreeBSD 为作业平台,由此可知 FreeBSD 的优异性。除此之外,在台湾,FreeBSD 普遍被应用于学术网络上,许多大专院校的服务器都是使用 FreeBSD 来提供网络服务。

但是您别以为 FreeBSD 只能用来做为网络服务器,FreeBSD 也可以是一个良好的个人作业系统。事实上,Mac OS X 就是使用 FreeBSD 做为系统核心。大家都知道 Mac OS 是个人计算机上有名的作业系统,它会使用 FreeBSD 做为系统核心,可见 FreeBSD 的质量亦深获 Apple 的肯定。

在宽带网络逐渐普及的台湾,每个人都可以自行架设一台网路服务器,以 FreeBSD 来提供网络服务(如网页、邮件、档案存取等)。值得一提的是 FreeBSD 并不像 MS-Windows 一样每每要求使用者升级计算机才能使用。FreeBSD 对于硬件的要求很低,你可以用一台 Intel 586-133MHz 的旧计算机来安装 FreeBSD,这也算是癈物利用吧。

1.2 为什么要选择FreeBSD?

现在的个人计算机作业系统市场中,是以 MS-Windows 独大,但在网络服务器市场中,UNIX 系统的使用率可不输 MS-Windows 喔。我个人认为 MS-Windows 之所以会有那么多的使用者主要是因为他的使用者介面对初学者而言较容易操作,再加上许多软件的配合及盗版的助长,安装软件只要一直按下一步就完成。使得使 用者即便它的稳定性不高也得乖乖的接受。

其实初学者没有试过其它的作业系统才会有这样的误解,因为一直用 MS-Windows 才会认为当机是无可避免的事,当机对于 MS-Windows 或许是无可避免,但在其它 UNIX 系统中可不常见。在 UNIX 系列的作业系统中,也可以有像 MS-Windows 的图形介面,几乎所有在 MS-Windows 上可以做的事,在 FreeBSD 上都可以做得到,唯一的不同点是你不必花钱去取得你想要的功能。包括排版、图形处理、MP3、多媒体、网络芳邻等等都可以在 FreeBSD 中做到。

重 点是,对于一台网路服务器而言,图形介面会占用系统资源,而且必须安装一堆有的没的软件。笔者偏好乾干脆净净的系统,而 FreeBSD 正好具有这个优点。不过这并不代表您不能使用图形介面,您还是可以安装类似 Windows 的图形介面,让您使用它来做为平日使用的个人计算机。此外,FreeBSD 把自己定位为最佳的网络服务器,它承袭了 BSD 优良的网络血统,在提供服务时能有绝佳的效能表现。而且,它是免费的。

然而,有这么多的免费 UNIX 作业系统中,为什么要选择 FreeBSD 而不使用其它作业系统(如 Linux )呢?在网络上在讨论这个问题时,每每会引发每个作业系统使用者的激辩。对于要使用何种作业系统,除了使用者偏好外,还有许多指标可以提供我们参考。

FreeBSD 是一套完整的作业系统

我 们平常所说的 Linux 指的是它的核心 (Kernel),Kernel 只是整个作业系统的一部份,除了 Kernel 外,我们还需要一些基本的指令、系统及目录架构、图形介面等。Linux 的 Distribution 就是各个不同的组织或公司自行收集一些系统必备的程序,制作出一个作业系统。Linux 系统有很多的 Distribution,如 Redhat、SUSE、Debian 等。因为每个 Distribution 都有自己的程序或架构,所以每个 Distribution 都长的不一样。如果您使用的是 Linux,在 Linux 三十多种 Distribution 中,每一种之间都有些许差异,在设定上用法都不同。

而 FreeBSD 指的不只是核心而已,它是一套完整的作业系统。从系统核心到使用者介面、各种常用指令都是由 FreeBSD 总部所统一推出。因此,FreeBSD 每一个版本之间有着共同的架构,不同软件之间的整合搭配性较为完整,不管是设定、学习都很容易。

由核心团队统筹开发

FreeBSD 整个系统都是由总部的核心团队所维护,所以整个系统都搭配得很好。而 Linux 只有 Kernel 由 Linus Torvlds 所维护。因为 FreeBSD 整个系统都是由总部所开发,不只系统整体较有规划,各个程序之间搭配起来也比较紧密。如果您使用 Linux,由于 Kernel 和其它的程序是由不同组织所维护,在升级时,比较麻烦。而 FreeBSD 就简单多了,每次一有新的版本,一定是整个系统一起升级。

我 觉得 FreeBSD 总部统筹发展 FreeBSD 是一件很棒的事,所有的问题回报都可以统筹管理并予以更新。FreeBSD 推陈出新的速度相当快,每一次安装都确保这个版本不会有上一版的缺失。所以在 Linux 或 MS-Windows 中「新版本不一定是最好」的定律并不适用于 FreeBSD。但这并不意味着你必须不断重新安装系统,FreeBSD 总部随时会发布最新更新的档案提供下载,而且如果使用 CVSUP 就可以和更新版的 FreeBSD 保持同步更新。

完整的使用手册

FreeBSD 的使用手册非常完整,而且会随着软件一起更新。每次一有新的版本推出,FreeBSD 的文件也会做相对的更新。在 FreeBSD 的官方网站上,我们可以轻松的取得这些高质量的手册及文件。

软件安装的便利性

FreeBSD 支援的软件相当多,它将常用的软件分类管理,当需要安装软件时,使用者不必自行到网络上找寻,只要到 FreeBSD ports 目录中下个指令就安装完成。

条理分明的系统架构

FreeBSD 目录结构非常有组织,结构严谨,对于系统管理者而言比较不会紊乱。FreeBSD 将系统预设的目录和管理者自行安装的程序目录划分得十分清楚,管理者在进行升级、维护时可以一目了然。

完美的程序开发平台

安 装完 FreeBSD 后,系统所有程序原始码非常有条理的存放在特定目录中。对于想要进行程序修改的管理者而言,不必四处寻找某支程序原始码。笔者在 FreeBSD 及 Linux 上开发程序多年,我觉得 FreeBSD 原始码及系统架构十分有组织,是程序开发最好的平台。

而且 FreeBSD 的版权较为宽松,对于想要以 FreeBSD 为基础开发产品的公司而言,它可以保护您的修改不会被其它对手抄袭。

1.3 为什么不选择FreeBSD?

许 多企业选择使用目前大多数人使用的 MS windows 做为一般作业用个人计算机的作业系统当然无可厚非。但以 MS windows 做服务器,除了资讯人员的偏好外(或许因为不会使用其它系统吧),还有部份原因是为了在企业内资讯人员技术不足时,能求助于系统供应商。而 FreeBSD 是免费的,企业也害怕有状况时无人可以支援,这对企业是很重要的一项因素。

然而,FreeBSD 的使用人数其实很多,而且使用者都十分热心,在台湾的 BBS 讨论区上,许多问题都可以获得解决。这当然还不够,现在有很多顾问公司提供 FreeBSD 的顾问服务,可以提供企业这方面的服务。虽然说 FreeBSD 的系统稳定,但在应用上如果没有资讯人员的支援,很难能在企业中存活。但正因市场上了解 FreeBSD 的人较少,若我们能主动学习,必能为自己创造更多价值。

FreeBSD 目前支援的平台不多,若您不是使用 X86 的系统,而是使用 ARM、MIPS 等平台,您就必须寻求其它的解决方案。

1.2 postfix简介

Postfix 是一个非常优秀的MTA,她素以高效、安全的特点而著称。Postfix是作者在UNIX上所见过的MTA中在反垃圾邮件(Anti-Spam或Anti -UCE)方面做得最好的一个,甚至有很多公司在Postfix代码的基础上进行二次开发而推出反垃圾邮件网关产品。MTA的反垃圾邮件功能,实际上就是 在MTA处理过程中对会话进行过滤。这个过滤不但过滤了发往自身的垃圾邮件,而且还防止了自身被恶意利用发送垃圾邮件。Postfix实现了目前所有主要 的MTA过滤技术。postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件。和Sendmail相比Postfix更快、更容易管理、更灵活、更安全,同时 还与sendmail保持足够的兼容性。

第二章 操作系统FreeBSD安装

FreeBSD6.1系统安装手册
官方安装手册:


QUOTE:
http://www.freebsd.org/doc/zh_CN.GB2312/books/handbook/install.html

  注意在系统安装过程中,分区方面一定要注意,最好是一个独立的mail分区来存放用户的邮件数据,因为默认的VAR分区读写频繁,数据存放在这样的分区中是很危险的;在安装系统的过程中,建议最小化安装加ports。

第三章 更新ports

3.1 安装CVSUP

QUOTE:
mail# cd /usr/ports/net/cvsup-without-gui
mail# make install clean

安装过程中由于依赖的关系,它会自动安装gettext,会出现下面的选项。
以下是我的选择。

QUOTE:
    Options for gettext 0.14.5_2                                                                                        
[X] EXAMPLES install example files                
[X] HTMLMAN   install man pages in HTML format


3.2 更新ports树
(更新日期2006-07-09)
编辑ports-supfile

QUOTE:
mail# ee /usr/share/examples/cvsup/ports-supfile


QUOTE:
第51行
*default host=CHANGE_THIS.FreeBSD.org
改为:
*default host=cvsup2.freebsdchina.org



QUOTE:
mail# /usr/local/bin/cvsup -g -L 2 /usr/share/examples/cvsup/ports-supfile
Parsing supfile "ports"
Connecting to Cvsup2.FreeBSD.org.cn
Connected to Cvsup2.FreeBSD.org.cn
Server software version: SNAP_16_1h
Negotiating file attribute support
Exchanging collection information
Establishing multiplexed-mode data connection
Running
Updating collection ports-all/cvs
……
……
Shutting down connection to server
Finished successfully
出现上面的提示,表示更新成功。


第四章 软件安装

4.1 安装perl-5.8.8

QUOTE:
mail# cd /usr/ports/lang/perl5.8
mail# make install clean


4.2 安装mysql-5.0.27
4.2 安装mysql

QUOTE:
mail# cd /usr/ports/databases/mysql50-server
编辑Makefile
mail# ee Makefile
在CONFIGURE_ARGS这段话的
--enable-thread-safe-client前面加上三句参数
BUILD_OPTIMIZED=yes \
BUILD_STATIC=yes \
PTHREAD_LIBS=-lkse \
mail# make WITH_CHARSET=gb2312 WITH_XCHARSET=all BUILD_OPTIMIZED=yes BUILD_STATIC=yes install clean


在rc.conf中加入Mysql的启动参数

QUOTE:
mail# echo 'mysql_enable="YES"' >> /etc/rc.conf

启动mysql

QUOTE:
mail# /usr/local/etc/rc.d/mysql-server start
Starting mysql.


查看mysql是否启动成功

QUOTE:
mail# sockstat -4 | grep 3306
mysql   mysqld   1510 3 tcp4   *:3306           *:*

出现上面的端口表示mysql启动成功

4.3 安装httpd-2.2.3

QUOTE:
mail# cd /usr/ports/www/apache22
mail# make install clean

在rc.conf中加入apache的启动参数

QUOTE:
mail# echo 'apache_enable="YES"' >> /etc/rc.conf

启动apache

QUOTE:
mail# /usr/local/etc/rc.d/apache22 start
Starting apache.

查看apache是否启动成功

QUOTE:
mail# sockstat -4 | grep 80
www     httpd     10679 16 tcp4   *:80             *:*
www     httpd     10678 16 tcp4   *:80             *:*
www     httpd     10677 16 tcp4   *:80             *:*
www     httpd     10676 16 tcp4   *:80             *:*
www     httpd     10675 16 tcp4   *:80             *:*
root   httpd     10674 16 tcp4   *:80             *:*
出现上面的80端口表示apache启动成功


4.4 安装php-5.1.6

QUOTE:
mail# cd /usr/ports/lang/php5
mail# make install clean

以下是我的选择

QUOTE:
            Options for php5 5.1.6_3                  
                                            
[ ] CLI     Build CLI version                      
[ ] CGI     Build CGI version                      
[X] APACHE   Build Apache module                      
[ ] DEBUG     Enable debug                          
[ ] SUHOSIN   Enable Suhosin protection system            
[X] MULTIBYTE Enable zend multibyte support              
[ ] IPV6     Enable ipv6 support                      
[ ] REDIRECT   Enable force-cgi-redirect support (CGI only)    
[ ] DISCARD   Enable discard-path support (CGI only)        
[ ] FASTCGI   Enable fastcgi support (CGI only)            
[ ] PATHINFO   Enable path-info-check support (CGI only)



QUOTE:
mail# echo 'AddType application/x-httpd-php .php' >> /usr/local/etc/apache/httpd.conf
mail# echo 'AddType application/x-httpd-php-source .phps' >> /usr/local/etc/apache/httpd.conf

编辑httpd.conf加入index.php

QUOTE:
DirectoryIndex index.html index.html.var index.php

#注:在DirectoryIndex这里加入index.php,是为了让apache支持首页为index.php的首页文件

4.5 安装php5的扩展

QUOTE:
mail# cd /usr/ports/lang/php5-extensions
mail# make install clean



QUOTE:
        Options for php5-extensions 1.0              
                                                                        
[X] BCMATH   bc style precision math functions            
[X] BZ2     bzip2 library support                    
[X] CALENDAR   calendar conversion support                
[X] CTYPE     ctype functions                        
[X] CURL     CURL support                          
[ ] DBA     dba support                          
[ ] DBASE     dBase library support                    
[X] DOM     DOM support                          
[ ] EXIF     EXIF support                          
[ ] FILEINFO   fileinfo support                      
[ ] FILEPRO   filePro support                        
[ ] FRIBIDI   FriBidi support                        
[X] FTP     FTP support                          
[X] GD       GD library support                      
[ ] GETTEXT   gettext library support
[ ] GMP     GNU MP support                        
[X] HASH     HASH Message Digest Framework              
[X] ICONV     iconv support                        
[ ] IMAGICK   ImageMagick support                    
[X] IMAP     IMAP support                          
[ ] INTERBASE Interbase 6 database support (Firebird)        
[ ] LDAP     OpenLDAP support                      
[ ] MBSTRING   multibyte string support                  
[X] MCRYPT   Encryption support                      
[X] MHASH     Crypto-hashing support                  
[ ] MING     ming shockwave flash support              
[ ] MSSQL     MS-SQL database support                  
[X] MYSQL     MySQL database support                  
[ ] MYSQLI   MySQLi database support
[ ] NCURSES   ncurses support (CLI only)                
[ ] ODBC     unixODBC support                      
[ ] OPENSSL   OpenSSL support                        
[ ] PANDA     panda support                        
[ ] PCNTL     pcntl support (CLI only)                  
[X] PCRE     Perl Compatible Regular Expression support      
[ ] PDF     PDFlib support (implies GD)                
[X] PDO     PHP Data Objects Interface (PDO)            
[ ] PGSQL     PostgreSQL database support                
[X] POSIX     POSIX-like functions                    
[ ] PSPELL   pspell support                        
[ ] READLINE   readline support (CLI only)                
[ ] RECODE   recode support                        
[X] SESSION   session support                        
[ ] SHMOP     shmop support
[X] SIMPLEXML simplexml support                      
[ ] SNMP     SNMP support                          
[ ] SOAP     SOAP support                          
[ ] SOCKETS   sockets support                        
[X] SQLITE   sqlite support                        
[ ] SYBASE_CT Sybase database support                  
[ ] SYSVMSG   System V message support                  
[ ] SYSVSEM   System V semaphore support                
[ ] SYSVSHM   System V shared memory support              
[ ] TIDY     TIDY support                          
[X] TOKENIZER tokenizer support                      
[ ] WDDX     WDDX support (implies XML)                
[X] XML     XML support                          
[X] XMLREADER XMLReader support                      
[ ] XMLRPC   XMLRPC-EPI support
[X] XMLWRITER XMLWriter support                      
[ ] XSL     XSL support (Implies DOM)                
[ ] YAZ     YAZ support (ANSI/NISO Z39.50)              
[X] ZIP     ZIP support                          
[X] ZLIB     ZLIB support  


重启apache安装完成。

4.6 安装openssl-0.9.7l

QUOTE:
mail# cd /usr/ports/security/openssl
mail# make install clean


4.7 安装phpMyAdmin-2.9.0.2

QUOTE:
mail# cd /usr/ports/databases/phpmyadmin
mail# make fetch

注:(在这里建议直接下载后复制安装)


QUOTE:
mail# cd /usr/ports/distfiles
mail# tar –zxvf phpMyAdmin-2.9.0.2.tar.gz
mail# mv /usr/local/www/phpMyAdmin-2.9.0.2 /usr/local/www/apache22/data/dbadmin


修改/usr/local/www/apache22/data/dbadmin/config.inc.php

QUOTE:
$cfg['PmaAbsoluteUri'] = 'http://192.168.0.2/dbadmin/';
$cfg['Servers'][$i]['auth_type']   = 'http';   // Authentication method (config, http or cookie based)?
注:指定phpmyadmin的认证方式为http方式。


在浏览器输入http://192.168. 0.2/dbadmin/,首次进行登入的用户名为root密码为空,登入后可以修改你的密码。

4.8 设置数据库
建立postfix数据库(注意:数据库名称为postfix):


QUOTE:
mail# /usr/local/bin/mysql –u root –p
mysql# CREATE DATABASE `postfix` ;
mysql# use postfix;


把下面的sql语句导入到postfix数据库中去:

QUOTE:
-- phpMyAdmin SQL Dump
-- version 2.9.0.2
-- http://www.phpmyadmin.net
--
-- 主机: localhost:3306
-- 生成日期: 2006 年 10 月 30 日 22:17
-- 服务器版本: 4.0.26
-- PHP 版本: 5.1.6
--
-- 数据库: `tmail`
--

-- --------------------------------------------------------

--
-- 表的结构 `address`
--

CREATE TABLE `address` (
`id` int(11) unsigned NOT NULL auto_increment,
`pw_id` int(5) NOT NULL default '0',
`name` varchar(64) NOT NULL default '',
`email` varchar(128) NOT NULL default '',
UNIQUE KEY `id` (`id`),
KEY `pw_id` (`pw_id`)
) TYPE=MyISAM PACK_KEYS=1 AUTO_INCREMENT=1 ;

--
-- 导出表中的数据 `address`
--


-- --------------------------------------------------------

--
-- 表的结构 `admin`
--

CREATE TABLE `admin` (
`id` int(10) unsigned NOT NULL auto_increment,
`site_id` int(10) unsigned NOT NULL default '0',
`domain` varchar(128) NOT NULL default '',
`quota` smallint(5) unsigned NOT NULL default '0',
`total` smallint(5) unsigned NOT NULL default '0',
`createtime` timestamp(14) NOT NULL,
`login` char(1) NOT NULL default '',
`cur_total` smallint(5) NOT NULL default '0',
`cur_quota` smallint(5) NOT NULL default '0',
`gid` varchar(11) NOT NULL default '',
`expiration_time` timestamp(14) NOT NULL default '00000000000000',
`flag` int(10) unsigned NOT NULL default '0',
`maxmsg` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
UNIQUE KEY `domain` (`domain`)
) TYPE=MyISAM PACK_KEYS=1 AUTO_INCREMENT=1 ;

--
-- 导出表中的数据 `admin`
--


-- --------------------------------------------------------

--
-- 表的结构 `card`
--

CREATE TABLE `card` (
`id` int(5) unsigned NOT NULL auto_increment,
`pw_id` int(5) unsigned NOT NULL default '0',
`LinkMan` varchar(64) NOT NULL default '',
`CompanyName` varchar(100) NOT NULL default '',
`Address` varchar(255) NOT NULL default '',
`Position` varchar(32) NOT NULL default '',
`PhoneNumber` varchar(16) NOT NULL default '',
`Mobile` varchar(12) NOT NULL default '',
`Email` varchar(128) NOT NULL default '',
`Partaker` varchar(32) NOT NULL default '',
`Memo` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=27 ;

--
-- 导出表中的数据 `card`
--


-- --------------------------------------------------------

--
-- 表的结构 `lastauth`
--

CREATE TABLE `lastauth` (
`user` char(32) NOT NULL default '',
`domain` char(64) NOT NULL default '',
`remote_ip` char(18) NOT NULL default '',
`timestamp` bigint(20) NOT NULL default '0',
PRIMARY KEY (`user`,`domain`)
) TYPE=MyISAM;

--
-- 导出表中的数据 `lastauth`
--


-- --------------------------------------------------------

--
-- 表的结构 `logs`
--

CREATE TABLE `logs` (
`pw_id` int(5) default '0',
`ip` varchar(15) NOT NULL default '',
`action` varchar(15) NOT NULL default '',
`time` datetime default NULL,
`content` varchar(64) NOT NULL default '',
`email` varchar(128) NOT NULL default ''
) TYPE=MyISAM;

--
-- 导出表中的数据 `logs`
--


-- --------------------------------------------------------

--
-- 表的结构 `message`
--

CREATE TABLE `message` (
`id` int(5) unsigned NOT NULL auto_increment,
`title` varchar(255) NOT NULL default '',
`body` text NOT NULL,
`createtime` datetime NOT NULL default '0000-00-00 00:00:00',
`updatetime` datetime NOT NULL default '0000-00-00 00:00:00',
`pw_domain` varchar(64) NOT NULL default '',
UNIQUE KEY `id` (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;

--
-- 导出表中的数据 `message`
--


-- --------------------------------------------------------

--
-- 表的结构 `personal`
--

CREATE TABLE `personal` (
`id` int(11) unsigned NOT NULL auto_increment,
`pw_id` int(5) NOT NULL default '0',
`truename` varchar(10) NOT NULL default '',
`fax` varchar(20) NOT NULL default '',
`telephone` varchar(15) NOT NULL default '',
`sex` int(1) NOT NULL default '0',
`year` int(4) NOT NULL default '0',
`MONTH` int(2) NOT NULL default '0',
`DAY` int(2) NOT NULL default '0',
`education` varchar(4) NOT NULL default '',
`marital` int(1) NOT NULL default '0',
`occupation` varchar(15) NOT NULL default '',
`companyname` varchar(30) NOT NULL default '',
`province` varchar(6) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM PACK_KEYS=1 AUTO_INCREMENT=12 ;

--
-- 导出表中的数据 `personal`
--


-- --------------------------------------------------------

--
-- 表的结构 `scheduler`
--

CREATE TABLE `scheduler` (
`id` int(11) unsigned NOT NULL auto_increment,
`begin_time` int(11) unsigned default NULL,
`end_time` int(11) unsigned default NULL,
`title` varchar(255) NOT NULL default '',
`body` varchar(255) NOT NULL default '',
`pw_id` int(11) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

--
-- 导出表中的数据 `scheduler`
--


-- --------------------------------------------------------

--
-- 表的结构 `stow`
--

CREATE TABLE `stow` (
`id` int(5) unsigned NOT NULL auto_increment,
`pw_id` int(5) unsigned NOT NULL default '0',
`Name` varchar(128) NOT NULL default '',
`http` varchar(255) NOT NULL default 'http://',
`memo` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

--
-- 导出表中的数据 `stow`
--


-- --------------------------------------------------------

--
-- 表的结构 `tmail_access`
--

CREATE TABLE `tmail_access` (
`id` int(11) unsigned NOT NULL auto_increment,
`ctime` int(11) unsigned default NULL,
`source` varchar(128) NOT NULL default '',
`access` varchar(16) NOT NULL default '',
`type` char(1) NOT NULL default 'S',
PRIMARY KEY (`id`),
KEY `source` (`source`,`type`,`access`,`ctime`)
) TYPE=MyISAM AUTO_INCREMENT=65 ;

--
-- 导出表中的数据 `tmail_access`
--


-- --------------------------------------------------------

--
-- 表的结构 `tmail_alias`
--

CREATE TABLE `tmail_alias` (
`id` int(11) unsigned NOT NULL auto_increment,
`alias` varchar(128) NOT NULL default '',
`destination` varchar(128) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

--
-- 导出表中的数据 `tmail_alias`
--


-- --------------------------------------------------------

--
-- 表的结构 `tmail_autobbc`
--

CREATE TABLE `tmail_autobbc` (
`id` int(9) NOT NULL auto_increment,
`realname` varchar(128) default NULL,
`email` varchar(128) NOT NULL default '',
`autobbc` varchar(128) NOT NULL default '',
`come` int(1) default NULL,
`out` int(1) default NULL,
`domain` varchar(128) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

--
-- 导出表中的数据 `tmail_autobbc`
--


-- --------------------------------------------------------

--
-- 表的结构 `tmail_company`
--

CREATE TABLE `tmail_company` (
`id` int(6) NOT NULL auto_increment,
`domain` varchar(25) NOT NULL default '',
`name` varchar(50) NOT NULL default '',
`linkman` varchar(50) NOT NULL default '',
`tel` varchar(15) NOT NULL default '',
`Address` varchar(50) NOT NULL default '',
`zip` varchar(6) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

--
-- 导出表中的数据 `tmail_company`
--


-- --------------------------------------------------------

--
-- 表的结构 `tmail_domaininfo`
--

CREATE TABLE `tmail_domaininfo` (
`id` tinyint(11) NOT NULL auto_increment,
`domain` varchar(25) NOT NULL default '',
`transport` varchar(128) NOT NULL default '',
`alias` varchar(50) default NULL,
`passwd` varchar(35) NOT NULL default '',
`clean` text NOT NULL,
`admin` tinytext NOT NULL,
`yesno` tinytext NOT NULL,
`usernum` text NOT NULL,
`quota` text NOT NULL,
`filequota` text NOT NULL,
`expire` date NOT NULL default '0000-00-00',
`create_time` datetime default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `domain` (`domain`),
KEY `domain_id` (`id`)
) TYPE=MyISAM PACK_KEYS=0 COMMENT='domain information' AUTO_INCREMENT=1 ;

--
-- 导出表中的数据 `tmail_domaininfo`
--

INSERT INTO `tmail_domaininfo` (`id`, `domain`, `transport`, `alias`, `passwd`, `clean`, `admin`, `yesno`, `usernum`, `quota`, `filequota`, `expire`, `create_time`) VALUES
(1, 'admin', 'maildrop', NULL, '$1$t5h6XOby$UP3HJpdrozxEsRlcLF6tI0', 'hing4585', '0', '1', '0', '0', '0', '0000-00-00', '2006-10-06 16:44:13');

-- --------------------------------------------------------

--
-- 表的结构 `tmail_group_name`
--

CREATE TABLE `tmail_group_name` (
`id` int(9) NOT NULL auto_increment,
`group_name` varchar(128) NOT NULL default '',
`domain` varchar(128) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

--
-- 导出表中的数据 `tmail_group_name`
--


-- --------------------------------------------------------

--
-- 表的结构 `tmail_monitor`
--

CREATE TABLE `tmail_monitor` (
`id` int(11) unsigned NOT NULL auto_increment,
`email` varchar(128) NOT NULL default '',
`cc` varchar(128) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `email` (`email`,`cc`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

--
-- 导出表中的数据 `tmail_monitor`
--


-- --------------------------------------------------------

--
-- 表的结构 `tmail_pop`
--

CREATE TABLE `tmail_pop` (
`id` int(11) unsigned NOT NULL auto_increment,
`email` varchar(128) NOT NULL default '',
`pop` varchar(128) NOT NULL default '',
`name` varchar(128) NOT NULL default '',
`pass` varchar(32) NOT NULL default '32',
`timeout` int(10) unsigned NOT NULL default '60',
`port` tinyint(3) unsigned NOT NULL default '110',
`keep` char(1) NOT NULL default 'Y',
PRIMARY KEY (`id`),
KEY `email` (`email`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

--
-- 导出表中的数据 `tmail_pop`
--


-- --------------------------------------------------------

--
-- 表的结构 `tmail_relay_domains`
--

CREATE TABLE `tmail_relay_domains` (
`id` int(11) unsigned NOT NULL auto_increment,
`domain` varchar(128) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `domain` (`domain`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

--
-- 导出表中的数据 `tmail_relay_domains`
--


-- --------------------------------------------------------

--
-- 表的结构 `tmail_relocated`
--

CREATE TABLE `tmail_relocated` (
`id` int(11) unsigned NOT NULL auto_increment,
`email` varchar(128) NOT NULL default '',
`destination` varchar(128) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

--
-- 导出表中的数据 `tmail_relocated`
--


-- --------------------------------------------------------

--
-- 表的结构 `tmail_transport`
--

CREATE TABLE `tmail_transport` (
`id` int(11) unsigned NOT NULL auto_increment,
`domain` varchar(128) NOT NULL default '',
`destination` varchar(128) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `domain` (`domain`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

--
-- 导出表中的数据 `tmail_transport`
--


-- --------------------------------------------------------

--
-- 表的结构 `tmail_userpersonal`
--

CREATE TABLE `tmail_userpersonal` (
`id` int(11) NOT NULL auto_increment,
`address` varchar(50) default NULL,
`fax` varchar(20) NOT NULL default '',
`telephone` varchar(15) NOT NULL default '',
`sex` int(1) NOT NULL default '0',
`year` int(4) NOT NULL default '0',
`month` int(2) NOT NULL default '0',
`day` int(2) NOT NULL default '0',
`education` varchar(4) NOT NULL default '',
`marital` int(1) NOT NULL default '0',
`occupation` varchar(15) NOT NULL default '',
`companyname` varchar(30) NOT NULL default '',
`province` varchar(128) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=InnoDB AUTO_INCREMENT=43 ;

--
-- 导出表中的数据 `tmail_userpersonal`
--


-- --------------------------------------------------------

--
-- 表的结构 `tmail_users`
--

CREATE TABLE `tmail_users` (
`id` int(11) unsigned NOT NULL auto_increment,
`userid` tinytext NOT NULL,
`domain` varchar(128) NOT NULL default '',
`email` varchar(128) NOT NULL default '',
`clear` varchar(128) NOT NULL default '',
`crypt` varchar(128) NOT NULL default '',
`realname` tinytext NOT NULL,
`uid` int(11) unsigned NOT NULL default '1003',
`gid` int(11) unsigned NOT NULL default '1003',
`homedir` tinytext NOT NULL,
`maildir` tinytext NOT NULL,
`quota` tinytext NOT NULL,
`file_quota` tinytext NOT NULL,
`access` enum('Y','N') NOT NULL default 'Y',
`postfix` enum('Y','N') NOT NULL default 'Y',
`disablepop3` char(1) NOT NULL default '0',
`disableimap` char(1) NOT NULL default '0',
`disablewebmail` char(1) NOT NULL default '0',
`sharedgroup` varchar(128) NOT NULL default '0',
`smtpaccess` enum('Y','N') NOT NULL default 'Y',
`expire` date NOT NULL default '0000-00-00',
`create_time` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

--
-- 导出表中的数据 `tmail_users`
--


-- --------------------------------------------------------

--
-- 表的结构 `tmail_virtual`
--

CREATE TABLE `tmail_virtual` (
`id` int(11) unsigned NOT NULL auto_increment,
`email` varchar(128) NOT NULL default '',
`destination` varchar(128) NOT NULL default '',
`group_name` varchar(128) NOT NULL default '',
`domain` varchar(128) NOT NULL default '',
`group` int(1) default NULL,
`alias` int(1) default NULL,
`forward` int(1) default NULL,
`forward_bak` int(1) default NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

--
-- 导出表中的数据 `tmail_virtual`
--


-- --------------------------------------------------------

--
-- 表的结构 `vpopmail`
--

CREATE TABLE `vpopmail` (
`pw_id` int(5) unsigned NOT NULL auto_increment,
`pw_name` varchar(32) NOT NULL default '',
`pw_domain` varchar(64) NOT NULL default '',
`pw_passwd` varchar(40) NOT NULL default '',
`pw_uid` int(11) default NULL,
`pw_gid` int(11) default NULL,
`pw_gecos` varchar(48) default NULL,
`pw_dir` varchar(255) default NULL,
`pw_shell` varchar(20) default NULL,
`createtime` timestamp(14) NOT NULL,
PRIMARY KEY (`pw_id`),
KEY `pw_name` (`pw_name`,`pw_domain`)
) TYPE=MyISAM PACK_KEYS=1 AUTO_INCREMENT=1 ;

--
-- 导出表中的数据 `vpopmail`
  

注:对于初学者,建议以上操作都在phpmyadmin中操作更加的简便.
建立数据库用户并授以相应的权限


QUOTE:
mail# /usr/local/bin/mysql –u root –p
mysql# use mysql;
mysql# INSERT INTO user (host,user,password) VALUES('localhost','postfix','');
mysql# update user set password=password('postfix') where User='postfix';
重新启动mysql
mail# /usr/local/bin/mysql –u root –p
mysql# use mysql;
mysql# GRANT ALL ON postfix.* TO postfix@localhost IDENTIFIED BY "postfix";

注:这里加用户名和密码都为:postfix。并授权对postfix数据库进行操作

4.9 安装cyrus-sasl-2.1.22

QUOTE:
mail# cd /usr/ports/security/cyrus-sasl2
mail# make WITH_MYSQL=yes WITH_AUTHDAEMON=yes install clean

WITH_AUTHDAEMON=yes参数是为了让sasl支持authdamond的认证方式
WITH_MYSQL=yes参数是为了让sasl支持mysql认证方式

4.10 安装postfix-2.3.3

QUOTE:
mail# cd /usr/ports/mail/postfix
mail# make install clean

以下是我的选择

QUOTE:
                Postfix configuration options                  
                                                                            
Please select desired options:                                  
                                                      
[ ] NOPCRE     DISABLE Perl Compatible Regular Expressions            
[ ] SASL       Cyrus SASLv1 (Simple Authentication and Security Layer)    
[X] SASL2     Cyrus SASLv2 (Simple Authentication and Security Layer)    
[ ] SASLKRB     If your SASL requires Kerberos select this option        
[ ] SASLKRB5   If your SASL requires Kerberos5 select this option        
[ ] SASLKRB5MIT If your SASL requires MIT Kerberos5 select this option      
[ ] SPF       SPF support                                  
[ ] TLS       SSL and TLS                                  
[ ] BDB       Berkeley DB (select version using WITH_BDB_VER variable)    
[X] MySQL     MySQL map lookups (choose version with WITH_MYSQL_VER)      
[ ] PgSQL     PostgreSQL map lookups (choose with DEFAULT_PGSQL_VER)      
[ ] OpenLDAP   OpenLDAP map lookups (choose ver. with WITH_OPENLDAP_VER)    
[ ] CDB       CDB map lookups                                
[ ] NIS       NIS map lookups                                
[X] VDA       VDA (Virtual Delivery Agent)                      
[ ] Test       SMTP/LMTP test server and generator

安装过程中会让你回答两个问题,

QUOTE:
===> Installing for postfix-2.2.10_1,1
===>   postfix-2.2.10_1,1 depends on shared library: sasl2.2 - found
===>   postfix-2.2.10_1,1 depends on shared library: pcre.0 - found
===>   postfix-2.2.10_1,1 depends on shared library: mysqlclient.14 - found
Added group "postfix".
Added group "maildrop".
Added user "postfix".
You need user "postfix" added to group "mail".
Would you like me to add it [y]? y
是否把postfix用户加入到mail用户组。回答Y

Installed HTML documentation in /usr/local/share/doc/postfix
Would you like to activate Postfix in /etc/mail/mailer.conf [n]? n


在rc.conf中加入postfix的启动选项

QUOTE:
mail# echo 'postfix_enable="YES"' >> /etc/rc.conf
mail# echo 'sendmail_enable="NO"' >> /etc/rc.conf
mail# echo 'sendmail_submit_enable="NO"' >> /etc/rc.conf
mail# echo 'sendmail_outbound_enable="NO"' >> /etc/rc.conf
mail# echo 'sendmail_msp_queue_enable="NO"' >> /etc/rc.conf


4.11 安装courier-imap-4.1.1

QUOTE:
mail# cd /usr/ports/mail/courier-imap
mail# make install clean

以下是我的选择

QUOTE:
      Options for courier-imap 4.1.1,1              
                                                                        
[ ] OPENSSL     Build with OpenSSL support              
[ ] FAM       Build in fam support for IDLE command      
[ ] TRASHQUOTA   Include deleted mails in the quota        
[ ] GDBM       Use gdbm db instead of system bdb        
[ ] IPV6       Build with IPv6 support                
[ ] AUTH_LDAP   LDAP support                      
[X] AUTH_MYSQL   MySQL support                      
[ ] AUTH_PGSQL   PostgreSQL support                  
[ ] AUTH_USERDB Userdb support                      
[ ] AUTH_VCHKPW Vpopmail/vchkpw support


在rc.conf中加入courier的启动选项

QUOTE:
mail# echo 'courier_authdaemond_enable="YES"' >> /etc/rc.conf
mail# echo 'courier_imap_imapd_enable="YES"' >> /etc/rc.conf
mail# echo 'courier_imap_pop3d_enable="YES"' >> /etc/rc.conf


QUOTE:
mail# /usr/local/etc/rc.d/courier-authdaemond start
Starting courier_authdaemond.


注:此时会在/var/run/authdaemond/下产生socket,如果没有下面这一步下面的认证无法通过。
对/var/run/authdaemond目录加执行权限

QUOTE:
mail# chmod +x /var/run/authdaemond


4.12 安装MailScanner-install-4.55.10-3

QUOTE:
mail# cd /usr/ports/mail/mailscanner
mail# make install clean

在安装MailScanner的过程中会出现以下几个选项。以下是我的选择

QUOTE:
  Options for MailScanner 4.55.10              
                                                                        
[X] SPAMASSASSIN Install SpamAssassin            
[X] CLAMAV     Install ClamAV                
[X] CLAMAVMODULE Install ClamAV Module            
[ ] BDC       Install BitDefender


        Options for sqlite 3.3.6                
                                                                        
[ ] TCLWRAPPER TCL wrapper for SQLITE                
[ ] THREADS   Enable threads support                
[ ] DEBUG     Enable debugging & verbose explain        
[ ] DOCS     Building docs (depends on TCL)

      Options for Mail-SpamAssassin-3.1.6            
                                            
[X] AS_ROOT     Run spamd as root (recommended)          
[X] DOMAINKEYS   DomainKeys support                  
[X] SSL         Build with SSL support for spamd/spamc      
[ ] MYSQL       Add MySQL support                    
[ ] PGSQL       Add PostreSQL support                
[X] RAZOR       Add Vipul's Razor support              
[X] SPF_QUERY     Add SPF query support                
[X] RELAY_COUNTRY Relay country support                
[X] TOOLS       Install SpamAssassin tools

      Options for clamav 0.88.5                
                                        
[X] MILTER   Compile the milter interface              
[X] CURL     Support URL downloading                
[X] LIBUNRAR Support for external Unrar library          
[X] STDERR   Print logs to stderr instead of stdout

生成初始配置文件

QUOTE:
mail# make initial-config
根据提示创建MailScanner运行所需的目录
mail# mkdir -p /var/spool/MailScanner/incoming
mail# mkdir /var/spool/MailScanner/quarantine
mail# chown -R postfix:postfix /var/spool/MailScanner


分别在rc.conf中加入clamav、spamassassin和MailScanner的启动参数

QUOTE:
mail# echo 'clamav_clamd_enable="YES"' >> /etc/rc.conf
mail# echo 'clamav_freshclam_enable="YES"' >> /etc/rc.conf
mail# echo 'clamav_milter_enable="YES"' >> /etc/rc.conf
mail# echo 'mailscanner_enable="YES"' >> /etc/rc.conf
mail# echo 'spamd_enable="YES"' >> /etc/rc.conf


4.13 安装maildrop-2.0.2

QUOTE:
mail# cd /usr/ports/mail/maildrop
mail# make install WITH_AUTHLIB=yes

以下是我的选择

QUOTE:
    Options for maildrop 2.0.2                
                                                                        
[ ] AUTH_LDAP   LDAP support                  
[X] AUTH_MYSQL   MySQL support                  
[ ] AUTH_PGSQL   PostgreSQL support              
[ ] AUTH_USERDB Userdb support                
[ ] AUTH_VCHKPW Vpopmail/vchkpw support



QUOTE:
mail# /usr/local/bin/maildrop -v
maildrop 2.0.2 Copyright 1998-2005 Double Precision, Inc.
Courier Authentication Library extension enabled.
Maildir quota extension enabled.
This program is distributed under the terms of the GNU General Public
License. See COPYING for additional information.
出现上面红色的部分表示maildrop支持Courier。


第五章 软件系统配置

为了支持maildrop,先加入vmail用户

QUOTE:
mail# pw adduser vmail -u 1003 -s /sbin/nologin -d /dev/null


5.1 配置cyrus-sasl
创建/usr/local/lib/sasl2/smtpd.conf

QUOTE:
mail# ee /usr/local/lib/sasl2/smtpd.conf
pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: plain login

sql_engine: mysql
sql_hostnames: localhost
sql_user: tmail
sql_passwd: tmail
sql_database: tmail
sql_select: select clear from tmail_users where email='%u@%r' and smtpaccess='Y'


5.2 配置postfix

QUOTE:
mail# ln -s /usr/local/sbin/sendmail /usr/sbin/sendmail
注:如果/usr/sbin/sendmail存在就删了再做上链接,如果升级内核和升级系统后要重新做这一步。
mail# echo ‘postfix: root’ >> /etc/aliases
mail# /usr/local/bin/newaliases
mail# chown postfix:postfix /etc/opiekeys
mail# ee /usr/local/etc/postfix/main.cf

修改/usr/local/etc/postfix/main.cf,在文件最后加入以下内容

QUOTE:
# new add
myhostname = mail.test.com
smtp_helo_name = $myhostname

local_transport = maildrop
mailbox_transport = maildrop

smtpd_error_sleep_time = 0
smtpd_soft_error_limit = 10
smtpd_hard_error_limit = 20
default_process_limit = 100
#alias_maps       = hash:/usr/local/etc/postfix/aliases
#Alias_database         = hash:/usr/local/etc/postfix/aliases
mydestination     =   mysql:/usr/local/etc/postfix/mysql-mydest.cf
virtual_transport_maps     = mysql:/usr/local/etc/postfix/mysql-transport.cf
virtual_alias_maps       = mysql:/usr/local/etc/postfix/mysql-virtual.cf
#virtual_alias_maps   = mysql:/usr/local/etc/postfix/mysql-alias.cf
recipient_bcc_maps = mysql:/usr/local/etc/postfix/mysql-autobbc-in.cf
sender_bcc_maps = mysql:/usr/local/etc/postfix/mysql-autobbc-out.cf
local_recipient_maps = $alias_maps $virtual_mailbox_maps $virtual_maps

virtual_mailbox_base = /mail
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql-virtual-maps.cf
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/mysql-virtual-quota.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
virtual_uid_maps     = mysql:/usr/local/etc/postfix/mysql-virtual-uid.cf
virtual_gid_maps     = mysql:/usr/local/etc/postfix/mysql-virtual-gid.cf
broken_sasl_auth_clients   = yes
smtpd_sasl_auth_enable     = yes
smtpd_sasl_security_options = noanonymous
smtpd_client_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    check_client_access mysql:/usr/local/etc/postfix/mysql-access.cf,
    permit_auth_destination,
    reject
smtpd_sender_restrictions =
    reject_unknown_sender_domain,
    reject_non_fqdn_sender,
    check_sender_access mysql:/usr/local/etc/postfix/mysql-access.cf,
    permit
smtpd_recipient_restrictions =
    permit_mynetworks,
    check_client_access mysql:/usr/local/etc/postfix/mysql-access.cf,
    permit_sasl_authenticated,
    reject_non_fqdn_sender,
    reject_non_fqdn_recipient,
    reject_unknown_recipient_domain,
    reject_unauth_pipelining,
    reject_unauth_destination,
      reject_rbl_client cblless.anti-spam.org.cn,
    permit
default_destination_recipient_limit = 1
local_destination_concurrency_limit = 1
maildrop_destination_recipient_limit = 1
message_size_limit = 41943040
smtpd_recipient_limit = 10
bounce_queue_lifetime = 12h
maximal_queue_lifetime = 24h

smtpd_delay_reject = yes
smtpd_helo_required = yes
strict_rfc821_envelopes = yes



QUOTE:
mail# ee /usr/local/etc/postfix/mysql-access.cf
hosts = localhost
user = tmail
password = tmail
dbname = tmail
query = select access from tmail_access where source = '%s'



QUOTE:
mail# ee /usr/local/etc/postfix/mysql-alias.cf
host = localhost
user = tmail
password = tmail
dbname = tmail
table = tmail_virtual
query = select alias from tmail_users where email = '%s'



QUOTE:
mail# ee /usr/local/etc/postfix/mysql-autobbc-in.cf
hosts = localhost
user = tmail
password = tmail
dbname = tmail
query = select autobbc from tmail_autobbc where email = '%s' AND come='1'



QUOTE:
mail# ee /usr/local/etc/postfix/mysql-autobbc-out.cf
hosts = localhost
user = tmail
password = tmail
dbname = tmail
query = select autobbc from tmail_autobbc where email = '%s' AND 'out'='1'



QUOTE:
mail# ee /usr/local/etc/postfix/mysql-mydest.cf
hosts = localhost
user = tmail
password = tmail
dbname = tmail
table = tmail_domaininfo
query = select domain from tmail_domaininfo where domain = '%s' AND yesno = '1'



QUOTE:
mail# ee /usr/local/etc/postfix/mysql-transport.cf
host = localhost
user = tmail
password = tmail
dbname = tmail
table = tmail_domaininfo
query = select transport from tmail_domaininfo where domain = '%s'



QUOTE:
mail# ee /usr/local/etc/postfix/mysql-virtual-gid.cf
hosts = localhost
user = tmail
password = tmail
dbname = tmail
table = tmail_users
query = select gid from tmail_users where email = '%s'



QUOTE:
mail# ee /usr/local/etc/postfix/mysql-virtual-uid.cf
hosts = localhost
user = tmail
password = tmail
dbname = tmail
table = tmail_users
query = select uid from tmail_users where email = '%s'



QUOTE:
mail# ee /usr/local/etc/postfix/mysql-virtual-maps.cf
host = localhost
user = tmail
password = tmail
dbname = tmail
table = tmail_users
query = select maildir from tmail_users where email = '%s'



QUOTE:
mail# ee /usr/local/etc/postfix/mysql-virtual-quota.cf
hosts = localhost
user = tmail
password = tmail
dbname = tmail
table = tmail_users
query = select quota from tmail_users where email = '%s'



QUOTE:
mail# ee /usr/local/etc/postfix/mysql-virtual.cf
host = localhost
user = tmail
password = tmail
dbname = tmail
table = tmail_virtual
query = select destination from tmail_virtual where email = '%s'


5.3 配置Courier-imap

修改Courier相关设置,/usr/local/etc/courier-imap/imapd:

QUOTE:
IMAP_CAPABILITY="IMAP4rev1 CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA"


修改/usr/local/etc/courier-imap/pop3d

QUOTE:
POP3AUTH="LOGIN CRAM-MD5 CRAM-SHA1"


编辑修改/usr/local/etc/authlib/authmysqlrc

QUOTE:
MYSQL_SERVER         localhost
MYSQL_USERNAME       tmail
MYSQL_PASSWORD       tmail
MYSQL_PORT         0
MYSQL_OPT           0
MYSQL_DATABASE       tmail
MYSQL_USER_TABLE     tmail_users
MYSQL_CRYPT_PWFIELD   crypt
#MYSQL_CLEAR_PWFIELD   clear
MYSQL_UID_FIELD       uid
MYSQL_GID_FIELD       gid
MYSQL_LOGIN_FIELD     email
MYSQL_HOME_FIELD     homedir
MYSQL_NAME_FIELD     realname
MYSQL_MAILDIR_FIELD   maildir
MYSQL_QUOTA_FIELD     quota
MYSQL_AUXOPTIONS_FIELD CONCAT("disableimap=",disableimap,",disablepop3=",disablepop3,",disablewebmail=",disablewebmail,",sharedgroup=",sharedgroup)
MYSQL_WHERE_CLAUSE     access='y'

注:红色部分为一行。这里得用tab键来跳格
编辑/usr/local/etc/authlib/authdaemonrc

QUOTE:
authmodulelist="authmysql"
authmodulelistorig="authmysql"
version="authdaemond.mysql"
daemons=5
authdaemonvar=/var/run/authdaemond
subsystem=mail
DEBUG_LOGIN=0
DEFAULTOPTIONS="wbnodsn=1"


5.4 安装Tmail管理工具
本节主要介绍如何安装Tmail管理工具。
更改httpd.conf中的Group www、User www修改为: Group vmail、User vmail
安装Tmail管理工具来设置第一个域名和用户
上传管理工具到网站目录
后修改config/config.inc.php中的

QUOTE:
define(MAILDIR,"/mail");     //邮件存放目录
define(MISC, ".misc");
define(MODE,0700);
$PageSize = 15;             //用户列表和域名列表每一页显示多少行
$host = "localhost";           //数据库主机名
$user = "tmail";             //数据库用户名
$dbname = "tmail";             //数据库名称
$password = "tmail";           //数据库密码

设置好后,加一个域名为test.com,加一个邮件用户为: test@test.com电子邮件地址已被防垃圾邮件功能所隐藏, 您需要把Javascript功能打开才能看到。

5.5 登录测试

重新启动相关服务

QUOTE:
mail# /usr/local/etc/rc.d/apache22 restart
mail# /usr/local/etc/rc.d/mysql-server restart
mail# /usr/local/etc/rc.d/courier-authdaemond stop
mail# /usr/local/etc/rc.d/courier-authdaemond start
mail# /usr/local/etc/rc.d/courier-imap-imapd.sh restart
mail# /usr/local/etc/rc.d/courier-imap-pop3d.sh restart
mail# /usr/local/etc/rc.d/postfix reload


生成用户名的base64编码

QUOTE:
mail# perl -MMIME::Base64 -e 'print encode_base64(" test@test.com电子邮件地址已被防垃圾邮件功能所隐藏, 您需要把Javascript功能打开才能看到。 ");'
dGVzdEB0ZXN0LmNvbQ==
mail# perl -MMIME::Base64 -e 'print encode_base64("000000");'
MDAwMDAw

测试25发送

QUOTE:
mail# telnet localhost 25
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.test.com.
Escape character is '^]'.
220 mail.test.com ESMTP Postfix
ehlo mail
250-mail.test.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME
auth login
334 VXNlcm5hbWU6
dGVzdEB0ZXN0LmNvbQ==
334 UGFzc3dvcmQ6
MDAwMDAw
235 Authentication successful
MAIL FROM:< test@test.com电子邮件地址已被防垃圾邮件功能所隐藏, 您需要把Javascript功能打开才能看到。 >
250 Ok
RCPT TO:< test@test.com电子邮件地址已被防垃圾邮件功能所隐藏, 您需要把Javascript功能打开才能看到。 >
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
SUBJECT:test

test

.
250 Ok: queued as 47C6CB83E
quit
221 Bye
Connection closed by foreign host.


测试110收邮件

QUOTE:
mail# telnet localhost 110
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.test.com.
Escape character is '^]'.
+OK Hello there.
user test@test.com电子邮件地址已被防垃圾邮件功能所隐藏, 您需要把Javascript功能打开才能看到。
+OK Password required.
pass 000000
+OK logged in.
list
+OK POP3 clients that break here, they violate STD53.
1 1563
2 401
.
retr 2
+OK 401 octets follow.
Return-Path: < test@test.com电子邮件地址已被防垃圾邮件功能所隐藏, 您需要把Javascript功能打开才能看到。 >
Delivered-To: test@test.com电子邮件地址已被防垃圾邮件功能所隐藏, 您需要把Javascript功能打开才能看到。
Received: from mail (localhost.test.com [127.0.0.1])
    by mail.test.com (Postfix) with ESMTP id 47C6CB83E
    for < test@test.com电子邮件地址已被防垃圾邮件功能所隐藏, 您需要把Javascript功能打开才能看到。 >; Tue, 11 Jul 2006 13:47:28 +0800 (CST)
SUBJECT:test
Message-Id: < 20060711054736.47C6CB83E@mail.test.com电子邮件地址已被防垃圾邮件功能所隐藏, 您需要把Javascript功能打开才能看到。 >
Date: Tue, 11 Jul 2006 13:47:28 +0800 (CST)
From: test@test.com电子邮件地址已被防垃圾邮件功能所隐藏, 您需要把Javascript功能打开才能看到。
To: undisclosed-recipients:;

test

.
dele 2
+OK Deleted.
quit
+OK Bye-bye.
Connection closed by foreign host.


5.6 垃圾邮件和病毒邮件过滤设置

设置MailScanner
编辑/usr/local/etc/postfix/main.cf

QUOTE:
mail# ee /usr/local/etc/postfix/main.cf

去掉513行的注释

QUOTE:
header_checks = regexp:/usr/local/etc/postfix/header_checks

编辑/usr/local/etc/postfix/header_checks

QUOTE:
mail# ee /usr/local/etc/postfix/header_checks
新加入
/^Received:/ HOLD

重新加载postfix配置文件
mail# postfix reload
编辑/usr/local/etc/MailScanner/MailScanner.conf,以下是我的配置文件,更改相应的参数为下面的格式。

QUOTE:
%org-name% = thismail.org
%org-long-name% = LCSoft
%web-site% = www.thismail.org
%etc-dir% = /usr/local/etc/MailScanner
%report-dir% = /usr/local/share/MailScanner/reports/en
%rules-dir% = /usr/local/etc/MailScanner/rules
%mcp-dir% = /usr/local/etc/MailScanner/mcp
Run As User = postfix
Run As Group = postfix
Incoming Queue Dir = /var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming
MTA = postfix
Sendmail = /usr/sbin/sendmail
Monitors for ClamAV Updates = /var/db/clamav/*.cvd
SpamAssassin User State Dir = /var/spool/MailScanner/spamassassin
Custom Functions Dir = /usr/local/lib/MailScanner/MailScanner/CustomFunctions
SpamAssassin Install Prefix = /usr/local/bin
SpamAssassin Site Rules Dir = /usr/local/etc/mail/spamassassin
SpamAssassin Local Rules Dir = /usr/local/share/spamassassin


编辑配置文件/usr/local/etc/MailScanner/mcp/mcp.spam.assassin.prefs.conf

QUOTE:
mail# ee /usr/local/etc/MailScanner/mcp/mcp.spam.assassin.prefs.conf
# MailScanner
# MailScanner users, please see the comments at the bottom of this file.
# MailScanner
#
# SpamAssassin user preferences file.
#
# Format:
#
#   required_hits n
#     (how many hits are required to tag a mail as spam.)
#
#   score SYMBOLIC_TEST_NAME n
#     (if this is omitted, 1 is used as a default score.
#     Set the score to 0 to ignore the test.)
#
# # starts a comment, whitespace is not significant.
#
###########################################################################


# Whitelist and blacklist addresses are *not* patterns; they're just normal
# strings. one exception is that "*@isp.com" is allowed. They should be in
# lower-case. You can either add multiple addrs on one line,
# whitespace-separated, or you can use multiple lines.
#
# Monty Solomon: he posts from an ISP that has often been the source of spam
# (no fault of his own ;), and sometimes uses Bcc: when mailing.
#
#whitelist_from     monty@roscom.com电子邮件地址已被防垃圾邮件功能所隐藏, 您需要把Javascript功能打开才能看到。

# Add your blacklist entries in the same format...
#
# blacklist_from   friend@public.com电子邮件地址已被防垃圾邮件功能所隐藏, 您需要把Javascript功能打开才能看到。

# Mail using languages used in these country codes will not be marked
# as being possibly spam in a foreign language.
#
#ok_locales     en

skip_rbl_checks 1

use_bayes 0
use_dcc   0
use_pyzor 0
use_razor1 0
use_razor2 0

decode_attachments 1


编辑配置文件/usr/local/etc/MailScanner/rules/max.message.size.rules

QUOTE:
mail# ee /usr/local/etc/MailScanner/rules/max.message.size.rules
# This is an example ruleset to show how rules can have resulting values
# other than yes and no. This ruleset demonstrates having a numerical result.
# The From: and To: rules show how simple domains can be used to select
# different values for the result of the ruleset.
# Note that the fields of each rule line can be separated by any whitespace,
# any combination of tabs and spaces.
#
# The 2 lines involving domain3.com show that for email to user@domain3.com电子邮件地址已被防垃圾邮件功能所隐藏, 您需要把Javascript功能打开才能看到。
# has a limit of 5Mbytes per message, while email to any other user
# @domain3.com has a limit of 500Kbytes per message.
#

To:     *@domain1.com   10M
To:     *@domain2.com   20M
From:   user@domain3.com电子邮件地址已被防垃圾邮件功能所隐藏, 您需要把Javascript功能打开才能看到。   5M
From:   *@domain3.com   500K

#
# The following line specifies the default result used when none of the
# other rules match. In this example,
# Maximum Message Size = 0
# means that there is no limit to the size of the message.
#

FromOrTo: default       0


编辑配置文件/usr/local/etc/MailScanner/rules/bounce.rules

QUOTE:
mail# ee /usr/local/etc/MailScanner/rules/bounce.rules
# You can use this ruleset to enable the "bounce" Spam Action.
# You must *only* enable this for mail from sites with which you have
# agreed to bounce possible spam. Use it on low-scoring spam only (<10)
# and only to your regular customers for use in the rare case that a
# message is mis-tagged as spam when it shouldn't have been.
# Beware that many sites will automatically delete the bounce messages
# created by using this option unless you have agreed this with them in
# advance.

# This next line gives an example of how you might enable this option for
# a frequent customer of yours.
#From:     yourcustomer.com   yes

# Under no circumstances should this be changed to "yes".
FromOrTo:   default         no


重新启动mailscanner.

QUOTE:
mail# /usr/local/etc/rc.d/mailscanner restart


加入中文垃圾邮件规则

QUOTE:
mail# cd /usr/local/share/spamassassin
mail# fetch http://www.ccert.edu.cn/spam/sa/Chinese_rules.cf

注意:由于加入了中文垃圾邮件规则,请把垃圾邮件的评分的分数设置为高一些。
我的设置为8,最高分设置为10,这样可以降低中文邮件的错误识别率。用户可以根据自己的需要来改变这两个分值。

QUOTE:
Required SpamAssassin Score = 8
High SpamAssassin Score = 10

为了避免邮件扫描后主题变成乱码,建议改变以下设置为no

QUOTE:
Virus Modify Subject = no
Filename Modify Subject = no
Content Modify Subject = no
Disarmed Modify Subject = no
Spam Modify Subject = yes
High Scoring Spam Modify Subject = no

扫描垃圾邮件所执行的运作

QUOTE:
Spam Actions = deliver
High Scoring Spam Actions = delete

相关运作参数说明:

QUOTE:
"deliver" -- 邮件正常的转送至原来的收信人。
"delete" -- 删除邮件。
"store" -- 将邮件存放至隔离区。
"bounce" -- 将邮件退给寄信人。
"forward" -- 提供一个 forward 的邮件位址给系统,系统会自动转寄一份。
"striphtml" -- 将内嵌 HTML 的邮件转成 Text,你必需要加入 "deliver",系统才会帮你寄邮件。


允许html邮件通行

QUOTE:
Allow IFrame Tags = yes
Allow Form Tags = yes
Allow Script Tags = yes
Allow WebBugs = disarm
Allow Object Codebase Tags = yes
Convert Dangerous HTML To Text = no
Convert HTML To Text = no


允许本机发送出去的邮件不被MailScanner视为垃圾邮件

QUOTE:
mail# ee /usr/local/etc/MailScanner/rules/spam.whitelist.rules
From:       127.0.0.1     yes

以上规则的说明:以上垃圾邮件的规则是加入了中文垃圾邮件主题和内容的评分规则,所以我设置了一个最低分为8分,最高分为10分的规则,8-10分间的邮件会被打上[spamd]的标识,高于10分的邮件会被自动的删除掉,以上规则允许html邮件通过。

第六章 安装webmail
到开邮件邮件技术论坛
http://www.thismail.org/bbs/thread.php?fid=17
取得最新的webmail
下载后传到服务器上的web目录,后配置php的全局变量为打开

QUOTE:
register_globals = On


并编辑webmail/config/config_inc.php中如下参数

QUOTE:
$CFG_BASEPATH = "/tmp/tmail/temp"; //临时目录,如果不存在,修改完配置文件后再手动创建,并附于相关的权限

// Mysql
define(MYSQL_HOST, 'localhost'); //数据库主机名
define(MYSQL_USER, 'postfix');   //数据库用户名
define(MYSQL_PASS, 'postfix');   //数据库密码
define(MYSQL_DATA, 'postfix');   //数据库名称
$CFG_NETDISK_PATH = "/mail/netdisk"; //文件管理(网络磁盘所在的系统路径)如果不存在,修改完配置文件后再手动创建,并附于相关的权限
$CFG_NETDISK_DEFAULT_QUOTA = 10;       //文件管理(网络磁盘)默认大小为10MB,用户可根据自己的需要改变大小



QUOTE:
mail# mkdir -p /tmp/tmail/temp
mail# chown -R postfix:postfix /tmp/tmail
mail# mkdir -p /mail/netdisk
mail# chown -R postfix:postfix /mail/netdisk


为了webmail能配合maildrop做中文邮件的过滤。请写/usr/sbin/maildecode文件

QUOTE:
mail# ee /usr/sbin/maildecode
#!/usr/bin/perl

# Convert Base64 Or Quoted-printable TO Text

my $a = $ARGV[0] &#124;&#124; '';

#Maybe arg is include Subject
if ($a=~/^Subject/) {
    $a = $ARGV[1] &#124;&#124; '';
};


if ($a=~/=?[w-]+?B?(.*)?=$/) {
  use MIME::Base64;
  $a = decode_base64($1);
};
if ($a=~/=?[w-]+?Q?(.*)?=$/) {
  use MIME::QuotedPrint;
  $a = decode_qp($1);
};

#open(OUTFILE, ">/tmp/list.log");
#print OUTFILE $a;
#close(OUTFILE);

print $a;

exit(0);


并改变相关的权限

QUOTE:
mail# chmod 755 /usr/sbin/maildecode
mail# chown -R vmail:vmail /usr/sbin/maildecode




安装成功后的webmail

  



附一、常见问题
正在收集中……
附二、MailScanner.conf中文参数说明
http://www.thismail.org/bbs/htm_data/7/0509/533.html

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/886/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2008-2-3 15:53
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]