このブログを検索

2012年3月14日水曜日

squidclamavの除外設定

squidclamavにおいて、除外したいものが出てきたときのお話。

よくあるんだけど、ダウンロードしようとすると
ウイルスだの、疑わしいファイルだのと警告が出て、けれどもダウンロードしても、絶対大丈夫という自信がある場合に
除外してしまおうという設定が下記。

ちなみにclamavで除外しても、クライアントに入れている別のセキュリティソフトが動いていれば、本当に問題があれば、止められますから。
なので、マルチセキュリティベンダーを使うことは今や常識です。

さてさて、実際の作業ですが、


①まずはじめに/etc/squidclamav.confを編集します。


下記はストリーミングビデオの除外設定の例。
abortcontent ^video\/x-flv$
abortcontent ^video\/mp4$

flashのファイルの時は以下のような感じ。


abort ^.*\.swf$
abortcontent ^application\/x-shockwave-flash$


サイト丸ごと除外する場合。

whitelist       .*\.symantec\.com
whitelist       .*\.norton\.com

そもそもアクセスしてくるクライアントを除外する場合。
trustclient    192.168.1.100

なお、これを除外するとeicarも発見しなくなります。
abortcontent ^application\/octet-stream$

基本的に
abortはファイル拡張子を含むファイルそのものの除外の場合、
abortcontentはMIMEタイプでの除外の場合、
whitelistはアクセス先ドメイン
trustclientはアクセス元IPアドレス
というパターンで弊社は除外設定しています。

②編集が終わりましたら、再起動しますが、squidはもちろん、clamavもc-icapも再起動させます。
なので、以下のようなスクリプトを作成しておきます。
止める順番は、squid -> clamd -> c-icap
起動する順番は、 c-icap -> clamd -> squid
です。
以下は弊社の例ですので、適当にご自身の環境に合わせて作り替えてください。

#!/bin/sh

/etc/init.d/squid stop
/etc/init.d/clamd stop
ps -ef | grep icap | grep -v grep
kill -s TERM `ps -ef |awk '/[c-]icap/ {print $2;}'`
sleep 15

/usr/local/c-icap/bin/c-icap
/etc/init.d/clamd start
/etc/init.d/squid start

/etc/init.d/clamd status
/etc/init.d/squid status
ps -ef | grep icap | grep -v grep

echo "Don't forget ---> squidclient -rs http://***"

ところどころにpsを入れているのは、c-icapのプロセスが切り替わったのを直接見るためですので、無用な人は削除しても構いません。
最後のエコーも次の③を実行するのを忘れないためです。
途中のsleepですが、squidで使用しているメモリの量が多いとstopするまでやたらと時間がかかるので、増やしたり減らしたりしてください。
ちなみに弊社の場合512MBを設定しています。
実際はCPUの性能によっても変わるので、実際の時間を計測したうえで、調整ください。

③上記スクリプトで再起動しても、squidにキャッシュが残っているので、相変わらず、squidclamavで止められるはずです。
なので、以下のコマンドを実行する。

squidclient -rs http://***

http://の後ろはファイル名まで入れないとエラーになりました、うちの環境の場合。
なので、フルで書いてあげましょう。
httpsの場合は、ドメインまでで大丈夫だと思いますが、定かではないので、フルで書くつもりでいた方がいいような気がします。

これで、除外設定は完了です。

何か質問があるかたや間違いの指摘、アドバイスなどはコメントお願いします。
webmaster@niriakot.jp

1 件のコメント:

  1. c-icapの起動コマンド
    vi /etc/init.d/c-icapで作成。
    #!/bin/sh
    #
    # /etc/init.d/c-icap
    # and its symbolic link
    # /usr/sbin/rcc-icap
    #
    ### BEGIN INIT INFO
    # Provides: c-icap
    # Required-Start: $syslog $remote_fs
    # Should-Start:
    # Required-Stop: $syslog $remote_fs
    # Should-Stop:
    # Default-Start: 3 5
    # Default-Stop: 0 1 2 6
    # Short-Description: c-icap redirector for squid and clamav
    # Description: Start c-icap to provide clamav virus
    # scanner interface for Squid.
    ### END INIT INFO

    CICAP_BIN=/usr/local/c-icap/bin/c-icap
    test -x $CICAP_BIN || { echo "$CICAP_BIN not installed";
    if [ "$1" = "stop" ]; then exit 0;
    else exit 5; fi; }

    CICAP_CONFIG=/etc/sysconfig/c-icap
    test -r $CICAP_CONFIG || { echo "$CICAP_CONFIG not existing";
    if [ "$1" = "stop" ]; then exit 0;
    else exit 6; fi; }

    . $CICAP_CONFIG

    if [ "$USE_CICAP" == "no" ]; then
    echo "c-icap disabled in $CICAP_CONFIG. To enable c-icap, set USE_CICAP=\"yes\" in $CICAP_CONFIG"
    exit 6
    fi

    . /etc/rc.status

    rc_reset

    case "$1" in
    start)
    echo -n "Starting c-icap "
    /sbin/startproc $CICAP_BIN
    rc_status -v
    ;;
    stop)
    echo -n "Shutting down c-icap "
    /sbin/killproc -TERM $CICAP_BIN
    rc_status -v
    ;;
    try-restart|condrestart)
    if test "$1" = "condrestart"; then
    echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}"
    fi
    $0 status
    if test $? = 0; then
    $0 restart
    else
    rc_reset # Not running is not a failure.
    fi
    rc_status
    ;;
    restart)
    $0 stop
    $0 start
    rc_status
    ;;
    force-reload)
    echo -n "Reload service c-icap "
    /sbin/killproc -HUP $CICAP_BIN
    rc_status -v
    ;;
    reload)
    echo -n "Reload service c-icap "
    /sbin/killproc -HUP $CICAP_BIN
    rc_status -v
    ;;
    status)
    echo -n "Checking for service c-icap "
    /sbin/checkproc $CICAP_BIN
    rc_status -v
    ;;
    probe)
    test /usr/local/c-icap/etc/c-icap.conf -nt /var/run/c-icap/c-icap.pid && echo reload
    ;;
    *)
    echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
    exit 1
    ;;
    esac
    rc_exit

    vi /etc/sysconfig/c-icapも作成。
    ## Path: Network/WWW/Proxy/c-icap
    ## Description: c-icap configuration
    ## Type: yesno
    ## Default: yes
    ## ServiceReload: c-icap
    ## ServiceRestart: c-icap
    #
    # Set USE_CICAP to yes, if you want to use the proxy virus scanning
    # facility c-icap within squid3 and clamav.
    #
    USE_CICAP="yes"

    以上を作って、
    /etc/init.d/c-icap でstart、stop、statusできるようにした。

    返信削除