qmail-vida の インストール
最終更新日 2004年11月14日
# ここでの記述はすべて私のインストールメモであって動作を保証するものではありません
# 各自の責任のもと、挑戦してみてください(^^
qmailに脆弱性な穴が見つかりました。
/var/qmail/control/databytesに2Gbytes未満の数値を設定しておきましょう。
例 echo 1073741824 > /var/qmail/control/databytes (1Gbytes)
これではダメらしいです。パッチを待ちましょう・・・・
第3者によるパッチは出ているようですがqmailの構造上root権限をとられる危険は無いようです。
これは私がslackwareにqmail と qmail-vida をインストールしたときのめもです
debianにもインストールしてますが、パッケージを使わずにこの方法でやってます。
qmailが設定も簡単で早いしセキュリティーホールもないしとてもよいMTAだと言われていますが、結構インストールは大変なものがあります。
qmail-vidaは滝沢さんが作成した、 D. J.
Bernstein氏が作成したqmailパッケージとcheckpasswordパッケージにSMTP認証とAPOP対応のPOP認証を追加し、バー
チャルドメインと仮想ユーザを管理するためのプログラムを提供するパッケージです。
qmailはspam踏み台対策が良く出来ていて、そのままでは決して外部から外部への送信にsmtpが使われることがありません でも外からsmtpサーバーを使いたいときってありますよね qmail-vidaでSMTP認証ができるようになったので早速インストールしてみました。
http://www.jp.qmail.org/
http://qmail-vida.sourceforge.jp/
http://w3.itoh.net/
http://seclan.dll.jp/dlunix.htm
ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz
http://sourceforge.jp/frs/index.php?group_id=396
http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz
ftp://ftp.jp.qmail.org/qmail/ucspi-tcp-0.88.tar.gz
ftp://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-date-localtime.patch
http://seclan.dll.jp/msgdate.tgz
http://seclan.dll.jp/msgdom.tgz
# 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
# groupadd vida
# useradd -g vida -d /var/qmail/ -s /bin/false qmailu
# useradd -g vida -d /var/qmail/ -s /bin/false authdb
# useradd -g vida -d /home/pop/ -s /bin/bash pop
user pop は仮想メールボックスを使用するために必要です。
仮想メールボックスは pop の home directory に作成されます。
# mkdir /home/pop
# chown pop.vida /home/pop
# tar xzvf qmail-1.03.tar.gz
# tar xzvf qmail-vida-0.53.tar.gz
# tar xzvf ucspi-tcp-0.88.tar.gz
# tar xzvf checkpassword-0.90.tar.gz
# tar xzvf msgdate.tgz
# tar xzvf msgdom.tgz
qmail-vidaのパッチをあてます。
# cd qmail-vida-0.53
# make patch
# make copy
ローカルタイム表示にするパッチとMessage-IDを付加するパッチをあてました。
# patch -d qmail-1.03 < qmail-date-localtime.patch
# patch -d qmail-1.03 < qmail-1.03.msg-date.diff
# patch -d qmail-1.03 < qmail-1.03.orgdomain.diff
msg-date.diffとqmail-vidaのpatchをあてる過程でMakefileの同じ所にpatchがあたるためエラーになります。忘れず、手で直してください。
# cd qmail-1.03
# make setup check
# ./config
これで /var/qmail/control/****** が設定されます。
/var/qmail/control/ の locals と rcpthosts に 自分の domain を加えておきます。
DNSが設定されていない場合は
# ./config-fast domain.name とします
実在ユーザーのpasswd認証が0.50から簡単にできるようになりました。これで、既存サーバーからの移行が簡単になったと思います。
authdb/pwdusers/cdb にエントリーがあればそちらを優先し、ないときは/etc/shadow
のパスワードが使われます。(平分認証のみ)
checkpasswordのコンパイルのとき、conf-withpasswd に 1 を、conf-blockuid
に認証したくないUIDの上限値を書きます。
私は 100 を入れました。(デフォルトは10) あとで環境変数ALLOWPLAINを設定する必要があります。
# cd ../checkpassword-0.90
# make setup check
# cd ../ucspi-tcp-0.88
# make setup check
# cd ../qmail-vida-0.53/src/vida/
# make setup check
# cd /var/qmail/alias
# echo '&root' > .qmail-postmaster
# echo '&root' > .qmail-mailer-daemon
# echo '&root' > .qmail-www-admin
# echo '&root' > .qmail-webmaster
# echo '&root' > .qmail-admin
# echo '&root' > .qmail-info
上記すべてのメールは自分のところに送ります
# echo '&tom' > .qmail-root
/var/qmail/boot/home にサンプルがあります
Mailbox形式が標準ですが、せっかくqmailを使うのですからMaildir形式にします
通常のqmail-smtpdの起動ではtcpserverで uid gid を指定しますがここでは指定してはいけません(qmail-smtpupが設定するため)。
|
---------/var/qmail/rc-------------------------------------------- |
平文認証を使うなら ALLOWPLAIN を指定します。
# cd /etc
# touch tcp.smtp
# chmod 600 tcp.smtp
# vi tcp.smtp
192.168.:allow,ALLOWPLAIN=""
127.:allow,RELAYCLIENT=""
:allow
# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
# su user
$ /var/qmail/bin/maildirmake $HOME/Maildir
$ echo ./Maildir/ > ~/.qmail
$ exit
新しいユーザーではそのまま/Maildirが作られるようにします
# /var/qmail/bin/maildirmake /etc/skel/Maildir
# echo ./Maildir/ > /etc/skel/.qmail
# /var/qmail/bin/vida-pwdbinit
バーチャルドメインを使うならcontrol/virtualdomainsも記述します
exsample.co.jp:exsample
バーチャルドメイン用のパスワードファイルを初期化しておきます。
# /var/qmail/bin/vidapwdbinit exsample
exsample.co.jpをrcpthostsに記述するのを忘れずに。 locals には書いてはいけません。
virtualdomain用のオーナーを追加しておきます。
# useradd -g vida -d /home/pop/ -s /bin/bash exsample
# mkdir /home/exsample
# chown exsample.vida /home/exsample
バーチャルドメインのオーナー権限になって(実在ドメインはpop) # su pop
$ /var/qmail/bin/vida-passwd -a -u foo
$ /var/qmail/bin/vida-assign -a -u foo
$ /var/qmail/bin/vida-maildirmake foo Maildir
control/senderhosts
認証に成功したり、環境変数 RELAYCLIENT が設定されていたりして中継が許可されたときでも、このファイルがある場合は、envelope
sender (MAIL FROM)がこのファイルに記述されたドメインでなければ中継を拒否します。
組織において送信者のドメインを厳しく制限したい場合などに利用します。
ただし、null sender の場合は DSN の絡みもあってこの機能は無効になります。
例)
example.org
example.net
control/badrcptto
このファイルに記述されたメールアドレス宛のメッセージの受取りを拒否します。
例)
noname@example.org
emanon@example.org
sendmailを使っているならこれを止めます
# killall -HUP sendmail
してからキューをフラッシュ
# /usr/sbin/sendmail -q
# killall sendmail
その後用が無くなったsendmailの名前を変更してsやらxを削ります。
chmod 0 /usr/sbin/sendmail
mv /usr/sbin/senmail /usr/sbin/sendmail.younashi
sendmailの代わりにqmailが呼び出されるようにリンクを張っておきます。
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
sendmailからの移行なら既存のデーターをMaildirに変更する必要があります
http://www.qmail.org/mbox2maildir のスクリプトを使うと良いでしょう
これだとMaildirも一緒に作ってくれます
私の場合いちいちMAILDIRをセットするのも面倒だったのでスクリプトの中ほどの$spoolname
= "$ENV{MAILDIR}"; を $spoolname = "$ENV{HOME}/Maildir";
と変更しました
それと一番最後の unlink("$ENV{MAIL}"); を削除しておいた方が元データーが消されずにベターです
# su - user
$ mbox2maildir
/etc/inetd.conf のpop3dをとめて(コメントアウト)
# killall -HUP inetd
# /var/qmail/rc
/etc/rc.d/rc.inet2 あたりに起動スクリプトを書いておきます
送信実験
# echo To:user | /var/qmail/bin/qmail-inject
これで、/home/user/Maildir/newに、mailがきていることを確認します
あとは実際にMUAから送受信をして動作を確かめます(手抜き(^^;)
EdMax(windows)
アカウント設定のSMTPサーバーは認証が必要をチェック 平文もCRAM-MD5も両方使えます。
Outlook Express(Windows)
ツール-アカウントのプロパティでこのサーバーは認証が必要をチェック。セキュリティで保護されたパスワードで認証は使えません。
qmail側はALLOWPLAINを設定する。
sylpheed
APOPで受信、SMTP AUTHで送信すれば何の問題もありません
qmail-vida-0.40からログインIDを変えることでバーチャルドメインのPOPができるようになりました。
例えば、foo というアカウントに対して example.org というバーチャルドメインがあり、その所有者アカウントが
vpop である場合にはログインIDを
foo@example.org
あるいは
foo@vpop
にすることにより、そのログインIDが example.org のバーチャルドメインに所属することを認識します。
このとき、起動ファイルでは DOMAINOWNER を空の値に設定しておきます。(起動スクリプト
/var/qmail/rc 参照)
なお、このバーチャルドメインの設定は qmail のコントロールファイルcontrol/virtualdomains の設定から読み込んで判断します。
リアルユーザーについては標準のcourier-imap(-ssl)でできるみたい。
apt-get install courier-imap(-ssl)
メールの送受信を少しでも安全なようにSSLに対応してみました。
あらかじめqmailのインストールが終わっていることが前提です。
参考サイト
http://www.oucc.org/~rei/debian/sslmail.rhtml
http://www.kawaz.jp/pukiwiki/?POP%A4%C8SMTP%A4%F2SSL%B2%BD%A4%B9%A4%EB
http://www.nrg4u.com/
必要なソース
http://www.nrg4u.com/qmail/ucspi-tcp-ssl-20020705.patch.gz
もちろんtcpserverは必要です。
証明書の作成
本来はCA局に認証してもらうのですが自己認証で済ませてしまいます。
鍵ペアの作成
openssl req -x509 -new -days 3650 -out host.pem
秘密鍵からパスフレーズを取り除く
openssl rsa -in privkey.pem -out nopass.pem
公開鍵と秘密鍵を一つにする
cat host.pem > qmail.pem
cat nopass.pem >> qmail.pem
証明書インポート用DERファイルの作成
openssl x509 -inform pem -outform der -in host.pem -out host.der
出来上がったhost.derをクライアントにインストールすればOEとかでも文句を言われずに使えます。
コンパイル
libssl-devが必要です (apt-get install libssl-dev)
gunzip ucspi-tcp-ssl-20020705.patch.gz
patch -d ucspi-tcp-0.88 < ucspi-tcp-ssl-20020705.patch
cd ucspi-tcp-0.88
make clean
make
動いているqmail、tcpserverをとめて...
make setup check
起動ファイル(rc)
exec env - ALLOWPLAIN='' DOMAINOWNER='' \
/usr/local/bin/tcpserver -vHR -s -n /path/to/qmail.pem 0 pop3s /var/qmail/bin/qmail-popup \
your.domain.name /var/qmail/bin/checkpassword \
/var/qmail/bin/qmail-pop3d Maildir \
2>&1 | /var/qmail/bin/splogger pop3d 4 &
再起動
clam anti-virus & qmail-scanner
clamav と qmail-scannerを入れてみました。
参考サイト
ClamAVのページ
Clam Antivirusに関するメモ
作業メモ
http://www.unix-power.jp/linux/qmail-scanner.html
必要なソース
http://www.qmail.org/qmailqueue-patch
http://qmail-scanner.sourceforge.net/
qmail にpatchを充ててコンパイル。
patch -d qmail-1.03 <qmailqueue-patch
clamav と maildrop が woodyのものでは動かないので backportからインストールします。
apt-lineに
deb http://www.jp.backports.org/debian stable clamav courier
# apt-get install bzip2 lzop lha unrar zoo cpio
# apt-get install clamav clamav-base clamav-daemon clamav-freshclam
# apt-get install courier-maildrop
# apt-get install libtime-hires-perl perl-suid unzip
(この辺は適当に ^^;)
qmail-scanerのユーザーを追加
# groupadd qscand
# useradd -M -g qscand -s /sbin/nologin -d /dev/null qscand
/etc/clamav/clam.conf の
User clamav を User qscand に
/var/run/clamavのownerをqscandに変更します。 これをしないとclamdが走りません。(suidを付けても良いかも。そっちが正解??)
qmail-scaner を適当なところで解凍し、rootで
# ./configure --scanners "clamdscan" --add-dscr-hdrs yes --lang
ja_JP.EUC --admin root --domain exsample.net --notify admin,recips --install
/var/qmail/rc のsmtpに
QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
を追加 再起動
qmail-scanner-1.24/contrib/test_installation.sh -doit で 2つのメールと2つの隔離のメールが届けば成功です。
テストが終わったらユーザーにはレポートメールを出す必要はありませんので、また、日本語は化けますので英語モードにしちゃいます。
./configure --scanners "clamdscan" --admin root --domain exsample.net --notify admin --install
Disallowed characters found in MIME headers.
と表示されまた場合 は、/var/qmail/bin/qmail-scanner-queue.plの
my $BAD_MIME_CHECKS='2';. を
my $BAD_MIME_CHECKS='0';. としてみてください。
qmail とは関係ないですが別鯖でBANNED NAMEで添付ファイルが解析できなかったので。
BANNED NAME えらーについて
参考 http://www.musicae.ath.cx/linux/debian.html
// amavisd-newの設定
# vi /etc/amavis/amavisd.conf
$mydomain = 'you.your.domain';
// spamassassinを使用するためにコメントアウト。
#@bypass_spam_checks_acl = qw( . ); # No default dependency on spamassassin
$final_virus_destiny = D_DISCARD; # (defaults to D_BOUNCE)
$final_banned_destiny = D_PASS; # (defaults to D_BOUNCE)
$final_spam_destiny = D_PASS; # (defaults to D_REJECT)
$final_bad_header_destiny = D_PASS; # (defaults to D_PASS), D_BOUNCE suggested
$warnvirusrecip = 1; # (defaults to false (undef))
$hdrfrom_notify_sender = "amavisd-new <postmaster\@$mydomain>"
$banned_filename_re = new_RE(
# qr'^UNDECIPHERABLE$', # is or contains any undecipherable components
qr'\.[^.]*\.(exe|vbs|pif|scr|bat|cmd|com|dll)$'i, # some double extensions
// これをコメントアウトしないと日本語ファイル名の添付ファイルがbanned nameとなる。
# qr'[{}]', # curly braces in names (serve as Class ID extensions - CLSID)
...
qr'^message/partial$'i, # rfc2046. this one is deadly for Outcrook
);
spam対策
spamもすごいですね。鯖に簡単に設置して弊害の少ないパッチ。
http://www.bsddiary.net/d/200407.html#27
Jul's qmail page
http://www.bsddiary.net/d/qmail-throttle.diffと
http://js.hu/package/qmail/qmail-1.03-mfcheck.4.patchをあてました。
いろいろあててるのでちょっと大変かも patch -F3 位であてるとほとんどあたると思います。(後は手直ししてね^^;)
tcp.smtpをこんな風にしてTHROTTLEを設定します。
=.jp:allow,ALLOWPLAIN=""
:allow,ALLOWPLAIN="",THROTTLE="10"
このゆっくり応答は意外と効果ありますよ。
あとどうしようもないアドレス(公開しているものおよびroot,postmaster,webmasterなど)にはspamassassinで大まかに削除してます。
最後に現在の /var/qmail/rc ^^;
#!/bin/sh |
質問等は掲示板またはメールでどうぞ m(..)m