FreeBSD/新vpopmail
新vpopmail †
構成 †
vpopmail 5.4.26
qmail 1.03
mysql 5.1.24
qmail-scanner 2.01
ClamAV 0.94
spamassassin 3.2.5
qmailインストール †
qmailには様々なパッチが存在しますが、とりあえずこの4つのパッチを当ててインストールします。
パッチ | 説明 |
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の停止 †
# 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インストール †
# 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はインストールされている事を前提としております。
インストールは ⇒ ここ参照
# 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のインストール †
# cd /usr/ports/security/clamav # make install
qmail-scannerで動作させるように修正 †
# vi /usr/local/etc/clamd.conf ---------------------------------------- User clamav ↓変更 User qscand
rc.conf †
# ClamAV clamav_clamd_enable="YES" clamav_freshclam_enable="YES"
qmailadminのインストール †
# cd /usr/ports/mail/qmailadmin # make install CGIBINDIR=www/cgi-bin WEBDATADIR=www/data
Apacheの設定 †
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のインストール(日本語対応) †
MeCabのインストール †
# cd /usr/ports/japanese/mecab # make WITH_CHARSET=utf-8 install
mecab-ipadicのインストール †
# cd /usr/ports/japanese/mecab-ipadic # make WITH_CHARSET=utf-8 install
Text-MeCabのインストール †
# cd /usr/ports/japanese/p5-Text-MeCab # make ENCODING=utf-8 install
Encode-Detectのインストール †
# cd /usr/ports/converters/p5-Encode-Detect # make install
SpamAssassinのインストール †
# cd /usr/ports/japanese/p5-Mail-SpamAssassin # make install
rc.conf †
# 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の作成 †
うちで使っているlocal.cfを置いておきます。 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の残り処理 †
# 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のインストール †
# cd /usr/ports/mail/qmail-scanner # make QMAILSCAN_SCANNERS="clamdscan,verbose_spamassassin" install # chmod +s /usr/local/bin/qmail-scanner-queue.pl
文字化け対策 †
qmail-scanner のインストール時に、--lang ja_JP.EUC で、管理者宛のメッセージは日本語化されるのですが、ウィルス検出した、メールの Subject が日本語だと、その部分が文字化けしてしまいます。
この対策として、/usr/local/bin/qmail-scanner-queue.pl を2箇所ほど修正します。
まず、1箇所目は、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 - $!");
もう一箇所は、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のバージョンの更新 †
crontabに下記を追加
# qmail-scanner-version 00 4 * * * root /usr/local/bin/qmail-scanner-queue.pl -z
ウィルスを発見した場合の通知先をadminに変更 †
# vi /usr/local/bin/qmail-scanner-queue.pl -------------------------------------------- my $NOTIFY_ADDRS='admin';
tcp.smtpの作成 †
# 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"
起動スクリプト †
#!/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