qmail-ldap構築手順
qmail-ldapとは
qmail-ldapはAndre' Oppermann氏作のqmail用のパッチプログラムです。これは、qmailをldapで管理するためのもので、多くのドメインやメールアカウントを管理できます。弊社は1999年に初めてこのパッチを適用したqmailサーバーを構築しましたが、それ以来、全くトラブルなく運用しております。qmailは勿論、LDAPサーバーもOpenLDAP、ユーザーインターフェース用のDBもMySQLと、全てオープンソースで構築でき、しかも安定性が高いのでお勧めです。ただし、誰でも使える簡単なソフトではなく、SMTP、LDAPに関する知識は必要です。ここでは多少古い情報になりますが、その構築手順を公開したいと思います。最新のパッチはhttp://www.nrg4u.com/からダウンロードできます。また参考ページとしてLife With qmail-ldapをお勧めします。一部日本語訳もこちらにあるようです。
基本構成と目的
qmail-ldapはqmailをLDAPサーバーを参照して動かすようにするパッチプログラムです。目的はメールアカウントの管理を、データベースやWebプログラムを通して行なうためのもので、多くのアカウントを管理するのに適しています。ldapエントリでメール配送を制御し、アカウント管理そのものはDBを使い、さらにCGIでウェブからそれを管理する、というような使い方をします。
必要なもの
- qmail-1.03
- qmail-ldap patch
- OpenLDAP 1.2X or 2.X
- MySQL or PostgreSQL
- ucspi-tcp-0.88
- daemontools-0.76
DBの設計
ユーザーのメールアカウントをどう管理したいかによって、データベースの設計をまず決めます。ユーザー管理とのからみもあるので、一概には言えませんが、シンプルにするなら以下のようになります。
create table mail
(
uid varchar(16) not null primary key,
upwd varchar(64) not null,
alias varchar(64),
domain varchar(64),
local enum('Y','N'),
quota int3,
fwd1 varchar(128),
fwd2 varchar(128),
fwd3 varchar(128)
) engine=MyISAM;
uidはユーザーID、upwdはユーザーパスワード、aliasはメールアドレスのID部分、domainはドメインです。localは転送設定時にローカル配送もするかどうか、quotaはメールボックス容量で、fwd1から3は転送先アドレスです。
また、CGIなどでアカウント管理をする際、データベースへのアクセスを確保する必要があります。仮にデータベースの名前をmaildbとすると、以下のように設定します。
% mysql -u root -p maildb
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> on maildb.*
-> to mysql@localhost
-> identified by 'PASSWORD';
Query OK, 0 rows affected (0.01 sec)
OpenLDAPのインストール
展開してインストール
% gunzip openldap-release.tgz
% tar -xvf openldap-release.tar
% cd ldap
% ./configure
% make depend
% make
% su
# make install
slapd.confの編集
/usr/local/etc/openldap/slapd.conf
-rw------- 1 root wheel 1014 Oct 16 23:56 slapd.conf
schemacheck on
suffix "dc=youdomain, dc=com"
directory /var/qmail/users
rootdn "cn=root, dc=yourdomain, dc=com"
index mail,mailAlternateAddress,uid
index default none
rootpw {crypt}$1$Hs$/.da.6lwJG1k1UIYZ8N8o/
index mail,mailAlternateAddress,uid
index default none
defaultaccess none
access to dn=".*,dc=yourdomain, dc=com"
by addr="XXX.XXX.XXX.XXX" write
by addr="XXX.XXX.XXX.XXX" read
ldap.confの編集
/usr/local/etc/openldap/lapd.conf
BASE dc=yourdomain, dc=com
HOST mail.yourdomain.com
PORT 389
slapd.oc.confの編集
以下を加える
objectclass qmailUser
requires
objectclass,
mail,
uid
allows
mailMessageStore,
homeDirectory,
userPassword,
mailAlternateAddress,
qmailUID,
qmailGID,
mailQuota,
mailHost,
mailForwardingAddress,
deliveryProgramPath,
qmailDotMode,
deliveryMode,
mailReplyText,
accountStatus
LDAPサーバーにエントリを加える
SLAPDをスタートしてエントリを追加する
# /usr/local/libexec/slapd -f ./slapd.conf
# ldapadd -D "cn=root, dc=yourdomain, dc=com" -w secret < qmail.ldif
しかし、ldapaddは1秒に3エントリぐらいしか入れられないので、大量のエントリを処理するのには不向き。その場合は、ldif2ldbmを使う。ただし、これは全データベースを初期化してしまうので、追加するのには使えません。使えるのは最初だけです。
# ldif2ldbm -i qmail.ldif -f slapd.conf
ldifファイルの中身はこんな感じ。
最初の数行を忘れないこと。
dn: dc=yourdomain, dc=com
dc: hogehoge
o: infomani@ Inc
objectclass: organization
objectclass: dcObject
dn: cn=myid, dc=yourdomain, dc=com
cn: myid
sn: yourdomain.com
mail: myid@yourdomain.com
mailHost: mail.yourdomain.com
mailMessageStore: myid/
mailQuota: 3000
uid: myid
userPassword: {crypt}$1$Io$49JPifEYTA/y3LsL1UB9z0
objectclass: person
objectclass: qmailUser
試しに検索してみる。入れたLDAPエントリーが表示されれば成功。
% ldapsearch 'mail=myid@yourdomain.com'
cn=myid,dc=n24, dc=net
cn=myid
sn=yourdomain.com
mail=myid@yourdomain.com
mailhost=mail.yourdomain.com
mailmessagestore=myid/
uid=nao
userpassword={crypt}$1$Io$49JPifEYTA/y3LsL1UB9z0
objectclass=person
objectclass=qmailUser
deliverymode=localdelivery
qmailのインストール
qmail-1.03とqmail-ldapをダウンロード、展開後、qmail-ldapパッチをあてる
% cd qmail-1.03
% patch -p1 < ../qmail-ldap-1.03-XXXXXXXX.patch
..
.
done
%
Makefileを編集する
% vi Makefile
MDIRMAKE=-DAUTOMAILDIRMAKE
HDIRMAKE=-DAUTOHOMEDIRMAKE
QLDAPBIND=-DQLDAP_BIND
LSPAWN_LOG=-DQLSPAWN_LOG -DLOG_LEVEL=4
ユーザー、グループ、ディレクトリを作成
/etc/group
nofiles:*:81:
qmail:*:82:
# vipw
alias:*:81:81::0:0:User &:/var/qmail/alias:/nonexistent
qmaill:*:83:81::0:0:User &:/var/qmail:/nonexistent
qmaild:*:82:81::0:0:User &:/var/qmail:/nonexistent
qmailp:*:84:81::0:0:User &:/var/qmail:/nonexistent
qmailq:*:85:82::0:0:User &:/var/qmail:/nonexistent
qmailr:*:86:82::0:0:User &:/var/qmail:/nonexistent
qmails:*:87:82::0:0:User &:/var/qmail:/nonexistent
qmailディレクトリを作成
# mkdir /var/qmail
qmailのインストール
% cd qmail-1.03
% make
% make man
% su
# make setup check
./install
./instcheck
qldapのコンパイル、インストール
# make qldap
# cp checkpassword /bin/checkpassword
# chown root:wheel /bin/checkpassword
# cp qmail-reply `head -1 conf-qmail`/bin
# cp qmail-quotawarn `head -1 conf-qmail`/bin
# ls -l `head -1 conf-qmail`/bin/qmail-reply
-rwxr-xr-x 1 root qmail 14216 Oct 18 22:25 /var/qmail/bin/qmail-reply
# ls -l `head -1 conf-qmail`/bin/qmail-quotawarn
-rwxr-xr-x 1 root qmail 19456 Oct 18 22:25 /var/qmail/bin/qmail-quotawarn
必要に応じてchownとchmodする
# make checkpassword
popusers:popusers uid 1010 gid 1010を作成する。
qmailの設定ファイルとその内容は以下の通り。
# ls -l /var/qmail/control
-rw-r--r-- 1 root qmail 11 Oct 18 22:31 defaultdelivery
-rw-r--r-- 1 root qmail 11 Oct 18 22:31 defaultdomain
-rw-r--r-- 1 root qmail 30 Oct 18 22:47 dirmaker
-rw-r--r-- 1 root qmail 22 Oct 18 22:31 ldapbasedn
-rw-r--r-- 1 root qmail 9 Oct 18 22:31 ldapdefaultdotmode
-rw-r--r-- 1 root qmail 5 Oct 18 22:31 ldapgid
-rw-r--r-- 1 root qmail 20 Oct 18 22:31 ldapmessagestore
-rw-r--r-- 1 root qmail 17 Oct 18 22:31 ldapserver
-rw-r--r-- 1 root qmail 5 Oct 18 22:31 ldapuid
-rw-r--r-- 1 root qmail 9 Oct 18 22:31 ldapusername
-rw-r--r-- 1 root qmail 38 Oct 18 22:31 locals
-rw-r--r-- 1 root qmail 17 Oct 18 22:31 me
-rw-r--r-- 1 root qmail 6 Oct 18 22:31 plusdomain
-rw-r--r-- 1 root qmail 38 Oct 18 22:31 rcpthosts
- defaultdelivery
./Maildir/
- defaultdomain
yourdomain.com
- dirmaker
/var/qmail/bin/create_homedir
- ldapbasedn
dc=yourdomain, dc=com
- ldapdefaultdotmode
ldaponly
- ldapgid
1010
- ldapmessagestore
/usr/home/popusers/
- ldapserver
mail.yourdomain.com
- ldapuid
1010
- ldapusername
popusers
- locals
localhost
mail.yourdomain.com
yourdomain.com
- me
mail.yourdomain.com
- plusdomain
yourdomain.com
- rcpthosts
localhost
mail.yourdomain.com
yourdomain.com
create_homedirは新規アドレスに最初に着信した際、自動的にディレクトリを作るためのプログラム。内容は以下の通り。
-rwxr-xr-x 1 root qmail 93 Oct 18 22:50 create_homedir
#!/bin/sh
mkdir $1
cd $1
maildirmake $2 # this does not work if your aliasempty is './'
#EOF
ucspi-tcp、daemontoolsのインストール。
% gunzip ucspi-tcp-0.88.tar.gz
% gunzip daemontools-0.61.tar.gz
% cd ucspi-tcp-0.88
% make
% su
Password:
# make setup check
./install
./instcheck
% cd daemontools-0.70
% make
% su
Password:
# make setup check
./install
./instcheck
最後にqmailを動かします。
SMTP接続の制御をtcpserverで行なうため、tcp.smtpを作成し、そこからtcp.smtp.cdbを作成します。
vi /etc/tcp.smtp
#### Local Network
XXX.XXX.XXX-XXX.:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""
# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
起動スクリプトは以下のようにして完了。
qmail-start `cat /var/qmail/control/defaultdelivery` splogger qmail &
/usr/local/bin/tcpserver -R -H -v -u 82 -g 81 -x /var/qmail/relay-ctrl/tcp.smtp.cdb \
0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd &
/usr/local/bin/tcpserver -R -H -v 0 pop3 /var/qmail/bin/qmail-popup \
mail.yourdomain.com /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1 | \
/var/qmail/bin/splogger pop3 &