安全で動作が速いと言われているメールサーバー、「qmail」のインストールを説明します。ちょっとややこしいので初心者には難しいかも・・・
Fedora Core2 |
FreeBSD 4.?でもやりました。 wgetはfetch に、makeはgmakeに置き換えてください |
やりたい事に応じていろんなインストール方法があるので、最初に方針立てをします。
私の場合は・・・・
ここの手順は、あくまでも私の行った手順です。これを真似してもあなたの環境で100%動くとは限りません。
とにかく探すのが大変。ここ何年とバージョンアップしてないゆえにいろんな人がいろんもん作ってるから・・・
・qmail本体
$ wget ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz
・メールのローカルタイム表示パッチ(デフォルトはグリニッジ標準時)
$ wget http://www.jms1.net/qmail/qmail-date-localtime.patch
tcpserver (外部接続管理)
$ wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
・quota制限検出機能パッチ(容量オーバーを検出し、その旨を送信者に返す・デフォルトでは容量一杯で受け取れなかったとき、ただのエラーとしか返さない)
$ wget http://www.qmail.org/qmail-1.03-quotas-1.1.patch
・アドレスレベルでの受信拒否を設定できるようにするパッチ
$ wget http://patch.be/qmail/badrcptto.patch
・APOP認証
$ wget http://optusnet.dl.sourceforge.net/sourceforge/checkpw/checkpw-1.01.tar.gz
・relay-ctrl(POP before SMTP)
$ wget http://untroubled.org/relay-ctrl/relay-ctrl-3.1.1.tar.gz
・daemontools(デーモンとして動かすプロセスの環境変数管理??)
$ wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
落とすものが一杯ですね。先の見える人は、この時点でめまいがする人もいるかも(苦笑)
qmail用のホームディレクトリを作成します。
# su -
# mkdir /var/qmail
qmailが使うユーザ・グループを作成します。qmailって、一つの機能で専用のユーザを使うんですね。だからセキュリティが堅いのかな?
# groupadd -g 900 nofiles
# useradd -u 900 -g nofiles -d /var/qmail/alias -s /bin/false alias
# useradd -u 901 -g nofiles -d /var/qmail -s/bin/false qmaild
# useradd -u 902 -g nofiles -d /var/qmail -s/bin/false qmaill
# useradd -u 903 -g nofiles -d /var/qmail -s/bin/false qmailp
# groupadd -g 901 qmail
# useradd -u 904 -g qmail -d /var/qmail -s /bin/false qmailq
# useradd -u 905 -g qmail -d /var/qmail -s /bin/false qmailr
# useradd -u 906 -g qmail -d /var/qmail -s /bin/false qmails
ダウンロードしてきたものの内、tarボールになっているものを展開(解凍)します。
$ tar zxvf qmail-1.03.tar.gz
$ tar zxvf checkpw-1.01.tar.gz
qmailのソースにパッチを当てます。
$ cd qmail-1.03
$ patch -p1 < ../qmail-date-localtime.patch #地方標準時対応パッチ
$ patch -p1 < ../qmail-1.03-quotas-1.1.patch #quota制限検出対応(エラーみたいなものが出るが気にしない)
$ patch -p1 < ../badrcptto.patch #アドレスレベルの受信拒否設定パッチ
$ patch -p1 < ../checkpw-1.01/qmail-popup-auth.patch #APOP/POP共存パッチ
最近のLinuxでは、glibあたりの使用が変わったのか、ソースに以下の修正が必要です。
とりあえずコンパイルしてみて「errno が・・・」(もちろん英語)というエラーが出たら試してください。
$ vi error.h
extern int errno; #この記述の行を以下のように変更
↓
#include <errno.h>
qmailのソースをコンパイル・インストールします
$ su -
# make setup 2>&1 | tee intall.log #BSDの場合はgmake
# make check
次のコマンドで設定ファイルを生成します。
ここで「I'm sorry 〜 DNS」のエラーメッセージが出た場合は、次のコマンドを実行する。
(この状態はDNSの設定が出来ていないときに発生する)
# ./config
設定ファイルが生成されたので中身を確認
# ./config-fast サーバーのフルドメイン
ここで、/var/qmail/control/locals に「localhost.localdomain」と自分のhostname を改行区切りで追記しておくといいかも
# cat /var/qmail/control/me #マシンのホスト名
サーバーのフルドメイン
# cat /var/qmail/control/locals #ローカル配送とする宛先アドレスのドメイン名
サーバーのフルドメイン
# cat /var/qmail/control/rcpthosts #受信を許可する宛先アドレスのドメイン名
サーバーのフルドメイン
# echo -e "localhost.localdomain\nサーバー名" >> /var/qmail/control/locals
起動スクリプトの雛型をコピーします。起動するための情報が記述されています。
# cp /var/qmail/boot/home /var/qmail/rc
qmailを起動して、この時点で正しく動作するか確認します。付属のメール送信コマンドからローカルの他のユーザに対してメールを配信します。
ユーザ:userにメールが届いているはずなので確認する。配信されていれば/home/user/Mailboxが作成されている。
# /var/qmail/rc & #起動スクリプトをバックグラウンドで実行
# /var/qmail/bin/qmail-inject #CUIのメールクライアント
To:user
Subject:Test
test.
Ctrl+Dを押して終了
確認が終えたら、一旦qmailを停止する。。
$ ls /home/user
Mailbox
$ cat /home/user/Mailbox
先ほどのメールの内容
# ps -ef | grep "qmail-send"
qmails 3059 31947 0 01:52 pts/8 00:00:00 qmail-send
# kill 3059 #3059はqmail-sendのプロセスID(その時に応じて変更)
Sendmailをqmailに置き換えるために、既に起動しているSendmailを停止します。
/etc/rc.d/init.d/sendmail stop #sendmailの停止
Sendmailのコマンドを使用するアプリケーションもあるため、qmailに橋渡しする仕組みを作ります。
# cd /usr/sbin
# mv sendmail sendmail.dist #sendmailのバイナリを別名に退避
# chmod 0 sendmail.dist #退避したものにアクセスできなくする
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail #退避したsendmailの代わりにラッパーにシンボリックリンクを張る
postmaster宛のエラーメールなどが/var/qmail/alias/Mailboxに届くようにします。
ローカル配送のメールがきたとき、1番はじめに/var/qmail/alias/.qmail-メールアドレスの@以前のファイルを参照しにいきます。該当のファイルが存在し中身が空ならそのディレクトリに、メールアドレスが書かれていればそのユーザに転送します。該当のファイルがなかったときは/home/メールアドレスの@以前を探しに行きます。
# cd /var/qmail/alias
# touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
# chmod 644 .qmail*
qmailはrootの権限では動いていないので、ユーザのホームディレクトリはotherでアクセスできる必要があります。もちろん/rootはotherにアクセス権がついていないので別のところにメールを保存させてあげる必要があります。
Postmaster宛てエラーメールを別のアドレスに転送する場合を以下を行う
# echo 転送したいアドレス > /var/qmail/alias/.qmail-postmaster
# echo 転送したいアドレス > /var/qmail/alias/.qmail-mailer-daemon
# echo 転送したいアドレス > /var/qmail/alias/.qmail-root
/home/ユーザディレクトリに.qmailを作成し、「./Maildir/」と記述します。
$ echo "./Maildir/" > ~/.qmail
全てのユーザに無条件にMaildirを適応するなら以下
修正後、qmailを再起動で有効。
# vi /var/qmail/rc
qmail-start ./Mailbox splogger qmail
↓修正
qmail-start ./Maildir/ splogger qmail
上ではMaildir形式でメールを保存しますよと宣言しただけで、器が出来てません。ということで器となるMaildirを作成します。
$ cd #メールを受け取るユーザでログイン
$ pwd #確認
/home/ユーザディレクトリ
$ /var/qmail/bin/maildirmake Maildir #Maildirの作成
useraddする度にMaildirの設定をしなくてもいいように/etc/skel雛型ディレクトリにあらかじめ仕込んでおく
# /var/qmail/bin/maildirmake /etc/skel/Maildir
まだ今の設定では外部からのメールを受け取れません。Portからqmailを結びつけるTcpserverをインストールします。
これでイントール完了。/usr/local/binに tcpserver が配置
$ cd ダウンロードしたディレクトリ
$ tar xzvf ucspi-tcp-0.88.tar.gz
$ cd ucspi-tcp-0.88
# #ここで最近のLinuxの場合はerrnoの部分を修正。5−1を参照
# make setup
# make check
# ls /usr/local/bin/tcpserver #確認
APOP認証ができるツールをインストールします。
$ tar xzvf checkpw-0.80.tar.gz
$ cd checkpw-0.80
# make setup check
このツールOSの認証を利用せず、独自のパスワードファイルを使用します。
パスワードファイルはユーザごとに持ち、
/home/ユーザディレクトリ/Maildir/.password (アクセス権600である必要がある)
に、中身をパスワードの平文を記述して保存します。
daemontoolsは普通のインストール方法とは異なりますので注意です。インストーラーがバイナリで用意されています。
# mkdir -p /package
# chmod 1755 /package
# cd /package
# wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
# tar zxvf daemontools-0.76.tar.gz
# cd admin/daemontools-0.76
# vi src/error.h #ここで最近のLinuxの場合はerrnoの部分を修正。5−1を参照
# package/install
まずはアーカイブの展開から
ここでちょっとソースを変更します。製作者とのコンパイラの仕様の違いからか制御するファイルにアクセスできないからです。
# tar xvfz relay-ctrl-3.1.1.tar.gz
# cd relay-ctrl-3.1.1/
コンパイルします
# vi relay-ctrl-allow.c
... (関数make_file)
switch (do_chdir()) {
case 0: return;
case 2: mode = 0666; break;
default: mode = 0600; break; /*←46行目*/
↓この行を変更
default: mode = 0644; break; /*←46行目*/
# vi relay-ctrl-check.c
... (関数main)
if (expiry <= 0) expiry = 900;
if ((rc = getenv("RELAY_CTRL_RELAYCLIENT")) == 0) rc = "";
if ((ip = getenv("TCPREMOTEIP")) == 0) /*←85行目*/
↓この行を変更
if ((ip = getenv("TCPREMOTEIP")) == 0 || (ip= validate_ip(ip))==0) /*←85行目*/
このツールが使用するディレクトリと設定ファイルを作成します。
# make
# ./installer
# mkdir /var/spool/relay-ctrl
# mkdir /var/spool/relay-ctrl/allow
# chmod 700 /var/spool/relay-ctrl
# chmod 777 /var/spool/relay-ctrl/allow
# mkdir /etc/relay-ctrl
# echo "/var/spool/relay-ctrl/allow" > /etc/relay-ctrl/RELAY_CTRL_DIR #リレーコントロールの認証記録ファイルのディレクトリの場所の設定
許可した接続の寿命の設定(秒単位)
無条件に接続を許可するドメインの指定
# echo '900' > /etc/relay-ctrl/RELAY_CTRL_EXPIRY
expiry(認証記録ファイル)の自動削除設定
# echo '' >> /etc/relay-ctrl/RELAY_CTRL_RELAYCLIENT #空っぽの方が良いみたいです
# crontab -e #エディッタが立ち上がる #5秒おきに起動
*/5 * * * * /usr/local/bin/envdir /etc/relay-ctrl /usr/local/bin/relay-ctrl-age
あとは、起動スクリプトを/etc/rc.d/init.d に配置して起動するのみ!
起動スクリプトは記載すると長くなるので、ココに置いておきます。恥ずかしながら私のお手製ですが・・適当に改造して使ってやってください。
# cp qmail /etc/rc.d/init.d #起動スクリプトのファイル名をqmailと名づけたとします。
# chmod 755 /etc/rc.d/init.d/qmail
qmailの開始
qmailの停止
service qmail start
qmailの再起動
service qmail stop
qmailの起動チェック
service qmail restart
service qmail status
ここの手順は、あくまでも私の行った手順です。これを真似してもあなたの環境で100%動くとは限りません。