なりた

戻る


http://cr.yp.to/qmail.html からqmail-1.03.tar.gzを取得する。
$ tar -zxf qmail-1.03.tar.gz
にて解凍し、解凍後作成される qmail-1.03ディレクトリを適当な場所に移動する。
(ここでは/usr/local/srcに移動したものと仮定する)
$ cd /usr/local/src/qmail-1.03
と、qmailのディレクトリに移動し、
$ ls INSTALL*
と実行すると以下のようなファイルが見つかるはずだ。
INSTALL  INSTALL.alias  INSTALL.ctl  INSTALL.ids  INSTALL.maildir  INSTALL.mbox  INSTALL.vsm
英語がわかる人であれば、ISNTALLファイルの記述にしたがってインストールすればなにも問題ないはずである。


Linuxの場合は以下のコマンドをrootユーザで実行する。

$ groupadd nofiles
$ useradd -g nofiles -d /var/qmail qmaild
$ useradd -g nofiles -d /var/qmail qmaill
$ useradd -g nofiles -d /var/qmail qmailp
$ useradd -g nofiles -d /var/qmail/alias alias
$ groupadd qmail
$ useradd -g qmail -d /var/qmail qmailq
$ useradd -g qmail -d /var/qmail qmailr
$ useradd -g qmail -d /var/qmail qmails

Linux以外のOSでのアカウント作成方法については、INSTALL.idsファイルに詳しく記述されているためそちらを参照してもらいたい。


/usr/local/src/qmail-1.03に移動してコンパイルを行う。
$ cd /usr/local/src/qmail-1.03
$ make setup check
コンパイルが成功したら、次にqmailの設定ファイルの準備を行う。
$ ./config
ホスト名がDNSに登録されていないとエラーが発生するが、その場合は後述する手動による設定ファイルの 設定を行えば問題ないので無視する。


メールサーバとして最低限必要なアドレスエイリアスを作成する。
アドレスエイリアスは、/var/qmail/aliasディレクトリの下に、"qmail-エイリアス名" というファイルを作成することで エイリアスを作成することができる。
ここでは、"postmaster", "MAILER-DAEMON", "root"の3つのエイリアスを作成する。

$ cd /usr/local/src/qmail-1.03
$ touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
$ chmod 644 .qmail*

postmasterとrootのエイリアスにメールサーバの管理者のアドレスを定義する。

$ echo '&管理者のメールアドレス' > .qmail-postmaster
$ echo '&管理者のメールアドレス' > .qmail-root


qmailの動作に必要な設定ファイルを記述する。
$ cd /var/qmail/control
$ vi me
この me というファイルにはメールサーバ自身のホスト名を指定する。
後述するlocals, defaultdomain, defaulthost, plusdomainの各ファイルが存在しない場合のデフォルト値としても利用される。
ホスト名はFQDN(Fully Qualified Domain Name : 完全修飾ドメイン名)で指定する。

例)
mail.seeds.mine.nu


$ vi locals
この locals というファイルは、qmailがローカル配送として処理すべきドメインを一行に一つずつ指定する。

例) localhost
mail.seeds.mine.nu
seeds.mine.nu


$ vi rcpthosts
このrcpthostsファイルには、ネットワーク経由でqmailが受け取ったメールのうち、受理すべきドメインを 一行に一つずつ指定する。
qmailは外部から自身に対してsmtp要求があった場合、そのsmtp要求が示す送信先アドレスのドメインが、この rcpthostsに定義されているドメインになかった場合、その要求を不正リレーとみなし、受取りを拒否する。
例外としてqmail-smtpdの動作時に環境変数RELAYCLIENTがセットされている場合は、rcpthostsの内容は無視され 全てのドメイン宛のメールを受理する。
(環境変数RELATCLIENTについては後述で説明するため、ここでは気にしないでほしい)
このrcpthostsファイルにはメールサーバ自身が管理するドメインを記述すればよい。

例)
localhost
seeds.mine.nu
.seeds.mine.nu

例では、xxx@localhost, xxx@xxx.seeds.mine.nu, xxx@seeds.mine.nuのドメインが送信先アドレスである場合、 qmailは自身へのメールと判断し、メールを受理する。


$ vi defaultdomain
qmail-injectが参照するファイルであり、メール送信時に宛先アドレスもしくは送信者のアドレスのドメイン部に ドット(.)がない場合、自動的に付加するドメイン名を指定する。

例)
seeds.mine.nu


$ vi defaulthost
qmail-injectが参照するファイルであり、メール送信時に宛先アドレスもしくは送信者アドレスのドメイン部が 省略されている場合、自動的に後ろに付加するドメイン名を指定する。

例)
seeds.mine.nu

この例では、送信先アドレスに nari と指定してメールを送信した場合、qmailがnari@seeds.mine.nuとアドレスを 補完してくれる。


$ vi plusdomain
このplusdomainファイル、qmail-injectが参照するファイルであり、宛先ドメインが + という文字で終っていた場合、 このファイルに定義されているドメインで補完する。
たとえば、このファイルに ne.jp と記述しておき、宛先アドレスに nari@seeds+ と指定してメールを送信すると、 qmailは、宛先アドレスを nari@seeds.ne.jp と補完する。
あまり使わない機能なので、ここでは無視してもらってかまわない。

以上で、qmailの動作に必要な設定ファイルの記述は終りである。


qmailの起動形態には、inetd/xinetd(&tcpd)、もしくはtcpserver経由の方法がある。
inetdはパフォーマンスに問題があるため、使用しないほうが良い。
tcpserverはqmailと同じ作者が開発したTCP用スーパサーバであり、qmailとの相性も良い。
しかしながらここでは筆者の独断と偏見と好みから、xinetd(&tcpd) + qmailの起動形態で説明する。
(これから先の説明は、システムに既にxinetdがセットアップされていることを前提とする。)

$ cd /etc/xinet.d
xinetdでは、xinetd経由で起動するプログラム単位にこのディレクトリに設定ファイルを作る必要がある。

$ vi qmail
このファイルに以下のような設定を記述する。

service smtp
{
disable = no
flags = REUSE NAMEINARGS
socket_type = stream
protocol = tcp
wait = no
user = qmaild
server = /usr/sbin/tcpd
server_args = /var/qmail/bin/tcp-env -R /var/qmail/bin/qmail-smtpd
}

気をつける点としては、server, server_argsで示されるプログラム(tcpd, tcp-env, qmail-smtpd)が 指定のパスに存在していることを確認すること。
次にリレー許可ホストの設定を行う。
現在のままでは、このメールサーバ宛のメールしか送信することができない状態のため、 他のドメインへのメール送はできない。
つまり貴方宛のメールを受信することはできても、貴方から他のドメイン(メールアドレス)の誰かへはメールが出せないということ である。

$ cd /etc
$ vi hosts.allow
hosts.allowを編集する。

tcp-env : 127. : setenv = RELAYCLIENT
tcp-env : 192.168.10.0/24 : setenv = RELAYCLIENT
tcp-env : 192.168.20.15 : setenv = RELAYCLIENT
tcp-env : ALL

このhosts.allowというファイルは、tcpdが参照するファイルであり、特定の送信元のアドレスやドメインによって 指定のプログラムを動かして良いかどうかのアクセスコントロールに使用される。
このファイルの書式は、
<プログラム> : <接続要求パターン> : <オプション> [ : <オプション> ... ]
となっている。
上記の例では、ある接続パターンの場合のみ、環境変数RELAYCLIENTを宣言している。
ここで言っている"ある接続パターン"とは正確にいうと、接続元のIPアドレスのパターンのことである。
以前に少し話したが、qmailは環境変数RELAYCLIENTが宣言されている要求に対しては、設定ファイル rcpthostsを無効になり、どの宛先アドレスに対しても配送するということを思い出して欲しい。
の例では、内部ドメインのアドレス(信頼する身内のアドレス)からはどの宛先のメールでも受取り、 配送するという意味である。
注意すべき点として、tcpdはhosts.allow中の記述のうち、マッチするものを見つけたらそれ以降のルールは 参照せずに、即座に指示に従ってしまうことだ。
つまり、tcp-env : ALL を最初に行に書いてしまうと、全ての接続に対して環境変数RELAYCLIENTが宣言 されることは無くなってしまうので注意すること。


qmailの起動に必要なスクリプトを作成する。
$ cp /var/qmail/boot/home /var/qmail/rc

デフォルトの状態のrcは各ユーザのホームディレクトリに伝統的なメールボックス形式であるmbox形式でメールを配送する。
ここではmbox形式よりも新しく安全なMaildir形式で配送させるように変更する。
/var/qmail/rcファイルを開き、

qmail-start ./Mailbox splogger qmail

という一行を以下のように変更すればよい。
これで、/var/qmail/rc を実行するとqmailが起動する。
あとはこれはシステム起動時に自動的に実行するように、/etc/rc.d/rc.localなり、 /etc/rc.d/init.dになり登録しておく。
最後に先ほど編集した、xinetdの変更を反映させるため、
$ /etc/rc.d/init.d/xinetd restart
を実行する。


qmailをまだ起動させていなければ、/var/qmail/rcを実行してqmailを起動する。
qmailの動作確認を行うにあたり、まず確認すべき点はqmailが正しく起動されているかどうかである。
qmailは配送関係のログを記録するように設計されているため、ログを見ることで確認がとれる。
ログファイルはOSによって異なる可能性があるため、各自確認しておいておくこと。
ちなみに筆者の環境(Kondara2.0)では、/var/log/maillogに保存される。

$ tail -f /var/log/maillog

qmailが正常に起動している場合、ログファイルには以下のようなメッセージが出力されているはず。

qmail: status: local 0/10 remote 0/10 remote 0/20

「status」のかわりに「cannot start」と表示されている場合には、インストールもしくは設定が 失敗している可能性が高い。
この場合、今までの手順を再度確認して欲しい。

次にpsコマンドを実行して、qmailの4つのプロセスが起動しているかどうかを確認する。
qmail-send (UIDはqmails)
qmail-lspawn (UIDはroot)
qmail-rspawn (UIDはqmailr)
qmail-clean (UIDはqmailq)
また、sploggerがqmaillのUIDで実行されていることも確認する。

$ ps axuw | grep qmail
qmails 5519 0.0 0.1 1348 420 ? S Aug31 0:00 qmail-send
qmaill 5521 0.0 0.1 1320 464 ? S Aug31 0:00 splogger qmail
root 5522 0.0 0.0 1308 364 ? S Aug31 0:00 qmail-lspawn ./Mailbox
qmailr 5523 0.0 0.0 1308 364 ? S Aug31 0:00 qmail-rspawn
qmailq 5524 0.0 0.0 1300 372 ? S Aug31 0:00 qmail-clean

次にローカル配送テストに移る。
/var/qmail/alias の .qmail-rootファイルの中にアドレスが記入されていないことを確認する。
もし管理者のアドレスが記入されていたら、テストの間だけ削除し、空のファイルにしておく。

$ echo to: root@seeds.mine.nu | /var/qmail/bin/qmail-inject

でテストメールをroot宛に送る。
ただちに、/var/qmail/alias以下にあるMailboxファイルにメールが書き込まれればOKである。
同時にログファイルには以下のようなメッセージが出力されているはずである。

starting delivery 1: msg 53 to local root@seeds.mine.nu
「msg 53」の数字は実行するホストによって異なるので気にしないでよい。

続いてリモート配送のテストを行う。
seeds.mine.nu以外の外部ドメインのメールアドレスにローカル配送と同様に送信してみる。

$ echo to: foo@hogehoge.org | /var/qmail/bin/qmail-inject

実行するとログファイルに以下のようなメッセージが出力されるはずである。

starting delivery 2: msg 53 to remote foo@hogehoge.org
delivery 2: success : 1.2.3.4_accepted_message./...

このようなログが出力されれば成功である。
念のため、foo@hogehoge.orgにメールが届いているかどうか確認しておこう。


不正リレーを防ぐ機能についても動作確認をとる必要がある。
この機能が正常に動作していないと瞬く間にスパムメールの発射基地されてしまう恐れがある。

まず、hosts.allowに定義した信頼する身内のIPアドレスからこのメールサーバを使ってメールを送信してみる。
自ドメイン、外部ドメインとも正常にメールが配送されるはずである。

次に、信頼している身内のIPアドレス以外からこのメールサーバを使ってメールを送信してみる。
自ドメイン宛のメールであれば(rcpthostsに書かれている)配送され、そうではない外部ドメインの場合は 配送されないはずである。
この確認はtelnetコマンドを利用して行うことができる。
信頼していない身内以外のIPアドレスのマシンから以下のようなコマンドを実行する。

$ telnet mail.seeds.mine.nu smtp
Trying to 192.168.10.10...
Connected to mail.seeds.mine.nu
Escape character is '^]'
200 mail.seeds.mine.nu ESMTP
helo test.example.com
250 mail.seeds.mine.nu
mail from:
250 ok
rcpt to:
553 sorry, that domain isn't in my list of allowed rcphosts (#5.7.1)

最後の行メッセージが出れば、不正リレーをブロックしたということを確認できる。


メールボックス形式をMaildir形式にしている場合、qmailでは各ユーザ毎のメールボックスを作成しないとそのユーザにいかなるメールも届かない。
(ログに「Unable_to_chdir_to_maildir._(#4.2.1)」と表示される)
したがってメールボックスを作りたいユーザ権限で、

$ /var/qmail/bin/maildirmake ~/Maildir

と実行し、Maildir形式のメールボックスを作成する必要がある。

ようこそ刻色館へ

住人と元住人の日記

シェアに関する話題はこちらへ

ようするに雑談です

縁ある人々

より世界に近づくために、あてのない言葉は羅列されていきます

コンピュータ関連とそうでないモノたち。

インターネットは広い

シェア関連

ひいの演劇関連

ご友人方々

便利かな

管理用画面