Chinaunix首页 | 论坛 | 博客
  • 博客访问: 98811
  • 博文数量: 26
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-14 13:33
文章分类

全部博文(26)

文章存档

2008年(8)

2007年(18)

我的朋友

分类: LINUX

2008-04-17 22:53:41

1 所需软件

1.1 Qmail

版本:1.03

安装方式:源码包

用途:提供邮件系统的基本功能

1.2 Ucspi-Tcp(UNIX客户-服务器程序端口)

版本:0.88

安装方式:源码包

用途:建立客户机-服务器tcp 后台程序(取代inetd程序)

1.3 Ezmlm

版本:0.53

安装方式:源码包

用途:提供邮件系统列表功能

1.4 Qmail-Ldap

版本:qmail-ldap-1.03-20060201.patch.gz

安装方式:补丁文件

用途:提供qmail支持ldap的功能

1.5 Ucspi-Tcp-0.88.errno.patch

版本:0.88

安装方式:补丁文件

用途:

2 软件安装

2.1 创建目录

# su

# umask 022

# mkdir –p /var/qmail

# mkdir –p /var/backup

2.2 解压缩及打补丁

把所用到的安装包放到/usr/local/src

# cd /usr/local/src

# tar –xvzf qmail-1.03.tar.gz

# cd qmail-1.03

# patch -p1 < ../qmail-ldap-1.03-20050201.patch 

2.3 添加Qmail用户

# add qmail user

userdel alias >/dev/null 2>&1

userdel qmaild >/dev/null 2>&1

userdel qmaill >/dev/null 2>&1

userdel qmailp >/dev/null 2>&1

userdel qmailq >/dev/null 2>&1

userdel qmailr >/dev/null 2>&1          

userdel qmails >/dev/null 2>&1          

groupdel nofiles >/dev/null 2>&1        

groupdel qmail >/dev/null 2>&1

groupadd -g 91 nofiles
groupadd -g 92 qmail
useradd -u 91 -g 91 -d /var/qmail/alias -s /sbin/nologin alias
useradd -u 92 -g 91 -d /var/qmail -s /sbin/nologin  qmaild
useradd -u 93 -g 91 -d /var/qmail -s /sbin/nologin  qmaill
useradd -u 94 -g 91 -d /var/qmail -s /sbin/nologin  qmailp
useradd -u 95 -g 92 -d /var/qmail -s /sbin/nologin  qmailq
useradd -u 96 -g 92 -d /var/qmail -s /sbin/nologin  qmailr
useradd -u 97 -g 92 -d /var/qmail -s /sbin/nologin  qmails

2.4 Qmail-1.03

# cd /usr/local/src/qmail-1.03

编辑Makefile文件,具体修改见下

修改"#LDAPFLAGS=-DQLDAP_CLUSTER""LDAPFLAGS=-DEXTERNAL_TODO -DCLEARTEXTPASSWD -DSMTPEXECCHECK"

修改"LDAPLIBS=-L/usr/local/lib -lldap -llber""LDAPLIBS=-L/usr/lib -lldap -llber"

修改"LDAPINCLUDES=-I/usr/local/include""LDAPINCLUDES=-I/usr/include"

修改"#MDIRMAKE=-DAUTOMAILDIRMAKE""MDIRMAKE=-DAUTOMAILDIRMAKE"
修改"#HDIRMAKE=-DAUTOHOMEDIRMAKE""HDIRMAKE=-DAUTOHOMEDIRMAKE"

修改"# SHADOWLIBS=-lcrypt"" SHADOWLIBS=-lcrypt "

修改"# BACKUPPATH=/backup/qmail-backup/qmail-ldap.`date "+%Y%m%d-%H%M"`.tar"" BACKUPPATH=/var/backup/qmail-backup/qmail-ldap.`date "+%Y%m%d-%H%M"`.tar"

保存退出执行

注意

如果建立的qmailgid,uid号小于100,则必须要修改qmail-ldap.h文件中的相应参数

#define UID_MIN 100(默认)

#define GID_MIN 100

改为90即可

 

编译安装

# make setup check  

2.5 安装ucspi-tcp-0.88

# tar –xvzf ucspi-tcp-0.88.tar.gz  

# cd ucspi-tcp

# patch -p1 < ../ ucspi-tcp-0.88.errno.patch

# make

# make setup check

2.6 创建Qmail_control目录文件脚本

# cd /var/qmail/control

# touch build_control.sh

# chmod 700 build_control.sh

# vi build_control.sh

写入以下内容

echo "uni.avtech.com.cn" > me

echo "uni.avtech.com.cn" > rcpthosts

echo "uni.avtech.com.cn" > locals

echo "dc=cn" > ldapbasedn

echo "127.0.0.1:389" > ldapserver

echo "cn=root,dc=cn" > ldaplogin

echo "secret" > ldappassword

echo 0 > ldaplocaldelivery

echo 55 > ldapuid         #系统中LDAP用户的ID

echo 55 > ldapgid         #系统中LDAP用户组的ID

echo "/var/qmail/maildir" > ldapmessagestore

保存退出,并运行build_control.sh

# ./build_control.sh

2.7 创建relay规则文件

方法1

#cd /var/qmail/control

#echo '127.:allow,RELAYCLIENT=""' >>/var/qmail/control/tcp.smtp

#echo ':allow,SMTPAUTH=""' >>/var/qmail/control/tcp.smtp

#tcprules /var/qmail/control/tcp.smtp.cdb /var/qmail/control/tcp.smtp.tmp < /var/qmail/control/tcp.smtp

方法2

编辑qmail-smtpd.rules文件

127.0.0.1:allow,RELAYCILENT=""
:allow,SMTPAUTH="AUTHREQUIRED",RCPTCHECK="",BADRCPTDELAY="5",NOBOUNCE="",BLOCKRELAYPROBE=""
200.88.125.2:deny (
拒绝的ip)
210.211.164.46:deny
62.149.114.19:deny
61.217.245.46:deny
203.188.197.10:deny

保存退出

make
编译一下会自动生成相应的cdb文件

2.8 创建qmail启动文件

# cd /var/qmail/boot

# vi /var/qmail/boot/rc

写入以下内容

#!/bin/sh

#Using stdout for logging

# Using control/defaultdelivery from qmail-local to deliver messages by default

exec env - PATH="/var/qmail/bin:$PATH" \

qmail-start ./Maildir/ splogger qmail &

 

# chmod 700 /var/qmail/rc

2.9 创建smtppop3服务的启动脚本(#!/bin/sh之外其他内容都写成一行)

2.9.1 qmail-smtp

#vi /var/qmail/boot/smtpd

#!/bin/sh
/usr/local/bin/tcpserver -H -R -l 0 -t 1 -v -p -x /var/qmail/control/qmail-smtpd.cdb -u qmaild -g nofiles 0 smtp /var/qmail/bin/qmail-smtpd avtech.com.cn /var/qmail/bin/auth_smtp /bin/true 2>&1 | /var/qmail/bin/splogger smtpd 3 &

# chmod 700 smtpd

2.9.2 qmail-pop3

# vi /var/qmail/boot/pop3

#!/bin/sh

exec /usr/local/bin/tcpserver -l 0 -H -R 0 pop3 /var/qmail/bin/qmail-popup avtech.com.cn /var/qmail/bin/auth_pop /var/qmail/bin/qmail-pop3d Maildir &

# chmod 700 pop3

2.10 将现存的 /usr/lib/sendmail 替代为 qmail 版本

service sendmail stop >/dev/null 2>&1

chkconfig --del sendmail

rpm -e fetchmail >/dev/null 2>&1

rpm -e sendmail >/dev/null 2>&1

chmod 0 /usr/lib/sendmail  >/dev/null 2>&1

chmod 0 /usr/sbin/sendmail >/dev/null 2>&1

mv /usr/lib/sendmail /usr/lib/sendmail.bak >/dev/null 2>&1

mv /usr/sbin/sendmail /usr/sbin/sendmail.bak >/dev/null 2>&1

ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

chmod 755 /var/qmail/bin/sendmail

2.11建立系统别名

#cd /var/qmail/alias

#touch .qmail-postmaster .qmail-mailer-daemon .qmail-root

#chmod 644 /var/qmail/alias/.qmail*

2.12 将启动脚本写入到rc.local文件里

# vi /etc/rc.local

写入(这里面提前写入couri-imapsqwebmail的启动命令)

/var/qmail/boot/rc

/var/qmail/boot/smtpd

/var/qmail/boot/pop3

/usr/local/sbin/authdaemond start

/usr/local/sqwebmail/libexec/sqwebmaild.rc start


启动邮件服务后,使用下列命令测试是否能正常使用:
#/var/qmail/bin/qmail-ldaplookup -u  uid
#/var/qmail/bin/qmail-ladplookup -m  mail
能找到节点(entry),说明配置正常。

2.13 邮件列表

2.13.1 安装ezmlm

#tar xzf ezmlm-0.53.tar.gz

#tar xzf ezmlm-idx-5.0.2.tar.gz

#mv –reply=no ezmlm-idx-5.0.2/* ezmlm-0.53

#cd ezmlm-0.53

#patch < idx.patch

#make

#make man

#make setup

2.13.2 创建邮件列表

cd /usr/local/bin/ezmlm

./ezmlm-make ~alias/student ~alias/.qmail-student student $School_name.avtech.com.cn

chown -R alias ~alias/student

./ezmlm-make ~alias/avtech ~alias/.qmail-avtech avtech $School_name.avtech.com.cn

chown -R alias ~alias/avtech

214 安装pcre

#tar -xzf  pcre-6.3.tar.gz

#cd pcre-6.3

#./configure

#make

#make install

215 安装coruier-authlib

2.15.1 安装

#tar -xjf courier-authlib-0.57.tar.bz2

#cd courier-authlib-0.57

#./configure --with-redhat

#make

#make install

#make install-configure

2.15.2 更改配置文件

# vi /usr/local/etc/authlib/authdaemonrc

authmodulelist="authldap"

authmodulelistorig="authldap"

 

# vi /usr/local/etc/authlib/authldaprc

 

LDAP_SERVER             127.0.0.1

LDAP_PORT               389

LDAP_BASEDN             dc=cn

LDAP_BINDDN             cn=root,dc=cn

LDAP_BINDPW             secret

LDAP_FILTER           (objectClass=qmailUser)

LDAP_DOMAIN             avtech.com.cn

LDAP_GLOB_UID           qmaild   #系统中qmail用户的ID,LDAP用户的qmailUID应该与此一致

LDAP_GLOB_GID           qmail  #系统中qmail用户组的ID,LDAP用户的qmailGID应该与此一致

LDAP_HOMEDIR            mailMessageStore

LDAP_MAILROOT           /var/qmail/maildir

#LDAP_MAILDIR           mailbox

LDAP_DEFAULTDELIVERY    defaultDelivery

LDAP_CLEARPW            clearPassword

LDAP_CRYPTPW            userPassword

LDAP_UID                92(qmaildid)

LDAP_GID                92(qmailid)

配置完成,使用authtest命令测试配置是否正确。

 

2.16 安装sqwebmail

#tar -xjf sqwebmail-5.0.6.tar.bz2

#cd sqwebmail-5.0.6

#./configure \
--prefix=/usr/local/sqwebmail \
--enable-cgibindir=/var/www/cgi-bin \
--enable-imagedir=/var/www/htdocs/webmail \
--enable-imageurl=/webmail \
--with-authldap \
--without-authpwd \
--without-authshadow \
--without-authpam \
--without-authuserdb \
--without-authvchkpw \
--without-authdaemon \
--with-cachedir=/usr/local/sqwebmail/cache

#make configure-check

#make

#make check

#make install-strip

#make install-configure

 

3 环境配置 

31 配置用户邮箱

创建用户邮箱目录

# mkdir /var/qmail/maildir

创建添加用户邮箱的脚本

# vi /var/qmail/maildir/build_mail.sh

内容如下

mkdir avtech_cuilei

chmod -R 700 avtech_cuilei

chown -R qmaild.qmail avtech_cuilei

以上是例子,具体数据具体写

# chmod 755 build_mail.sh

 

执行此脚本即可建立邮箱目录

# ./build_mail.sh

 

#!/bin/sh

 

mk_init_maildir()

{

  ldapsearch -h 127.0.0.1 -x -w "secret" -D "cn=root,dc=cn" -b "dc=cn" mailMessageStore > /tmp/maildir_ldap_result

  grep "mailMessageStore" /tmp/maildir_ldap_result > /tmp/mk_mailbox.sh

  sed -i "s:mailMessageStore\: :mkdir -p \/var/qmail\/maildir\/:g" /tmp/mk_mailbox.sh

  chmod 700 /tmp/mk_mailbox.sh

  /tmp/mk_mailbox.sh

 

  sed -i "s:mkdir -p:chown -R qmaild.qmail:g" /tmp/mk_mailbox.sh

  /tmp/mk_mailbox.sh

 

  sed -i "s:chown -R qmaild.qmail:chmod -R 700:g" /tmp/mk_mailbox.sh

  /tmp/mk_mailbox.sh

}

 

case $1 in

       init)

         mk_init_maildir

              ;;

       add)

         for loop in `cat /tmp/list`

         do

           mkdir -p /var/qmail/maildir/$loop

           chmod -R 700 /var/qmail/maildir/$loop

           chown -R qmaild.qmail /var/qmail/maildir/$loop

         done

              ;;

       help)

              echo -e  "init\t --\make branch and checkout the code source"

              echo -e  "add --\tget the script for db"

              ;;

       *)

              echo "usage {init|add}"

              ;;

Esac

4 测试

5 支持多域名

修改/var/qmail/control里面的三个文件
me,locals,rcpthosts

添加新的域名

比如zycchr.com

然后make重新编译一下

ldap里面uid的设置为xx@zycchr.com

foxmail里面的用户名设置为xx@zycchr.com



  编辑/var/qmail/control/badmailfrom文件(如果没有可以新建一个)将要拒收的邮件地址写入,每条记录为一行如:
    123@123.com
  这样所有FROM来自123@123.com的邮件都会被邮件服务器拒收。

  同样也可以对一个域进行拒收,在badmailfrom文件中加入
    @test.com
  这样所有来自test.com的任何地址的电子邮件都会被服务器拒收。

 

阅读(1191) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~