Qmail+LDAP安装配置实例
目前网上关于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 < /etc/tcp.smtp chmod 644 /etc/tcp.smtp.cdb echo "Reloaded /etc/tcp.smtp." ;; help) cat < stop -- stops mail service (smtp connections refused, nothing goes out) 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 & 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>&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>&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 < ../ qmail-ldap-1.03-20010501.patch 在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 文件,包含如下内容: 本文出自 51CTO.COM技术博客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>&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&parid=1&dtype=1) X.D.Chen' |


zyl520cyp
博客统计信息
热门文章
最新评论
友情链接