qmail のインストールメモ

メモ一覧ページに戻る

説明と環境

qmail は、D.J.Bernstein によって作成された安全、確実、高速、簡潔を目指したメール転送エージェント(MTA)です。

このページは qmail のインストール、 tcpserver を利用した smtp サーバとしての機能、 apop によるメール受信機能を使用するための設定についてのメモです。

このメモは、RedHat Linux 7.3 の環境で作成しました。他の OS では、一部ユーザの作成などの方法に違いがありますが、同じように設定することは可能です。

一応、間違いがないように努力しているつもりですが、間違いや不明な点などがありましたら、メールで連絡して下さい。

目次


qmail のインストール

qmail に必要なユーザの作成

qmail が使用するユーザを作成します。

# mkdir /var/qmail
# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias -s /bin/false alias
# useradd -g nofiles -d /var/qmail -s /bin/false qmaild
# useradd -g nofiles -d /var/qmail -s /bin/false qmaill
# useradd -g nofiles -d /var/qmail -s /bin/false qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail -s /bin/false qmailq
# useradd -g qmail -d /var/qmail -s /bin/false qmailr
# useradd -g qmail -d /var/qmail -s /bin/false qmails
# exit

目次へ戻る

ソースの入手

qmail のソースと qmail が処理する日付のパッチを入手します。ソースの入手には wget を使用しています。

qmail の日付関係のパッチが必要ない場合は qmail-date-localtime.patch はダウンロードする必要はありません。

$ wget --passive-ftp ftp://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-1.03.tar.gz
$ wget --passive-ftp ftp://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-date-localtime.patch

パッシブモードが必要ない場合(ファイアウォールを使用していない場合など)は、 --passive-ftp オプションは入れなくても大丈夫です。

目次へ戻る

インストール

$ tar zxvf qmail-1.03.tar.gz
$ cd qmail-1.03
$ patch -p1 < ../qmail-date-localtime.patch
$ make
$ su
# make setup check

qmail の日付関係のパッチが必要ない場合は 3行目を飛ばして下さい。

目次へ戻る

qmail の設定

DNS が利用できない場合、./config-fast を使用します。

サーバが DNS に登録されていれば、 ./config をオプション無しで実行します。)

# ./config-fast [ホスト名.ドメイン名]
    Your fully qualified host name is [ホスト名.ドメイン名].
    Putting mail into control/me...
    Putting mail into control/defaultdomain...
    Putting mail into control/plusdomain...
    Putting mail into control/locals...
    Putting mail into control/rcpthosts...
    Now qmail will refuse to accept SMTP messages except to mail.
    Make sure to change rcpthosts if you add hosts to locals or virtualdomains!

[ホスト名.ドメイン名]は、mail.****.**.jp など、DNS に登録される予定の名前を入力します。

DNS に登録されていて、./config を使用した場合は、自動的に DNS の情報を取得して設定が行なわれます

/config-fast や ./config を実行した場合、以下のファイルが自動的に作成されます。内容を確認しておくと良いと思います。

/var/qmail/control/meローカルメールサーバのホスト名を指定するために使用します。他の制御ファイルが存在しない場合、このファイルに記述された内容がデフォルト値として使用されます。
/var/qmail/control/defaultdomain配送時にメールを受け取るドメイン
/var/qmail/control/plusdomain+ 記号で終わるメールアドレスに追加するドメインを指定します。
/var/qmail/control/localsローカルメールアドレスとしてみなすドメイン名を指定します。
/var/qmail/control/rcpthosts別のホストやドメイン宛てのメッセージをサーバで受け取れるようにするために使用します。qmail サーバはこのファイルで指定されていないホスト、ドメイン宛てのメッセージは受け取りません。少なくとも、ローカルホスト名を記述する必要があります。

目次へ戻る

起動スクリプト

/var/qmail/boot/home に起動スクリプトが用意されていますので、 /var/qmail/rc というファイルにコピーして使用します。

# cp /var/qmail/boot/home /var/qmail/rc

次に、maildir 形式のメールボックスを設定します。

qmail のデフォルトでは一般的に広く利用されている mbox 型式ですが、より安全な Maildir 型式を利用できますので、Maildir 型式に変更します。

# vi /var/qmail/rc
    -------------------------------------
    qmail-start ./Mailbox splogger qmail
    -------------------------------------
この部分を以下のように変更します。
    -------------------------------------
    qmail-start ./Maildir/ splogger qmail
    -------------------------------------

また、メールを受け取るユーザは、~/Maildir ディレクトリがないとメールを受け取れませんので、すでにユーザが存在する場合は、そのユーザになって /var/qmail/bin/maildirmake を実行します。

    # su - [ユーザ名]
    $ /var/qmail/bin/maildirmake ~/Maildir

今後作成するユーザに対して maildirmake コマンドを実行するのは手間がかかりますので、 /etc/skel に Maildir ディレクトリを作成しておきます。

# /var/qmail/bin/maildirmake /etc/skel/Maildir

目次へ戻る

エイリアスの設定( postmaster, mailer-daemon, root のメールに エイリアスを設定 )

postmaster, mailer-daemon, root で指定されたメールを受け取るように設定します。

# cd /var/qmail/alias/
# touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
# echo "[メールを受け取るユーザ]" >> .qmail-postmaster
# echo "[メールを受け取るユーザ]" >> .qmail-mailer-daemon
# echo "[メールを受け取るユーザ]" >> .qmail-root
# chmod 644 .qmail*

メールを受け取るユーザはメール管理者のメールアドレスを指定しておく方が良いと思います。

複数人がメールを受け取る場合は1行に1メールアドレスを指定すればよいので、エディタで編集してメールアドレスを追加します。

目次へ戻る

qmail を起動

先ほど設定した qmail の起動スクリプトを使って起動します。

# /var/qmail/rc &

以下のように、ps aux を実行して qmail のプロセスがされれば成功です。

# ps axu | grep qmail

USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
qmails    3512  1.0  0.2  1400  420 pts/1    R    16:35   0:00 qmail-send
qmaill    3513  0.0  0.2  1360  408 pts/1    S    16:35   0:00 splogger qmail
root      3514  1.0  0.1  1356  276 pts/1    S    16:35   0:00 qmail-lspawn ./Maildir/
qmailr    3515  0.0  0.1  1352  300 pts/1    S    16:35   0:00 qmail-rspawn
qmailq    3516  0.0  0.1  1348  296 pts/1    S    16:35   0:00 qmail-clean

目次へ戻る

テストメールを送信

テストメールを送信してみます。To: で指定するユーザ名はドメインなどを入れなくても送信できます。

内容は何でも構いません。ctrl + D で終了します。

# /var/qmail/bin/qmail-inject

To: [メールを送信するユーザ名]
Subject: Test

Test Mail.
^D

指定したユーザの Maildir ディレクトリにメールが届いていれば成功です。

目次へ戻る

SMTP 接続の設定

このままでは、外部からのメールを受けつけることが出来ません。外部からのメールを受けつけるサーバを用意します。

このような機能を実現するツールとして、tcpserver や inetd などがあります。ここでは、tcpserver で外部からの接続を受けつけるように設定します。

tcpserver のインストール

tcpserver をインストールします。詳しくは別でまとめてみた tcpserver についてのメモ を参考にして下さい。

$ tar zxvf ucspi-tcp-0.88.tar.gz
$ cd ucspi-tcp-0.88
$ su
$ make
# make setup check

目次へ戻る

サーバを起動するユーザの uid と gid を調査

tcpserver で使用するユーザの uid と gid を取得します。

# id -u qmaild
1001
# id -g qmaild
1001

ここで返される値をメモしておきます。ユーザを追加するときに指定していなければ、Linux などでは 500 以上の値になることが多いです。ユーザを追加するときに uid を指定していれば、その値になっています。

目次へ戻る

qmail のリレー設定

メール送信の接続を受けつけるリレーを許すホストの設定を行ないます。

例としては、 192.168.0.* からの接続と、ローカルホストからのメール送信を許す場合は以下のように設定します。

作成したルールは tcprules コマンドによって cdb 型式に変換して利用します。

# vi /etc/tcp.smtp
    -------------------------------------
    192.168.0.:allow,RELAYCLIENT=""
    127.:allow,RELAYCLIENT=""
    -------------------------------------
# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

目次へ戻る

tcpserver の起動

最後に tcpserver を起動します。ここでは、先ほど作成した cdb 型式のルールファイルと qmaild の uid と gid を指定して起動します。

メールの受けつけポート番号を一般的な smtp(25番) に設定し、また、ログを syslog に送るために splogger を使用します。(詳しいオプションなどについては tcpserver についてを参照して下さい。)

# /usr/local/bin/tcpserver -vHR -x /etc/tcp.smtp.cdb -u 1001 -g 1001 0 smtp \
  /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd &

以下のようにプロセスが表示されれば成功です。

# ps ax | grep tcpserver

4968 pts/1    S      0:00 /usr/local/bin/tcpserver -vHR -x /etc/tcp.smtp.cdb -u

また、netstat コマンドでも確認できます。

# netstat -l | grep smtp

tcp        0      0 *:smtp                  *:*                     LISTEN

目次へ戻る

APOP によるメール受信設定

外部からの APOP によるメールの受信を可能にします。

ここでは、APOP による認証に checkpw を使用します。また、同様の処理が可能なものとして、qpopper があります。

ユーザの Maildir ディレクトリにパスワードファイルを置くので、パスワードの一元管理は出来ません。

Linux や、*BSD などの Unix 系では、APOP を使用できるメールクライアントは多いですが、Windows 系では、少ないようです。使用者の多いと思われる Outlook Express や Netscape 付属のメールクライアントでは対応していません。

checkpw のインストール

checkpw は http://checkpw.sourceforge.net/checkpw/ で紹介されています。

checkpw は Maildir 型式のメールボックスを使用している場合に利用できます。

$ wget http://prdownloads.sourceforge.net/checkpw/checkpw-1.00.tar.gz
$ tar zxvf checkpw-1.00.tar.gz
$ cd checkpw-1.00
$ su
# make setup check

目次へ戻る

tcpserver の起動 2

pop3(110番) ポートからの接続を受けつけるように設定します。

もし、アクセス制御が必要な場合は、 tcprules を利用して cdb 型式のファイルを作成し、 -x オプションで指定して起動することでアクセス制御が可能です。

# /usr/local/bin/tcpserver -HR 0 pop3 /var/qmail/bin/qmail-popup \
  [サーバの完全ドメイン名] /bin/checkapoppw /var/qmail/bin/qmail-pop3d Maildir &

netstat コマンドを使用して pop3 ポート(110番)が使用可能かをチェックします。

# netstat -l | grep pop3

tcp        0      0 *:pop3                  *:*                     LISTEN

以上のように表示されれば大丈夫です。

目次へ戻る

ユーザのパスワード設定

パスワードを設定します。そのままのパスワードを入れますので、他人に読まれないように、 chmod で本人以外は読めないように設定するのを忘れないで下さい。

# su - [ユーザ名]
$ touch ~/Maildir/.password
$ chmod 600 ~/Maildir/.password
$ echo "[パスワード文字列]" > ~/Maildir/.password

準備が出来たら、APOP を使用できるメールクライアントでメールが受信できるかどうかをチェックします。接続できないなど、問題があるようであれば設定をもう一度見直してください。

目次へ戻る

/etc/rc.local に追加

/etc/rc.local に以下のように追加しておくと、再起動時に SMTP と APOP 接続が可能になります。

/var/qmail/rc &

/usr/local/bin/tcpserver -vHR -l0 -x /etc/tcp.smtp.cdb -u 1001 -g 1001 0 smtp \
    /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd &

/usr/local/bin/tcpserver -vHR -l0 0 pop3 /var/qmail/bin/qmail-popup [サーバの完全ドメイン名] \
    /bin/checkapoppw /var/qmail/bin/qmail-pop3d Maildir &

目次へ戻る

参考文献/参考サイト

目次へ戻る


LastUpdate: 2002/05/12 | メモ一覧ページへ戻る