Qmail+LDAP安裝配置實例

本文來自:[url]http://www.7880.com/Info/Article-66df24e0.html[/url]
 
目前網上關於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 (
[url]http://www.qmail.org[/url]
ucspi-tcp-0_88_tar.gz (
[url]http://cr.yp.to/ucspi-tcp.html[/url]
checkpassword-0_90_tar.gz (
[url]http://cr.yp.to/checkpwd.html[/url]
qmail-ldap-1_03-20010301_patch.gz (
[url]http://www.nrg4u.com/[/url]
openldap-2_0_7.tgz (
[url]http://www.openldap.org[/url]
daemontools,
[url]ftp://cr.yp.to/daemontools/daemontools-0.70.tar.gz[/url]
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
此腳本可以通過[url]http://www.lifewithqmail.org/qmailctl-script-dt70[/url]獲得
使用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 文件,包含如下內容:
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:
[email][email protected][/email]
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
[email][email protected][/email]
也可用Windows下的圖形郵件客戶端(如 outlook、foxmail等)來測試郵件的收發。
參考資料
Life with qmail (
[url]http://www.lifewithqmail.org/lwq.html[/url])
QLDAPINSTALL (
[url]http://www.openldap.org/doc/admin/quickstart.html[/url]) qmail+LDAP安裝與配置([url]http://www.chinabyte.com/builder/linux/linux_detail.shtm?id=1650&parid=1&dtype=1[/url]) X.D.Chen'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章