qmailは D.J.Bernstein氏作の高性能なMTAです。
バーチャルドメインで運用しているのでこのの組合せが便利かと。
Apache は 1.3.20で PostgreSQL + PHP4が動くようにしてます。
suexec稼働させてます。
daemontool-0.70
ftp://ftp.jp.qmail.org/qmail/old/daemontools-0.70.tar.gz
新版がでてます。
daemontool-0.76
ftp://ftp.jp.qmail.org/qmail/daemontools-0.76.tar.gz
qmail 1.03
ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz
vpopmail 4.9.10
http://www.inter7.com/vpopmail/vpopmail-4.9.10.tar.gz
qmailadmin 0.45
http://www.inter7.com/qmailadmin/qmailadmin-0.45.tar.gz
tcpserver 0.88
http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
autorespond-1.0.0
http://www.inter7.com/qmailadmin/autorespond-1.0.0.tar.gz
ezmlm-0.53
http://www.ezmlm.org/pub/patches/ezmlm-0.53.tar.gz
ezmlm-idx-0.40
http://gd.tuwien.ac.at/infosys/mail/qmail/ezmlm-patches/ezmlm-idx-0.40.tar.gz
まずはこれだけそろえます。
たくさんありますので手順を説明します。
vpopmailを使用するので十分に容量のあるディレクトリを決めます。
私の場合は /home/vpopmail
シンボリックリンクでやると動作不良を起こすようです。
実体の有るディレクトリを指定しましょう。
vpopmail用の ユーザーとグループを作成します
pw groupadd vchkpw pw useradd vpopmail -g vchkpw -d /home/vpopmail -s /nonexistent
バーチャルドメインユーザーのメールが全部ここに保存されますので十分に容量のあるディレクトリを指定しましょう。
出来上がったら 自動的にID振られてますので vipw で vpopmail の UID/GIDを 確認してメモしておきましょう。 もちろん任意のIDに変更しても結構です
ディレクトリ作成しておく。
mkdir /home/vpopmail
chown vpopmail:vchkpw /home/vpopmail
chmod 751 /home/vpopmail
ついでに qmail用のuser/groupも作成しておきます。
pw groupadd nofiles 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 groupadd qmail 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
./configure 無いです。 conf-cc, conf-ld, conf-cc, conf-home で必要なら変更ですが多分そのままでOK。 tar xvfz ucspi-tcp-0.88.tar.gz cd ucspi-tcp-0.88 make make setup check /usr/local/bin にインストールされます。
tar xvfz qmail-1.03.tar.gz
cd qmail-1.03
まずはここを参考に。
http://www.jp.qmail.org/q103/jinstall/install1.html
conf-cc
conf-ld
conf-qmail
conf-users
conf-groups
多分これもデフォで良いと思います。
make setup check 一発です。
/var/qmail にインストールされます。
**qmail-smtpd に heap領域関連のセキュリティホールについて**
/var/qmail/bin/qmail-smtpd を 以下の シェルスクリプトで起動して回避します。
オリジナルの qmail-smtpd は qmail-smtpd-un にリネームして
qmail-smtpd という シェルスクリプト(以下)を 新しく作成します。
#!/bin/sh
ulimit -d 1024
exec /var/qmail/bin/qmail-smtpd-un ${1+"$@"}
tar xvfz ezmlm-0.53.tar.gz tar zxvf ezmlm-idx-0.40.tar.gz mv ezmlm-idx-0.40/* ezmlm-0.53/ cd ezmlm-0.53 patch < idx.patch PostgresSQLをサポートする場合 sub_pgsql/conf-sqlcc sub_pgsql/conf-sqlld make pgsql pgsql やめるなら make std ezmlmrc を日本語化(ML参加時のレスメール等) make jp そのままだと us-ascii でレスメール送信されちゃうのですが どっか修正するのかな? 現在確認中。 make clean make make man make setup
qmail ソースのあるディレクトリに戻り
DNSに登録された正規のマシンなら ./config 一発で
全ての設定を行ってくれます。easyですな。
こんな感じで↓
./config-fast hoge.co.jp
/var/qmail/control に いくつか制御ファイルが作られます。
後からいくらでも変更できます。
qmail の起動ファイルは /var/qmail/rc です。 ここの記述を以下のモノに差し替えます。(vi 等でコマンド途中で改行しないように) 存在しなければ新規に作成してください。 #!/bin/sh exec env - PATH="/var/qmail/bin:/usr/local/bin:$PATH" \ qmail-start ./Maildir/ | /usr/local/bin/setuidgid qmaill \ /usr/local/bin/multilog t /var/log/qmail & #tcpserver smtp /usr/local/bin/tcpserver -H -R -lpacket-workz.co.jp -x /home/vpopmail/etc/tcp.smtp.cdb -u 1061 -g 7777 0 25 /var/qmail/bin/qmail-smtpd 2>&1 > /dev/null & #tcpserver pop3 /usr/local/bin/tcpserver -H -R -lpacket-workz.co.jp 0 110 /var/qmail/bin/qmail-popup mail.packet-workz.co.jp /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir & 当り前ですが packet-workz.co.jp と vpopmail の UID/GIDの指定の -u 1061 -g 7777 は自分の環境に差し替えてくださいよ(vipwで確認しましょう)(笑 そして mkdir /var/log/qmail chown qmaill:nofiles /var/log/qmail としておきます。 /var/qmail/control/me を確認 自分のドメインが記入されているか確認します。無ければいれてください。(普通ある)
cd /usr/sbin mv sendmail sendmail.org ln -s /var/qmail/bin/sendmail sendmail
/etc/inetd.conf の修正 pop3 と smtp の記述を# で rem にします。 ps aux|grep inetd kill -HUP *** ←inetd のPID
tar xvfz daemontools-0.70.tar.gz
cd daemontools-0.70
make
make setup check
mkdir /var/log/qmail
chown qmaill:nofiles /var/log/qmail
chmod 775 /var/log/qmail
これも easyですな。
/usr/local/bin にインストールされます。
tar xvfz vpopmail-4.9.10.tar.gz
cd vpopmail-4.9.10
注意:gmake を使用する事。無ければ portsであらかじめインストールしておく事
注意2 : useraddでユーザーを追加している場合 ./configure の時に /home/vpopmail が無いとエラーでます。
あらかじめ作成しておきましょう。
./configure --enable-roaming-users=y --enable-admin-email=root@あなたのドメイン --enable-hardquota=10485760
--enable-roaming-users=y 不正なsmtp利用を避ける為に(後で説明) --enable-default-domain= うちの場合なら packet-workz.co.jp ですが 指定しないほうを推奨されている。 --enable-vpopuser=vpopmail 省略 --enable-vpopgroup=vchkpw 省略 --enable-admin-email= 管理者のメールアドレス --enable-hardquota=10485760 メールディレクトリのサイズ制限。 10MB なら 10x1024x1024 で求められる。 --enable-relay-clear-minutes=180 pop before smtpの為のpop認証済IPの開放時間 デフォ3時間。 config.h が変更されます。(後述) そして gmake gmake install-strip /home/vpopmail 以下にインストールされます。
すぐにsmtp用の tcpserver の設定します。
cd /home/vpopmail/etc vi tcp.smtp 127.0.0.:allow,RELAYCLIENT="" 1行だけ書いてセーブ。 一緒に一つスクリプトを作っておきましょう。 vi smtp /usr/local/bin/tcprules ./tcp.smtp.cdb ./tcp.smtp.tmp < ./tcp.smtp として saveしておきます。 スクリプト作成しない場合は忘れずに上記のコマンド行ってください。 chmod +x smtp として実行権限付けておきます。 tcp.smtp を作成後 /home/vpopmail/etc で ./smtp とやれば tcpserverが理解するバイナリの定義ファイルを生成してくれます。 色々試したい場合にコマンドラインめんどくさいので作っておきましょう。 ./smtp として cdbファイルを生成しておきます。 試す必要がないなら(バーチャルドメイン等で不特定のISPからの大量アクセスがあるとか) ./smtpを 作成する必要はありません。 但し前述の 127.0.0. 用の cdbファイルの生成は行っておいてください。 (バーチャルドメイン等使用時の smtp不正中継防止は後述の「smtpの不正中継を阻止するには」参照 ) 変更するたびに必ず ./smtp でアップデートすること。 なお tcpserverは再起動しなくても動的に定義ファイルを読み込み即反映されます。
tar xvfz autorespond-1.0.0.tar.gz cd autorespond-1.0.0 gcc -O2 -o autorespond autorespond.c strip autorespond cp autorespond /usr/local/bin/ chown root:wheel /usr/local/bin/autorespond chmod 555 /usr/local/bin/autorespond
tar xvfz qmailadmin-0.45.tar.gz cd qmailadmin-0.45 デフォルトだと apache の 標準の cgi-bin ディレクトリ配下の収まりますので 変更しておきましょう。 あらかじめ apache の標準cgi-bin配下に使用したいディレクトリを作成しておきます。 --enable-cgibindir=/usr/local/apache/cgi-bin/abc/ddddd とか適当に。(最後に / いれないで下さい) --enable-cgipath=/cgi-bin/abc/ddddd/qmailadmin 上記に併せて ./configure --enable-cgibindir=あなたの設定するディレクトリ --enable-cgipath=上記の通り ちなみに --enable-cgibindir のディレクトリ指定した場合 最後に / で閉じますと ezmlm 等の設定画面が正常に動作しなくなります。はい、私ははまりました(笑い gmake clean gmake 念の為 mkdir /usr/local/share mkdir /usr/local/share/qmailadmin mkdir /usr/local/share/qmailadmin/html gmake install-strip 以下の /usr/local/apache2 は自分のapache の環境に変更してください。 mkdir /usr/local/apache2/htdocs/images mkdir /usr/local/apache2/htdocs/images/qmailadmin cp -r images/* /usr/local/apache2/htdocs/images/qmailadmin/. 上記の場合ですと http://あなたのドメイン/cgi-bin/abc/ddddd/qmailadmin で qmailadminにアクセス出来る事になります。
/usr/local/etc/rc.d/ に作ります。
qmail.sh -------- #!/bin/sh csh -cf '/var/qmail/rc &' こんなもんで大丈夫でしょう。chmod +x で実行権限忘れずに。
まず/home/vpopmail/bin に移動
./vadddomain packet-workz.co.jp のように自分のドメイン登録してください。
postmasterのパスワード聞いてきますので指定します。
もしくは ./vadddomain hoge.co.jp パスワード の形式でも設定できます。こっちの方が作業が速いです(w
postmaster とは qmailadmin設定用の固定管理者アカウントです。
あとは何も考えずに ブラウザから所定のURLにアクセスしてがんがん設定してください。
あまりにも簡単なので使用方は割愛します。
ちなみに root@packet-workz.co.jp の用に root用のメールアドレスを設定しますと
リモートにdaily-checkのメール等が飛んで来るようになります。
サーバー遠隔操作な方は重宝しますね(笑
vpopmailのコンパイル時に --enable-roaming-users=y を指定して ./configureしましたが
これは何かといいますと 俗にいう 「POP before SMTP]というものを実現させる為のモノです。
簡単にいえば smtpを使用させる前に popで認証させ その認証が通ったIPを記録しておき
ある一定の時間の間だけそのIPにsmtpの中継を許可すると言う事です。
MUAによっては自動的にこれらの一連の動作を自動的にこなすものもあるようですが
受信作業をしてから送信作業をすれば同じ事です。
許可したIPは rootの crontab で一定の時間毎に消去するので
滅多な事では不正中継される恐れはなくなります。
決まったユーザーでIP不変であるなら 前述で設定した tcpserver の tcp.smtp で許可するIPを指定しておけば
それ以外は蹴りますので安心ですが、バーチャルドメインでドメイン毎にたくさんの
メール使用者がいるような場合現実的ではありません。
pop before smtp の動作
popアカウントのあるユーザが pop認証すると /home/vpopmail/etc/open-smtp にそのIPが追加されます。
追加されたと同時に tcp.smtp.cdb が自動更新されて そのIPアドレスの smtpリレーを許可します。
/home/vpopmail/bin/clearopensmtp については 単純に「許可したIPをクリアする」等の説明がなされているところが
多いのですが、実際の動作を検証して見ると必ずしもそうならないようです。
INSTALL には 毎時40分にclearopensmtpを実行する crontab がサンプルとしてありますが
試しに 1分毎に clearopensmtp を実行させて見ました。
結果はなにもかわりません(w
つまるところ /home/vpopmail/etc/open-smtp の内容を元に tcp.smtp.cdb を更新している分けですから
こちらの内容が変わっていないのなら 変わりようがありませんね。
もしも デフォルトで(180分毎) ./configure 済で 再構築するのがめんどくさい時の手順は(笑い
たとえば強制的に20分毎にsmtpリレー許可を消去したいなら 以下の様にしてみるとか(w
*/20 * * * * /bin/cat /dev/null>/home/vpopmail/etc/open-smtp; /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null
ソースを見て見ましょう。
clearopensmtp.c と config.h をみてます。
config.hには以下の 定義がされてます
#define OPEN_SMTP_CUR_FILE "/home/vpopmail/etc/open-smtp"
#define OPEN_SMTP_TMP_FILE "/home/vpopmail/etc/open-smtp.tmp"
#define TCPRULES_PROG "/usr/local/bin/tcprules"
#define RELAY_CLEAR_MINUTES 180
--------------------------------------------------------------
clearopensmtp.c
clear_minutes = RELAY_CLEAR_MINUTES * 60;
mytime = time(NULL);
fs = fopen(OPEN_SMTP_CUR_FILE, "r+"); //open-smtp を開く
if ( fs != NULL ) {
fs1 = fopen(OPEN_SMTP_TMP_FILE, "w+"); //tmpを用意する
if ( fs1 == NULL ) {
return(0);
}
while ( fgets(TmpBuf1, MAX_BUFF, fs ) != NULL ) { //open-smtp をread
scopy(TmpBuf2, TmpBuf1, MAX_BUFF);
tmpstr = strtok( TmpBuf2, "\t");
tmpstr = strtok( NULL, "\t");
if ( tmpstr != NULL ) {
file_time = atoi(tmpstr); //記録されている時間を数値に
if ( file_time + clear_minutes > mytime) { // 記録時間+180分が現在時刻より大きければ
fputs(TmpBuf1, fs1); // tmpに書き出す
}
}
}
fclose(fs);
fclose(fs1);
rename(OPEN_SMTP_TMP_FILE, OPEN_SMTP_CUR_FILE); // tmpファイルを open-smtp にrename
chown(OPEN_SMTP_CUR_FILE,VPOPMAILUID,VPOPMAILGID);
}
update_rules(); // 更新された open-smtp ファイルを元に tcp.smtp.cdb をアップデートする
vclose();
return(0);
clearopensmtp を 実行したその時と比較して180分以上のモノをTMPに書き出さないようにしているようです。
古いIPアドレスはこの比較で落ちたものだけが消えます。
つまり 1分毎に cron で clearopensmtp だけを実行しても意味が無いですな(w
単純に強制的に短時間でクリアしたなら先に説明した crontab でいいでしょう。
前述の ./configure 時に --enable-relay-clear-minutes=20 とかすれば デフォのクリア時間が
20分になります。
設定を確認するなら
ここで確認させて頂くと良いでしょう。
apacheでsuExecなバーチャルドメインの設定をしていると
http://packet-workz.co.jp/(これはvirtual domainで動いている) の /cgi-bin/ディレクトリ配下の qmailadmin は
動きません。
NICに 新しい IPをAliasして そこにvirtual domainと関係のない(httpd.confにvirtual記載されてない)状態を作成します。
例えば 新しいIPに hogehoge.packet-workz.co.jp 等のサブドメインなどを付けておけば
普通にアクセスできるようになります。apacheでバーチャルドメインに関連するIP/ドメイン群では
Internal Server Error となります。
もしくは使用できるIPが一つしか無い様な場合や別なIPを使用したくない場合は同IPで別Portを使用するように
apache の httpd.conf の 設定を変えれば qmailadmin を稼働させる事が出来ます。
以下設定はort 80 と port 81 で httpdが起動します
前述のqmailadminの設定だと
http://your.domain:81/cgi-bin/abc/ddddd/qmailadmin
でアクセス出来るようになります。
ex. httpd.conf(抜粋) # Listen: Allows you to bind Apache to specific IP addresses and/or # ports, in addition to the default. See also the# directive. # #Listen 3000 #Listen 12.34.56.78:80 Listen 210.188.252.46:80 Listen 210.188.252.46:81 パーミション
/usr/local/apache 711 /var/log 751 /var/qmail 751 /home/vpopmail 751
このインストールメモをみてインストールに挑戦したある御大より連絡をいただきました。 qmailadminは MS$製のブラウザの場合 5.0以上でないとうまく動かないそうです。 私は windowzは ほとんど使用しないのでまったく気にも止めてなかったのですが FAQ探せばあるのかもしれませぬ(汗 前述の御大はソーストレースにまる2日間潰したそうです(わ ----------------------------------------------------------------------------------------------おまけその2:(qmail + vpopmail でメールの監視)
メールの出入りをすべて記録(盗聴(笑い)する方法。 某所からの依頼で作成したのですが、あまり推奨しません。 以下の方法で qmail を再コンパイルすると全ユーザーのメールの出入りをすべて記録できます。 extra.h の修正をします。 QUEUE_EXTRA を "Tlog\0" として QUEUE_EXTRALEN を 5 にして make setup check 以上です。 あとは qmailadmin で log@hogehoge.net のように [log] というアカウントのユーザーを作成します。 ちなみに複数のドメインを登録してある場合デフォルトドメインの log宛に すべてのドメインの盗聴メールが飛んで着ます。 ドメイン別に 飛んでくれると便利なんですがね(苦笑 logアカウントでメールチェックすれば当該ドメインのすべてのやりとりが記録されているはずです。こわいですねー(笑