| トップ | Solaris | FreeBSD | Gentoo | CentOS | Fedora | Windows | Tips | 自宅サーバの動作確認 | サイト内検索(Namazu) | サイト内検索(HE) |
「Squid」を利用してネットサーフィンをしている場合に「Clam AV」を利用してウィルスチェックを行うようにします。
ここで「Squid」と「Clam AV」を連携させる為に「SquidClamav」を利用します。
なお、「Clam AV」の設定は完了済みとしています。
また、メールのウィルスチェックに「amavisd-new」を利用してclamdを利用している場合、
「amavisd-new」用に起動しているclamdは「SquidClamav」とは別であり、「SquidClamav」用に設定・起動する必要があります。
ここでは「SquidClamav」用に設定・起動する方法を記述しています。
なお、当ページでの設定はCentOSで行っていますが、設定ファイルや起動スクリプト等の記述は
Fedoraのclamav-serverパッケージでの記述を流用しています。
「SquidClamav」のインストール
[root@CentOS ~]# mkdir /usr/local/src/squidclamav <= 作業用ディレクトリの作成 [root@CentOS ~]# chmod 777 /usr/local/src/squidclamav <= 作業用ディレクトリのパーミッション変更 [root@CentOS ~]# exit <= 一般ユーザになる [kaz@CentOS ~]$ cd /usr/local/src/squidclamav <= 作業用ディレクトリへ移動 [kaz@CentOS squidclamav]$ wget http://www.samse.fr/GPL/squidclamav/squidclamav-3.2.tar.gz <= 「SquidClamav」のソースをダウンロード [kaz@CentOS squidclamav]$ tar xzf squidclamav-3.2.tar.gz <= ダウンロードしたソースの展開 [kaz@CentOS squidclamav]$ cd squidclamav-3.2 <= 展開したディレクトリに移動 [kaz@CentOS squidclamav-3.2]$ ./configure | tee configure.log 2>&1 [kaz@CentOS squidclamav-3.2]$ make | tee make.log 2>&1 <= コンパイル [kaz@CentOS squidclamav-3.2]$ su <= スーパーユーザになる Password: <= パスワードの入力 [root@CentOS squidclamav-3.2]# make install | tee make-install.log 2>&1 <= のインストール [root@CentOS squidclamav-3.2]# cp squidclamav.conf.dist /etc/squidclamav.conf <= サンプル設定ファイルのコピー [root@CentOS squidclamav-3.2]# cp clwarn.cgi /var/www/cgi-bin/ <= サンプル警告ページのコピー |
「SquidClamav」の設定
サンプルの設定ファイルは全てコメントアウトされている為、下記のように必要な箇所のコメント解除および追加を行います。
[root@CentOS ~]# vi /etc/squidclamav.conf <= 設定ファイルの編集 proxy http://127.0.0.1:8080/ <= プロキシのアドレスとポート番号を指定 logfile /var/log/squidclamav.log <= ログファイルを指定 redirect http://www.crimson-snow.net/cgi-bin/clwarn.cgi <= ウィルス発見時にリダイレクトするページを指定 debug 0 force 1 stat 1 clamd_local /var/run/clamd.squidclamav/clamd.sock <= 「Clam AV」のローカルソケットを指定(「Clam AV」の設定に合わせる) clamd_ip 127.0.0.1 <= clamdが動作しているサーバのアドレスを指定(「Clam AV」の設定に合わせる) clamd_port 3310 <= clamdが動作しているサーバのポート番号を指定(「Clam AV」の設定に合わせる) timeout 60 ファイル名から大文字、小文字を区別しないでウィルススキャンするものを正規表現で明示的に指定 regexi ^.*\.exe$ regexi ^.*\.com$ regexi ^.*\.zip$ ファイル名から大文字、小文字を区別してウィルススキャンしないものを正規表現で指定 abort ^.*\.gz$ abort ^.*\.bz2$ abort ^.*\.pdf$ abort ^.*\.js$ abort ^.*\.html$ abort ^.*\.css$ abort ^.*\.xml$ abort ^.*\.xsl$ abort ^.*\.js$ abort ^.*\.ico$ ファイル名から大文字、小文字を区別しないでウィルススキャンしないものを正規表現で指定 aborti ^.*\.gif$ aborti ^.*\.png$ aborti ^.*\.jpg$ aborti ^.*\.swf$ 全てのapplication/*ファイルの内容タイプに基づくウイルススキャンを実行する content ^.*application\/.*$ ウィルススキャンしないURLを指定 whitelist .*google\.com |
「Squid」の設定
当サイトと同じ設定もありますが、「SquidClamav」の設定と合わせる箇所および最低限必要な設定も記述しています。
また、「Squid」のバージョンが2.5系と2.6系でリダイレクタの記述方法が若干異なります。
なお、元々記述されている部分やTAGで記述箇所がある部分がありますが、
aclの定義より後にlocalhostの設定を記述しないと、エラーで「Squid」が起動出来ないので注意する必要があります。
[root@CentOS ~]# vi /etc/squid/squid.conf <= 設定ファイルの編集 http_port 8080 <= 「SquidClamav」の設定と合わせる 「Squid」2.6系の場合は以下の設定を確認または追加 acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 http_access deny to_localhost http_access allow localhost url_rewrite_access deny localhost url_rewrite_program /usr/local/bin/squidclamav url_rewrite_children 15 ここまで 「Squid」2.5系の場合は以下の設定を確認または追加 acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 http_access deny to_localhost http_access allow localhost redirector_access deny localhost redirect_program /usr/local/bin/squidclamav redirect_children 15 ここまで |
「Clam AV」の設定
「SquidClamav」の設定と合わせる箇所および最低限必要な設定も記述しています。
[root@CentOS ~]# mkdir /etc/clamd.d <= 設定ファイル格納ディレクトリ作成 [root@CentOS ~]# cp /etc/clamd.conf /etc/clamd.d/squidclamav.conf <= 設定ファイルのコピー [root@CentOS ~]# vi /etc/clamd.d/squidclamav.conf <= 設定ファイルの編集 #Example <= 確認(コメントアウトする) LogFile /var/log/clamav/clamd.log ↓ LogFile /var/log/clamd.squidclamav <= 「SquidClamav」用のログファイルを指定 PidFile /var/run/clamav/clamd.pid ↓ PidFile /var/run/clamd.squidclamav/clamd.pid <= 「SquidClamav」用のPIDファイルを指定 LocalSocket /var/run/clamav/clamd.sock ↓ LocalSocket /var/run/clamd.squidclamav/clamd.sock <= 「SquidClamav」用のソケットを指定 #TCPSocket 3310 ↓ TCPSocket 3310 <= 「SquidClamav」用のポート番号を指定 TCPAddr 127.0.0.1 <= 確認(「SquidClamav」用のIPアドレスを指定) User clamav ↓ User squid <= 「SquidClamav」用の「Clam AV」のユーザを指定 |
起動の準備
起動する為に必要なログファイル等を用意します。
[root@CentOS ~]# touch /var/log/squidclamav.log <= 「SquidClamAV」のログファイルの作成 [root@CentOS ~]# chown squid /var/log/squidclamav.log <= ログファイルのオーナの変更 [root@CentOS ~]# touch /var/log/clamd.squidclamav <= 「SquidClamAV」用の「Clam AV」のログファイルの作成 [root@CentOS ~]# chgrp squid /var/log/clamd.squidclamav <= ログファイルの所有グループを変更 [root@CentOS ~]# chmod 0620 /var/log/clamd.squidclamav <= ログファイルのパーミッションを変更 [root@CentOS ~]# mkdir /var/run/clamd.squidclamav <= ソケットファイル等格納ディレクトリの作成 [root@CentOS ~]# chown squid:squid /var/run/clamd.squidclamav <= ソケットファイル等格納ディレクトリのオーナの変更 [root@CentOS ~]# cd /usr/sbin [root@CentOS sbin]# ln -s clamd clamd.squidclamav <= clamdのシンボリックリンクを作成 |
起動スクリプト等の作成
起動スクリプト等を作成して起動するようにします。
まず/usr/share/clamav/clamd-wrapperを作成します。
[root@CentOS ~]# mkdir /usr/share/clamav <= ディレクトリの作成
[root@CentOS ~]# vi /usr/share/clamav/clamd-wrapper <= 設定ファイルの作成
#!/bin/bash
#
# Xchkconfig: - 75 25
# Xdescription: The clamd daemon listens for incoming connections on \
# Unix or TCP socket and scans files or directories on demand.
test "$CLAMD_SERVICE" || {
echo $"*** $0 can not be called in this way"
echo $"*** Please see /usr/share/doc/clamav-server-*/README how"
echo $"*** the clamav-server can be configured"
exit 6
}
# Source function library.
. /etc/init.d/functions
# Get config.
test -r /etc/sysconfig/network && . /etc/sysconfig/network
# Check that networking is up.
test "$NETWORKING" != "no" || exit 6
lockfile=/var/lock/subsys/clamd.${CLAMD_SERVICE}
sysconffile=/etc/sysconfig/clamd.${CLAMD_SERVICE}
procname=clamd.${CLAMD_SERVICE}
CLAMD_CONFIGFILE=/etc/clamd.d/${CLAMD_SERVICE}.conf
CLAMD_OPTIONS=
## backward-compatibility check...
for i in /var/run/clamd.${CLAMD_SERVICE}/clamd.sock \
/var/run/clamav.${CLAMD_SERVICE}/clamd.sock; do
CLAMD_SOCKET=$i
test ! -e "$i" || break
done
test -f "$sysconffile" && . "$sysconffile"
RETVAL=0
prog="clamd.${CLAMD_SERVICE}"
start () {
echo -n $"Starting $prog: "
daemon $procname ${CLAMD_CONFIGFILE:+-c $CLAMD_CONFIGFILE} ${CLAMD_OPTIONS}
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch $lockfile
return $RETVAL
}
stop () {
echo -n $"Stopping $prog: "
killproc $procname
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f touch $lockfile
return $RETVAL
}
reload() {
rc=0
echo -n $"Reloading $prog: "
killproc $procname -SIGHUP || rc=$?
echo
echo -n $"Loading new virus-database: "
killproc $procname -SIGUSR2 || rc=$?
echo
return $rc
}
restart () {
stop
start
}
# See how we were called.
case "$1" in
start|stop|restart|reload)
$1 ;;
status)
status $procname ;;
condrestart)
test ! -f $lockfile || restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}"
exit 2
esac
|
次に/etc/sysconfig/clamd.squidclamavを作成します。
[root@CentOS ~]# vi /etc/sysconfig/clamd.squidclamav <= 設定ファイルの作成 CLAMD_CONFIGFILE=/etc/clamd.d/squidclamav.conf CLAMD_SOCKET=/var/run/clamd.squidclamav/clamd.sock CLAMD_OPTIONS= |
最後に/etc/rc.d/init.d/clamd.squidclamavを作成します。
[root@CentOS ~]# vi /etc/rc.d/init.d/clamd.squidclamav <= 起動スクリプトの作成 #!/bin/bash # # chkconfig: - 75 25 # description: The clamd server running for squidclamav CLAMD_SERVICE=squidclamav . /usr/share/clamav/clamd-wrapper [root@CentOS ~]# chmod 755 /etc/rc.d/init.d/clamd.squidclamav <= 起動スクリプトに実行権限付加 |
「Clam AV」の起動
Squid用のclamdを起動後、「Squid」を再起動します。
[root@CentOS ~]# /etc/rc.d/init.d/clamd.squidclamav start [root@CentOS ~]# /etc/rc.d/init.d/squid restart |
「SquidClamav」用「Clam AV」の自動起動
サービスに登録して、CentOS起動時に自動的に起動するようにします。
[root@CentOS ~]# chkconfig --add clamd.squidclamav [root@CentOS ~]# chkconfig clamd.squidclamav on |
ログのローテート
/etc/logrotate.d/clamd.squidclamavファイルを作成して、ログローテートを行います。
[root@CentOS ~]# vi /etc/logrotate.d/clamd.squidclamav <= 設定ファイルの作成
/var/log/clamd.squidclamav {
monthly
notifempty
missingok
postrotate
killall -HUP clamd.squidclamav 2>/dev/null || :
endscript
}
|
テストウィルスのダウンロード
http://www.eicar.org/anti_virus_test_file.htm にテスト用ウィルスがありますので、ダウンロードしようとすると警告ページにリダイレクトされればきちんと動作しています。