FreeBSD/新vpopmail の変更点
*新vpopmail [#s893e191]
#contents
**構成 [#xdc86af9]
vpopmail 5.4.26~
qmail 1.03~
mysql 5.1.24~
qmail-scanner 2.01~
ClamAV 0.94~
spamassassin 3.2.5
**qmailインストール [#ke65315c]
qmailには様々なパッチが存在しますが、とりあえずこの4つのパッチを当ててインストールします。
|BGCOLOR(#C0C0C0):CENTER:パッチ|BGCOLOR(#C0C0C0):CENTER:説明|
|qmail-date-localtime.patch|Recieved フィールドの日時は、標準では GMT が入る。 これをローカルタイム(JST) にするには、qmail-date-localtime patch 当てる必要がある。|
|qmailqueue-patch|環境変数QMAILQUEUEによりqueue登録プログラムを変更する。qmail-scanner導入のため必要。portにてmake時に WITH_QMAILQUEUE_PATCH=yes を指定することにより導入。|
|qmail-smtpd-relay-reject|'%'等を含むアカウントへのメール受信を禁止し、relayを抑止する。このパッチを当てることにより、受信後エラーメール返信の手順を行わず、最初の受信時にエラーとするようになる。|
|qmail-large-dns.patch|DNS の MX レコードが 512byte 以上の応答(RFC違反らしい)を返してくる AOL などに対応するためのパッチ。portにてデフォルトで導入される。|
qmailの本体をportsを使って利用する準備に入る。portsを使うことで、qmailが必要とするシステムユーザの追加やMTAの切り替えが簡単に行える。ひとまずコンパイル前の状態で処理を止め、さきほど入手したパッチを適用する。
# cd /usr/ports/mail/qmail
# make patch WITH_QMAILQUEUE_PATCH=yes MAIN_QMAIL_DATE_LOCALTIME=yes
# cd work/qmail-1.03/
# fetch http://www.qmail.org/qmail-smtpd-relay-reject
# patch -p1 < qmail-smtpd-relay-reject
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- orig/qmail-smtpd.c Mon Jun 15 06:53:16 1998
|+++ qmail-smtpd.c Sat Feb 9 12:07:19 2002
--------------------------
Patching file qmail-smtpd.c using Plan A...
Hunk #1 succeeded at 53.
Hunk #2 succeeded at 217.
Hunk #3 succeeded at 266.
Hmm... Ignoring the trailing garbage.
done
portsに展開されたファイルへのパッチの適用が終わったら、コンパイルとインストールを続けて行う。
# cd ../..
# make
# make install
***sendmailの停止 [#bdd0fc19]
# vi /etc/rc.conf
------------------------------
sendmail_enable="YES"
↓
sendmail_enable="NONE"
------------------------------
sendmailの代わりにqmailが呼び出されるようにリンクを張ります。
# mv /usr/sbin/sendmail /usr/sbin/sendmail.old
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
**vpopmailインストール [#cfb80b1a]
# cd /usr/ports/mail/vpopmail
# make WITH_MYSQL=yes WITH_CLEAR_PASSWD=yes \
WITH_DOMAIN_QUOTAS=yes clean install
▼インストールされると、/usr/local/vpopmail/etc/vpopmail.mysql に以下のように書かれているはず。~
これをいじれば設定変更できる。~
ここでは例として、DB:vpopmaildb USER:vpopmailuser PASS:vpoppmailpassとします。~
MySQLはインストールされている事を前提としております。~
インストールは ⇒ [[ここ参照>/FreeBSD/Apache2.0]]
# vi /usr/local/vpopmail/etc/vpopmail.mysql
-------------------------------------------------
localhost|0|vpopmailuser|vpopmailpass|vpopmaildb
localhost|0|vpopmailuser|vpopmailpass|vpopmaildb
-------------------------------------------------
▼データベース関連は自動的には作ってくれないので、作る必要がある。
$ mysql -u root -p
> CREATE DATABASE vpopmaildb;
> GRANT ALL ON vpopmaildb.* TO vpopmailuser@localhost IDENTIFIED BY 'vpopmailpass';
▼localsがないとエラーが出力されるので、localsを作成。
# touch /var/qmail/control/locals
**ClamAVのインストール [#pd47a87f]
# cd /usr/ports/security/clamav
# make install
***qmail-scannerで動作させるように修正 [#h46d1be3]
# vi /usr/local/etc/clamd.conf
----------------------------------------
User clamav
↓変更
User qscand
***rc.conf [#q3d86280]
# ClamAV
clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
**qmailadminのインストール [#c2c2914f]
# cd /usr/ports/mail/qmailadmin
# make install CGIBINDIR=www/cgi-bin WEBDATADIR=www/data
***Apacheの設定 [#z0f84f4b]
Alias /cgi-bin/ /usr/local/www/cgi-bin/
Alias /data/ /usr/local/www/data/
<Directory "/usr/local/www/cgi-bin/">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
<Directory "/usr/local/www/data/">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
**Spamassassinのインストール(日本語対応) [#z0e9b6e0]
***MeCabのインストール [#h4778da6]
# cd /usr/ports/japanese/mecab
# make WITH_CHARSET=utf-8 install
***mecab-ipadicのインストール [#tcfe1f4f]
# cd /usr/ports/japanese/mecab-ipadic
# make WITH_CHARSET=utf-8 install
***Text-MeCabのインストール [#t8c11209]
# cd /usr/ports/japanese/p5-Text-MeCab
# make ENCODING=utf-8 install
***Encode-Detectのインストール [#f0da3b68]
# cd /usr/ports/converters/p5-Encode-Detect
# make install
***SpamAssassinのインストール [#n7a328a7]
# cd /usr/ports/japanese/p5-Mail-SpamAssassin
# make install
***rc.conf [#se18d8f0]
# SpamAssassin
spamd_enable="YES"
spamd_flags="-s /var/log/spam.log -c -d -q -x -r /var/run/spamd/spamd.pid -v -u vpopmail"
***local.cfの作成 [#yce023da]
うちで使っているlocal.cfを置いておきます。
&attachref(./local.cf);
# cd /usr/local/etc/mail/spamassassin/local.cf.sample /usr/local/etc/mail/spamassassin/local.cf
# vi /usr/local/etc/mail/spamassassin/local.cf
-----------------------コメントアウト解除------------------------------
normalize_charset 1
***SpamAssassinの残り処理 [#hf1a3775]
# cp /usr/local/etc/mail/spamassassin/tokenizer.pre.sample /usr/local/etc/mail/spamassassin/tokenizer.pre
# vi /usr/local/etc/mail/spamassassin/tokenizer.pre
-----------------------コメントアウト解除------------------------------
loadplugin Mail::SpamAssassin::Plugin::Tokenizer::MeCab
**qmail-scannerのインストール [#y8e333db]
# cd /usr/ports/mail/qmail-scanner
# make QMAILSCAN_SCANNERS="clamdscan,verbose_spamassassin" install
# chmod +s /usr/local/bin/qmail-scanner-queue.pl
***文字化け対策 [#he78bf14]
qmail-scanner のインストール時に、--lang ja_JP.EUC で、管理者宛のメッセージは日本語化されるのですが、ウィルス検出した、メールの Subject が日本語だと、その部分が文字化けしてしまいます。
この対策として、/usr/local/bin/qmail-scanner-queue.pl を2箇所ほど修正します。
まず、1箇所目は、&color(blue){sub email_sender { };という個所を探してその関数の
open(SM,"|$qmailinject -h -f ''")||&tempfail("cannot open $qmailinject for sending quarantine report - $!");
↓
open(SM,"|/usr/local/bin/nkf -j|$qmailinject -h -f ''")||&tempfail("cannot open $qmailinject for sending quarantine report - $!");
もう一箇所は、&color(blue){sub email_recips { };という関数の
open(SM,"|$qmailinject -h -f ''")||&tempfail("cannot open $qmailinject for sending quarantine report - $!");
↓
open(SM,"|/usr/local/bin/nkf -j|$qmailinject -h -f ''")||&tempfail("cannot open $qmailinject for sending quarantine report - $!");
と変更してください。
これで、nkf によって Subject も日本語化されるます。
***qmail-scannerのバージョンの更新 [#w9057998]
crontabに下記を追加
# qmail-scanner-version
00 4 * * * root /usr/local/bin/qmail-scanner-queue.pl -z
***ウィルスを発見した場合の通知先をadminに変更 [#x8b57adf]
# vi /usr/local/bin/qmail-scanner-queue.pl
--------------------------------------------
my $NOTIFY_ADDRS='admin';
**tcp.smtpの作成 [#w2096259]
# cat /usr/local/vpopmail/etc/tcp.smtp
# 127.0.0.1からはすべてパス
127.:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/var/qmail/bin/qmail-queue"
#:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/var/qmail/bin/qmail-queue"
#
# 内部ローカルからはSpamAssassinを通さずQmail-Scannerのチェックのみ行う。
# (SpamAssassinはRELAYCLIENT変数がコントロール)
192.168.1.:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/usr/local/bin/qmail-scanner-queue.pl"
#:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/usr/local/bin/qmail-scanner-queue.pl"
#
# その他はすべてQmail-Scanner、SpamAssassinでチェックする
:allow,QMAILQUEUE="/usr/local/bin/qmail-scanner-queue.pl"
**起動スクリプト [#jf0d55ad]
#!/bin/sh
# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to Maildir format by default
case "$1" in
start)
echo -n " STEP 1 : CDB "
/usr/local/bin/tcprules /usr/local/vpopmail/etc/tcp.smtp.cdb \
/usr/local/vpopmail/etc/tcp.smtp.tmp < /usr/local/vpopmail/etc/tcp.smtp
echo -n " STEP 2 : qmail "
exec env - PATH="/var/qmail/bin:$PATH" \
/var/qmail/bin/qmail-start ./Maildir/ \
splogger qmail&
exec env - PATH="/var/qmail/bin:$PATH" \
/usr/local/bin/tcpserver -v -x /usr/local/vpopmail/etc/tcp.smtp.cdb -R -H \
-u 82 -g 81 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtp 3 &
echo " STEP 3 : POP3"
/usr/local/bin/tcpserver -R -H 0 pop3 \
/var/qmail/bin/qmail-popup ma21.ath.cx \
/usr/local/vpopmail/bin/vchkpw \
/var/qmail/bin/qmail-pop3d Maildir 2>&1 | /var/qmail/bin/splogger pop3 3 &
exit 0
;;
stop)
exec killall qmail-send tcpserver
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
exit 64
;;
esac
**vpopmailの仕組み [#o0c6b703]
http://www.bugbearr.jp/?cmd=read&page=FreeBSD%2Fvpopmail