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