qmail + qmail-scanner + Clamav + SpamAssassin

今や、 MTA の主流は Postfix… と言っても過言ではないくらい、 Postfix が使われていると思われます。
うちのサーバーでも、新しいのはみんな Postfix にしてるし。

でも、高速、セキュアな MTA として、 Postfix と qmail が人気を二分していた頃がありました。
その頃に qmail で構築した MTA が今でも現役バリバリで稼動しており、 大量のユーザーを抱えているため、なかなか移行できない。。というケースに陥いった、うちのメールサーバー。
qmail でも、いろいろパッチを当ててやれば、まだまだ十分使えるのですが、Postfix に比べて機能不足は否めません。。。

いろいろ調べたあげく、いまさらながら、qmail-scanner + Clamav + SpamAssassin で、ほぼ満足いくようなメールサーバーが構築できたので、簡単にまとめておきます。

導入は、ほとんど ports を使っているので、詳細は省略。。。要点のみです。
また、 portupgrade を使っているので、portinstall の場合とか読みかえてください。

  1. まず、suidperl が必要なので、Perl5.8 を ENABLE_SUIDPERL=yes オプションをつけてインストール。
    # portinstall -Cc -m ENABLE_SUIDPERL=yes lang/perl5.8
    

  2. FreeBSD4.x系は、ports の Perl を使うように変更
    # use.perl port
    
  3. Clamav と SpamAssassin をインストール
    # portinstall -Cc security/clamav
    # portinstall -Cc mail/p5-Mail-SpamAssassin
    
  4. qmail を WITH_QMAILQUEUE_PATCH=yes オプション付きで再構築
    # portupgrade -Cc -m WITH_QMAILQUEUE_PATCH=yes mail/qmail
    
  5. qmail-scanner をインストール。SpamAssassin と Clamav を使うように自動認識してくれるはず。してくれなかったら、起動してから再コンパイルしてみましょう。。
    #portinstall -Cc -m QMAILSCAN_NOTIFY=recips,admin mail/qmail-scanner
    
  6. 各種初期設定。。
    /etc/rc.conf に追加

    clamav_clamd_enable="YES"
    clamav_freshclam_enable="YES"
    spamd_enable="YES"
    

    clamd を qscand で動作するように変更

    1. /usr/local/etc/clamd.conf
      User clama
      を
      User qscand
      に変更
      
    2. /var/run/clamav の所有者を qscand に変更
      # chown -R qscand:qscand /var/run/clamav
      
    3. 以下を /usr/local/etc/rc.d/qmail.sh と tcpserver の起動スクリプトに記載
      PRIFIX=/usr/local
      export QMAILQUEUE="${PREFIX}/bin/qmail-scanner-queue.pl"
      
  7. 各デーモンを起動
    # /usr/local/etc/rc.d/qmail.sh restart
    # /usr/local/etc/rc.d/clamav-clamd.sh start
    # /usr/local/etc/rc.d/clamav-freshclam.sh start
    # /usr/local/etc/rc.d/sa-spamd.sh start
    

    これでほぼ完了。。
    /var/log/maillog を眺めて、エラーログがでてないかどうか確認しましょう。
    qq temporary problem (#4.3.0) っていうのを返したり、
    clamscan: corrupt or unknown ClamAV scanner error
    or memory/resource/perms problem – exit status 50 って出る場合は、だいたい permission 関係のトラブルでしょう。。
    suidperl とか、 ちゃんと clamd が qscand で動いているかとか確認しましょう。

  8. あと、SpamAssassin は、 デフォルトで root の .spamassassin を見にいくので、-u username オプション付で起動して、ユーザーを指定したほうが良いでしょう。。

とりあえず、ウイルスは Clamav が駆除してくれるし、 Spam は SpamAssassin が X-Spam-Status: ヘッダをつけてくれるので快適です。
SpamAssassin の設定は、http://spamassassin.jp/ 等を参考にすると良いです。

続きを読む

広告

trac

2ヶ月ほど前から、プロジェクト管理を GForge から trac に乗り換えました。
Wiki ベースのプロジェクト管理ツールで、Subversion との連携は抜群。バグトラッカであるチケットシステムもシンプルでなじみやすいです。
乗り換えた最大の理由は、 trac が Python で書かれていること。
GForge は PHP4 で書かれており、GForge を使うためだけに サーバーに mod_php4 を入れていました。
apache2.0.x を使っているので、mod_php4 の使用は推奨されてないんですよね。。
また、最近は PHP で開発することもほとんど無くなり。。。必要性がかなり薄れておりました。
とりあえず、すっきり PHP とオサラバしたかったのです(笑)
最近は、 trac で開発を行っているプロジェクトもよく見られるようになってきました。国内では Meadow とか、 Namazu など。
WWDC 2006で存在明らかにされたMac OS Xの次バージョン「Leopard」に搭載予定のカレンダーサーバーである、 Darwin Calendar Server も trac で開発が行われるようです。
日本語の情報が、まだまだ少ないようなので、時間があったら少しずつでも、ノウハウまとめていきたいと思っておりますが。。。
できるのか?(汗)

portupgrade による Subversion のインストール/アップグレード

ちゃんとまとまった記事を書こうと思うと、思い切らないとなかなか書けないので、雑多なメモでもどんどん書くことにします。
余裕が出来たら、ちゃんとまとめてもいいし・・・。
subversion が 1.3.2 になっていたので portupgrade しようとおもったら、

You should build  www/apache20 with db4 support to use subversion with it.
Please rebuild  www/apache20 with option WITH_BERKELEYDB and try again.
Or you can disable db4 support. Only 'fs' repository backend will be available.
To disable db4 support, define WITHOUT_BDB.

と、怒られる。
今まではちゃんとインストールできてたのに。
pkgtools.conf は、こんな感じ。

'www/apache2' => [
'WITH_DAV_MODULES=y',
'WITH_SSL_MODULES=y',
'WITH_BERKELEYDB=db42',
],
'devel/subversion' => [
'WITH_PYTHON=y',
'WITH_APACHE2_APR=y',
'WITH_MOD_DAV_SVN=y',
'SVNGROUP=apache',
],

いままで出来ていたんだから、おかしいよなぁ。と思いつつ、いろいろ調べてみた。
まず、 www/apache20/Makefile を眺めてみる。
make show-options
make show-modules
make show-categories
というコマンドで、いろいろ見られるらしい。

$ make show-modules

を実行してみると、

WITH_DBM
WITH_BERKELEYDB

となっているではないですか。
すかさず、 WITH_DBM=bdb を追加。
こういうの、ワーニングで出してくれよって感じなんだけど(苦笑)
でも、相変わらず同じエラーでたたかれる。
よーく見ると、 apache2.x の port が apache20 に変わっているではないです。
pkgtools.conf を www/apache20 に修正。
無事インストールできました。
修正後の pkgtools.conf (抜粋)

'www/apache20' => [
'WITH_DAV_MODULES=y',
'WITH_SSL_MODULES=y',
'WITH_DBM=bdb',
'WITH_BERKELEYDB=db42',
],
'devel/subversion' => [
'WITH_PYTHON=y',
'WITH_APACHE2_APR=y',
'WITH_MOD_DAV_SVN=y',
'SVNGROUP=apache',
],

atacontrol(8) の使い方

FreeBSD users-jp で、2006年初Replyした僕の投稿、ちょうど1年前、大晦日から新年にかけて、同じようなトラブルで苦戦してたんだよね(汗)

該当スレッド

http://home.jp.freebsd.org/cgi-bin/thread?mesid=%3c20060101141127%2e0ADB%2eJDJ%40po%2eiijnet%2eor%2ejp%3e
年越しそばは食いそこね、新年はサーバールームで過ごす羽目に。。
該当記事
まだまだヒヨッコですが、ちょっとお役に立てたようで何よりです^^;

はまりどころ

水曜日、目を覚ますと、うちの会社の opteron サーバーが固まってた。原因はディスクエラー。
元々、atacontrol で、 RAID1 にしてあったもの。ad6のHDDが調子悪くなってきてエラーを吐くようになり、縮退運転で、だましだまし運用し続けていたところ、ついにad4までエラーを吐いて固まったらしい。
幸い、データは無事で、リブートしたら、ちゃんと起動する。
でも、これ以上の運用は危険ということで、ディスク交換することに。
通常なら、RAIDでミラーリングして交換するだけなのだけど、5.4-RELEASEよりいいといいう噂の6.0がリリースされたのと、ディスクの容量を120GBから160GBにしたかったので、6.0-RELEASEをクリーンインストールして、ついでに amd64 にすることに決定(この忙しいのにーー;)
いままで、 amd64では満足にJavaが動かなかったので、i386で運用を続けていたのだけど、これを機に amd64 にすることにしました。
OSのインストールとか設定はすんなりできたのだけども、 apache2とsubversionのインストールに大苦戦。
ports の依存関係をしくじったらしい。一旦削除して、依存関係をちゃんと整理したらインストールできました。
でも、なぜかsubversionが正常に動かず。Webからや、svn コマンドに応答せず。とことん黙り続けるーー;
古い方のディスクで起動して、
% svnadmin dump /home/svn/repos > repos.dump
と、レポジトリをダンプして、新しいディスクで restore してやったら、ちゃんと動きました。
i386でつくったレポジトリは、amd64で動かないらしいです。やっぱり。。
ひととおり設定し終わったところで、 RAID1 にする作業開始。
6.0-RELEASE になって、オンボードの sil3114 を認識するようになったので、 atacontrol も幸せに使えるかと思いきや、

The ataraid driver can read the following metadata formats.

ということで、 ataraid ドライバは読み取り専用らしい。
起動時に Silicon Image Medley としてちゃんと認識してくれるのだが、
# atacontrol addspare ar0 ad6
とかやっても、 Device not configured っていわれる。
むりやり rebuild しようものなら、 kernel panic になってしまった(汗)
ということで、 online rebuild は断念。サーバーを一旦落として、 BIOS から RAID1 をつくって、 rebuild しました。10GBで、1時間くらいかかったので、 160GBを rebuild するのに 16時間もかかってしまった(汗)
でも、いまは快調にうごいてます。
と、この忙しいのに強行軍で FreeBSD6.0-RELEASE amd64 にアップグレードした Opteron マシンですが、チューニングが足りないのか、あまりパフォーマンスあがらず。
pgbench も i386 のものとあまり変わりませんでした。
でも、いまのところは非常に安定して動いてます。
ネイティブJDK1.5.0 も快調。
仕事も快調に進むといいんだけどなぁ。。まだまだ前途多難のようです。。。

atacontrol(8) の使い方

大晦日から新年にかけて、サーバーが落っこちたりして大変でした(苦笑)
受難な年明け(ーー;
落ちたサーバーは、CPUファンの故障でコアが焼けてしまったので、M/B と CPUを交換。
Athlon XP 1600+ から、 Athlon XP 3000+ にアップグレード。ただ、メモリが PC2100 なので、FSB200 で動かして、クロックを x 16 に設定。Athlon XP 2800+ 相当で動作させてます。
M/B も交換した関係で、RAID1 にするのに使用していた ACS-7500 が認識しなくなってしまったので、 atacontrol(8) を使ってソフトウェア RAID にすることにしました。
ベンチマークしてないので、正確にはわかりませんが、パフォーマンスは悪くないです。動作は非常に安定しています。
まず、シングルユーザーモードで、 /etc/fstab を編集します。
# mount -a
念のため、バックアップをとる。
# cp /etc/fstab /etc/fstab.bak
ad0 を ar0 に書き換え。
# sed s/ad0/ar0/g /etc/fstab.bak > /etc/fstab
ar0 デバイスを作成。
detach, attach の後の番号は、 ATA channel です。
FreeBSD 6.x-RELEASE 以降は、 ata[channel] に変更になったようです。
# umount -a
# mount -u -o ro /
# atacontrol create RAID1 ad0 ad2
# atacontrol detach 1 /* 6.x 以降は # atacontrol detach ata1 */
# atacontrol attach 1 /* 6.x 以降は # atacontrol attach ata1 */
create RAID1 したあと、 ad2 デバイス(ATA channel 1)を detach して attach することによって、 ad2 が spare として認識されます。
SATA を使っていたりすると、 ad4 と ad6 で RAID ってこともあるかと思います。
detach, attach の後の番号は、 ATA channel なので、
# atacontrol list
で channel を確認しましょう。
ad6 が ATA channel 3 だったら、
# atacontrol create RAID1 ad4 ad6
# atacontrol detach 3
# atacontrol attach 3
となります。
detach して、 attach したら reboot しませう。
その後は、普通にマルチユーザーモードで、
# atacontrol addspare ar0 ad2
/** 上記のコマンドは 5.x-RELEASE 以降 */
# atacontrol rebuild ar0
としてやれば、 RAID1 としてリビルドされます。
途中経過は、
# atacontrol status ar0
で確認できます。
RAIDコントローラでなくとも、リムーバルケースがあれば、hot swap できるみたいです。(未確認)
また、 atacontrol(8) は、直接 ATAデバイスを叩くので、クラッシュして、 BIOS で認識しなくなってしまったディスクでも、 atacontrol detach 1 と atacontrol attach 1 を繰り返せば認識してくれるようになることもあるらしいです。認識してくれりゃ、 dd つかってデータ吸い出すことも可能ですもんねえ。
こんな感じで、コツをつかめば超簡単に RAID1 が構築できてしまいますが、 atacontrol(8) は超強力なので、失敗すると再帰不能になる可能性も。。
ディスクのバックアップは必ず取っておきましょう。。

続きを読む

gnome2.8

なんの気なしに、いれてみた。
日本語かんぺきですな。。
portinstall -Ccr x11/gnome2 で一発・・・と思ったんだけど、 gnomespeech をインストールところで止まってしまった。
gmake するときに、jdkのパスをフルパスで指定してあげないとダメみたいで、 gnomespeech の作業ディレクトリまでいって、止まっているコマンドをちゃんと jdkのパスを指定してあげて直打ち。
そうすれば動きました。
/usr/local/bin/java
とかで止まっていたら、
/usr/local/jdk1.4.2/bin/java
に置き換えてやったら大丈夫でした。
しかし、メモリ256M の非力ノートでは、スワップしまくりですな。。
まあ、サーバーのコンソールを開くか、チャットするくらいにしか使ってないからいいのだけども(笑)