簡単なウイルスメールをスキャンするスクリプトをつくる
目的
ウザったいウイルスメールを自作スクリプトでフィルタすることを目的とします。
また、今回のスクリプトは特にウイルスパターンを定義してフィルタするというわけではないため、(大方の)exeファイルをフィルタしてしまいますのでご注意ください。
環境
- OS: RedHat Linux 9
- 作成言語: ruby
- MTA: qmail (.qmail上にスクリプトを記述し、qmail-commandに実行させます)
判定方法
ウイルスメールのパターンを見れば分かりますが、大体メールの本文に'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'という文字が入っている事が確認出来ます。
今回のスクリプトでは、これが3回検出されたら(ようするに4行存在したら)ウイルスメールと判定することにします。
作ってみる
スクリプトの動作としては以下の通りとなります。
- ウイルスが添付されているかを判定する。(無ければ、終了コード0で終了する)
- ウイルスが存在すれば、ウイルスメールをメールボックス以外の場所に保存する。(万が一必要なメールだった場合のため)
- ウイルスメールの保存場所や、パターンに何回ヒットしたかをログに書き込む。
- 差し戻しする際のfailure noticeに記載するエラーメッセージを出力する。
- ウイルスメールを差し戻しするために、終了コード100でスクリプトを終了する。(なぜそうするのかは、qmail利用者の方であれば分かるはずです。詳しくはqmail-commandのマニュアルを参照ください)
実際のフィルタ用スクリプト。
設置してみる
実際に設置してみます。
#ホームディレクトリに移動
cd ~
#スクリプト設置用ディレクトリの作成
#bin/virusscan にスクリプトを設置する
#bin/log/filtered.log にログファイルが作成される
#bin/log/mail 以下に、ウイルスメールが保管される
mkdir -p bin/virusscan/log/mail
#属性の変更(自分以外は実行不可、及びログの閲覧不可)
chmod -R 0700 bin/virusscan
#スクリプトの設置
cd bin/virusscan
wget http://moko.cry.jp:3232/~keiji/linux/pub/scripts/viruscanner.rb.txt --output-document=viruscanner.rb
chmod 700 viruscanner.rb
さらに、.qmailへの記述が必要です。
自分のホームディレクトリの.qmailの先頭に以下の通り記述してください。
| bin/virusscan/viruscanner.rb
初めて.qmailを設定する場合は、大抵の環境(Maildir使用)であれば、
| bin/virusscan/viruscanner.rb
./Maildir/
で、動作すると思います。
テスト
実際に、上記スクリプトを設置したアカウント宛にウイルスメールを送信してみてください。
~/bin/virusscan/log/filtered.log が作成され、中に、
日付[TAB]保存ファイル名[TAB]パターンヒット数
というデータが作成されていれば、フィルタに成功しています。
同時に、~/bin/virusscan/log/mail 以下にウイルスメールが保存されていると思います。
また、差出人にメールが戻ってくると思います。
ただ、差出人には、フィルタされたメールがそのまま返送されるため、自分が差出人だとメールがループしてしまい、エラーメールが管理者宛に届いてしまいます。
回避するためには、差出人にメールを戻さないという方法があります。
この場合、ソースコードのexit(100)と記述してある部分をexit(99)にしてください。
そうすれば、メールを返送することが無くなります。