分享
 
 
 

Qmail+LDAP安装配置实例

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

目前网上关于qmail+LDAP的配置不是很多,而且大多数是英文的。而qmail和openldap的配置没有详细的配置文档。前一段时间因为工作关系配置了qmail+LDAP的服务器。现在将其整理处理,以供大家参考。希望对于大家有所帮助。

Qmail 是基于类似UNIX操作系统的Internet Mail Transfer Agent (MTA) 。我的安装环境是linux7.1 内核是2.4.2,gcc version 2.96,组件全部安装。

安装步骤

1.操作系统:

Red Hat Linux 7.1 kernel 2.4.2 gcc 2.96

2.所需软件包:

qmail-1.03.tar.gz (http://www.qmail.org)

ucspi-tcp-0_88_tar.gz (http://cr.yp.to/ucspi-tcp.html)

checkpassword-0_90_tar.gz (http://cr.yp.to/checkpwd.html)

qmail-ldap-1_03-20010301_patch.gz (http://www.nrg4u.com/)

openldap-2_0_7.tgz (http://www.openldap.org)

daemontools, ftp://cr.yp.to/daemontools/daemontools-0.70.tar.gz

3.主机IP地址和域名配置,在本例中为:

IP:172.18.6.111

域名:longshine.com

4. System requirements

5. 安装步骤

将所有需要安装的包拷贝到/usr/local/src/qmail目录项目

mkdir -p /usr/local/src/qmail

mv *.tar.gz /usr/local/src/qmail

然后解开安装下面步骤解开这些包

su -

umask 022

cd /usr/local/src/qmail

tar zxvf qmail-1.03.tar.gz

tar xvf ucspi-tcp-0.88.tar.gz

tar zxvf daemontools-0.70.tar.gz

tar zxvf checkpassword-0.90.tar.gz

解开的数据包应该处在qmail-1.03, ucspi-tcp-0.88, daemontools-0.70和checkpassword-0.90目录下,进入qmail目录。

cd qmail-1.03

建立相应的安装目录

由于qmail安装程序会产生其需要的子目录,所以只要生成安装所需的"home" 目录:

mkdir /var/qmail

ln -s /usr/man /var/qmail/man

mkdir /etc/qmail

ln -s /etc/qmail /var/qmail/control

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

生成qmail安装需要的用户以及组

# groupadd nofiles

# useradd -g nofiles -d /var/qmail/alias alias

# useradd -g nofiles -d /var/qmail qmaild

# useradd -g nofiles -d /var/qmail qmaill

# useradd -g nofiles -d /var/qmail qmailp

# groupadd qmail

# useradd -g qmail -d /var/qmail qmailq

# useradd -g qmail -d /var/qmail qmailr

# useradd -g qmail -d /var/qmail qmails

编译安装

现在可以编译安装qmail:

make setup check

在编译安装完成,需要进行配置如果DNS配置正确,只需执行下面的命令:

./config

如果config在DNS中不能找到主机名,则需要执行config-fast 脚本:

./config-fast longshine. com

qmail 现在已经安装起来了,下面开始是启动和配置qmail。

安装 ucspi-tcp

进入 ucspi-tcp 目录:

cd /usr/local/src/qmail/ucspi-tcp-0.88

make

make setup check

这样ucspi-tcp 安装起来了。

安装daemontools

进入 daemontools 目录:

cd /usr/local/src/qmail/daemontools-0.70

make

make setup check

安装checkpassword

进入 checkpassword 目录:

cd /usr/local/src/qmail/checkpassword-0.90

make

make setup check

注: 在某些LINUX版本中(我的安装环境redhat 7.1), 如Red Hat 7,可能在编译过程中会生成错误:

./compile tai64nlocal.c

tai64nlocal.c: In function `main':

tai64nlocal.c:54: warning: assignment makes pointer from integer without a cast

tai64nlocal.c:55: dereferencing pointer to incomplete type

等等….

如果这样按照下面说明编辑tai64nlocal.c

#include

更改为:

#include

生成/service 目录:

mkdir /service

最后配置svscan 使得当系统启动时候自动允许。编辑 /etc/inittab 文件将下面一行加入文件最后(注意是在一行中):

SV:123456:respawn:env - PATH=/usr/local/bin:/usr/sbin:/usr/bin:/bin svscan /service /dev/console 2/dev/console

然后执行下面命令重新读人/etc/inittab:

kill -HUP 1

可以使用"ps -ef | grep svscan" 或者 "ps waux | grep svscan" 证实svscan 正在运行。

启动qmail

2.8.1. /var/qmail/rc

编辑产生/var/qmail/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 "`cat /var/qmail/control/defaultdelivery`"

chmod 755 /var/qmail/rc

mkdir /var/log/qmail

在qmail中,支持三种邮件存储方式,分别是典型的/var/spool/mail方式、传统的Unix user/Mailbox方式和新的 user/Maildir方式,其中前两种方式为大多数的邮件客户端所支持,但是它们均存在安全上的隐患,所以在这里使用了第三种方式,下面分别叙述三种方式的建立方法:

/var/spool/mail 方式

#cp /var/qmail/boot/proc /var/qmail/rc

user/Mailbox 方式

#cp /var/qmail/boot/home /var/qmail/rc

user/Maildir 方式

1)#cp /var/qmail/boot/home /var/qmail/rc

2)建立相应的邮件用户,例如:

#useradd test

#passwd test

3)使用qmail提供的工具建立Maildir,命令如下:

$ /var/qmail/bin/maildirmake Maildir

$ echo ./Maildir/ .qmail

(注意这里必须以用户权限建立邮箱)

4) 为了使root用户也能收发邮件,使用如下命令:

# su alias

$ cd

$ /var/qmail/bin/maildirmake Maildir

$ echo ./Maildir/ .qmail

# echo ./Mailbox/ /var/qmail/control/defaultdelivery

系统start-up 文件

生成qmailctl 脚本

#!/bin/sh

# For Red Hat chkconfig

# chkconfig: - 30 80

# description: the qmail MTA

PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin

export PATH

QMAILDUID=`id -u qmaild`

NOFILESGID=`id -g qmaild`

case "$1" in

start)

echo "Starting qmail"

if svok /service/qmail-send ; then

svc -u /service/qmail-send

else

echo qmail-send service not running

fi

if svok /service/qmail-smtpd ; then

svc -u /service/qmail-smtpd

else

echo qmail-smtpd service not running

fi

if [ -d /var/lock/subsys ]; then

touch /var/lock/subsys/qmail

fi

;;

stop)

echo "Stopping qmail..."

echo " qmail-smtpd"

svc -d /service/qmail-smtpd

echo " qmail-send"

svc -d /service/qmail-send

if [ -f /var/lock/subsys/qmail ]; then

rm /var/lock/subsys/qmail

fi

;;

stat)

svstat /service/qmail-send

svstat /service/qmail-send/log

svstat /service/qmail-smtpd

svstat /service/qmail-smtpd/log

qmail-qstat

;;

doqueue|alrm|flush)

echo "Sending ALRM signal to qmail-send."

svc -a /service/qmail-send

;;

queue)

qmail-qstat

qmail-qread

;;

reload|hup)

echo "Sending HUP signal to qmail-send."

svc -h /service/qmail-send

;;

pause)

echo "Pausing qmail-send"

svc -p /service/qmail-send

echo "Pausing qmail-smtpd"

svc -p /service/qmail-smtpd

;;

cont)

echo "Continuing qmail-send"

svc -c /service/qmail-send

echo "Continuing qmail-smtpd"

svc -c /service/qmail-smtpd

;;

restart)

echo "Restarting qmail:"

echo "* Stopping qmail-smtpd."

svc -d /service/qmail-smtpd

echo "* Sending qmail-send SIGTERM and restarting."

svc -t /service/qmail-send

echo "* Restarting qmail-smtpd."

svc -u /service/qmail-smtpd

;;

cdb)

tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp

chmod 644 /etc/tcp.smtp.cdb

echo "Reloaded /etc/tcp.smtp."

;;

help)

cat

start -- starts mail service (smtp connection accepted, mail can go out)

pause -- temporarily stops mail service (connections accepted, nothing leaves)

cont -- continues paused mail service

stat -- displays status of mail service

cdb -- rebuild the tcpserver cdb file for smtp

restart -- stops and restarts smtp, sends qmail-send a TERM %26amp; restarts it

doqueue -- sends qmail-send ALRM, scheduling queued messages for delivery

reload -- sends qmail-send HUP, rereading locals and virtualdomains

queue -- shows status of queue

alrm -- same as doqueue

flush -- same as doqueue

hup -- same as reload

HELP

;;

*)

echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"

exit 1

;;

esac

exit 0

此脚本可以通过http://www.lifewithqmail.org/qmailctl-script-dt70获得

使用vi 生成/var/qmail/bin/qmailctl基本将上面内容放入其中, 然后将其安装在

/etc/init.d

/etc/rc.d/init.d

执行下面命令,产生链接:

ln -s ../init.d/qmail /etc/rc0.d/K30qmail

ln -s ../init.d/qmail /etc/rc1.d/K30qmail

ln -s ../init.d/qmail /etc/rc2.d/S80qmail

ln -s ../init.d/qmail /etc/rc3.d/S80qmail

ln -s ../init.d/qmail /etc/rc4.d/S80qmail

ln -s ../init.d/qmail /etc/rc5.d/S80qmail

ln -s ../init.d/qmail /etc/rc6.d/K30qmail

ln -s /var/qmail/bin/qmailctl /etc/init.d/qmail

使得脚本可以执行 qmailctl且进入系统命令中

chmod 755 /var/qmail/bin/qmailctl

ln -s /var/qmail/bin/qmailctl /usr/bin

supervise 基本

现在产生qmail services目录:

mkdir -p /var/qmail/supervise/qmail-send/log

mkdir -p /var/qmail/supervise/qmail-smtpd/log

chmod +t /var/qmail/supervise/qmail-send

chmod +t /var/qmail/supervise/qmail-smtpd

生成/var/qmail/supervise/qmail-send/run 文件:

#!/bin/sh

exec /var/qmail/rc

生成/var/qmail/supervise/qmail-send/log/run 文件:

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail

生成 /var/qmail/supervise/qmail-smtpd/run 文件:

#!/bin/sh

QMAILDUID=`id -u qmaild`

NOFILESGID=`id -g qmaild`

MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`

exec /usr/local/bin/tcpserver -v -R -l 0 -x /etc/tcp.smtp.cdb -c "$MAXSMTPD"

-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2%26amp;1

生成concurrencyincoming 控制文件:

echo 20 /var/qmail/control/concurrencyincoming

chmod 644 /var/qmail/control/concurrencyincoming

生成/var/qmail/supervise/qmail-smtpd/log/run 文件:

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd

使得所生成的脚本可执行:

chmod 755 /var/qmail/supervise/qmail-send/run

chmod 755 /var/qmail/supervise/qmail-send/log/run

chmod 755 /var/qmail/supervise/qmail-smtpd/run

chmod 755 /var/qmail/supervise/qmail-smtpd/log/run

建立log 目录:

mkdir -p /var/log/qmail/smtpd

chown qmaill /var/log/qmail /var/log/qmail/smtpd

将supervise 链接到/service:

ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service

注: qmail 系统应该自动起来。如果不想此时候启动,执行:

qmailctl stop'

SMTP 访问控制

允许本地主机通过SMTP发信:

echo '127.:allow,RELAYCLIENT=""' /etc/tcp.smtp

qmailctl cdb

停止已经安装的MTA

如果MTA 是Sendmail,应该使用下面命令中的一个停止sendmail 工作:

/etc/init.d/sendmail stop

/sbin/init.d/sendmail stop

/etc/rc.d/init.d/sendmail stop

或者下面命令停止

kill PID-of-sendmail

通过下面命令卸装Sendmail :

rpm -e --nodeps sendmail

最后,使用qmail版本的sendmail代替系统/usr/lib/sendmail的sendmail:

mv /usr/lib/sendmail /usr/lib/sendmail.old # ignore errors

mv /usr/sbin/sendmail /usr/sbin/sendmail.old # ignore errors

chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old # ignore errors

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

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

注: 生成'sendmail链接是重要的,因为有许多应用涉及发mail。

最后一步产生系统别名(aliases)

echo alias /var/qmail/alias/.qmail-root

echo alias /var/qmail/alias/.qmail-postmaster

ln -s .qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon

chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster

启动qmail

qmailctl start

添加pop3服务

生成 /var/qmail/supervise/qmail-pop3d/run 脚本包含下面内容:

#!/bin/sh

exec /usr/local/bin/tcpserver -v -R -H -l 0 0 110 /var/qmail/bin/qmail-popup

longshine.com /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2%26amp;1

生成/var/qmail/supervise/qmail-pop3d/log/run 脚本包含下面内容:

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t

/var/log/qmail/pop3d

建立log目录使得脚本可以执行且将此服务链接到/service:

chmod +t /var/qmail/supervise/qmail-pop3d

mkdir /var/log/qmail/pop3d

chown qmaill /var/log/qmail/pop3d

chmod 755 /var/qmail/supervise/qmail-pop3d/run

chmod 755 /var/qmail/supervise/qmail-pop3d/log/run

ln -s /var/qmail/supervise/qmail-pop3d /service

在qmailctl脚本中添加下面内容:

在qmailctl'的 "start" 部分:

if svok /service/qmail-pop3d ; then

svc -u /service/qmail-pop3d

else

echo qmail-pop3d service not running

fi

在qmailctl'的 "stop" 部分:

echo " qmail-pop3d"

svc -d /service/qmail-pop3d

在qmailctl'的 "stat" 部分:

svstat /service/qmail-pop3d

svstat /service/qmail-pop3d/log

在qmailctl'的 "pause" 部分:

echo "Pausing qmail-pop3d"

svc -p /service/qmail-pop3d

在qmailctl'的 "cont" 部分:

echo "Continuing qmail-pop3d"

svc -c /service/qmail-pop3d

在qmailctl'的 "restart" 部分:

echo "* Restarting qmail-pop3d."

svc -t /service/qmail-pop3d

在/etc/hosts脚本中添加

172.18.6.111 longshine.com

qmail的测试

测试安装:

可以参照TEST.deliver 和 TEST.receive 文档测试其工作是否正常。注意日志是由 multilog 而不是splogger生成的。

测试Pop3和SMTP服务

首先启动qmail邮件服务器,然后测试,使用如下命令:

本地测试:

#run_mail

#netstat -na | grep 25

#netstat -na | grep 110

#telnet localhost 110

user test

pass test

list

retr 1

远程测试:

利用Windows下的图形邮件客户端(如 outlook、foxmail等)来测试邮件的收发。

为qmail增加LDAP支持

qmail可以通过LDAP来代替传统的/etc/passwd方式的Pop3认证,以便提高认证效率和有效的支持大容量的邮件客户,为了使qmail获得LDAP支持,需要在qmail的基础上增加具备LDAP认证的Patch包,最好使用qmail新的压缩包,具体操作使用如下命令:

#rm -rf qmail-1.03

#zip -zxvf qmail-1.03.tar.gz

#gunzip qmail-ldap-1_03-20010301_patch.gz

#cd qmail-1.03

#patch -p1

在patch包打好之后,需要修改qmail的Makefile文件来配置相应的LDAP信息,具体如下(这里只说明必须修改的,其余的可选项请参考QLDAPINSTALL.TXT文档):

1) -LDAPFLAGS = -DCLEARTEXTPASSWORD

配置是否在LDAP目录中使用明文密码。

2) -LDAPLIBS =

配置使用的LDAP接口库,在本例中为:

LDAPLIBS=-L/usr/local/lib -L/usr/X11R6/lib/modules -lldap -llber -lldap_r -lpthread -lresolv

4)-SHADOWLIBS = -lcrypt -lshadow

-SHADOWOPTS = -DPW_SHADOW

配置使用的密码认证方式。

在Makefile设置修改完毕后,重新编译qmail源文件,然后覆盖安装qmail,使用如下命令:

#make setup check

安装openldap

zip -zxvf openldap-2.07.tgz

cd openldap-2.07

./configure

make depend

make

make test

su root -c 'make install'

这样openldap安装完成

在/var/qmail/control/下建立相应的LDAP支持文件:

#cat ldapserver

172.18.6.111

#cat ldapbasedn

dc=longshine , dc=com

#cat ldapobjectclass

qmailUser

将qmail.schema拷贝到openldap的相应目录下面

cp /usr/local/src/qmail/qmail-1.03/qmail.schema /usr/local/etc/openldap/schema/.

编辑configuration 文件 /usr/local/etc/openldap/slapd.conf)

database ldbm

suffix "dc=longshine,dc=com"

rootdn "cn=Manager,dc= longshine ,dc="

rootpw secret

directory /usr/local/var/openldap-ldbm

增加相应的shema文件

include /usr/local/etc/openldap/schema/cosine.schema

include /usr/local/etc/openldap/schema/nis.schema

include /usr/local/etc/openldap/schema/inetorgperson.schema

include /usr/local/etc/openldap/schema/qmail.schema

启动 SLAPD.

su root -c /usr/local/libexec/slapd

为了检测openldap是否运行和配置正确。可以执行ldapsearch命令进行检测。缺省的,ldapsearch 安装在/usr/local/bin/ldapsearch:

ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts

应该可以看见

dn:

namingContexts: dc=longshine,dc=com

增加目录的初始人口。

分为二步:

生成一个LDIF 文件

运行ldapadd

是编辑器生成一个LDIF 文件,包含如下内容:

dn: dc=,dc=

objectclass: dcObject

objectclass: organization

o:

dc:

dn: cn=Manager,dc=,dc=

objectclass: organizationalRole

cn: Manager

我的此文件Manager.ldif文件内容为dn: dc=longshine,dc=com,dc=cn

objectclass: dcObject

objectclass: organization

o: longshine

dc: longshine

dn: cn=Manager,dc=longshine,dc=com

objectclass: organizationalRole

cn: Manager

现在运行ldapadd程序

ldapadd -x -D "cn=Manager,dc=longshine,dc=com" -W -f /root/manager.ldif

如果要输入密码为secret。

增加qmail用户信息,生成test.ldif文件

dn: cn=testUser,dc=longshine,dc=com

cn: testUser

sn: testUser

objectClass: top

objectClass: person

objectClass: inetOrgPerson

objectClass: qmailUser

mail: test@longshine.com

mailHost: longshine.com

mailMessageStore: /home/test/Maildir/

mailQuota: 1000000S,100C

uid: test

userPassword: test

qmailUID: 508

qmailGID: 508

注qmailUID,qmailGID可以通过/etc/passwd文件查询到。使用下面命令进入

ldapadd -x -D "cn=Manager,dc=longshine,dc=com" -W -f /root/test.ldif

如果要输入密码为secret。

将/var/qmail/supervise/qmail-pop3d/run 脚本包含下面内容:

#!/bin/sh

exec /usr/local/bin/tcpserver -v -R -H -l 0 0 110 /var/qmail/bin/qmail-popup

longshine.com /var/qmail/bin/auth_pop /var/qmail/bin/qmail-pop3d Maildir 2%26amp;1

测试LDAP:

ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts

使用什么命令查看添加的时间是否正确。如果不正确可以使用

ldapdelete -x -D"cn=Manager,dc=longshine,dc=com" -w secret "cn=testUser,dc=longshine,dc=com"

删除,然后重新添加。

测试基于LDAP的Pop3认证

在上述步骤完成后,从新测试qmail邮件系统的运行状况,主要从以下三个方面测试,具体命令如下:

本地测试

具体请参考TEST.deliver 和 TEST.receive 的方法。

Pop3+SMTP测试

telnet localhost 25 和telnet localhost 110

测试工具

#/var/qmail/bin/qmail-ldaplookup -u test

#/var/qmail/bin/qmail-ladplookup -m test@longshine.com

也可用Windows下的图形邮件客户端(如 outlook、foxmail等)来测试邮件的收发。

参考资料

Life with qmail (http://www.lifewithqmail.org/lwq.html)

QLDAPINSTALL (http://www.openldap.org/doc/admin/quickstart.html) qmail+LDAP安装与配置(http://www.chinabyte.com/builder/linux/linux_detail.shtm?id=1650%26amp;parid=1%26amp;dtype=1) X.D.Chen'

,

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有