qmail
投稿日: | |
---|---|
修正日: | |
修正日: | |
タグ: |
本稿はqmail環境の構築に関するメモである。メールについては「コンピュータ・ネットワーク(6) -アプリケーション層-」を参照されたし。
qmail
qmailは、ダニエル・バーンスタインによって開発されたUNIX系OS向けのオープンソースのメールサーバである。本稿では、その中で現在の最新版であるnetqmail-1.06を使用する。
準備
はじめにqmailのソースコードやパッチを取得する。
ソースコード
- netqmail-1.06
- qmail-1.03にいくつかのドキュメントとパッチを加えたものである。
- パッチ
qmail-103.patch 512バイト以上のDNS応答のパケットを取り扱えるようにする。 qmail-date-localtime.patch 表示されるDateタグをJST表示にする。 qmail-smtpd-relay-reject.patch ユーザアカウント部分にいくつかの記号が入っている場合それを拒否する機能を追加。
user% tar zxvf netqmail-1.06.tar.gz
インストール場所の用意
qmailでは、標準で/var/qmailに必要なファイルが配置される。そして、いくつかのユーザのホームディレクトリも/var/qmailに設定される。
user% sudo mkdir /var/qmail
ユーザとグループの追加
qmailでは複数のユーザやグループを使用する。そのためにユーザやグループの追加が必要である。
ユーザ名 | ホームディレクトリ | グループ | その他 |
---|---|---|---|
alias | /var/qmail/alias/ | nofiles | エイリアス機能 |
qmaild | /var/qmail/ | ||
qmaill | |||
qmailp | |||
qmailq | qmail | ||
qmailr | |||
qmails |
user% pw groupadd nofiles user% pw useradd alias -g nofiles -d /var/qmail/alias -s /sbin/nologin user% pw useradd qmaild -g nofiles -d /var/qmail -s /sbin/nologin user% pw useradd qmaill -g nofiles -d /var/qmail -s /sbin/nologin user% pw useradd qmailp -g nofiles -d /var/qmail -s /sbin/nologin user% pw groupadd qmail user% pw useradd qmailq -g qmail -d /var/qmail -s /sbin/nologin user% pw useradd qmailr -g qmail -d /var/qmail -s /sbin/nologin user% pw useradd qmails -g qmail -d /var/qmail -s /sbin/nologin
インストール
もしパッチを当てる場合、コンパイルの前にパッチをソースがあるディレクトリに移動させ、以下のコマンドを実行する。
user% patch < ./qmail-date-localtime.patch
これによりソースコードを修正することができる。
そしてコンパイルとインストールには、makeコマンドを使用する。与える引数は次の通りである。
user% sudo make setup check
makeコマンドが正常に終了したならば、/var/qmailにさまざまなサブディレクトリが生成されているはずだ。
なおFreeBSD10ではutmp.hがないということでビルドエラーが発生した。これを解決するにはコードの修正が必要だが、誰かがパッチを作ったようだ。
設定
/var/qmail以下に生成されたいくつかのディレクトリについて説明する。
- alias
-
エイリアス機能の設定ファイル群。標準では、/var/qmail/aliasはユーザaliasのホームディレクトリである。
設定ファイルは、.qmail-から始まるファイル名であり、メールを追加するファイルやディレクトリ、転送先アドレスが書いてある。
- /var/qmail/mbox
- mbox形式ファイルのパス。
- ./Maildir/
- maildir形式で保存するディレクトリ
- &user
- 転送先ユーザ。
- |/bin/hoge
- プログラムに与える場合のプログラムのパス。mbox形式のメールの中身が標準入力に入力される。
/var/qmail/aliasに届いたメールアドレスの設定ファイルがなく、かつユーザとして存在していれば、そのユーザのホームディレクトリにある.qmailの設定ファイルに従って処理を行う。また、"存在するユーザ名-"から始まる名前である場合、ホームディレクトリにある.qmail-から始まるファイルを検索し、あればその設定に従い処理を行う(例えば$HOME/.qmail-testならuser-test)。
必要不可欠なのかは未確認だが、いくつかのプログラムで以下の3つの設定ファイルが使用される。そのためこれらのファイルを作成し、設定を記述する必要がある。
- /var/qmail/alias/.qmail-root
- /var/qmail/alias/.qmail-postmaster
- /var/qmail/alias/.qmail-mailder-daemon
もし/var/qmail/alias/にmaildir形式のディレクトリを生成するならば、maildirmakeで生成できる。 ログイン可能な各ユーザが自分のホームディレクトリに生成するならば、次のように普通に使えば良い。
しかし本稿ではaliasを非ログインユーザとして設定しているので、sudoを使用する。user% maildirmake ~/Maildir
user% sudo -u alias maildirmake ~/Maildir
- control
制御ファイルの設定ファイル群。プログラムqmail-smtpdやqmail-send、qmail-inject、qmail-remoteなどによって使用される。以下にいくつかそれらのファイルを紹介する。
- me
- qmailが稼働するサーバのドメインの名前。
- locals
- qmailがローカル配送するドメインの名前。
- defaultdomain
- ドメインを省略した場合に付けられる標準のドメイン名。
- plusdomain
- メールアドレスに+と付けていた場合に置き換える文字列。
- rcpthosts
- qmail-smtpdが受信するSMTPのRCPT(宛先アドレス)のドメイン。
/var/qmail/controlを簡単に設定するには、添付されたスクリプトconfig-fastやconfigを使用する。例えばドメインpied-piper.netを前述の5つの設定ファイルに記述する場合、次のようにする。
user% sudo ./config-fast pied-piper.net
詳細については、ソースに添付されたINSTAL.ctlを参照されたい。- bin
-
プログラム群。以下にいくつかのプログラムを紹介する。
- qmail-inject
-
メールを送信するためのコマンド。先頭から空行までがヘッダで、それからEOFまで本文である。
user% /var/qmail/bin/qmail-inject To: user Subject: hello Hello, User
- maildirmake
-
maildir形式のディレクトリを生成するコマンド。
user% /var/qmail/bin/maildirmake /etc/skel/Maildir
- man
- マニュアル群。
- doc
- ドキュメント群。
起動
本稿では、qmailの起動にucspi-tcpを使用する。ucspi-tcpはqmailの開発者したサーバ制御ツールである。ucspi-tcpのtcpserverを使用すると不正中継の防止などを行うことで、セキュリティを向上させることができる。
インストールはqmailと同様このような感じで行うことができる。
user% tar zxvf ucspi-tcp-0.88.tar.gz user% cd ucspi-tcp-0.88 user% sudo make setup checktcpserverはtcprulesで生成したデータベースに基づいて処理を行う。
データベースの作成
tcpserverが使用するデータベースを生成するには、ソースファイルを生成し、それをコンパイルする必要がある。
データベースのソースは、各行に「左辺:右辺」といった感じで記述する。左辺にはアドレス、かネットワークを、右辺にはそれに対する設定を記述する。例えばアドレスの場合は"192.168.1.1"のように、ネットワークの場合"127.*.*.*"のネットワークを示したい場合、"127."と記述する。以下にサンプルを示す。
192.168.:allow,RELAYCLIENT="" 127.:allow,RELAYCLIENT="" :allow
192.168.:allow,RELAYCLIENT="" 192.169.:deny
データベースのコンパイルは次のようにして行う。
user% tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp
以上まででtcp.smtp.cdbという名前のデータベースファイルが生成される。
サーバの起動
qmailサーバの起動には、次の3つを起動する。
- qmail-start
- qmail-smtpd
- qmail-pop3d
#!/bin/sh
# Start qmail-start
exec env - PATH="$PATH:/var/qmail/bin" qmail-start ./Maildir/ \
splogger qmail &
# Start qmail-smtpd
/usr/local/bin/tcpserver -x /var/qmail/tcp.smtp.cdb -u qmaild \
-g nofiles 0 smtp /var/qmail/bin/qmail-smtpd &
# Start qmail-pop3d
/usr/local/bin/tcpserver -x /var/qmail/tcp.pop3.cdb \
0 pop3 /var/qmail/bin/qmail-popup \
pied-piper.net /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &
本稿の構築方法ではログにはsyslogを使用している。もし何かトラブルが発生したならば、まず/var/log/maillogを見れば良いだろう。
トラブルシューティング(というか実際あったトラブル)
deferral: CNAME_lookup_failed_temporarily._(#4.4.3)/
- ネットワークの構成を変えた際に/etc/resolv.confの内容に誤りがあった。