qmail は、D.J.Bernstein によって作成された安全、確実、高速、簡潔を目指したメール転送エージェント(MTA)です。
このページは qmail のインストール、 tcpserver を利用した smtp サーバとしての機能、 apop によるメール受信機能を使用するための設定についてのメモです。
このメモは、RedHat Linux 7.3 の環境で作成しました。他の OS では、一部ユーザの作成などの方法に違いがありますが、同じように設定することは可能です。
一応、間違いがないように努力しているつもりですが、間違いや不明な点などがありましたら、メールで連絡して下さい。
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行目を飛ばして下さい。
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 で指定されたメールを受け取るように設定します。
# 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 の起動スクリプトを使って起動します。
# /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 ディレクトリにメールが届いていれば成功です。
このままでは、外部からのメールを受けつけることが出来ません。外部からのメールを受けつけるサーバを用意します。
このような機能を実現するツールとして、tcpserver や inetd などがあります。ここでは、tcpserver で外部からの接続を受けつけるように設定します。
tcpserver をインストールします。詳しくは別でまとめてみた tcpserver についてのメモ を参考にして下さい。
$ tar zxvf ucspi-tcp-0.88.tar.gz $ cd ucspi-tcp-0.88 $ su $ make # make setup check
tcpserver で使用するユーザの uid と gid を取得します。
# id -u qmaild 1001 # id -g qmaild 1001
ここで返される値をメモしておきます。ユーザを追加するときに指定していなければ、Linux などでは 500 以上の値になることが多いです。ユーザを追加するときに uid を指定していれば、その値になっています。
メール送信の接続を受けつけるリレーを許すホストの設定を行ないます。
例としては、 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 を起動します。ここでは、先ほど作成した 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 による認証に checkpw を使用します。また、同様の処理が可能なものとして、qpopper があります。
ユーザの Maildir ディレクトリにパスワードファイルを置くので、パスワードの一元管理は出来ません。
Linux や、*BSD などの Unix 系では、APOP を使用できるメールクライアントは多いですが、Windows 系では、少ないようです。使用者の多いと思われる Outlook Express や Netscape 付属のメールクライアントでは対応していません。
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
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 に以下のように追加しておくと、再起動時に 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 | メモ一覧ページへ戻る