icap連携をしてみる

サーバー運用がかなり厳しいので寄付をしてくれる人がいたらこちら
メインPCもボロボロになってきたので、ついにほしいものリスト公開

というわけで、ICAPなるものをSquid+c-icap+ほにゃららでやってみようと思います。
手始めにSquid+ICAP+Squidclamavというお決まりな奴を。
Squidは3.5.xを使用し、clamavは0.98.7をつかいます。ICAPは最新が0.3.5です。

ICAPのインストール

とりあえず、ソースを拾ってインストールする方法で
設定方法はうちのRPMを基にやるます。
Squidclamavとclamavとsquidとc-icapの基本的な設定は省いてますので、各自の環境に合わせて修正してください。

# cd /usr/local/src # mkdir c-icap # cd c-icap # wget http://sourceforge.net/projects/c-icap/files/c-icap/0.3.x/c_icap-0.3.5.tar.gz # tar zxvf c_icap-0.3.5.tar.gz # cd c_icap-0.3.5 # ./configure && make && make install

簡単ですね!

設定

まずはsquid.confの設定をします

logformat icap_squid [%tl] %icap::tr %>a %icap::to/%03icap::Hs %icap::

次にicap側の設定ですが、基本弄る所はあまりないので、適宜修正した後に
コンフィグ(/etc/c-icap/c-icap.conf)の最下部に以下を追記します。

# squidclamav Service squidclamav squidclamav.so

メモ

squid.confのicap_serviceのURL?に記載するicap://127.0.0.1:1344/squidclamavとicap.confのService squidclamavの
squidclamavは一致させておかないとだめ。
なので、別にicap_service ... icap://127.0.0.1:1344/virus_check と Service virus_check squidclamav.so でもOKなはず。

あとはSquidとc-icapをそれぞれ立ち上げると使えるようになるので、テストします。

# telnet localhost 8080 Connected to localhost. Escape character is '^]'. GET http://www.eicar.org/download/eicar.com HTTP/1.0 HTTP/1.1 301 Moved Permanently Date: Tue, 03 Dec 2013 07:37:32 GMT Location: http://example.com/cgi-bin/clwarn.cgi?url=http://www.eicar.org/download/eicar.com&source=::1&user=-&virus=stream: Eicar-Test-Signature FOUND Server: C-ICAP Content-Type: text/html Content-Language: en Via: ICAP/1.0 example.com (C-ICAP/0.3.2 SquidClamav/Antivirus service ) X-Cache: MISS from example.com X-Cache-Lookup: MISS from example.com:8080 Connection: close Connection closed by foreign host.

各ログにはこんな風にのってきます

clamav: 日付 -> instream(local): Eicar-Test-Signature(44d88612fea8a8f36de82e1278abb02f:68) FOUND squid(icap): [日付] 0 :: ICAP_OPT/200 353 OPTIONS icap://127.0.0.1:1344/squidclamav - -/127.0.0.1 - [日付] 18 ::1 ICAP_MOD/200 492 RESPMOD icap://127.0.0.1:1344/squidclamav - -/127.0.0.1 - squid(accesslog): 日付 660 ::1 TCP_MISS/301 465 GET http://www.eicar.org/download/eicar.com - HIER_DIRECT/188.40.238.250 text/html c-icap(accesslog): 日付, ::ffff:127.0.0.1 ::ffff:127.0.0.1 OPTIONS squidclamav 200 日付, ::ffff:127.0.0.1 ::ffff:127.0.0.1 RESPMOD squidclamav 200

次に、c-icapで配布してるc-icap-modulesを試してみます。

インストール

# cd /usr/local/src # mkdir c-icap-modules # cd c-icap-modules # wget http://sourceforge.net/projects/c-icap/files/c-icap-modules/0.3.x/c_icap_modules-0.3.2.tar.gz # tar zxvf c_icap_modules-0.3.2.tar.gz # cd c_icap_modules-0.3.2 # ./configure --enable-shared \ --with-c-icap \ --with-zlib \ --with-clamav \ --with-bdb # make && make install

インストール後、以下のファイルを修正

squid.conf

#icap_service service_req reqmod_precache bypass=1 icap://127.0.0.1:1344/squidclamav #adaptation_access service_req allow all #icap_service service_resp respmod_precache bypass=1 icap://127.0.0.1:1344/squidclamav #adaptation_access service_resp allow all icap_service virus_check_resp respmod_precache bypass=1 icap://127.0.0.1:1344/antivirus_module icap_service url_check_req reqmod_precache bypass=0 icap://127.0.0.1:1344/url_check_module adaptation_access url_check_req allow all adaptation_access virus_check_resp allow all

c-icap.conf

# squidclamav #Service squidclamav squidclamav.so Include virus_scan.conf Include srv_url_check.conf

srv_url_check.conf

... snip ... Service url_check_module srv_url_check.so LogFormat myUrlCheck "%tl, %>a %im %is %huo [MatchedCat: %{url_check:matched_cat}Sa] [Action4cat: %{url_check:action_cat}Sa] [Action: %{url_check:action}Sa]" acl URLCHECK service url_check_module AccessLog /var/log/c-icap/url_check.log myUrlCheck URLCHECK ... snip ... # Example: # url_check.LookupTableDB denyhosts host hash:/usr/local/c-icap/etc/denyhosts.txt "Denied Hosts" # url_check.LookupTableDB multisurbl domain dnsbl:multi.surbl.org url_check.LookupTableDB denyhosts host hash:/usr/local/db/denyhosts.txt "Domains test" # denyhosts.txt にはexample.comとかホスト名入れる。 ... snip ... # Example: # url_check.LoadSquidGuardDB porn /usr/local/blacklists-toulouse/porn/ "SquidGuard Porn Sites" url_check.LoadSquidGuardDB porn /usr/local/db/blacklists/porn/ "SquidGuard Porn site" # SquidGuard形式のDBがあればそれを指定して、無ければコメントアウトしておく ... snip ... # url_check.Profile default pass ALL url_check.Profile default block denyhosts porn url_check.Profile default pass ALL ... snip ...

virus_scan.conf

... snip ... ServiceAlias avscan virus_scan?allow204=on&sizelimit=off&mode=simple LogFormat myVScanFmt "%tl, %>a %is %Ib %Ob %huo [Action: %{virus_scan:action}Sa] [Virus: %{virus_scan:virus}Sa]" acl VSCAN service antivirus_module AccessLog /var/log/c-icap/virus_scan.log myVScanFmt VSCAN ... snip ... virus_scan.DefaultEngine clamd ... snip ... # Enable on or more antivirus engines: Include clamd_mod.conf

clamd_mod.confはclamavのソケットを指定するくらいなので、割愛

動作テスト

設定を変更したらsquidとc-icapを再起動して、さっきと同じようにtelnetで確認

virusのテスト

# telnet localhost 8080 Connected to localhost. Escape character is '^]'. GET http://www.eicar.org/download/eicar.com HTTP/1.0 HTTP/1.1 403 Forbidden Date: Tue, 03 Dec 2013 07:58:07 GMT Server: C-ICAP Content-Type: text/html Content-Language: ja Via: ICAP/1.0 example.com (C-ICAP/0.3.2 Antivirus service ) X-Cache: MISS from example.com X-Cache-Lookup: MISS from example.com:8080 Connection: close ウィルス検知

ウィルスが見つかりました

あなたがアップロードまたはダウンロードしようとしたファイルには以下のウィルスが含まれています: Eicar-Test-Signature
HTTPロケーション: http://www.eicar.org/download/eicar.com

詳細についてはシステム管理者にお問い合わせください。


This message generated by C-ICAP service: antivirus_module
Antivirus engine: clamd-0980/18192

Connection closed by foreign host.

denyhosts.txtのテスト

# telnet localhost 8080 Connected to localhost. Escape character is '^]'. GET http://example.com/ HTTP/1.0 HTTP/1.1 403 Forbidden Date: Tue, 03 Dec 2013 08:01:17 GMT Server: C-ICAP Content-Type: text/html Content-Language: ja X-Cache: MISS from example.com X-Cache-Lookup: NONE from example.com:8080 Connection: close

Access denied

あなたがアクセスをしたURL:
  http://example.com/

HTTPホスト:
  -
一致したURLカテゴリ:
denyhosts
ブロックされたカテゴリ:
denyhosts (Domains test)
はシステムのポリシーでアクセスが制限されました。

The page generated by the C-ICAP service url_check_module

Connection closed by foreign host.

squidGurad形式のドメインテスト

# telnet localhost 8080 Connected to localhost. Escape character is '^]'. GET http://www.sex.com/ HTTP/1.0 HTTP/1.1 403 Forbidden Date: Tue, 03 Dec 2013 08:04:02 GMT Server: C-ICAP Content-Type: text/html Content-Language: ja X-Cache: MISS from example.com X-Cache-Lookup: NONE from example.com:8080 Connection: close

Access denied

あなたがアクセスをしたURL:
  http://www.sex.com/

HTTPホスト:
  -
一致したURLカテゴリ:
porn/domains
ブロックされたカテゴリ:
porn (SquidGuard porn site)
はシステムのポリシーでアクセスが制限されました。

The page generated by the C-ICAP service url_check_module

Connection closed by foreign host.

とまぁこんな感じで制限がされればOKってことですね。
SquidのログにはNONE/403でログが載ってきて
virus_scan.logやurl_check.logにはこんな感じで載ってきます。

virus_scan: 日付, ::1 200 68 606 http://www.eicar.org/download/eicar.com [Action: blocked] [Virus: Eicar-Test-Signature] url_check 日付, ::1 REQMOD 204 http://www.eicar.org/download/eicar.com [MatchedCat: ALL] [Action4cat: ALL] [Action: ALLOWED] 日付, ::1 REQMOD 200 http://example.com/ [MatchedCat: denyhosts] [Action4cat: denyhosts] [Action: BLOCKED] 日付, ::1 REQMOD 200 http://www.sex.com/ [MatchedCat: porn/domains] [Action4cat: porn] [Action: BLOCKED]

virus_scan.logにexample.comとかが乗ってこないのはurlチェックが先に働いてそこでBlockされているからなのですよ。

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
CAPTCHA
また変更しました
Fill in the blank.