メイン

RHEL4 アーカイブ

2007年09月05日

spamassassinでスパムメール対策

 スパムメールがこのところやたら目につく。有料のアプライアンス製品と遜色ないレベルで駆除をおこなってくれそうなOSSもいくつかあるようだ。目をつけたのは spamassassin と bsfilter。日本語のスパム対策で有利なのはbsfilterのようだが我が組織の環境では日本語圏外からのスパムの方が多い。またspamassassinも工夫次第で日本語スパムにも十分な処理をするようだったので今回はこの手のソフトウェアでのデファクトスタンダードであるspamassassinを選択した。
 特徴は以下。

●メールのヘッダと本文のパターンマッチング
●ベイジアンフィルタ
●DNSBL, URIBL
●共同型フィルタリングネットワーク

SPAMメールをSPAMメールと判定する精度:約95%
正常メールを正常メールと判定する精度:約99%

学習機能があるので精度は徐々に上がると思います。

今回OSはCentOS4,RHEL4で確認した。どちらも同じ設定だった。RHEL4での作業記録をとっている。

まずはspamassassinのインストールから。

# up2date --configure
# up2date --install spamassassin

spamassassin-3.1.9-1.el4にバージョンアップした。これでインストール完了。
サイトポリシー設定ファイルは以下のファイルです。このコンフィグファイルで全体の制御にかかわる設定を行います。
/etc/mail/spamassasin/local.cf

個別ユーザ設定ファイルは以下です。ユーザごとの設定です。
~/.spamassassin/user_prefs

ルールのアップデートを必ず行いましょう。
# sa-update
※/var/lib/spamassassin配下にダウンロードされます
※perl-Archive-Tarのrpmと
 perl-IO-Zlibのrpmをインストールしないとエラーが出る。


procmailを利用してspamassassinは機能します。


spamassassinを利用するユーザには~/.procmailrc ファイルを作成します。

$ vi ~/.procmailrc
---
# ログ
LOGFILE=$HOME/procmail.log

# spamassassinによるスパムチェックを行う
:0fw:$HOME/.procmail.lock
|/usr/bin/spamc

# スパムメールをユーザ届かなくする設定
:0
* ^X-Spam-Status: Yes
/path/file
---

ネットで調べると$HOME/.procmail.lockは書かなくてもいいようだったけど書かないとprocmail.logにエラーが出た。
/path/file は /dev/null でもいいけどちょっと怖い。


postfixを使っている場合は以下のように設定を変更します。

# vi /etc/postfix/main.cf
---
mailbox_command = /usr/bin/procmail
---


最後に各種サービスの起動,再起動などをします。

# chkconfig --level 35 spamassasin on
# service spamassassin start
# service postfix reload

これでOK。意外と簡単でした。あとはspamassassinの判定精度を上げるために学習させます。


スパムメールを学習させる

# sa-learn --progress --spam /path/directory

正常なメールを学習させる

# sa-learn --progress --ham /path/directory

それぞれ200通学習しなければベイジアンフィルタが有効になりません。
この数値は以下の設定で変更することができます。

# vi /etc/mail/spamassassin/local.cf
---
bays_min_ham_num 100
bays_min_spam_num 100
---
など。

2007年09月06日

userminでWEBメール

 今回WEBメールを利用できるようにしようと思ったのは,spamassassinでスパムメールをサーバ上に隔離した為,そのメールをユーザ自身で管理出来るようにしたかったからです。ユーザ自身でスパムメールを見て削除していただく。これだけでいいのです。
 フリーのWEBメールで有名なのはsquirrelmailですが残念ながら私のやりたいことができませんでした。そこでuseiminでWEBメールが出来るようにと考えて調べていたら見事にやりたいことが出来ました。

今回使ったバージョンはusermin-1.270.tar.gzで構築まではすでにこのブログで書きましたので機能の追加だけ記述します。

まずWEBメールを使えるように以下のファイルを変更します。
# vi /etc/usermin/webmin.acl
--
user: changepass mailbox
--
これでパスワード変更とWEBメールが使えます。

次に隔離したメールが集まる場所を指定します。
# vi /etc/usermin/mailbox/config
--
mail_dir=/path/spam
--

今回はユーザがスパムメールを見ることができ,サーバから削除できるだけでいいのでそのように設定します。タイトルを以下のように変更しました。
# vi /etc/usermin/module.infos.cache
--
mailbox desc=Read SPAM Mail
mailbox realdesc=Read SPAM Mail
--

文字化け対策は以下。
# vi /usr/local/usermin-1.270/mailbox/view_mail.cgi
--
$charset = "EUC-JP";
--

削除時の確認メッセージを日本語に直しました。
# vi /usr/local/usermin-1.270/mailbox/lang/en
--
confirm_warn4=
confirm_warn=選択した $1 通のメッセージを消去してよろしいですか?
--

あとの機能はいらないのでいろいろコメントアウトしました。
# vi /usr/local/usermin-1.270/mailbox/index.cgi
# vi /usr/local/usermin-1.270/mailbox/view_mail.cgi
# vi /usr/local/usermin-1.270/mailbox/mailbox-lib.pl

これらのファイルを編集することで必要な機能を限定させることが出来ます。

2007年09月11日

spamassassinで日本語スパムメール対策

headerやbodyにある単語でスパム判定を行う設定をする。

たとえばSubjectに「出会い系」という文字列が入っていたら判定ポイントをプラス1する場合

vi /etc/mail/spamassassin/local.cf
---
header H_SPAM_WORD1 Subject =~ /=P2q\$\$7O/
describe H_SPAM_WORD1 Deaikei
score H_SPAM_WORD1 1.00
---

と記入する。
単に出会い系と記入してはいけない。文字コードの問題である。またPERL言語なのでエスケープしてやる必要もある。

# echo "出会い系" | nkf -j|awk '{gsub(/\x1B[$(]B/,"");print}'
=P2q$$7O

※エスケープの必要のあるメタキャラ
.`*+/?^$#{}()[]

よって「出会い系」は「=P2q\$\$7O」という文字列になる。
bodyにある文字列で判定ポイントを上げるには以下のように書く。

---
body B_SPAM_WORD /=P2q\$\$7O/
describe B_SPAM_WORD Deaikei
score B_SPAM_WORD 1.00
---

bodyの文字列を指定する場合はよく考えてからにしましょう。

2007年09月13日

pflogsummによるpostfixのログ集計

 いったいpostfixはどうなっているのか?きちんと動いているのか?とてもきになるところです。特にmain.cfの設定を変更した時なんか。そんなときはpostfixのログを集計して見てみましょう。一番簡単にできそうなのは postfix-pflogsumm パッケージを使うことでした。

# yum install postfix-pflogsumm

あとはpflogsummコマンドを利用するだけです。

# pflogsumm -e -d yesterday /var/log/maillog | more
(-e: 詳細表示 -d yesterday: 昨日分だけを集計)

思ったよりも詳細な集計結果が得られると思います。

2007年10月03日

spamassassinでベイジアンフィルタを有効にする

 以前書いたspamassassinの設定だけではベイジアンフィルタが結局有効になりませんでした。メールサーバを使っている利用者でspamassassinの機能を有効にしている人全員にベイジアンフィルタをかけたかったんだけどなかなかうまく行かなかった。
 いろいろ調べた結果以下の設定も必要ということが分かった。

# mkdir /path/to/directory
# chmod 777 /path/to/directory
# mkdir /path/to/directory/byes
# chmod 777 /path/to/directory/byes

# vi /etc/mail/spamassassin/local.cf
---
bayes_path /path/to/directory/bayes/bayes
bayes_file_mode 0666
auto_whitelist_path /path/to/directory/auto_whitelist
auto_whitelist_file_mode 0666
---

最後に以下のコマンドで間違いがないか確認しましょう。
# spamassassin --lint


これでいけるようです。

2007年10月22日

xoopsでサイトを構築その1

HPの更新がめんどくさく感じ始めた。
そこで興味を持ったのがxoopsである。
本来はコミュニティサイトを構築するソフトのようだが,
私の場合,静的コンテンツを簡単に誰でも作れるようにと考えてインストールすることにした。

まずはじめにサーバを準備する必要がある。
今回はRHEL4とCentOS4で構築した。
必要なパッケージは以下(apache,php,mysql)

●apache
●mysql-server
●php
●php-mysql

これらをyumやup2dateコマンドでインストールする。
関連するパッケージもいくつかインストールされた。

インストールが完了したらhttpd(apache)とmysqld(mysql-server)の設定をして起動する。


サーバの構築において参考になるサイト
http://centossrv.com/apache.shtml
http://centossrv.com/mysql.shtml

2007年10月30日

PostgreSQLのインストール

PostgreSQLのインストール

↓ダウンロード
http://www.postgresql.org/

現在のバージョンは8.2.5でした。

●インストール

postgresユーザを作成します。
# groupadd postgres
# useradd -g postgres postgres

パスワードはロックしておきました。
# passwd -l postgres

ディレクトリを作成します。
# mkdir /usr/local/pgsql
# chown postgres.postgres /usr/local/pgsql

作業ディレクトリの設定
# chmod 777 /usr/local/src

postgresユーザにスイッチします。
# su - postgres

インストールします。
$ tar zxvf postgres-8.2.5.tar.gz -C /usr/local/src/
$ cd /usr/local/src/postgres-8.2.5
$ ./configure
$ make
$ make check
$ make install

PostgreSQL installation complete. と表示されたらOKです。


●postgresユーザの環境設定

$ vi ~/.bash_profile
---
export PATH=$PATH:$HOME/bin:/usr/local/pgsql/bin
export PGHOME=/usr/local/pgsql
export PGDATA=/usr/local/data
export PGLIB=/usr/local/lib
---

最後に以下のコマンドを打って設定を反映させましょう。
$ source ~/.bash_profile


●データベースの初期化

$ initdb -E EUC_JP --no-local -D /usr/local/pgsql/data
(-E,--no-local:日本語対応にしています -D: データ保存先)

以下のような表示がされたらOK
---
Success. You can now start the database server using:

postgres -D /usr/local/pgsql/data
or
pg_ctl -D /usr/local/pgsql/data -l logfile start
---


●アクセス制御

許可するIPを書きましょう。

$ vi /usr/local/pgsql/data/pg_hba.conf
--
host all all 123.123.123.123/32 trust
--

$ vi /usr/local/pgsql/data/postgresql.conf
--
listen_addresses = 'localhost,123.123.123.123'
port = 5432
--


●起動スクリプトの設定

マシン起動,停止時に自動起動,停止する起動スクリプトを設定しましょう。
起動スクリプトはソースの中に既にありますのでコピーして使いましょう。

# cp /usr/local/src/postgresql-8.2.5/contrib/start-scripts/linux /etc/init.d/postgres
# chmod 755 /etc/init.d/postgres
# chkconfig --add postgres

以上で完了です。
あとは起動してpostgresqlを使いましょう。

2007年12月04日

xoopsサイトの構築その2

その1の続きです。まずはデータベースの設定から。サーバによっていろいろあると思いますが自サーバの場合は以下のようになると思います。

mysqlにrootでログイン

$ mysql -u root -p
Enter password:

データベースを作成

mysql> create database DatabaseName;
Query OK, 1 row affected (0.00 sec)

作成したデータベースにアクセス権限のあるユーザを作成

mysql> grant all privileges on DatabaseName.* to UserName@localhost identified by 'Password';
mysql> exit

あとはxoops本体を取ってくる。
以下のサイトにある。

http://www.xugj.org/

xoops-2.0.16a-JP.zipを利用した。
解凍した中のhtmlフォルダ内のすべてのファイルをサーバにアップロードする。
/home/username/pulic_html/xoops 内に入れた場合は

http://host.domain.com/~username/xoops

にアクセスする。
するといろいろ聞いてくるのでセッティングすればOK。
とくに難しくはないと思います。