月別アーカイブ: 2008年3月

受信メールをウィルスチェックする

対象OS

Mac OS X 10.3 (Panther)
Mac OS X 10.4 (Tiger)
Mac OS X 10.5 (Leopard)

はじめに

メールには、こちらに送られてくる受信メールと、こちらから送る送信メールがある。ここでは、こちらに送られてくるメールを受信すると同時にウィルスに感染していないか調べるシステムを導入する。

こちらから送信するメールについては今回のチェックの対象外としている。




インストール

使用ソフト

  • clamav 0.92.1

インストールの前に

Binc IMAP のインストールには Darwinports を使用する。port をまだインストールしていない場合は、インストールしておく。(インストールの仕方はココをクリック)

インストール

# port install clamav

インストール時は必要に応じて gmp もインストールされる。

clamav グループ及びユーザの設定

この設定は Panther のみ必要。Tiger, Leopard では必要ない。すでに clamav (Leopard では _clamav)ユーザー及びグループが設定されているためだ。なので Panther 以外のユーザーはスキップしよう。(ここをクリックしてスキップ)

グループの空き番号確認

次の章で作成する clamav グループの ID に 30 を使うこととし、それが既に使われていないか念のために確認する。

$ nidump group . | sort -n -t : -k 3 ... グループ ID にて 30 番がすでに使われていないかチェック
(中略)
postfix:*:27: ... ':' で仕切られた 3 つ目が ID
postdrop:*:28:
guest:*:31:root ... 28 の次が 31 なので 30 番が空いていることがわかる
utmp:*:45:
uucp:*:66:
(以下略)

clamav グループの作成

# echo 'clamav:*:30:Clam AntiVirus' | niload group .

もし、上の章で調べた結果、30 番が使われていたら、別の番号 (32 とか 401 とか) を使用する。使われている番号は絶対に使用しないこと。

ユーザの空き番号確認

次の章で作成する clamav ユーザの ID に 30 を使うこととし、それが既に使われていないか念のために確認する。

$ nidump passwd . | sort -n -t : -k 3 ... ユーザ ID にて 30 番がすでに使われていないかチェック
(中略)
lp:*:26:26::0:0:Printing Services:/var/spool/cups:/usr/bin/false
	... ':' で仕切られた 3 つ目が ID
postfix:*:27:27::0:0:Postfix User:/var/spool/postfix:/usr/bin/false
www:*:70:70::0:0:World Wide Web Server:/Library/WebServer:/usr/bin/false
	... 27 の次が 70 なので 30 番が空いていることがわかる
(以下略)

clamav ユーザの作成

# echo 'clamav:*:30:30::0:0:Clam AntiVirus:/var/empty:/usr/bin/false' | \
 niload passwd .

最初の 30 がユーザ ID。次の 30 が先ほど設定したグループ IDとなる。それぞれ、30 以外を設定する場合はそれに合わせて変えること。

設定

freshclam.conf の修正

# cd /opt/local/etc
# cp ./example-freshclam.conf ./freshclam.conf

# vi ./freshclam.conf
(以下、黄色部分を追加・修正)

(8 行目あたり)
# Example

(17 行目あたり  先頭の # を外す)
UpdateLogFile /var/log/clamav/freshclam.log

(33 行目あたり  先頭の # を外す)
LogVerbose yes

46 行目あたり  先頭の # を外す)
PidFile /var/run/freshclam.pid

51 行目あたり  先頭の # を外す)
DatabaseOwner clamav ... Panther, Tiger の場合
DatabaseOwner _clamav ... Leopard の場合

(63 行目あたり  先頭の # を外す)
DNSDatabaseInfo current.cvd.clamav.net

(67 行目あたり  先頭の # を外す)
DatabaseMirror db.jp.clamav.net ... 日本からのアクセスの場合、XY を消して jp にする
 ... アメリカからであれば us となる

(77 行目あたり  先頭の # を外す)
MaxAttempts 5

(85 行目あたり  先頭の # を外す)
Checks 24

clamd.conf の修正

# cd /opt/local/etc
# cp ./example-clamd.conf ./clamd.conf

# vi ./clamd.conf
(以下、黄色部分を追加・修正)

(8 行目あたり)
# Example

(14 行目あたり  先頭の # を外す)
LogFile /var/log/clamav/clamd.log

(34 行目あたり  先頭の # を外す)
LogTime yes

(52 行目あたり  先頭の # を外す)
LogVerbose yes

(57 行目あたり  先頭の # を外す)
PidFile /var/run/clamd.pid

(110 行目あたり  先頭の # を外す)
MaxThreads 20

(135 行目あたり  先頭の # を外す)
SelfCheck 1800

(144 行目あたり  先頭の # を外す)
User clamav ... Panther, Tiger の場合
User _clamav ... Leopard の場合

必要なディレクトリ・ファイルの作成

# cd /var/log
# mkdir clamav
# touch clamav/clamd.log
# touch clamav/freshclam.log
# chmod 755 clamav
# chmod 644 clamav/* ... clamav 内の全ての log へ変更
# chown -R clamav:clamav clamav ... Panther, Tiger の場合
# chown -R _clamav:_clamav clamav ... Leopard の場合

# cd /var/run
# touch ./clamd.pid
# touch ./freshclam.pid
# chown clamav:clamav ./clamd.pid ... Panther, Tiger の場合
# chown _clamav:_clamav ./clamd.pid ... Leopard の場合
# chown clamav:clamav ./freshclam.pid ... Panther, Tiger の場合
# chown _clamav:_clamav ./freshclam.pid ... Leopard の場合

# cd /opt/local/share
# chown -R clamav:clamav clamav ... Panther, Tiger の場合
# chown -R _clamav:_clamav clamav ... Leopard の場合

自動起動設定

ディレクトリの作成

# cd /System/Library/StartupItems
# mkdir CLAMAV
# mkdir CLAMAV/Resources
# mkdir CLAMAV/Resources/English.iproj

CLAMAV ファイルの作成

# cd /System/Library/StartupItems/CLAMAV
# vi CLAMAV

-- 以下のファイルを作成
#!/bin/sh
. /etc/rc.common

PIDDIR=/var/run/StartupItems

StartService ()
{
    if [ "${CLAMAV:=-NO-}" = "-YES-" ]; then
    ConsoleMessage "Starting ClamAV"
        /opt/local/bin/freshclam -d
        /opt/local/sbin/clamd
        else
        NoService
    fi
}

StopService ()
{
    ConsoleMessage "Stoping ClamAV"
        if [ -f $PIDDIR/clamd.pid ]; then 
		kill -9 $(head -1 $PIDDIR/clamd.pid)
	fi
        if [ -f $PIDDIR/freshclam.pid ]; then 
		kill -9 $(head -1 $PIDDIR/freshclam.pid)
	fi
}

RestartService ()
{
    if [ "${CLAMAV:=-NO-}" = "-YES-" ]; then
    ConsoleMessage "Restarting ClamAV"
    StopService
    StartService
    else
    StopService
        NoService
    fi
}

NoService ()
{
        ConsoleMessage "Service is disabled in /etc/hostconfig

        Unable to start
        "
}

RunService "$1"
-- ここまで

# chmod 755 ./CLAMAV ... 実行属性を与えておく

StartupParameters.plist の作成

# cd /System/Library/StartupItems/CLAMAV
# vi StartupParameters.plist

-- 以下のファイルを作成
{
  Description    = "CLAMAV";
  Provides        = ("CLAMAV");
  Requires        = ("Resolver");
  OrderPreference    = "NONE";
  Messages =
  {
    start = "Starting ClamAV";
    stop  = "Stopping ClamAV";
    restart = "Restarting ClamAV";
  };
}
-- ここまで

Localizable.strings の作成

# cd /System/Library/StartupItems/CLAMAV/Resources/English.iproj
# vi Localizable.strings

-- 以下のファイルを作成
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
<plist version="0.9">
<dict>
    <key>CLAMAV</key>
    <string>CLAMAV</string>
    <key>Starting ClamAV</key>
    <string>Starting ClamAV/string>
    <key>Stopping ClamAV</key>
    <string>Stopping ClamAV</string>
    <key>Restarting ClamAV</key>
    <string>Restarting ClamAV</string>
    <key>Service is disabled in /etc/hostconfig
        Unable to start</key>
    <string>Service is disabled in /etc/hostconfig
        Unable to start</string>
</dict>
</plist>
-- ここまで

hostconfig の修正

# vi /etc/hostconfig

-- ファイルの最後に下記の行を追加する
CLAMAV=-YES-
-- ここまで

clamav 起動

実行させるには下記のようにする。

# SystemStarter start "CLAMAV"

または Mac を再起動しても良い。

起動したら、/var/log/clamav 以下のログファイルを見て、起動時にエラーが起こっていないか確認しよう。エラーが出ていたら、改めて設定を確認しよう。

各ユーザーの設定

.procmailrc の修正

ここまでできたら、各ユーザーがメール受信時にウィルスチェックを行うように設定する。

下記の変更は各ユーザーに対して行う必要がある。

$ cd $HOME
$ vi .procmailrc

-- 以下黄色部分を追加
PATH=/usr/bin:/usr/local/bin:/opt/local/bin
LOCKFILE=$HOME/.lockmail
MAILDIR=$HOME/Library/Maildir
DEFAULT=INBOX/new
VIRUSDIR=Trash/new
#VIRUSDIR=/dev/null ... ウィルスメールを受信せず破棄する場合はこのコメント (#) を外す
#LOGFILE=$HOME/procmail.log

:0 wf
* ! ? /opt/local/bin/clamdscan --quiet -
| formail -i "Subject: !!Virus Detected by ClamAV!!"
:0 a:
*^Subject: !!Virus Detected by ClamAV!!
$VIRUSDIR

:0
SCORE=| /opt/local/bin/spamprobe receive
:0 wf
| formail -I "X-SpamProbe: $SCORE"
:0 a:
*^X-SpamProbe: SPAM
Trash/new

動作説明

ウィルスの定義ファイルは freshclamd によって 1 時間に 1 回の割合で自動的に更新される。

ウィルス付きのメールが送られてくると、メールのゴミ箱に “!!Virus Detected by ClamAV!!”というタイトルで送られる。手動で削除するなり、必要に応じて調べるなりしよう。もしくは .procmailrc の設定にてウィルスメールを受信せずそのまま破棄するようにすることもできる。