サーバーを構築する

対応するOS

このマニュアルにおいて、対応するオペレーティングシステムはFreeBSD(フリービーエスディー)になります。環境の前提として、別のコンピューターから構築するサーバーにLAN接続されていることを想定しています。

インストール手法

サーバーの構築では、対応するさまざまなプログラム(ソフトウェア)をインストールすることになりますが、インストールの手法には以下の二つの方法があります。

バイナリ―インストール
OSとそのコンピューターに応じた機械語――つまり16進数で書かれたコンピューターが理解しやすい言語、バイナリー(BINARY)形式と呼ばれる――を直接インストールする方法。
ソースインストール
C言語という人間が理解しやすい言語で書かれたテキストファイルを、機械語に翻訳してインストールする方法。

バイナリ―インストールはWindowsOSの世界では、もっともポピュラーな手法ですが、FreeBSDやLinuxなどPC-UNIXでは、ソースインストールが一般的です。最近では、各ディストリビューションがバイナリ―形式でソフトウェアを配布していますが、最新版が反映されるのに時間がかかるという理由で、ソースインストールを好む人もいます。また、UNIXの世界ではプログラムの配布は、プログラムを書いたテキストファイル(ソースコードファイル)で行われます。そのような理由から、ここで実践されるインストール手法は、ソースインストールとなります。

ドメインの取得について

閉じたネットワーク(会社や家族の中だけのネット)ではドメインの取得は特に必要ありませんが、外部からメールを受け取る場合はドメインを取得しなければなりません。ここでは、私の取得したドメイン mgfcompany.net で説明します。ドメインは年間千円前後から使えますが、「.net」や「.jp」など種類によって値段が変わります。

ドメイン

インターネット上での各端末はIPアドレス 292.262.355.212 などの数字によって分けられています。あなたが使っている、そのパソコンにもネットに接続されている限り、このような番号が割り振られています。

ここで、あなたが自分のパソコンでウェブサーバーを立ち上げたとします。あなたはお友達に自分のウェブページを紹介するときに、この割り振られている番号を教えることになります。つまり http://234.112.334.111/ のようなアドレスです。

しかしこれだと数字の羅列なので、味気ないと思います。0〜9しかない電話でならともかく、やはりパソコンです。名前を付けた方が、便利であることはだれでも分かるでしょう。そこで考え出されたのがドメインネームです。ドメインについてはさまざまな管理のしくみがあるので、ここでは説明しませんが、ドメインの存在は、アドレスが覚えやすいといったことだけでなく、固定IPアドレスを持たない端末でもダイナミックDNSという技術によってサーバーの公開が可能できるという恩恵を受けることが出来ます。

FreeBSDを仕込む

ここでは、FreeBSDのインストールは詳しくは説明しません。小金丸さんがリリースされている日本語インストーラーからインストールすると大変分かりやすいと思います。 有限会社小金丸コンピュータエンジニアリングサービス

構築の際にネックになるのは、ソースインストールに必要なライブラリーやプログラムが最初からシステムに入っているかどうかです。FreeBSDのインストールの際、目的はサーバーの構築ですから、必要のないパッケージはインストールしない方がハードディスクの使用容量も抑えることが出来るのですが、初心者の場合、そもそもなにが必要かどうか分からないと思います。とりあえずはダイエットのことは考えず、X-windowシステム以外ものを全てインストールすることで、サーバーの構築は大丈夫だと思います。

DaemonToolsのインストール

DaemonToolsはサービス監視プログラムです。なんらかのトラブルでサービスがストップしても自動的に再起動してくれます。また、起動設定が簡単で管理がしやすいので、qmailにはよく利用されます。

構築中のサーバーがインターネットに繋がっているのであれば、必要なソースファイルを直接サーバー機にダウンロードしましょう。まず、インストールの作業場所を用意します。新しくディレクトリー(フォルダ)であれば名前は何でも構いません。

# mkdir /tools/src/

そして、作ったディレクトリーに移動します。

# cd /tools/src/

fetch から続くコマンドをコンソールから入力して、ダウンロードしてください。

# fetch http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
参考Daemontools日本語訳マニュアル

作業用のディレクトリーをルート/に作ります。

# mkdir -p /package

作ったディレクトリーに適切なパーミッションを設定します。

# chmod 755 /package
# chmod +t /package

作業用ディレクトリーに移動します。

# cd /package

ダウンロードしたファイルを展開する

ダウンロードしたファイルはほとんど圧縮されています。PC-UNIXではファイルを圧縮する場合、どの圧縮ルールを使ったかでファイル名の最後に.ドットから続く圧縮形式名を連ねるのが決まりとなっています。

qmail-1.03.tar.gz
であれば、qmail-1.03という名前のファイル(またはフォルダー)がtarという形式の圧縮ルールで圧縮されさらにgzというルールで2重に圧縮されているということになります。2重に圧縮されているのは、この方が圧縮率が高いためだと思われます。

では、ファイルを展開しましょう。tarコマンドを使って展開します。

# tar xvpfz /tools/src/daemontools-0.76.tar.gz

インストールします。

# cd admin/daemontools-0.76
# ./package/install

DaemonToolsをインストールすると、新たに以下のファイルなどが作られます。

ディレクトリ
/service
/command
ファイルとシンボリックリンク
/package/admin/daemontools/command/下に実行用バイナリ―ファイル
/command/下にそのシンボリックリンク
/usr/local/bin/下にさらにシンボリックリンク
/etc/rc.localに以下の起動スクリプトが追加されます。
csh -cf '/command/svscanboot &'

動作確認

 DaemonToolsはLinux系OSではインストール時に自動的に起動されるようになっていますが。BSD系ではシステムの再起動が必要なようです。再起動するには以下のコマンドを入力します。

# reboot

再起動したら、動作の確認をしましょう。 以下のコマンドを入力して下記のように出力されれば、動作しています。

# ps ux | grep svscan
root 27754 0.0  0.7  1484   816  p0  S+  10:23PM  0:00.01 grep svscan
root   339 0.0  0.5  1244   604 con- S   Thu03AM  1:39.68 svscan /service

メールサーバーの構築

メールの発信基地であるメールサーバーシステムをインストールします。ここで採用するのはシンプルさで定評のあるqmail(キューメ―ル)です。

先住者のチェック

自動的にインストールされたかもしれないsendmailと呼ばれる別のメールシステムを削除します。とりあえず下記のコマンドをコンソールから打ち込んで、sendmailが住んでいるか確認してください。

telnet localhost 25

ここで、

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

などと表示されもとのコマンド入力に戻らない場合、既にsendmailがインストールされていますので、quit と入力して、先ほどのコマンド入力画面に戻ってください。そして直ちにsendmailを削除する行程を行ってください。

Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused

と表示される場合はsendmailはインストールされていません。されていても実行される設定とはなっていません。qmailのインストールを続けられます。

sendmailにご退去いただく方法

システム設定ファイルであるrc.confファイルを変更します。

このファイルの環境変数を変更することで、rc.d内にある起動スクリプト(この場合は/etc/rc.d/sendmail)の起動プロセスに変化を与えて、起動のON、OFFができるようですが、sendmail_enable="YES"という文字列がある場合は"YES"を"NO"にしてください。記述がない場合は書き加えてください。FreeBSD5.4は記述がありましたが、FreeBSD6.0には記述がありませんでした。

# vi /etc/rc.conf
 sendmail_enable="no"  ← こうする。

FreeBSD7.0では、/etc/defaults/rc.conf の以下の記述にも変更を加ておきます。

ローカルホストだけで動くMTAが組み込まれているようです。

# vi /etc/defaults/rc.conf

 sendmail_submit_enable="NO"  ← こうする。

もし上記の作業を行っても、25番ポートが使用中のようでしたら、起動スクリプト/etc/rc.d/sendmailを削除してもいいでしょう。

rm /etc/rc.d/sendmail

それから、FreeBSD標準のmailコマンドなどは、/usr/sbin/sendmail を見るので、そこへシンボリックリンクを張って、qmailのラッパーを使うように仕向けます。これでsendmailを前提に動く、コマンドやcgiなどもqmail対応で動かすことができます。

rm /usr/sbin/sendmail
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

qmailを用意する

DaemonToolsをダウンロードしたときと同じく作業用のディレクトリーに移動してからfetch から続くコマンドをコンソールから入力して、ダウンロードしてください。

qmail本体 qmail-1.03.tar.gz
qmailの本体です。
# fetch ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz
ローカルタイム対応パッチ qmail-date-localtime.patch
 qmailはそのままだと、メールの受信時刻などがGMT(グリニッジ標準時刻)表示になるため日本だけで使用する場合には使い勝手が悪いので、パッチを当てます。今回、パッチが行方不明なので急遽こちらのサーバーからダウンロード可能としています。ご了承ください。
# fetch http://www.mgfcompany.net/free/qmail/qmail-date-localtime.patch
 
不正中継チェックプログラム対策パッチ
qmail-1.03は第三者中継をしないということですが、それが不完全であるとしてこのパッチを紹介する人がいるようです。調べたところ、不正中継チェックサイト等に「不正中継する」と誤診されるのを回避するパッチのようです。誤解のなきように。
# fetch http://www.qmail.org/qmail-smtpd-relay-reject

圧縮ファイルを展開する

では、ファイルを展開しましょう。tarコマンドを使って展開します。

# tar xvfz qmail-1.03.tar.gz

展開が終わると、qmail-1.03ディレクトリーが出来上がるのでそちらに移動します。

# cd qmail-1.03

パッチを当てる

パッチはソフトウエアを最新の版にしたり、その一部分だけを置き換えて改造したりするときに使うファイルのことです。「パッチを適応する」とか、「パッチを当てる」などといった言い方をします。では、qmail-1.03のソースファイルにパッチを当てて行きます。

# patch -p1 <../qmail-date-localtime.patch
# patch -p1 <../qmail-smtpd-relay-reject

インストール先の用意

qmailのインストール先を作成します。下記の例はFreeBSDでのコマンドです。他のPC-UNIXの場合はコラムをご覧下さい。

# mkdir /var/qmail

ユーザーグループの作成

# pw groupadd nofiles
# pw groupadd qmail

ユーザーの作成

# pw useradd alias  -g nofiles -d /var/qmail/alias -s /nonexistent
# pw useradd qmaild -g nofiles -d /var/qmail -s /nonexistent
# pw useradd qmaill -g nofiles -d /var/qmail -s /nonexistent
# pw useradd qmailp -g nofiles -d /var/qmail -s /nonexistent
# pw useradd qmailq -g qmail -d /var/qmail -s /nonexistent
# pw useradd qmailr -g qmail -d /var/qmail -s /nonexistent
# pw useradd qmails -g qmail -d /var/qmail -s /nonexistent

コンパイルとインストール

qmailをコンパイルしてインストールします。

# make setup check

これで、qmailの実行ファイル群が/var/qmail 以下にインストールされました。

qmailのイニシャライズ

取得したドメイン名、閉じたネットワークなら適当なドメイン名で、qmailの設定ファイルを初期化します。この作業はqmailを使う際必ず必要になります。

# ./config-fast mgfcompany.net ← 自分のドメインネーム

この作業で /var/qmail/control/me と /var/qmail/control/rcpthosts のファイルに、ドメインが書き込まれます。このrcpthostsはここに書かれたドメインしかqmail は受け取りません。(RELEYCLIENTという環境変数が設定されている場合は無視されます)。そしてqmailの動作を決めるいくつかのコントロールファイルが /var/qmail/control 以下に用意されます。コントロールファイルの詳細については、「コントロールファイルの詳細」をご覧下さい。今の時点では気にすることはありませんので、このまま読み進めて行ってください。

qmail起動ファイルの用意

qmailの基本部分を起動させるファイルを別名で用意します。

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

homeというファイルを一つ上層のディレクトリーにrcという名前でコピーします。

つぎにrcファイルを編集します。qmailはデフォルトではmailbox方式ですが、より便利なMaildirという方式にします。

# vi ../rc

vi は標準のテキストエディターです。最初は編集モードで起動しますので、文字を書くときは任意のカーソル位置で[i]キーを押し、書き込みモードに移行してからタイプします。書き終わったら[esc]キーで元の編集モードに戻ります。文字を消すときは編集モードで消したい文字の上で[x]キーを押します。変更をセーブして終了するには、編集モードで[:wq]を入力します。

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Mailbox splogger qmail

               ↓
               
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/

sploggerから続く文字列はログを取るときに設定です。今回ログはdaemontoolsを使用してログを記録するので、この部分は削除します。

\マークのこと

スクリプトファイルに記述する場合、改行した方が見やすい場合は\マークを記述し次に改行します。これはエディターでは表示上改行されますが、スクリプトファイルとして実行される場合は\マークの次にくる改行コードは無視される仕組みになっています。 文字コードによってはうまく無視されない場合がありますので、出来るなら1行で書きましょう。このページでは、横サイズの文字数が溢れる場合には同じルールに従って\マークをつけています。

tcpserverでセキュリティ

セキュリティ強化のために推奨されているtcpserverをインストールします。このtcpserverは、qmailへ接続要求があった場合、RELEYCLIENTという環境変数を見て、接続してきている相手のIPアドレスがそこに書かれていれば接続を許すというものです。qmailではpop認証ソフトウェアと組み合わせて使います。

tcpserver「ucspi-tcp」 ダウンロード

ucspi-tcpをダウンロードします。

# fetch http://tools.qmail.jp/ucspi-tcp/ucspi-tcp-0.88.tar.gz

展開して移動します。

# tar xvfz ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88

make してインストールします。

# make
# make setup check

これで、/usr/local 以下にtcpserverのツール群がインストールされました。

vpopmailのインストール

qmailにpop認証を加えるには、認証プログラムが必要になります。認証プログラムにはいろいろなものがありますが、UNIXのユーザーを追加しなくても、メールのユーザー管理がしやすい、vpopmailをインストールします。

vpopmailのダウンロード

vpopmailをダウンロードします。

# fetch http://jaist.dl.sourceforge.net/sourceforge/vpopmail/vpopmail-5.5.0.tar.gz

展開して移動します。

# tar xvfz vpopmail-5.5.0.tar.gz
# cd vpopmail-5.5.0

ID89のvchkpwというグループを作る

vchkpwというユーザーグループを作ります。

# useradd -g vchkpw -u 89 -d /home/vpopmail vpopmail
# pw useradd -g vchkpw -u 89 vpopmail

これで、グループvchkpw ID89 に所属するユーザーvpopmailが出来ました。

インストール先を作成する

# mkdir /home/vpopmail
# chown vpopmail:vchkpw /home/vpopmail
# chmod 755 /home/vpopmail

configure コンフィギャー

UNIX系のソースインストールでは、コンパイルする前にconfigureというスクリプト(簡易プログラムみたいなもの)を実行する必要のあるものが多くあります。ここでは、qmailにvpopmailの持つPOP Before SMTP機能と連携させるためにconfigureで以下のように設定して、コンパイルします。

# ./configure --enable-roaming-users=y
# make
# make install-strip

POP Before SMTPは、POPサーバーがユーザーを認証した際にそのIPを環境変数REALYCLIENTに記録するものです。記録されたこの環境変数は、tcpserverにより参照されpop認証を通過したユーザーだけが、SMTP(配送)サーバーの使用を許されるという仕組みです。

記録されたIPの有効時間の変更

環境変数RELAYCLIENTに記録されたIPには有効時間があり、vpopmailのデフォルト設定では3時間となっていますが、configureで以下の文字列を追加すれば、指定した分数の時間にできます。

--enable-relay-clear-minutes=1/2

これであれば3時間の2分の1、1時間30分になります。

リレー許可DB(DATABASE)ファイルの作成

tcpserver用のDBファイルを作成します。これには、tcpserverのツール、tcprulesを使います。その前に置き場所を作りましょう。

# mkdir /home/vpopmail/etc
# cd /home/vpopmail/etc

DBファイルの元になるtcp.smtpというテキストファイルを作ります。

# echo "127.:allow,RELAYCLIENT=""" > tcp.smtp

DBファイルに変換します。

# /usr/local/bin/tcprules /home/vpopmail/etc/tcp.smtp.cdb \
tcp.smtp.tmp < tcp.smtp

記録されたIPを消去する設定

UNIX系のOSにはcron(コロン)という一定周期で自動的に実行する仕組みがあります。これを使って、定期的に環境変数RELAYCLIENTをチェックし、有効時間が切れていればIPを消去するように設定します。下記のコマンドをタイプすると、自動的にテキストエディタが起動し、cronの設定ファイルを開きます。

# crontab -e

下記のとおりにタイプして保存します。

40 * * * * /home/vpopmail/bin/clearopensmtp > /dev/null 2>&1

これを説明しますと

分 時 日 月 曜日 コマンド

の順になっていて、上記の例では、毎分40分にclearopensmtpというコマンドを実行するという意味になります。

以上でメールシステムに必要なプログラムはすべて組み込めました。あとは起動の設定と実際にユーザーを登録して送受信チェックをします。

コントロールファイル

/var/qmail/control 以下にはqmailの挙動を調整できる制御ファイル群があります。

qmail-smtpd 関連のコントロールファイル

qmail-smtpdはSimple Mail Transfer Protocol)(SMTP)の規定に従って、メールを受信します。この受信には、同じようなメールサーバー(MTA)からのメールも、リモート送信者MUAからのメールも受信します。そして、それぞれのメールをqmail-queueに登録し、ローカル(自サーバー管理ドメインのユーザー)へのメールボックスへの転送や、リモート送信であれば、再び外部の宛先を管理しているMTAに接続への手配をします。

badmailfrom 受信拒否発信アドレス
ここに記述のあるメールアドレスからのメールは受け取りません。ここに記述する拒否アドレスはメールヘッダーにあるfromアドレスでなく、Return-pathにあるメールアドレスを指定します。迷惑なメールが同じアドレスから来る場合、このファイルに記述することで、受信しなくなります。badmailfromに書く行は、メールアドレスを書く以外にも@から続くドメインだけを書いてもOK。その場合そのドメインからのメールはすべて受け付けません。
databytes 受信メールサイズの制限(初期値は0)
受信メッセージ及び添付ファイルの容量制限を掛けます。受信するメールサイズが上限を超えると、qmail-smtpdプログラムは恒久的エラーを返します。
localhost IPアドレス対応ホスト (初期値me)
ユーザー名@238.213.215.214などの宛先アドレスで来たメールのIPアドレス部分をlocalhostネームで置き換えます。
rcpthosts 受信可能ドメイン一覧
RCPTに現れてよいドメイン名 ここに載っていないドメイン宛のメールは一切受け取りません。また、環境変数RELAYCLIENTが設定されているときは、無視されます。
morercpthosts
追加分のrcpthostsです。rcpthostsのドメイン数が50を越える場合はこちらに追加します。
smtpgreeting
SMTPに最初に接続したときに、返してくれるあいさつ文を設定します。この設定がないときはmeに記述されたドメイン名を返すようですが、なぜか私のシステムでは/etc/hostsに登録されたサーバー名.ドメイン名を返しました。(telnet接続で実験済み)
timeoutsmtpd
リモート接続のSMTPクライアント(メーラーMUA等)からのデータを待つ秒数(初期値は1200秒)。

qmail-send 関連のコントロールファイル

qmail-queue により登録されたメールはqmail-sendが処理を行います。ローカル(自ドメインまたはヴァーチャルドメイン)受信者あてのメールはqmail-lspawnを呼び出し、リモート宛の受信者(外部ドメイン)へはqmail-rspawnを呼び出します。

bouncefrom [MAILER-DAEMON]
差し戻し責任者名、メッセージが配達不能の場合に表書き発信人(Return-path)に通達する際(シングルバウンズ通知)、Fromヘッダーに付ける名前です。デフォルトはMAILER-DAEMONです。表書き発信人は空になります。
bouncehost [me]
上記のFromの部分のホスト名です。初期値はmeに記録されているドメイン名になります。
concurrencylocal [10]
ローカル配送(自ドメイン内の転送)の最大多重度、0に設定すると、ローカル配送されなくなります。デフォルトは10です。
concurrencyremote
リモート配送(他ドメインへの転送)の最大多重度、0に設定すると、リモート配送されなくなります。デフォルトは20です。
doublebouncehost [me]
二重バウンスホスト名 受け取ったメールの配送先がない場合(外部へのリモート配送でも内部でのローカル配送に関わらず)表書き差出人(return-path)にバウンスをしますが、そのバウンスも配送不能な場合(偽称されている場合など)下記のdoublebouncetoのユーザー名と合わせたdoublebounceto@doublebouncehostに送ります。このドメイン名の初期値はmeに記述されたドメインです。
doublebounceto [postmaster]
バウンスメールが配送できないときに通知する宛先名です。上記のdoublebouncehostと合わせて使われます。
envnoathost [me]
表書き受信者アドレス(Return-path)に@が無い場合に付け加える@から下のドメイン名。通常の外部からのリモート送信では必要なし?
locals [me]
ローカル処理すべきドメインの一覧です。この設定ファイルがない場合はmeが参照されます。複数のドメインで動かす場合はlocalsへのドメイン記述が必要になります。
percenthack
このファイルに登録したパーセントハックに対応するドメインが、メールアドレスにある場合、ユーザー名に%が含まれている場合、それを@に書き換える機能。namba%address@mgfcompany.net の場合、namba@address になるそうである。この機能の使い道は私にはよくわかりません。
queuelifetime [604800 (7日)]
キューに滞在できる秒数の設定、デフォルトでは7日間。つまりメールを送った後、もし相手先のSMTPサーバーが一時的エラーを返す場合、7日間はメールの再接続、再配信を続けます。秒数を経過した後も一回だけ再送信を試みますが、その場合一時エラーになっても送信不能とみなされます。
virtualdomains
仮想ユーザまたは仮想ドメインの一覧
ここの記述されるドメイン名user@domain:prependは、バーチャルドメインなのでローカル配信扱いになります。私の環境のインストール時には、
mgfcompany.net:mgfcompany.net
になっていました。

qmail-inject 関連のコントロールファイル

qmail-injectは読み込んだメールメッセージに、ヘッダ部分に情報を追加(前処理)をして,qmail-queueを呼びます。

defaultdomain
ドットがないホスト部にはこの名前を追加します。省略時にはmeを参照するようになっています。
defaulthost
省略時はmeになっています。ホスト部のないアドレスにはこの名前を追加します。defaulthostはホスト名である必要はなくドメイン名などでも構いません。ただしドットがない場合は、dafaultdomainが付けられます。
idhost
Message-IDにつけるホスト名です。ホスト名である必要はありませんが、もドメイン内に複数のMTAがある場合は、違う名前を付けなければなりません。
plusdomain
プラス(+)で終わるドメイン名に、この名前を付け足します。もしdefaulthostのホスト名がドットを含まないで、最後が+のときはdefaultdomainでなくpulsdomainを優先します。

qmail-remote 関連のコントロールファイル

リモートホスト(外部SMTPサーバー管理のユーザー宛)にメッセージを送ります。このqmail-remoteは、実際にSMTPを使って、相手のサーバーへ接続します。

helohost
SMTP開始ホスト名 相手のSMTPサーバーに対してhelloを返すときだけ使われるホスト名。通常はmeが参照される。
smtproutes
SMTP経路指定です。別のMTAを経由する場合に指定します。
domain:relay
relayの部分には、ホスト名(またはローカルIPアドレス)が入ります。私の環境では、server.mgfcompany.netといってserverというホスト名を付けていますが、MTAはこれしかありませんので、経路指定は必要ありません。もし、mail.mgfcompany.netという別のマシンがあれば、そちらを経由させることができます。
例
 mgfcompany.net:mail:26
:26はポート番号を25ではなく別のポートを使い場合の設定です。

Daemontoolsによる起動

起動スクリプトの作成

起動スクリプト自体は、/var/qmail/にservicesというディレクトリーに置きます。

まず、ディレクトリーを作ります。

# mkdir /var/qmail/services/
# cd /var/qmail/services
# mkdir qmail
# mkdir smtpd
# mkdir pop3d
# chmod +t /var/qmail/services/qmail
# chmod +t /var/qmail/services/smtpd
# chmod +t /var/qmail/services/pop3d

次にスクリプトを作成します。それぞれ、qmail、smtpd、pop3dの各ディレクトリにrunというファイルを作成します。

# vi qmail/run

qmail起動スクリプト ファイル名 /var/qmail/services/qmail/run

#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
exec /var/qmail/rc

以上を入力し保存終了します。同じように残り2つのスクリプトも同じように作成します。

smtpd起動スクリプト ファイル名 /var/qmail/services/smtpd/run

# vi smtpd/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
exec tcpserver -H -R -l mgfcompany.net -v -x \
/home/vpopmail/etc/tcp.smtp.cdb -u \
<qmaildのUID> -g <nofilesのGID> 0 smtp \
/var/qmail/bin/qmail-smtpd 2>&1

<qmaildのUID>と<nofilesのGID>の部分に対応する番号を書きます。

例 <qmaildのUID> → 1002

<>は要りません。

qmaildのUIDやnofilesのGIDを調べるにはidコマンドを使います。

# id qmaild

pop3d起動スクリプト ファイル名 /var/qmail/services/pop3d/run

# vi pop3d/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
exec tcpserver -H -R -l mgfcompany.net -v 0 pop3 \
/var/qmail/bin/qmail-popup mgfcompany.net \
/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1

mgfcompany.netの部分は、ご自分のドメイン名をつけてください。

runスクリプトに実行権を設定する

スクリプト類は実行権を付けなければ起動できません。以下のコマンドをタイプして実行権を設定します。

# chmod +x /var/qmail/services/qmail/run
# chmod +x /var/qmail/services/smtpd/run
# chmod +x /var/qmail/services/pop3d/run

ログ記録プログラムの起動スクリプト

ログ用の起動スクリプトも用意します。

# mkdir qmail/log
# vi qmail/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \
/var/log/qmail
# mkdir smtpd/log
# vi smtpd/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmails /usr/local/bin/multilog t \
/var/log/smtpd
# mkdir pop3d/log
# vi pop3d/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmailp /usr/local/bin/multilog t \
/var/log/pop3d

ログのrunスクリプトにも実行権を設定する

以下のコマンドをタイプして実行権を設定します。

# chmod +x /var/qmail/services/qmail/log/run
# chmod +x /var/qmail/services/smtpd/log/run
# chmod +x /var/qmail/services/pop3d/log/run

ログの保存先を用意する

保存先がないと、起動しないので忘れずに用意します。

# mkdir /var/log/qmail
# chown qmaill:nofiles /var/log/qmail
# chmod 700 /var/log/qmail
# mkdir /var/log/smtpd
# chown qmails:nofiles /var/log/smtpd
# chmod 700 /var/log/smtpd
# mkdir /var/log/pop3d
# chown qmailp:nofiles /var/log/pop3d
# chmod 700 /var/log/pop3d

起動

Daemontoolsの管理するディレクトリー/service から、これまでに作った起動スクリプトにシンボリックリンクを張ります。Windowsで言えば、ショートカットの作成と同じようなものです。

# ln -s /var/qmail/services/qmail /service/qmail
# ln -s /var/qmail/services/smtpd /service/smtpd
# ln -s /var/qmail/services/pop3d /service/pop3d

起動確認

起動確認にために、Daemontoolsのコマンドを使います

以下のコマンドをタイプして、起動時間がちゃんと経過しているかをチェックします。もし、起動時間が0であったり、1であったりする場合は、起動に失敗しています。スクリプトやディレクトリーなどのパーミッションをもう一度チェックしてください。

# svstat /service/qmail
/service/qmail: up (pid 351) 1685292 seconds


# svstat /service/smtpd
/service/smtpd: up (pid 355) 1685330 seconds


# svstat /service/pop3d
/service/pop3d: up (pid 358) 1685358 seconds

メールチェック確認

メールシステムが問題なく動いているかチェックします。

バーチャルドメインの作成

バーチャルドメインを作成します。作成にはvpopmailでインストールされたスクリプトを使います。

# cd /home/vpopmail/bin
# ./vadddomain mgfcompany.net 管理者用パスワード

ドメイン名にはご自分で取得したドメインを、管理者パスワードには任意の英数字を指定してください。

バーチャルドメインを追加すると、/var/qmail/control/ 以下の各コントロールファイルに設定が追加されます。コントロールファイルについては、後で説明します。

/var/qmail/control/locals
/var/qmail/control/rcpthosts
/var/qmail/control/virtualdomains

スクリプト実行について

スクリプトをコンソール画面で実行するには、相対または絶対パスを指定します。通常テキストファイルを開くためにファイルを指定する場合、現在のカレントディレクトリーにファイルがある場合は、パス指定は要らないのですが、スクリプトの場合はなぜか指定がいるようです。現在のカレントディレクトリーにスクリプトがある場合は、「./」を先頭につけて、現在のディレクトリーを明示するようにします。

バーチャルユーザーの作成

# cd /home/vpopmail/bin
# ./vadduser ユーザー名@mgfcompany.net ユーザーパスワード

バーチャルユーザーを作成すると以下のファイルと設定が追加されます。 /home/vpopmail/domains/ドメイン名 /home/vpopmail/domains/ドメイン名/postmaster/Maildir /home/vpopmail/domains/ドメイン名/vpasswd /home/vpopmail/domains/ドメイン名/vpasswd.cdb

メールユーザーエージェント(MUA)で確認

MUAとはみなさんが、一般的にパソコンで使っているメールソフトのことです。 これらメールソフトで、サーバーが正常に機能しているか確認します。

アカウント設定で以下の設定で接続してください。

SMTPサーバー mgfcompany.net 
popサーバー mgfcompany.net
ID			ユーザー名@mgfcompany.net
パスワード	*******

まずは、POP Before SMTPは正常に機能していることを確認するために、メールを送ってみてください。宛先は、ご自分の別の(外部メールサーバー)のメールアドレスがいいでしょう。携帯メールだと確認も簡単ですが、携帯会社のメールサーバーはダイナミックDNSサーバーからのSMTP接続を拒否している節があり、テストに使えない場合があります。

エラーメッセージが表示されて、送信ができない(メールサーバーが受け付けてくれない)なら正常です。もし送信できてしまったなら、設定を間違っています。

次に、受信してみてください。なにもエラーが出なければ正常です。

そして、もう一度、さきほどのテストメールを送信してください。無事に送信完了となったらひとまず成功です!

バーチャルユーザーの削除

# ./vdeluser ユーザー名@mgfcompany.net

バーチャルユーザーのパスワード変更

# ./vpasswd ユーザー名@mgfcompany.net パスワード

バーチャルなドメインとそうでないドメイン

今回、メールサーバーの構築にはバーチャルドメイン&ユーザーが使えるvpopmailを使っているのですが、ここで、バーチャルなドメインと普通のドメインの違いを明確にしておきたいと思います。

ドメインは割り振られたIPアドレスと対を成すものです。mgfcompany.netというドメインは必ず数字のIPアドレスになります。しかし、実際のところ一つのIPアドレスで複数のドメインに対応させることができます。例えば、mayutarou.net などというドメインを取得し同じように、DNSサービスに登録すると、全く違うドメインで同じIPアドレスのコンピューターにアクセスすることができるのです。ここで、サーバーの方に手を加えればウェブサーバーでもメールサーバーでも、参照されたドメイン名に従って、動作を変えることが出来るのです。また、別のドメインを取得しなくても、既に取得したドメインからの派生であれば自由に、ドメイン名を増やすことも出来ます。

例えば、doc.mgfcompany.net とか、
メールであれば ユーザー名@x68k.mgfcompany.net
という感じになります。

ほんとうは、一つの名前しかないはずなのに、いくつものあだ名を持っている、それがバーチャルドメインと言えそうです。

停止と再起動コマンド

Daemontools下でのソフトウェアの停止と再起動は実に簡単です。

停止

# svc -d /service/qmail

起動

# svc -u /service/qmail

自動起動しないようにする

自動起動しないようにするには、/service/サービス名/のディレクトリーにdownというファイルを作ります。中身はなにもなくて構いません

# touch /service/サービス/down

svc -d コマンドで一時停止させて、サービスディレクトリーにdownファイルを置いておけば、当面止めておく分には大丈夫です。再起動させれば監視自体もしなくなるのでメモリーも節約できます。でも、サーバーを再起動させたくないという場合があると思います。そういうときは以下の方法を使います。

サービスの停止

# svc -d /service/サービス
# svc -d /dervice/サービス/log 

サービスディレクトリー名を変更する

サービス名の先頭に.(ピリオド)を付けます。

# mv /service/サービス /service/.サービス

Daemontoolsに終了シグナルを送る

# svc -x /service/.サービス/log
# svc -x /service/.サービス

これで、完全にサービスを削除できました。

外部の送信サーバーへ送信依頼をする

# vi /var/qmail/control/smtproutes

:auth.gate-on.net:587

バウンスメールをバウンスせずにさよなら

vi /var/qmail/control/alias/.qmail-default

 # だけ頭に記入して セーブ

 chmod 644 /var/qmail/alias/.qmail-default
 chown alias:nofiles /var/qmail/alias/.qmail-default
Daemontools下でのソフトウェアの停止と再起動は実に簡単です。

以上、メールサーバーのインストールを駆け足でお送りしました。これで、とりあえずは第三者中継もされず、健全に運用して行くことができると思いますが、トラブルへの対処や、こうしたい! などの要求も出てくると思います。さらに役に立つ情報を、備忘録として、また紹介して行きたいと思います。