FreeBSD/vpopmail の変更点
*''&size(15){vpopmail + qmail + MySQL + Spamassassin};'' [#n8f031d6]
#contents
**''環境'' [#ec7723de]
FreeBSD 6.0-Release
vpopmail-5.4.10_5
qmail-1.03_4
qmailadmin-1.2.7
mysql-4.0.26
qmail-scanner-1.25_2
clamav-0.88.4
**''qmailインストール''&aname(A); [#d0f5327f]
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インストール''&aname(B); [#e9b556df]
MySQLとの連携するので、WITH_MYSQLをつけます~
WITH_CLEAR_PASSWD=yesはAPOPを有効にする。~
SpamassassinとQuotaを付けてインストールします。~
&color(red){※[[SpamAssasin日本語対応>FreeBSD/SpamAssassin]]でSpamAssassinをインストールする場合はWITH_SPAMASSASSIN=yesは必要ありません。};
# cd /usr/ports/mail/vpopmail
# make WITH_MYSQL=yes WITH_CLEAR_PASSWD=yes \
WITH_DOMAIN_QUOTAS=yes WITH_SPAMASSASSIN=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
***''qmailadminインストール''&aname(C);&br; [#qda6c900]
QuotaとHelpを付けてインストール
# make WITH_MODIFY_QUOTA=yes WITH_HELP=yes clean install
**POP befor SMTPの確認 [#ua713ba8]
簡単にいえば smtpを使用させる前に popで認証させ その認証が通ったIPを記録しておき
ある一定の時間の間だけそのIPにsmtpの中継を許可すると言う事です。
WITH_MYSQLのオプションを付けてインストールした場合は/usr/local/vpopmail/etc/open-smtpではなくmysqに保存されます。
下記のコマンドで確認し、POP3で認証したIPアドレスが記載されていれば正常です。
$ mysql -u root -p[パスワード]
mysql> select * from vpopmail.relay
-''スクリプトを修正(起動シェル)''&aname(D);&br;
▼起動シェル~
シンボリックリンクを付けておく
# ln -s /var/qmail/rc /usr/local/etc/rc.d/qmail.sh
# vi /usr/local/etc/rc.d/mail.sh
#!/bin/sh
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
/usr/local/bin/tcprules /usr/local/vpopmail/etc/tcp.pop3.cdb \
/usr/local/vpopmail/etc/tcp.pop3.tmp < /usr/local/vpopmail/etc/tcp.pop3
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 -v -x /usr/local/vpopmail/etc/tcp.pop3.cdb -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
***tcpserverのオプションで下記の-R -Hを付けないと送信にとても時間が掛かります。 [#t5711904]
-R IDENTを行わない。
-H リモートホスト名を調べない。
**''tcp.pop3とtcp.smtpの作成'' [#t5144874]
# vi /usr/local/vpopmail/etc/tcp.pop3
-----------------------------------
ALL:allow
-----------------------------------
# vi /usr/local/vpopmail/etc/tcp.smtp
-----------------------------------
# 127.0.0.1からはすべてパス
127.:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/var/qmail/bin/qmail-queue"
# その他はすべてQmail-Scanner、でチェックする
:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/usr/local/bin/qmail-scanner-queue.pl"
-----------------------------------
**''POP befor SMTPのクリア処理''&aname(F);~ [#f1531758]
5分おきにクリア処理を走らせるようにする。一応vpopmailユーザで設定
# crontab -u vpopmail -e
---------------------------------------------------------------------
*/5 * * * * /usr/local/vpopmail/bin/clearopensmtp 2>&1 >/dev/null
---------------------------------------------------------------------
**''SpamAssassinの設定''&aname(E); [#qe7ee695]
&color(red){※[[SpamAssasin日本語対応>FreeBSD/SpamAssassin]]でSpamAssassinをインストールする場合は起動シェルは自分で作成します。};
***rc.confにも追加 [#zf9a9da1]
ユーザごとのconfigファイルは使わないようにして起動~
いろいろ試しましたがこの方法がエラーもなく正常にログがはかれました。
# vi /etc/rc.conf
----------------------------------
spamd_enable="YES"
spamd_flags=${spamd_flags:-"-s /var/log/spam.log -c -d -x -v -u vpopmail -r ${spamd_pidfile}"}
----------------------------------
***local.cf [#f16c2fca]
# cp /usr/local/etc/mail/spamassassin/local.cf.sample /usr/local/etc/mail/spamassassin/local.cf
下記の3行だけ変更しておく。
rewrite_header Subject [SPAM] # 件名を書き換える。[SPAM]を件名の先頭に付ける
report_safe 1 # 0:本文は変更しない 1:本文は添付に変更(デフォルト)
trusted_networks 192.168.1. # 信頼済のネットワークを除外する
***spamassassin動作 [#b53c9f91]
vpopmailを上記の設定で起動するとユーザにメールが来ると、/usr/local/vpopmail/.spamassassinをvpopmailユーザで参照しようとします。~
自分の場合は、/etcに設定ファイルを置いてシンボリックリンクを張ってます。
# mkdir /etc/vpopmail/spamassassin
# chown vpopmail:vchkpw /etc/vpopmail/spamassassin
# ln -s /etc/vpopmail/spamassassin /usr/local/vpopmail/.spamassassin
**ClamAVインストール [#r769eb60]
# cd /usr/ports/security/clamav
# make install
***/etc/rc.confの編集 [#xd64ec6f]
clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
**qmail-scanner [#e0a9727b]
インストール
# cd /usr/ports/mail/qmail-scanner
# make QMAILSCAN_SCANNERS="clamdscan,verbose_spamassassin" install
***qmail-scannerの動作 [#t3513f8a]
/usr/local/bin/qmail-scanner.plが実行ファイルですが、sビットがたっておりsuidperlが入っていれば、qscanユーザで実行することになります。~
&color(red){※FreeBSD5.4以降はセキュリティ上の問題でsuidperlがデフォルトでは入っておりません。};~
/usr/local/qmailscanにworkフォルダやtmpフォルダなどが用意されていますが、パーミッションで実行に失敗する。~
suidperlが入っていなくても、パーミッションを変更すればちゃんと実行されるようです。
qmail-scannerからClamAVを呼び出す時にclamdscanの場合下記のようなエラーが出る事があります。 ~
clamscan: corrupt or unknown ClamAV scanner error or memory/resource/perms problem - exit status
/usr/local/bin/qmail-scanner-queue.plの$clamdscan_binaryの変数を直接編集しclamscanに変更すれば、正常にスキャンできます。~
clamscanはデーモンから起動しない為処理が遅いみたいですが、自分の環境では特に問題ありません。
223 my $clamdscan_binary='/usr/local/bin/clamscan';
***文字化け対策 [#he78bf14]
qmail-scanner のインストール時に、--lang ja_JP.EUC で、管理者宛のメッセージは日本語化されるのですが、ウィルス検出した、メールの Subject が日本語だと、その部分が文字化けしてしまいます。
この対策として、/var/qmail/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 も日本語化されるます。
***バージョンの更新 [#a1b5647d]
qmail-scannerがヘッダに付加するバージョン情報を更新する。~
ファイルは/usr/local/qmailscan/qmail-scanner-queue-version.txt
$ cat /usr/local/qmailscan/qmail-scanner-queue-version.txt
clamdscan: 0.88.4/1894. spamassassin: 3.1.5.
・更新は以下のコマンドで行う
/usr/local/bin/qmail-scanner-queue.pl -z
cron等に設定し一日一回くらいで更新を行うと良いと思う。
**.procmail編集 [#rb8168b5]
最後にprocmailでヘッダーに「X-Spam-Status: Yes」があった場合.Spamフォルダに入れるように設定しました。~
&color(red){※DOMAIN,USERは環境に合わせて変更してください。};
PATH=/usr/bin:/bin:/usr/local/bin
HOME=/usr/local/vpopmail/domains/DOMAIN/USER
MAILDIR=$HOME/Maildir
DEFAULT=$HOME/Maildir/
LOGFILE=$MAILDIR/procmail.log
LOCKFILE=$MAILDIR/procmail.lock
SPAM=$MAILDIR/.Spam/
:0fw: spamassassin.lock
| spamc
:0
* ^X-Spam-Status: Yes
$SPAM
**''起動''&aname(G); [#pc065bcd]
# /usr/local/etc/rc.d/qmail.sh start
# /usr/local/etc/rc.d/sa-spamd.sh start
# /usr/local/etc/rc.d/clamav-clamd start
# /usr/local/etc/rc.d/clamav-freshclam start
**''vpopmail(ドメイン・ユーザの追加削除)''&aname(H); [#r25f1457]
''[ドメイン追加]''
# /usr/local/vpopmail/bin/vadddomain example.co.jp
Please enter password for postmaster:******
enter password again:******
# /usr/local/vpopmail/bin/vdominfo example.co.jp
domain: example.co.jp
uid: 89
gid: 89
dir: /usr/local/vpopmail/domains/example.co.jp
users: 1
''[ドメイン削除]''
# /usr/local/vpopmail/bin/vdeldomain example.co.jp
''[ユーザ追加]''
# /usr/local/vpopmail/bin/vadduser foo@example.co.jp
Please enter password for foo@example.co.jp:*******
enter password again:*******
# /usr/local/vpopmail/bin/vuserinfo foo@example.co.jp
name: foo
passwd: $3$QfA7KKeX$kiKwlqVIRfP/fTLfi22bl6
clear passwd:
uid: 1
gid: 0
flags: 0
gecos: foo
limits: No user limits set.
dir: /usr/local/vpopmail/domains/example.co.jp/foo
quota: NOQUOTA
usage: NOQUOTA
account created: DDD MMM DD HH:MM:SS YYYY
last auth: Never logged in
''[ユーザ削除]''
# /usr/local/vpopmail/bin/vdeluser foo@example.co.jp
''[パスワードの変更]''
# /usr/local/vpopmail/bin/vpasswd foo@example.co.jp [パスワード]
**''qmailadmin'' [#t90abbd7]
▼qmailadminのスクリーンショット~
SquirreMailにqmailadmin_loginのプラグインを入れて表示させたところ。
#ref(http://flateight.com/uploads/bwiki/vpopmail/qmailadmin.jpg)
#ref(http://www.flateight.com/uploads/bwiki/vpopmail/qmailadmin.jpg)
~
~
**不正中継テスト [#o12fd6c8]
http://www.abuse.net/relay.html
+Address to test:にテストしたいホスト名を入力
+[Test for relay]ボタンをクリック
参考にしたページ~
[[fkimura.com>http://www.fkimura.com/vpopmail0.html]]~
[[bugbearr.jp>http://www.bugbearr.jp/index.php?FreeBSD%2Fvpopmail]]~