当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 12 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : (原创) ubuntu9.04下架构extmail服务器
帖子发表于 : 2009-06-02 14:16 

注册: 2008-10-09 10:04
帖子: 63
送出感谢: 0 次
接收感谢: 0 次
作者:阳光
时间:2009-06-03
原因:因为它比php更快,所以使用它,在网上找了好久,没有关于ubuntu怎样搭建extmail,自己试验了,快一个月了,终于是做好了,己经测试一个星期了,没有多大问题,现在拿出来和大家分享。

话不多说了,开始:


 ubuntu9.04架构extmail邮件系统
软件环境:

功能模块 内容 备注

操作系统(OS) ubuntu 开源系统
邮件传输代理(MTA) Postfix 使用最新版本2.5.1
数据库/目录服务 MySQL 可选openLDAP或NetScape LDAP,本文以MySQL为蓝本
邮件投递代理(MDA) maildrop 支持过滤和强大功能
Web帐户管理后台 ExtMan 支持无限域名、无限用户
POP3 服务器 Courier-IMAP 只使用pop3部分,对于大部分企业而言完全足够
WebMail 系统 ExtMail 支持多语言、全部模板化,功能基本齐全
防病毒软件(Anti-Virus) ClamAV 最热门的开源杀毒软件
SMTP阶段反垃圾邮件工具 Spam Locker 基于SMTP行为识别的Antispam软件,大量可选插件
内容过滤器 Amavisd-new Content-Filter软件,支持与clamav/sa的挂接
内容级别的反垃圾邮件工具 SpamAssassin 著名的SA,可以支持大量规则,但速度慢
SMTP认证库 Cyrus SASL 标准的SASL实现库,可以支持Courier authlib
其他数据认证库 Courier Authlib authlib是maildrop, courier-imap等服务的关键部件
日志分析及显示 mailgraph_ext 在ExtMan中已经包含了
Web 服务器 LAMP 新立得中安装

以上的软件到ubuntu源上大部分的都找得到 extmail,extman,spam loocker可以到http://www.extmail.org/cgi-bin/download.cgi去下载最近的版本

首先我们把系统装好,主机名为mail.extmail.org,装上语言,升级系统,使用root权限登录到系统,所有的步骤做完以以我们在终端里运行

sudo tasksel

出来的介面和使用新立得是一样的,我在这里选“LAMP Server”,"OpenSSH Server","Samba file server",你们可以按自己要求来选择,将光标移动到你要安装的软件,按“空格”选定。在安装过程中会让你输入"Mysql"的密码。安装完后,我们还要安装phpmyadmin来管理mysql.

sudo apt-get install phpmyadmin

在安装“phpmyadmin”的过程中它会出现“Configure database for phpmyadmin with dbconfig-common?”,我们选“否”.打开“火狐”,在地址中输入“localhost/phpmyadmin”出现phpmyadmin的介面说明你成功了。

前面一步,我装了“openssh server”远程管理服务。我配置了“基于RSA key登陆”,这样更安全点。

sudo ssh-keygen -t rsa

生成公有/私有RSA密匙对。
进入保证密匙的文件(/home/b/.ssh/id_rsa):
进入passphrase(empty for no passphrase):
再次进入同一passphrase:
你的验证文件保存在/home/b/.ssh/id_rsa.
你的公有密匙保存在 /home/b/.ssh/id_rsa.pub.

接下来修改apache2的配置文件。

sudo gedit /etc/apache2/apache2.conf
把下面的代码全部考到文件的最后。

AddType application/x-httpd-php .php .htm .html
AddDefaultCharset UTF-8
ServerName 127.0.0.1
<IfModule dir_module>
DirectoryIndex index.htm index.html index.php
</IfModule>

重新启动
/etc/init.d/apache2 restart
/etc/init.d/mysql restart


我们来安装 ZendOptimizerV3.3.3ForLinux.gz 它是一个PHP优化工具,不装也无所谓。我下载后把它放到了“opt”文件下,将它解压。进入文件

cd /opt/ZendOptimizer-3.3.3-linux-glibc23-i386
./install
一路默认,到出现“enter the location of your php.ini file”我们选择php5的安装路径“/etc/php5/apache2/”,一路默认,到出现"please specify the full path to the apache binary (httpd)"时,我们选择的路径为“/usr/sbin/apache2”一路确认,安装完后,我们来没试一下,看看zend起到做用没有,到/var/www/下新建一个空白文件,文件名为index.php,文件内容为
<?php
echo phpinfo();
?>
这是一个php探针,打开后,里面会有zend的选项。

上面工作做完后,接下来我们来安装postfix courier sasl等

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 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-fastcgi libfcgi-perl libapache2-mod-php5 php5 php5-mysql build-essential libtool libnet-server-perl libnet-cidr-perl libberkeleydb-perl arc zoo lzop liblzo1 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 libconvert-tnef-perl libconvert-uulib-perl libcompress-zlib-perl libarchive-zip-perl libarchive-tar-perl perl-suid apache2-suexec

你会被询问以下问题:
Create directories for web-based administration? <-- No
General type of mail configuration: <-- Internet Site
System mail name: <-- mail.extmail.org

下载extmail,并修改配置
我用的是ExtMail 1.1.0.tar.gz和ExtMan 1.0.0.tar.gz

tar zxvf extmail-1.1.0.tar.gz
tar zxvf extman-1.0.0.tar.gz
mkdir /var/www/extsuite
mv extmail-1.1.0 /var/www/extsuite/extmail
mv extman-1.0.0 /var/www/extsuite/extman
cp /var/www/extsuite/extman/docs/mysql_virtual_*.cf /etc/postfix/

注意:修改/etc/postfix/mysql_virtual_*.cf,将其中的“localhost”均改为“127.0.0.1”

chmod 755 /etc/postfix/mysql_virtual_*.cf
chgrp postfix /etc/postfix/mysql_virtual_*.cf

注:如果打算使用默认用户vuser:vgroup,那么需创建此用户,且uid:gid为1000:1000.而本文为了以后方便,使用的是手动创建的用户vmail,所以需修改下边这些文件中的相关参数.
新建一个用户vmail组为vmail uid和gid为1000,不允放登录。用户下用来存放所有的用户的邮件
groupadd -g 1000 vmail
useradd -m -g vmail -u 1000 -d /home/vmail -s /bin/bash vmail


注:如果打算使用默认用户vu修改uid和gid 由于程序中默认使用的为vuser:vgroup,其uid:gid为1000:1000。而当前采用了一个新建用户vmail,所以需修改程序中的所有相关参数,具体操作如下:
chown -R vmail:vmail /var/www/extsuite/extmail/cgi/
chown -R vmail:vmail /var/www/extsuite/extman/cgi/
cd /var/www/extsuite/extmail/
cp webmail.cf.default webmail.cf




修改/var/www/extsuite/extmail/webmail.cf里的其他参数,主要变动的内容见下:
SYS_USER_LANG = zh_CN
SYS_USER_CHARSET = gb2312
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
SYS_MYSQL_DB = extmail
SYS_MYSQL_HOST = 127.0.0.1
SYS_MYSQL_SOCKET = /var/run/mysqld/mysqld.sock
SYS_AUTHLIB_SOCKET = /var/run/courier/authdaemon/socket
SYS_G_ABOOK_FILE_CHARSET = gb2312
SYS_MAILDIR_BASE = /home/vmail

root:/var/www/extsuite/extmail# gedit ../extman/webman.cf
SYS_CAPTCHA_ON = 0 //用于关闭后台登录时的验证码
SYS_MAILDIR_BASE = /home/vmail
SYS_DEFAULT_UID = 1000
SYS_DEFAULT_GID = 1000
SYS_MYSQL_USER = webman
SYS_MYSQL_PASS = webman
SYS_MYSQL_DB = extmail
SYS_MYSQL_HOST = 127.0.0.1
SYS_MYSQL_SOCKET = /var/run/mysqld/mysqld.sock
SYS_LANG = zh_CN

root:/var/www/extsuite/extmail# gedit dispatch-init
SU_UID=vmail
SU_GID=vmail


root:/var/www/extsuite/extmail# gedit dispatch_lig.sh
BASE=/var/www/extsuite/extmail
$BASE/tools/suid-with -u vmail -g vmail /usr/bin/perl $BASE/dispatch.fcgi

root:/var/www/extsuite/extmail# cd ../extman/
root:/var/www/extsuite/extman# gedit tools/setid.pl
set_gid('vmail');
set_uid('vmail');
root:/var/www/extsuite/extman# gedit tools/adminctl.pl
--setgid=vmail
--setuid=vmail
同样修改下边的三个文件
root:/var/www/extsuite/extman# gedit tools/userctl.pl root:/var/www/extsuite/extman# gedit tools/aliasctl.pl root:/var/www/extsuite/extman# gedit tools/domainctl.pl

将contrib/passwd2ext.pl 复制到addon目录下
root:/var/www/extsuite/extman# gedit addon/passwd2ext.pl
my $sock = '/var/run/mysqld/mysqld.sock';
my $uid = '1000';
my $gid = '1000';
root:/var/www/extsuite/extman# gedit libs/Ext/Mgr/LDAP.pm
uidNumber => $opt{uidnumber} || '1000', //349行
gidNumber => $opt{gidnumber} || '1000', //350行

uidNumber => $opt{uidnumber} || '1000', //541行
gidNumber => $opt{gidnumber} || '1000', //542行
root:/var/www/extsuite/extman# gedit docs/init.ldif
uidNumber: 1000
gidNumber: 1000

# gedit /var/www/extsuite/extman/docs/init.sql
修改18行中的uid和gid
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,'my question', 'my answer');
# gedit /var/www/extsuite/extman/docs/extmail.sql
修改uid和gid
CREATE TABLE mailbox (


129行 uidnumber int(6) NOT NULL default '1000',
130行 gidnumber int(6) NOT NULL default '1000',
︰)
到此,vmail用户组修改完毕。

数据库初始化
执行以下命令导入mysql数据库结构及初始化数据,注意必须逐行输入以下命令.
mysql -u root -p < /var/www/extsuite/extman/docs/extmail.sql
mysql -u root -p < /var/www/extsuite/extman/docs/init.sql


链接基本库到Extmail
建立临时文件夹:

mkdir /tmp/extman
chown -R vmail:vmail /tmp/extman
gedit /etc/rc.local

编辑rc.local,加入下面内容以实现开机自动建立编辑rc.local,加入下面内容以实现开机自动建立

if [ ! -d /tmp/extman ]; then
mkdir /tmp/extman
chown -R vmail:vmail /tmp/extman
fi


注:linux系统有个tmpwatch工具,该工具会定期扫描/tmp/下的文件,如果这些文件很久都没被使用,将被删除,因此如果后台长期不使用, /tmp/extman目录有可能被tmpwatch删除,所以要么定期登陆后台,要么修改 webman.cf将临时目录修改到另一个地方。此处暂以/tmp/extman默认值为例。

建立上边导入mysql的postmaster@extmail.org帐户的Maildir,请输入如下命令:

cd /var/www/extsuite/extman/tools
./maildirmake.pl /home/vmail/extmail.org/postmaster/Maildir
chown -R vmail:vmail /home/vmail/extmail.org/


Postfix配置
修改/etc/postfix/mysql_virtual_*.cf,将其中的localhost均改为127.0.0.1
cd /etc/postfix/
cp main.cf main.cf_backup
gedit main.cf



# TLS parameters
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache


# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

mydomain = extmail.org
myhostname = mail.$mydomain
myorigin = $mydomain
mydestination = mail.$mydomain, localhost.$mydomain, localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
relayhost =
mynetworks = 127.0.0.1
message_size_limit = 102400000
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
html_directory = /usr/share/doc/postfix/html

######### virtual config############
virtual_alias_domains =
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
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_mailbox_base = /home/vmail
virtual_uid_maps = static:1000
virtual_gid_maps = static:1000
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_overquota_bounce = yes
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the your Maildir has overdrawn your diskspace quota, please free up some of spaces of your mailbox try again.
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps

把上面的都复制到你的main.cf文件中
# /etc/init.d/postfix restart

好了现在我们来做SMTP身份认证了
cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509
它们询问你问题
Country Name (2 letter code) [AU]: //国家
State or Province Name (full name) [Some-State]: //省
Locality Name (eg, city) []: //城市
Organization Name (eg, company) [Internet Widgits Pty Ltd]: //组织名称
Organizational Unit Name (eg, section) []: 组织单位名称
Common Name (eg, YOUR name) []: 通用名称
Email Address []: 邮件地址
更改smtpd.key权限
chmod 755 /etc/postfix/smtpd.key
Apache2配置

首先我们来备份一下
cp /etc/apache2/sites-enabled/000-default /etc/apache2/sites-enabled/000-default_backup
gedit /etc/apache2/sites-enabled/000-default

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/extsuite/extmail/html/

Alias /extmail/cgi/ /var/www/extsuite/extmail/dispatch.fcgi/
Alias /extmail /var/www/extsuite/extmail/html/


ScriptAlias /extman/cgi/ /var/www/extsuite/extman/cgi/
Alias /extman/ /var/www/extsuite/extman/html/

Alias /phpmyadmin /var/www/extsuite/phpmyadmin/

</VirtualHost>


如果你是做的虚拟站点,可以到wiki里去看看,里面的代码和我的上面一样就行,只要把"servername"改成你的站点名就行。

gedit /etc/apache2/apache2.conf

User vmail
Group vmail
添加apache2的启动用户 user vmail group vmail

chmod 777 /var/lib/apache2/fastcgi
chmod 777 /var/lib/apache2/fastcgi/dynamic
/etc/init.d/apache2 restart



编辑/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


/etc/init.d/apache2 restart

访问页面
http://localhost/extman/cgi/index.cgi
后台用户名:root@extmail.org 密码:extmail*123*

发出一个问题,无法访问"phpmyadmin是一生空片“,我是这样解决的。
删除/etc/apache2/conf.d/phpmyadmin 这个重定向的文件。
chown -R vmail:vmail /etc/phpmyadmin
chown -R vmail:vmail /usr/share/phpmyadmin
chmod 755 /etc/phpmyadmin
chmod 755 /usr/share/phpmyadmin
ln -s /usr/share/phpmyadmin/ /var/www/extsuite/phpmyadmin
发现能打开,输入账号密码进不了,重启apache2,不行重启系统

SMTP认证
1.更改saslauthd
gedit /etc/default/saslauthd
更改如下几项
START=yes 设置开机自动启动
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

2. 创建文件/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,要想调用到saslauthd 必须更改socket文件
mkdir -p /var/spool/postfix/var/run/saslauthd
gedit /etc/postfix/sasl/smtpd.conf

创建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 文件

gedit /etc/postfix/main.cf

###########SMTP AUTH config###############
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous

###########smtpd related config############
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_sender_login_mismatch, reject_unknown_sender_domain, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname, check_policy_service inet:127.0.0.1:10030

加入以上的内容

添加用户
adduser postfix sasl

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 配置成功
然后继续操作
auth login
334 VXNlcm5hbWU6
cG9zdG1hc3RlckBleHRtYWlsLm9yZw==
334 UGFzc3dvcmQ6
ZXh0bWFpbA==
235 2.0.0 Authentication successful
quit
221 2.0.0 Bye

如果出现Authentication successful 表示没有问题了

POP验证
gedit /etc/courier/authdaemonrc

更改如下一项
authmodulelist="authmysql"

cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null > /etc/courier/authmysqlrc
gedit /etc/courier/authmysqlrc

内容如下:

MYSQL_SERVER 127.0.0.1
MYSQL_USERNAME extmail
MYSQL_PASSWORD extmail
MYSQL_SOCKET /var/run/mysqld/mysqld.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE extmail
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD uidnumber
MYSQL_GID_FIELD gidnumber
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD homedir
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
MYSQL_QUOTA_FIELD quota
MYSQL_SELECT_CLAUSE SELECT username,password,"",uidnumber,gidnumber,\
CONCAT('/home/vmail/',homedir), \
CONCAT('/home/vmail/',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)'

配置Courier-POP3
编辑/etc/courier/pop3d修改下面参数
MAILDIRPATH=/home/vmail/

配置Courier-IMAP
编辑/etc/courier/imapd修改下面参数
MAILDIRPATH=/home/vmail/

重新启动
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-pop-ssl restart

测试Courier-Authlib是否能成功连接mysql
authtest -s login postmaster@extmail.org extmail
如果成功应该有如下显示
Authentication succeeded.
Authenticated: postmaster@extmail.org (uid 1000, gid 1000)
Home Directory: /home/vmail/extmail.org/postmaster
Maildir: /home/vmail/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:vmail /var/run/courier/authdaemon 可能避免错误

测试pop3
telnet localhost 110
Trying 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:1000
virtual_gid_maps = static:1000
virtual_transport = virtual

下面介绍另一种MDA maildrop

安装Maildrop
apt-get install maildrop
gedit /etc/maildropmysql.config

//创建一个文件

hostname 127.0.0.1
port 3306
database extmail
dbuser extmail
dbpw extmail
dbtable mailbox
default_uidnumber 1000
default_gidnumber 1000
uidnumber_field uidnumber
gidnumber_field gidnumber
uid_field username
homedirectory_field concat('/home/vmail/',homedir,'/')
maildir_field concat('/home/vmail/',maildir)
quota_field quota
mailstatus_field active

修改/etc/maildroprc
logfile "/var/log/maildrop.log"


手动创建日志
gedit /var/log/maildrop.log
chown vmail:vmail /var/log/maildrop.log
chmod 766 /var/log/maildrop.log

创建 /etc/logrotate.d/maildrop

内容为下面:

/var/log/maildrop.log {
daily
notifempty
missingok
rotate 5
compress
create 766 vmail vmail
sharedscripts
}


编辑/etc/postfix/master.cf,注释掉原来maildrop的配置内容并改为:
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop}

由于maildrop不支持一次接收多个收件人,因此必须在/etc/postfix/main.cf增加如下参数:

###### Maildrop config ########
maildrop_destination_recipient_limit = 1
virtual_transport = maildrop:

创建 /etc/quotawarnmsg,为邮箱空间超过配额时的警告邮件内容
X-Comment: Rename/Copy this file to quotawarnmsg, and make appropriate changes
X-Comment: See deliverquota man page for more information
From: Mail Delivery System <Mailer-Daemon@example.com>
Reply-To: support@example.com
To: Valued Customer:;
Subject: Mail quota warning
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 7bit

Your mailbox on the server is now more than 90% full. So that you can continue
to receive mail you need to remove some messages from your mailbox.

图形日志extmail

apt-get install mailgraph
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:

/usr/local/mailgraph_ext/mailgraph-init start

可以通过以下命令将启动命令加到rc.local中,实现自启动:

echo "/usr/local/mailgraph_ext/mailgraph-init start" >> /etc/rc.local


可是又出现了问题,我不怕问题。

POSTFIX无法发信,到日志里面一看 /var/log/mail.log

Jun 1 14:19:58 mail postfix/qmgr[12930]: C969234426: from=<zhu@163.com>, size=348, nrcpt=1 (queue active)
Jun 1 14:19:58 mail postfix/pipe[12939]: C969234426: to=<zhu@epfhk.com>, relay=maildrop, delay=21, delays=21/0.04/0/0.04, dsn=5.1.1, status=bounced (user unknown. Command output: ERR: authdaemon: s_connect() failed: Permission denied Invalid user specified. ) //这里是最重要的,说我没有权限。
Jun 1 14:19:58 mail postfix/cleanup[12938]: 192FF34447: message-id=<20090601061958.192FF34447@mail.extmail.org>
Jun 1 14:19:58 mail postfix/qmgr[12930]: 192FF34447: from=<>, size=2194, nrcpt=1 (queue active)
Jun 1 14:19:58 mail postfix/bounce[12941]: C969234426: sender non-delivery notification: 192FF34447
Jun 1 14:19:58 mail postfix/qmgr[12930]: C969234426: removed
Jun 1 14:19:59 mail postfix/smtpd[12934]: disconnect from mail.extmail.org[127.0.0.1]

上面的错误说我没有"authdaemon"的权限,我是这样做的

chmod 755 /var/run/courier/authdaemon

这下可以了,但是重启之后发现,authdaemon的权限又改会来了,日~~~~

我又在/etc/rc.local下把这个加了上去

chmod 777 /var/run/courier/authdaemon

让它开机后自动执行,完工

发邮件附件大小的设置:

找到/var/www/extsuite/extmail/webmail.cf

修改这个参数的值
SYS_MESSAGE_SIZE_LIMIT = 自己填

到postfix下的main.cf 添加
message_size_limit = 自己填




到此,本系统基本上是安装完毕了。


下面我们来学习,反垃圾邮件,和反病毒。

你可以在postfix 下的main.cf配置文件中过滤垃圾邮件。

具体要怎样做,请参考中国反垃圾邮件联盟中的配置

http://anti-spam.org.cn/

接下来是我的配置

配置 Amavisd-new, SpamAssassin 和 ClamAV

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip unrar bzip2 libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop pax rar lha arc lzop

修改/etc/amavis/conf.d/15-content_filter_mode

里面的内容为这样

use strict;

# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.

#
# Default antivirus checking mode
# Uncomment the two lines below to enable it back
#

@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);


#
# Default SPAM checking mode
# Uncomment the two lines below to enable it back
#

@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

1; # insure a defined return


修改
/etc/amavis/conf.d/20-debian_defaults

主要注意以下内容:

# @bypass_virus_checks_acl = qw( . ); # uncomment to DISABLE anti-virus code
# @bypass_spam_checks_acl = qw( . ); # uncomment to DISABLE anti-spam code

$final_virus_destiny = D_DISCARD; # (defaults to D_BOUNCE)
$final_banned_destiny = D_BOUNCE; # (defaults to D_BOUNCE)
$final_spam_destiny = D_PASS; # (defaults to D_REJECT)
$final_bad_header_destiny = D_PASS; # (defaults to D_PASS), D_BOUNCE suggested

这是对邮件的处理方式。

修改/etc/amavis/conf.d/50-user

里面的内容因该为这样

use strict;

#
# Place your configuration directives here. They will override those in
# earlier files.
#
# See /usr/share/doc/amavisd-new/ for documentation and examples of
# the directives you can use in this file
#

$pax='pax';

#------------ Do not modify anything below this line -------------
1; # ensure a defined return


然后,添加 clamav 用户到 amavis 用户组,并重启这两个服务

adduser clamav amavis
/etc/init.d/amavis restart
/etc/init.d/clamav-daemon restart
/etc/init.d/clamav-freshclam restart

然后,修改 /etc/postfix/main.cf,增加:

#### amavis config #####
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings

修改 /etc/postfix/master.cf,增加:

amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_bind_address=127.0.0.1

注意,这些 “-o”前面都有空格,你们记住是空两格就行了
重启 Postfix:

1. /etc/init.d/postfix restart
2. postfix check

root@mail:~# netstat -tap
激活Internet连接 (服务器和已建立连接的)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 mail.extmail.org:10024 *:* LISTEN 20822/amavisd (mast
tcp 0 0 mail.extmail.org:10025 *:* LISTEN 22856/master
tcp 0 0 mail.extmail.org:mysql *:* LISTEN 2277/mysqld
tcp 0 0 *:www *:* LISTEN 15824/apache2
tcp 0 0 *:ssh *:* LISTEN 2176/sshd
tcp 0 0 mail.extmail.org:ipp *:* LISTEN 2938/cupsd
tcp 0 0 mail.extmail.org:8888 *:* LISTEN 6947/dispatch.fcgi
tcp 0 0 *:smtp *:* LISTEN 22856/master
tcp6 0 0 [::]:imaps [::]:* LISTEN 10281/couriertcpd
tcp6 0 0 [::]:pop3s [::]:* LISTEN 10357/couriertcpd
tcp6 0 0 [::]:netbios-ssn [::]:* LISTEN 2611/smbd
tcp6 0 0 [::]:pop3 [::]:* LISTEN 10316/couriertcpd
tcp6 0 0 [::]:imap2 [::]:* LISTEN 10240/couriertcpd
tcp6 0 0 [::]:ssh [::]:* LISTEN 2176/sshd
tcp6 0 0 localhost:ipp [::]:* LISTEN 2938/cupsd
tcp6 0 0 [::]:microsoft-ds [::]:* LISTEN 2611/smbd
root@mail:~#

出现上面 “10024”,“10025”,字样说明amavis安装成功接下来我们来做反垃圾。


安装 Razor,Pyzor 和 DCC 并配置 SpamAssassin

Razor,Pyzor 和 DCC 是网络协作式垃圾邮件过滤器,它们可以由 SpamAssassin 来调用。先安装它们

apt-get install razor pyzor

因为DCC不在我们软件库中我们要执行下面的操作

cd /tmp
wget http://launchpadlibrarian.net/11564361/ ... 5_i386.deb
wget http://launchpadlibrarian.net/11564359/ ... 5_i386.deb
dpkg -i dcc-common_1.3.42-5_i386.deb
dpkg -i dcc-server_1.3.42-5_i386.deb

然后修改 SpamAssassin 配置文件 /etc/spamassassin/local.cf,以调用它们:

gedit /etc/spamassassin/local.cf

把下列的代码写在最后面

#dcc
use_dcc 1
dcc_path /usr/bin/dccproc

#pyzor
use_pyzor 1
pyzor_path /usr/bin/pyzor

#razor
use_razor2 1
razor_config /etc/razor/razor-agent.conf

#bayes
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1

#whitelist
whitelist_from *@*.edu.cn *@ujn.cn *@ujn.org.cn

# ---------------------------------------------------------------------------
# URL: http://www.anti-spam.org.cn/
#### 最佳推荐之使用CBL- #####
header RCVD_IN_CBLLESS eval:check_rbl('cblless', 'cblless.anti-spam.org.cn.', '127.0.8.5')
describe RCVD_IN_CBLLESS Received via a relay in cblless.anti-spam.org.cn
tflags RCVD_IN_CBLLESS net
score RCVD_IN_CBLLESS 3.5

#### 最佳推荐之使用CML #####
header RCVD_IN_CML eval:check_rbl('cml', 'cml.anti-spam.org.cn.', '127.0.8.1')
describe RCVD_IN_CML Received via a white list relay in cml.anti-spam.org.cn
tflags RCVD_IN_CML net nice
score RCVD_IN_CML -20.0

上面白名单部分,你可以将你的本地虚拟域或者你认为安全的域列出来,这样可以避免域内邮件被过滤。下面的 rbl 来自 http://www.anti-spam.org.cn/。这样配置可以防止在 Postfix 直接配置的情况下,把来自这些地址的非垃圾邮件直接拒绝。

我们再来编辑/etc/spamassassin/v310.pre

我们把 #loadplugin Mail::SpamAssassin::Plugin::DCC
前的“#”给去掉

然后重置spamassassin 请执行

spamassassin --lint

然后重新启动 Amavisd-new:

/etc/init.d/amavis restart

注意这里不是启动 spamassassin,因为 spamassassin 以及配置为由 Amavisd-new 来调用了。

再更新我们的SpamAssassin

sa-update --no-gpg

为了让它以后能够自动更新,我们要做这样两步
执行下面的建一个脚本

crontab -e

把下面的代码复制

10 4 * * * /usr/bin/sa-update --no-gpg &> /dev/null

按ctrl+o 来保存,按ctrl+x来退出
这样每天早上 4 点 10 分,就会自动下载更新。
spamassassin 默认有很多规则,在/usr/share/spamassassin里面。

安装 Spam Locker 反垃圾邮件

在 ubuntu 上安装 Spam Locker 比较简单了,大部分 perl 包在上面已经安装了。

我们从www.extmail.org下载最新的 slockd-0.99.tar.gz 我们将它解压,并放到/usr/local下面

tar zxvf slockd-0.99.tar.gz
mv slockd /usr/local/slockd

然后编辑 /usr/local/slockd/config/main.cf,将

setsid 1
log_file /var/log/slockd.log

两行前面的注释去掉。

将 /usr/local/slockd/slockd-init 复制到 /etc/init.d 目录下,然后建立启动关闭服务的链接文件:

cp /usr/local/slockd/slockd-init /etc/init.d/slockd
update-rc.d slockd start 19 2 3 4 5 . stop 21 0 1 6 .

创建 /etc/logrotate.d/slockd

/var/log/slockd.log {
daily
notifempty
missingok
rotate 5
compress
create 644 root root
sharedscripts
}

然后,编辑 /usr/local/slockd/config/whitelist,加入你的白名单列表。之后启动 slockd 服务。

/etc/init.d/slockd start

编辑 /etc/postfix/main.cf,将
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_sender_domain, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname, check_recipient_maps

中的
check_recipient_maps

替换为

check_policy_service inet:127.0.0.1:10030

即可。然后重新启动 Postfix。

/etc/init.d/postfix reload


启动/测试 slockd

在/usr/local/slockd目录下,执行

./slockd

此时slockd将启动,并进入监听模式,接受来自10030端口的请求,要注意的是,如果刚才配置了log_file路径,则调试信息必须通过如下命令获得:

tail -f /var/log/slockd.log

打开另一个ssh/终端窗口,进入/usr/local/slockd/tools 目录,输入:

perl policy_sig -h localhost -p 10030 --helo FOOBAR \
--ip 192.168.0.1 --from test@foo.com --to test@bar.com

此时,程序应该返回如下错误信息:

action=504 <FOOBAR>: rejected, see http://bl.extmail.org/cgi/why?fqdn

这表示slockd初步的正常工作了。

ps 先看一下 spam lock 的进程还有没有

ps aux |grep slockd

会有如下显示

root 20821 1.9 5.1 48736 19708 ? S 13:19 0:08 gedit /usr/local/slockd/config/whitelist
root 21005 0.0 1.1 7592 4344 ? SNs 13:20 0:00 slockd (master)
root 21007 0.0 1.8 11636 7084 ? SN 13:20 0:00 slockd (idle)
root 21014 0.0 1.8 11612 7068 ? SN 13:20 0:00 slockd (idle)
root 21047 0.0 0.2 3560 820 pts/1 S+ 13:26 0:00 grep slockd

又出现问题发现spamassassin 重启不了

SpamAssassin Mail Filter Daemon: disabled, see /etc/default/spamassassin

如上错误,

我们定位到 /etc/default/spamassassin 打开它

# Change to one to enable spamd
ENABLED=0

改为1 重启


最后由 7568846 编辑于 2009-06-08 17:26,总共编辑了 9 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: (原创) ubuntu9.04下架构extmail服务器
帖子发表于 : 2009-06-02 14:18 

注册: 2008-10-09 10:04
帖子: 63
送出感谢: 0 次
接收感谢: 0 次
此版用来讨论日后反垃圾邮件

反垃圾,我們用的是slockd.各位可以到,www.extmail.org/forum上去了解

你们可以将我配置的spamassassin 改成官方的配置方法

原文出自官方


配置SpamAssassin
Amavisd-new 通过Mail::SpamAssassin 模块来调用SA的功能,因此这里配置SA和常规配置SA软件有些区别,主要集中在修改local.cf文件上。

编辑/etc/mail/spamassassin/local.cf文件

vi /etc/mail/spamassassin/local.cf
将其内容修改为:

report_safe 1
use_bayes 0
auto_learn 0
bayes_auto_expire 1
skip_rbl_checks 1
use_razor2 0
use_dcc 0
use_pyzor 0
dns_available no

增加Chinese_rules.cf支持
Chinese_rules.cf是教育科研网的反垃圾邮件小组对大量垃圾邮件和正常邮件进行分析后得出的一个关键字/分数规则集,用于处理中文(简体)垃圾邮件还是比较有效的。这里我们通过如下命令增加到系统:

wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf
由于该规则每周更新一次,为了达到最好效果,最好在crontab里增加自动更新的内容,输入:

/usr/bin/crontab -e
然后输入如下的内容:

0 0 1 * * wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf; /etc/init.d/amavisd restart
存盘退出即可。最后运行以下调试命令以确认amavisd没有错误:

/usr/sbin/amavisd debug
如果没有异常提示或报错退出则表示一切都正常,按ctrl+c终止,然后正常启动,若提示pid不存在等错误,不必理会,只要最后启动成功即可:

service amavisd start chkconfig amavisd on


最后由 7568846 编辑于 2009-06-05 10:13,总共编辑了 4 次

页首
 用户资料  
 
3 楼 
 文章标题 : Re: (原创) ubuntu9.04下架构extmail服务器
帖子发表于 : 2009-06-02 20:00 

注册: 2009-06-02 19:58
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
我是小鸟,学习下!顶


页首
 用户资料  
 
4 楼 
 文章标题 : Re: (原创) ubuntu9.04下架构extmail服务器
帖子发表于 : 2009-06-03 13:41 

注册: 2009-06-03 13:23
帖子: 2
送出感谢: 0 次
接收感谢: 0 次
有沒有exe可以直接執行安裝的呢


页首
 用户资料  
 
5 楼 
 文章标题 : Re: (原创) ubuntu9.04下架构extmail服务器
帖子发表于 : 2009-06-03 13:46 
头像

注册: 2009-02-25 18:18
帖子: 2229
送出感谢: 0 次
接收感谢: 0 次
企业自用?可以发送到gmail等公开的邮件地址么?
有些邮箱为了防止被垃圾邮件,不明的发信地址容易被退,这个怎么解决呢?


_________________
在中国搞IT的谁不知道Ctrl+C,Ctrl+V啊~


页首
 用户资料  
 
6 楼 
 文章标题 : Re: (原创) ubuntu9.04下架构extmail服务器
帖子发表于 : 2009-06-04 14:14 

注册: 2008-10-09 10:04
帖子: 63
送出感谢: 0 次
接收感谢: 0 次
出现问题 ,在使用中,用foxmail 和outlook做客户端,收邮件可以,但是不可发邮件出现

553:5.7.1 : Sender address rejected 错误

解决方法,请将main.cf 中的

smtpd_recipient_restrictions = permit_mynetworks, reject_sender_login_mismatch, permit_sasl_authenticated, reject_unknown_sender_domain, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname, check_recipient_maps

修改成

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_sender_login_mismatch, reject_unknown_sender_domain, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname, check_recipient_maps


页首
 用户资料  
 
7 楼 
 文章标题 : Re: (原创) ubuntu9.04下架构extmail服务器
帖子发表于 : 2009-06-04 14:18 

注册: 2008-10-09 10:04
帖子: 63
送出感谢: 0 次
接收感谢: 0 次
望各位把帖子顶起来啊


页首
 用户资料  
 
8 楼 
 文章标题 : Re: (原创) ubuntu9.04下架构extmail服务器
帖子发表于 : 2009-06-06 9:59 

注册: 2007-10-12 14:40
帖子: 2
送出感谢: 0 次
接收感谢: 0 次
好贴,一直想配置个Extmail邮件服务器,可是一直没有在Ubuntu下的。。。看到楼主的帖子,有机会尝试一把。。。多谢


页首
 用户资料  
 
9 楼 
 文章标题 : Re: (原创) ubuntu9.04下架构extmail服务器
帖子发表于 : 2009-06-06 10:10 

注册: 2009-06-06 10:04
帖子: 2
送出感谢: 0 次
接收感谢: 0 次
真是个好东东呀?可作为邮件网关来使用呢?


页首
 用户资料  
 
10 楼 
 文章标题 : Re: (原创) ubuntu9.04下架构extmail服务器
帖子发表于 : 2009-06-06 10:23 

注册: 2009-06-06 10:04
帖子: 2
送出感谢: 0 次
接收感谢: 0 次
真是个好东东呀?可作为邮件网关来使用呢?


页首
 用户资料  
 
11 楼 
 文章标题 : Re: (原创) ubuntu9.04下架构extmail服务器
帖子发表于 : 2009-06-06 11:27 

注册: 2008-10-09 10:04
帖子: 63
送出感谢: 0 次
接收感谢: 0 次
希望大家提多意见,我们一起改进,现在主要是做内容过滤垃圾邮件,那位高人可以写一下内容过滤


页首
 用户资料  
 
12 楼 
 文章标题 : Re: (原创) ubuntu9.04下架构extmail服务器
帖子发表于 : 2009-06-06 18:19 

注册: 2008-11-23 18:24
帖子: 42
送出感谢: 0 次
接收感谢: 0 次
呵呵,对我来说真的是太好用了!一直在找这方面的资料!


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 12 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译