4月 042010
 

首先安装好 apache2 ,php,phpmyadmin等基本服务。

1.sudo apt-get install apache2 libapache2-mod-php5 php5 php5-gd mysql-server php5-mysql phpmyadmin

哈哈,一气呵成。

以我安装mail.ipbfans.org的邮件服务为例,先安装软件:

sudo apt-get install postfix postfix-mysql courier-authdaemon courier-authlib-mysql courier-imap courier-imap-ssl courier-pop courier-pop-ssl sasl2-bin libsasl2-2 libsasl2-modules libsasl2-modules-sql

安装过程中需要回答以下问题:

Create directories for web-based administration ? 否
General type of mail configuration: Internet Site
System mail name: <你的主机名>
其中ubuntu会根据你输入的这个主机名来生成ssl证书。安装完毕以后可以用以下命令测试postfix的安装:

telnet localhost 25
如果可以看到下面的信息,就表示postfix已经在运行之中了:

220 xxxx ESMTP Postfix (Ubuntu)
其中xxxx是你设置的主机名。

先创建创建邮件保存的目录,并建立vmail用户和组,并设置相应权限:

sudo mkdir /server/vmail
sudo groupadd -g 5000 vmail
sudo useradd -g vmail -u 5000 vmail -d /server/vmail -s /bin/false -m
sudo chown -R vmail.vmail /server/vmail
由于要使用到extmail/extman中的几个配置文件,我这里先将extmail/extman解压缩开来。
extmail/extman可以在官方网站http://www.extmail.org下载到。

下面建立邮件服务web端的虚拟主机

sudo mkdir /server/www/mail.ipbfans.org
sudo mkdir /server/logs/www/mail.ipbfans.org
将下载的文件拷贝到/server/www/mail.ipbfans.org下
执行如下命令解包:

cd /server/www/mail.ipbfans.org
sudo tar zxvf extmail-1.0.3.tar.gz
sudo tar zxvf extman-0.2.3.tar.gz
sudo mv extmail-1.0.3 extmail
sudo mv extman-0.2.3 extman
将extman/docs下的几mysql配置文件拷贝到postfix的配置目录下,并设置其权限为属于postfix组,同组人可读,其他用户无权限:

sudo cp extman/docs/mysql_*.cf /etc/postfix
sudo chmod o= /etc/postfix/mysql_*.cf
sudo chgrp postfix /etc/postfix/mysql_*.cf
打开phpmyadmin页面,依次导入extman/docs下的extmail.sql与 init.sql,这两个sql文件主要用来建立extmail的数据库及其mysql用户,并增加一些初始数据。执行完毕以后,mysql中多了一个数 据库extmail,并增加了一个用户名/密码都是extmail的用户对这个数据库有完全权限。

下面开始配置postfix,进入postfix配置目录,打开postfix的主配置文件:

cd /etc/postfix
sudo pico main.cf
可以增加如下参数:

append_at_myorigin = no
禁止服务器自动补全发件人地址,可在一定程度上防止垃圾邮件

smtpd_helo_required = yes
要求客户端必须先送出HELO/EHLO命令,才能正式开始SMTP对话

smtpd_noop_commands = vrfy, expn
让客户端发送vrfy,expn命令时,postfix不做任何事情,但返回250OK,可以有效避免外界使用这两个命令来探测邮件地址的有效性。

ignore_mx_lookup_error = yes
当 Postfix 向 DNS Server 查询 MX 记录却得不到响应时,它会隔一段时间之后再试一次。将 ignore_mx_lookup_error 设为 yes,将让 Postfix 在第一次失败后,立即直接查询 A 记录。这样对于要发送到的服务器没有 MX 记录时,会加快发送速度。

message_size_limit = 31457280
允许一个邮件最为30M,这个数字可以自己根据需要设定。

然后在main.cf最后附加一下内容,用来配置虚拟帐号:

# virtual config
virtual_alias_domains =
virtual_alias_maps =
   mysql:/etc/postfix/mysql_virtual_sender_maps.cf,
   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_base = /server/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
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 $smtpd_sender_login_maps $recipient_canonical_maps $relocated_maps transport_maps $mynetworks
上面选项中,virtual_alias_domains 被设置为空,是因为它会影响无限别名地址的正常工作,把所有虚拟域设置到 virtual_mailbox_domains 即可。
virtual_alias_maps 中不但设置虚拟别名对虚拟邮箱的映射,还设置了虚拟邮箱对其自身的映射,是为了防止无限别名地址造成同域中所有虚拟邮箱实效。

下面设置Courier Server

进入courier设置目录,并打开配置文件:

cd /etc/courier
sudo pico authdaemonrc
修改authmodulelist/authmodulelistorig参数为authmysql:

authmodulelist = “authmysql”
authmodulelistorig = “authmysql”
其他值可保留为默认。

打开authmysqlrc:

sudo pico authmysqlrc
修改或增加如下参数:

MYSQL_SERVER localhost
MYSQL_PORT 3306
MYSQL_USERNAME extmail
MYSQL_PASSWORD extmail
MYSQL_SOCKET /var/run/mysqld/mysqld.sock
MYSQL_DATABASE extmail
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD '5000'
MYSQL_GID_FIELD '5000'
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD concat('/server/vmail/',maildir)
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD concat('/server/vmail/',maildir)
这些参数就是设置postfix连接mysql的相关选项,其中的5000就是刚才vmail的用户id。

然后重启Couerier Server:

sudo /etc/init.d/courier-authdaemon restart
sudo /etc/init.d/courier-imap restart
sudo /etc/init.d/courier-imap-ssl restart
sudo /etc/init.d/courier-pop restart
sudo /etc/init.d/courier-pop-ssl restart
配置postfix sasl认证,用于smtp服务的mysql整合

先修改相应配置文件,在/etc/postfix/sasl下建立smtpd.conf文件:

sudo pico /etc/postfix/sasl/smtpd.conf
文件内容为:

pwcheck_method: authdaemond
mech_list: PLAIN LOGIN
allow_plaintext: true
authdaemond_path: /var/run/courier/authdaemon/socket
修改/etc/default/saslauthd,允许saslauthd启动

START=yes
修改/etc/postfix/main.cf,在文件末尾加上:

# smtpd auth config

smtpd_sasl_security_options = noanonymous
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes

local_recipient_maps = $alias_maps $virtual_mailbox_maps

smtpd_sender_login_maps =
   mysql:/etc/postfix/mysql_virtual_sender_maps.cf,
   mysql:/etc/postfix/mysql_virtual_alias_maps.cf

smtpd_reject_unlisted_sender = yes

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
上面的配置,使得从本地域到任何地址(包含本地地址)的邮件必须认证且验证用户和发信人必须一致,从任何非本地地址到本地地址的邮件无需认证,从任何非本地地址到任何非本地地址的邮件直接拒绝。

另外,会拒绝带有不完整主机名的 SMTP 客户端,拒绝带有不完整发送者的 SMTP 客户端,拒绝带有不完整接收者的 SMTP 客户端,拒绝未知发送域和未知接收域的 SMTP 客户端,拒绝收件地址包含任何发信方指定递送路径的 SMTP 客户端,拒绝不遵守流水线规则的 SMTP 客户端,拒绝 HELO 命令时提供无效主机名的客户端。

配置 Postfix SASL 验证最简单的方式莫过于采用 authdaemond 验证,这样可以和 Courier Server 共用一种验证方式。不过还是因为 Postfix 是以 chroot 方式运行的,需要对 authdaemond 的 socket 路径进行一些修改。
我写了一个脚本自动更改authdaemon和saslauthd的运行路径,可以将其加入rc.local让系统每次启动的时候自动运行。

courier_old_dir=/var/run/courier
courier_new_dir=/var/spool/postfix/var/run/courier

if [ ! -d ${courier_new_dir} ]; then
   mkdir -p ${courier_new_dir}
   chown daemon:daemon ${courier_new_dir}
fi

mv ${courier_old_dir} ${courier_new_dir}
rm -rf ${courier_old_dir}
ln -s ${courier_new_dir} ${courier_old_dir}

sasl_old_dir=/var/run/saslauthd
sasl_new_dir=/var/spool/postfix/var/run/saslauthd

if [ ! -d ${sasl_new_dir} ]; then
   mkdir -p ${sasl_new_dir}
   chgrp sasl ${sasl_new_dir}
fi

mv ${sasl_old_dir} ${sasl_new_dir}
rm -rf ${sasl_old_dir}
ln -s ${sasl_new_dir} ${sasl_old_dir}
再次重启相关服务:

sudo /etc/init.d/postfix restart
sudo /etc/init.d/courier-authdaemon restart
sudo /etc/init.d/courier-imap restart
sudo /etc/init.d/courier-imap-ssl restart
sudo /etc/init.d/courier-pop restart
sudo /etc/init.d/courier-pop-ssl restart
配置extmail/extman
进入extmail的目录:

cd /server/www/mail.ipbfans.org/extmail
sudo cp webmail.cf.default webmail.cf
打开配置文件:

sudo pico webmail.cf
修改如下参数:

SYS_CONFIG = /server/www/mail.ipbfans.org/extmail/
SYS_LANGDIR = /server/www/mail.ipbfans.org/extmail/lang
SYS_TEMPLATEDIR = /server/www/mail.ipbfans.org/extmail/html
SYS_USER_LANG = zh_CN
SYS_MAILDIR_BASE = /server/vmail
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
SYS_MYSQL_HOST = 127.0.0.1
SYS_MYSQL_SOCKET = /var/run/mysqld/mysqld.sock
SYS_AUTHLIB_SOCKET = /var/spool/postfix/var/run/courier/authdaemon/socket
进入extman目录,打开配置文件:

cd /server/www/mail.ipbfans.org/extman
sudo pico webman.cf
修改如下参数:

SYS_CONFIG = /server/www/mail.ipbfans.org/extman/
SYS_LANGDIR = /server/www/mail.ipbfans.org/extman/lang
SYS_TEMPLDIR = /server/www/mail.ipbfans.org/extman/html
SYS_MAILDIR_BASE = /server/vmail
SYS_DEFAULT_UID = 5000
SYS_DEFAULT_GID = 5000
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
由于在apache2下运行的extmail/extman需要读取/修改/server/vmail下 的文件,而且apache2 下又以默认用户运行了虚拟主机,所以mail.ipbfans.org这个网站就需要在apache2下以suexec的方式来运行,并指定运行用户为 vmail。

先激活apache2的suexec模块:

sudo a2enmod suexec
给apache2添加一个虚拟主机配置文件,内容如下:


ServerName mail.ipbfans.org
DocumentRoot “/server/www/mail.ipbfans.org/extmail/html”
ServerAdmin “[email protected]
CustomLog “|/usr/bin/cronolog /server/logs/www/mail.ipbfans.org/access_%Y%m%d.log” combined
ErrorLog “|/usr/bin/cronolog /ponovo/logs/www/mail.ipbfans.org/error_%Y%m%d.log”

SuexecUserGroup vmail vmail
Alias /extman/cgi /server/www/mail.ipbfans.org/extman/cgi/
Alias /extman /server/www/mail.ipbfans.org/extman/html/


SetHandler cgi-script
Options +ExecCGI

Alias /extmail/cgi /server/www/mail.ipbfans.org/extmail/cgi/
Alias /extmail /server/www/mail.ipbfans.org/extmail/html/

SetHandler cgi-script
Options +ExecCGI


由于ubuntu下的apache2的suexec将suexec的cgi程序限制在了/var/www目录下,所以我们就先删除/var/www,再将/var/www链接到mail.ipbfans.org的根目录

sudo rm -rf /var/www
sudo ln -s /server/www/mail.ipbfans.org /var/www
sudo chmod -R 755 /var/www/mail.ipbfans.org/
sudo chmod u+s /var/www/mail.ipbfans.org/extmail/dispatch.fcgi
激活这个虚拟主机,并让apache2重新读取配置文件:

sudo a2ensite mail.ipbfans.org
sudo /etc/init.d/apache2 force-reload
由于ubuntu的perl缺少一些模块,所以extmail/extman可能无法正确运行,所以在使用浏览器登录之前,还需要安装一些perl模块,最基本的就是:

sudo apt-get install libunix-syslog-perl libgd-gd2-perl
sudo apt-get install libfcgi-perl libapache2-mod-fastcgi perl-suid   (使用fastcgi的模块)
另外,extman使用了/tmp/extman作为临时目录,如果这个目录不存在的话,你需要自己建立,并赋予vmail这个用户完全权限,或者在webman.cf修改掉这个路径。

现在你就可以打开http://mail.ipbfans.org/extman/登录extman来管理邮件系统的虚拟域了。默认的后台超级用户名/密码分别是:

[email protected]
extmail*123*
如果在使用extman的过程中提示数据库权限问题,可以使用如下SQL语句重新设一下extmail用户的mysql权限:

grant all on extmail.* to extmail@'localhost' identified by 'extmail';
grant all on extmail.* to extmail@'127.0.0.1' identified by 'extmail';

 回复

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>