邮局配置之实操通过
时间:2006-06-19 来源:thinkwzb
文件
MySQL 4.1.11
网站:http://www.mysql.com
下载
APACHE 2.0.54
网站:http://www.apache.org
下载
PHP 4.3.11
网站:http://www.php.net
下载
Cyrus-SASL 2.1.20
网站:http://asg.web.cmu.edu/sasl
下载
Postfix 2.2.3
网站:http://www.postfix.org
下载
PostfixAdmin 2.1.0
网站:http://www.postfixadmin.com
下载
Courier-authlib 0.55
网站:http://www.courier-mta.org/authlib
下载
Courier-IMAP 4.0.2
网站:http://www.courier-mta.org/imap
下载
Courier-maildrop 1.8.0
网站:http://www.courier-mta.org/maildrop
下载
需要pcre.h支持
http://www.pcre.org/下载
Courier-sqwebmail 5.0.1
网站:http://www.courier-mta.org/sqwebmail
下载
SquirrelMail 1.4.4
网站:http://www.squirrelmail.org
下载
Openwebmail 2.51
网站:http://openwebmail.org
下载
clamav 0.84
网站:http://www.clamav.net
下载
Spamassassin 3.0.3
网站:http://spamassassin.apache.org
下载
amavisd-new 2.3.0
网站:http://www.ijs.si/software/amavisd
初始化权限配置:
groupadd -g 12345 postfix
useradd -u 12345 -g 12345 -c postfix –d /no/where –s /no/nologin
groupadd -g 12346 postdrop
groupadd vmail -g 1001
useradd vmail -u 1001 -g 1001 –s /no/where –s /no/nologin
1. 安装mysql 4.1.11
./configure --prefix=/usr/local/mysql
make
make install
cp support-files/my-medium.cnf /etc/my.cnf
设置自启动
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod 700 /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
安装完以后要初始化数据库,要是升级安装的请跳过
/usr/local/mysql/bin/mysql_install_db --user=mysql
chown -R mysql:mysql /usr/local/mysql
/usr/local/mysql/bin/mysqld_safe --user=mysql &
ln -s /usr/local/mysql/bin/mysql /sbin/mysql
ln -s /usr/local/mysql/bin/mysqladmin /sbin/mysqladmin
vi /etc/my.cnf
[safe_mysqld]
err-log=/var/log/mysqld/err.log
开启常规日志和更新日志 (在[mysqld]项下添加)
vi /etc/my.cnf
[mysqld]
log=/var/log/mysqld/log.log
log-update=/var/log/mysqld/update.log
创建日志文件并设置权限
mkdir /var/log/mysqld
touch /var/log/mysqld/err.log /var/log/mysqld/log.log /var/log/mysqld/update.log
chown -R mysql.mysql /var/log/mysqld
说明:
错误日志包含了服务器写入标准错误输出设备的所有消息,同时还包括了mysql服务的启动和关闭事件
常规日志用来记录有关mysql服务器运行的常规信息,包括用户的连接、查询及其他各种时间
更新日志用来记录修改数据库的查询信息,包括所有涉及数据库修改的SQl语句的查询记录
建议调试结束后关闭日志
2. 安装apache 2.0.54 (查看完整配置)
3. 安装php (查看完整配置)
php常用配置
max_execution_time = 30 ; // 改为600 (增加处理脚本的时间限制)
max_input_time = 600 ; //最大输出时间600秒
memory_limit = 8M ; //改为40M (这样才能发10M的附件)
register_global =On
post_max_size = 2M ; //php可接受的 post 方法大小 2M
file_uploads = On ; //允许上载文件
upload_max_filesize = 2M ; //最大上载文件2M
session.auto_start = 1 ; //session自动启动
4.安装cyrus-sasl 2.1.20
如果系统安装已经,先卸载它,或使用下面方法关闭它
mv /usr/lib/sasl /usr/lib/sasl.OFF
mv /usr/lib/sasl2 /usr/lib/sasl2.OFF
tar zxvf cyrus-sasl-2.1.20.tar.gz
cd cyrus-sasl-2.1.20
./configure \
--disable-anon -enable-plain --enable-login \
--enable-sql --with-mysql=/usr/local/mysql \
--with-mysql-includes=/usr/local/mysql/include/mysql \
--with-mysql-libs=/usr/local/mysql/lib/mysql
make
make install
echo "/usr/local/lib">>/etc/ld.so.conf
ldconfig
ln -s /usr/local/lib/sasl2 /usr/lib/sasl2
/* 以下为加密方式,可不用
cyrus-sasl的密码是不加密的,可以下载加密认证补丁
http://www.viperstrike.com/~lopaka/sysadmin/cyrus-sasl-mysql-encrypt/software-sources/patch-linux
patch lib/checkpw.c patch-linux
重新编译安装
LDFLAGS="-lcrypt" ./configure --disable-anon -enable-plain --enable-login --enable-sql --with-mysql=/usr/local/mysql --with-mysql-includes=/usr/local/mysql/include/mysql --with-mysql-libs=/usr/local/mysql/lib/mysql
make
make install
*/
5.安装postfix 2.2.3
如果你的系统上原来有sendmail,先将其停止并将其文件改名:
/etc/init.d/sendmail stop
chkconfig --level 0123456 sendmail off
mv /usr/bin/newaliases /usr/bin/newaliases.orig
mv /usr/bin/mailq /usr/bin/mailq.orig
mv /usr/sbin/sendmail /usr/sbin/sendmail.orig
开始安装
wget ftp://postfix.cn99.com/postfix/official/postfix-2.2.3.tar.gz
tar -zxvf postfix-2.2.3.tar.gz
cd postfix-2.2.3
(Building Postfix with SASL authentication and mysql support)
make -f Makefile.init makefiles \
'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH -I/usr/local/include/sasl' \
'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/local/lib -lsasl2'
make install
如果/etc/aliases文件不存在,请用如下命令创建: 默认是有生成这个文件
echo postfix: root >> /etc/aliases
/usr/bin/newaliases
注意:
本例中Mysql安装在/usr/lcoal/mysql,sasl2安装在/usr/lib/sasl2。如果安装路径不同,请自行修改编译时CCARGS和AUXLIBS选项。
在执行make install的时候可能会得到如下的提示(如果没有就不用管了):
/usr/libexec/ld-elf.so.1: Shared object "libmysqlclient.so.12" not found
这是因为mysql不是安装在默认目录中的,所以需要告诉postfix应该到哪里去找libmysqlclient.so.12,使用ldconfig就可以达到这个目的:
echo /usr/local/mysql/lib/mysql >> /etc/ld.so.conf
ldconfig
警告:
chmod 755 /usr/local/var/spool/authdaemon
有可能出现以下问题:
察看/var/log/maillog,postfix报错如下:
Apr 4 19:34:20 mail postfix/smtpd[5524]: warning: SASL authentication problem: unknown password verifier
Apr 4 19:34:20 mail postfix/smtpd[5524]: warning: unknown[61.51.142.87]: SASL LOGIN authentication failed
察看/var/log/maillog,postfix报错如下:
Jun 17 12:39:37 localhost postfix/smtpd[6160]: warning: 125.77.160.214: hostname pc214.broad.dynamic.xm.fj.cn.cndata.com verification failed: Name or service not known
Jun 17 12:39:37 localhost postfix/smtpd[6160]: connect from unknown[125.77.160.214]
Jun 17 12:39:37 localhost postfix/smtpd[6160]: warning: SASL authentication failure: cannot connect to Courier authdaemond: Permission denied
察看/var/log/maillog,postfix报错如下:
Jun 17 09:45:37 localhost postfix/smtpd[3303]: NOQUEUE: reject: EHLO from localhost.localdomain[127.0.0.1]: 501 <[email protected]>: Helo command rejected: Invalid name; proto=SMTP helo=<[email protected]>
Jun 17 09:45:46 localhost postfix/smtpd[3303]: lost connection after EHLO from localhost.localdomain[127.0.0.1]
察看/var/log/message,发现报错:
Apr 4 19:34:18 mail postfix/smtpd[5524]: SQL engine 'mysql' not supported
Apr 4 19:34:18 mail postfixsmtpd[5524]: auxpropfunc error –4
察看/var/log/message,发现报错:
Jun 17 13:23:57 localhost postfix/smtpd[6624]: sql_select option missing
Jun 17 13:23:57 localhost postfix/smtpd[6624]: auxpropfunc error no mechanism available
设置配置文件:
vi /etc/postfix/main.cf
#=====================BASE=========================
myhostname = mail.penjingyuan.com
mydomain = penjingyuan.com
myorigin = $mydomain
mydestination = $myhostname localhost localhost.$mydomain
mynetworks = 127.0.0.0/8
inet_interfaces = all
#=====================Vritual Mailbox settings=========================
virtual_mailbox_base = /mail
virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf
#virtual_alias_domains =
virtual_alias_maps = mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf
virtual_uid_maps = static:501
virtual_gid_maps = static:502
#virtual_transport = virtual
virtual_transport = maildrop
maildrop_destination_recipient_limit = 1
maildrop_destination_concurrency_limit = 1
#====================QUOTA========================
message_size_limit = 14336000
virtual_mailbox_limit = 20971520
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.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
#====================SASL========================
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination,permit
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_application_name = smtpd
smtpd_banner=$myhostname ESMTP "Version not Available"
readme_directory = no
sample_directory = /etc/postfix
sendmail_path = /usr/sbin/sendmail
html_directory = no
setgid_group = postdrop
command_directory = /usr/sbin
manpage_directory = /usr/local/man
daemon_directory = /usr/libexec/postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
queue_directory = /var/spool/postfix
mail_owner = postfix
vi /etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username
#additional_conditions = and active = '1'
vi /etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
#additional_conditions = and active = '1'
vi /etc/postfix/mysql/mysql_virtual_alias_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
vi /etc/postfix/mysql/mysql_virtual_domains_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain
#additional_conditions = and backupmx = '0' and active = '1'
配置 /usr/local/lib/sasl2/smtpd.conf
vi /usr/local/lib/sasl2/smtpd.conf
pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/usr/local/var/spool/authdaemon/socket
启动postfix
postfix start
测试smtp
telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 www.test.com ESMTP "Version not Available"
ehlo www.test.com
250-www.test.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME
6.安装postfixadmin 2.1.0
tar -zxvf postfixadmin-2.1.0.tgz
mv postfixadmin-2.1.0 /home/public/www/postfixadmin
chown -R vmail:vmail /var/www/postfixadmin
建立mysql表
cd /home/public/www/postfixadmin
mysql -u root [-p] < DATABASE_MYSQL.TXT
cp config.inc.php.sample config.inc.php
设置配置文件
vi config.inc.php
// Language config
// Language files are located in './languages'.
$CONF['default_language'] = 'cn';
// Database Config
// 'database_type' is for future reference.
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'postfixadmin';
$CONF['database_name'] = 'postfix';
//$CONF['encrypt'] = 'md5crypt';
$CONF['encrypt'] = 'cleartext';
// Mailboxes
// If you want to store the mailboxes per domain set this to 'YES'.
// Example: /usr/local/virtual/domain.tld/[email protected]
$CONF['domain_path'] = 'YES';
// If you don't want to have the domain in your mailbox set this to 'NO'.
// Example: /usr/local/virtual/domain.tld/username
$CONF['domain_in_mailbox'] = 'NO';
// Quota
// When you want to enforce quota for your mailbox users set this to 'YES'.
$CONF['quota'] = 'YES';
// You can either use '1024000' or '1048576'
$CONF['quota_multiplier'] = '1024000';
我们在这里使用明文口令方式,如果想使用密文,请把$CONF['encrypt']='cleartext';改成$CONF['encrypt']='md5crypt';
邮箱的存储格式使用domain.ltd/username的形式,所以设置:
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
然后打开浏览器,进入postfixadmin的欢迎界面,点击网页上的setup,看看检查是否通过,记得要删除setup.php文件。然后进入http://www.yourdomain.com/postfixadmin/admin/index.php,就可以新建域名、管理员以及邮箱了。
建立/mail并设置权限
chown -R vmail:vmail /mail
chmod -R ug+rwx,o-rwx /mail
7.安装Courier-authlib 0.55
tar -jxvf courier-authlib-0.55.20050407.tar.bz2
cd courier-authlib-0.55.20050407
./configure \
--with-redhat \
--with-authmysql=yes \
--with-mailuser=vmail --with-mailgroup=vmail \
--with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql/
make
make install
make install-configure
vi /usr/local/etc/authlib/authdaemonrc (确保只使用mysql认证模块)
authmodulelist="authmysql"
authmodulelistorig="authmysql"
vi /usr/local/etc/authlib/authmysqlrc
MYSQL_SERVER localhost
MYSQL_SOCKET /tmp/mysql.sock
MYSQL_DATABASE postfix
MYSQL_USERNAME postfix
MYSQL_PASSWORD postfix
MYSQL_USER_TABLE mailbox
MYSQL_LOGIN_FIELD username
MYSQL_CRYPT_PWFIELD password
#MYSQL_CLEAR_PWFIELD password
MYSQL_UID_FIELD '1001'
MYSQL_GID_FIELD '1001'
MYSQL_HOME_FIELD '/var/mailbox/'
MYSQL_MAILDIR_FIELD maildir
MYSQL_NAME_FIELD name
MYSQL_QUOTA_FIELD quota
MYSQL_WHERE_CLAUSE active='1'
DEFAULT_DOMAIN test.com
注意:确认在这个文件中不能用空格键,只能用tab键。确认只使用单引号,比如:'/var/mailbox/','UID','GID'(本文为'1001')localhost不能用单引号确认你的/etc/hosts文件中有localhost编译时如果支持Ipv6可能导致错误MYSQL_GID_FIELD 和MYSQL_UID_FIELD是maildrop的UID和GID,而不是MySQL的。如果想使用md5密码,把MYSQL_CLEAR_PWFIELD password改成MYSQL_CRYPT_PWFIELD password
启动服务
要是想让imap开机就启动服务:
cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib
chmod 755 /etc/rc.d/init.d/courier-authlib
chkconfig --level 0123456 courier-authlib on
手动启动服务:
authdaemond start
测试courier-authlib
检查进程:
pstree |grep authdaemond
|-authdaemond.mys---5*[authdaemond.mys]
8.安装Courier-imap 4.0.2
tar -jxvf courier-imap-4.0.2.20050403.tar.bz2
cd courier-imap-4.0.2.20050403
./configure \
--prefix=/usr/local/imap \
--with-redhat \
--disable-root-check \
--enable-unicode=utf-8,iso-8859-1,gb2312,gbk,gb18030 \
--with-trashquota \
--with-dirsync
make
make install-strip (先install-strip,如果失败,再make install)
make install-configure
vi /usr/local/imap/etc/pop3d
将POP3DSTART=NO改为POP3DSTART=YES
vi /usr/local/imap/etc/imapd
将IMAPDSTART=NO改为IMAPDSTART=YES
让imap自启动:
cp courier-imap.sysvinit /etc/rc.d/init.d/courier-imap
chmod 755 /etc/rc.d/init.d/courier-imap
chkconfig --level 0123456 courier-imap on
手动启动服务:
/usr/local/imap/libexec/pop3d.rc start
/usr/local/imap/libexec/imapd.rc start
测试courier-imap
检查进程:
pstree |grep courier
|-2*[courierlogger]
|-2*[couriertcpd]
检查端口,应该有如下端口打开:
netstat -an |grep LISTEN
tcp??0??0 0.0.0.0:110??0.0.0.0:*??LISTEN
tcp??0??0 0.0.0.0:143??0.0.0.0:*??LISTEN
检测POP3和IMAP服务:
telnet localhost 110
+OK Hello there
USER [email protected]
+OK Password required.
PASS test
+OK Logged in.
QUIT
+OK bye-bye
faq: 以下错误为目录不存在或权限不足,无法跳转相应目录
[root@add mailbox]# telnet 127.0.0.1 110
Trying 127.0.0.1...
Connected to add.8866.org (127.0.0.1).
Escape character is '^]'.
+OK Hello there.
user [email protected]
+OK Password required.
pass test
-ERR chdir add.8866.org/test/ failed
Connection closed by foreign host.
9.安装Courier-maildrop 1.8.0
注:有可能需要pcre.h的支持,先安装pcre
tar –zxvf pcre-6.3.tar.gz
./configure
make
make install
tar jxvf maildrop-1.8.0.tar.bz2
cd maildrop-1.8.0
./configure \
--prefix=/usr/local/maildrop \
--enable-sendmail=/usr/sbin/sendmail \
--enable-trusted-users='root vmail' \
--enable-syslog=1 \
--enable-maildirquota \
--enable-maildrop-uid=1001 \
--enable-maildrop-gid=1001 \
--with-trashquota \
--with-dirsync
make
make install
cp /usr/local/maildrop/bin/maildrop /usr/bin
chmod a+rx /usr/bin/maildrop
注:察看/var/log/maillog文件会出现如下错误
Jun 17 04:02:14 localhost pipe[13389]: fatal: pipe_command: execvp /usr/local/bin/maildrop: No such file or directory
解决:ln –s /usr/local/maildrop/bin/maildrop /usr/local/bin/maildrop
运行maildrop -v应该有如下提示信息:
maildrop 1.8.0 Copyright 1998-2004 Double Precision, Inc.
GDBM extensions enabled.
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.
新建/etc/maildroprc文件 (可有可无)
vi /etc/maildroprc
logfile "/var/mailbox/maildrop.log"
to "$HOME$DEFAULT"
chmod a+r /etc/maildroprc
配置Postfix (上面的配置文件有加入这些)
vi /etc/postfix/main.cf
virtual_transport = maildrop
maildrop_destination_recipient_limit = 1
vi /etc/postfix/master.cf (默认装完后有以下资料)
maildrop unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/local/maildrop/bin/maildrop -w 90 -d ${recipient}
在postfixadmin中建立一测试帐户[email protected]
测试maildrop
maildrop -V 9 -d [email protected]
maildrop: authlib: groupid=1001
maildrop: authlib: userid=1001
maildrop: authlib: [email protected], home=/var/mailbox/, mail=test.com/test/
maildrop: Changing to /var/mailbox/
ctrl+c退出
下一步,查看日志(/var/log/maillog)看看postfix是不是和maildrop一起工作:
cat /var/log/maillog | grep maildrop -A 2
Feb 28 11:50:41 malochia postfix/qmgr[7345]: 2875B7823E62: from=<[email protected]>;, size=3308, nrcpt=1 (queue active)
Feb 28 17:18:05 malochia postfix/pipe[11615]: 04DD57822697: to=<[email protected]>;, relay=maildrop, delay=0, status=sent (domain.tld)
如果没有,看看是不是由于配置不正确,而使邮件在队列中
Mailq