ルータでウイルススキャン 本当にできるか確認中
OSはCentOS5.11で最小構成で構築

SELinuxとファイアウォールの停止

SELinuxを無効にして、iptables(ファイアウォール)を一旦停止にします。そしてOSをupdate

[root@router ~]# vi /boot/grub/grub.conf
 - kernel /vmlinuz-2.6.18-398.el5 ro root=LABEL=/
 + kernel /vmlinuz-2.6.18-398.el5 ro root=LABEL=/ selinux=0
 
[root@router ~]#
[root@router ~]# chkconfig ip6tables off && chkconfig iptables off
[root@router ~]# chkconfig iscsi off && chkconfig iscsid off && chkconfig mcstrans off
[root@router ~]# yum -y update && reboot

bridge導入

Brdigeを導入します。

[root@router ~]# yum install bridge-utils

現在2つのNICが搭載されている。それぞれのMACアドレスを調べると、

[root@router ~]# ifconfig -a | grep HWaddr
eth0      Link encap:Ethernet  HWaddr 00:26:18:7A:1E:D7
eth1      Link encap:Ethernet  HWaddr 00:1D:73:E6:9D:82
[root@router ~]#

この2つのNICをひとつのBridgeに集めるように ifcfgファイルを修正して、マシンを再起動する

[root@router ~]# vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.0.22
BROADCAST=192.168.0.255
NETMASK=255.255.255.0
ONBOOT=yes
 
[root@router ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
HWADDR=00:26:18:7A:1E:D7
ONBOOT=yes
BRIDGE=br0
 
[root@router ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
HWADDR=00:1D:73:E6:9D:82
ONBOOT=yes
BRIDGE=br0
 
[root@router ~]# reboot

再起動後brdigeの状況を確認する

[root@router ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.001d73e69d82       no              eth1
                                                        eth0
[root@router ~]#

とbr0が eth0 と eth1 の両方を持っている

clamav導入

CentOS5のリポジトリには Clam AntiVirus は存在しない。あるのは epel とかの別なリポジトリ。
なので、epelリポジトリを先ずは導入する

[root@router ~]# yum -y install epel-release

その上で Clam AntiVirus をインストールする

[root@router ~]# yum install clamav clamav-db clamd

clamdの設定ファイル(/etc/clamd.conf)はそのまま使用します。ファイルの探索は新規で作られたユーザclamによって行われる。だが、当然パーミッションによって調べられないファイルがありえて、その場合は「User clam」の文言を削る。
ここではそのままclamを使用します。一応編集なしな状態だけど、clamd.confの中身は下記になる

[root@router ~]# grep -v -e '^\s*#' -e '^\s*$' /etc/clamd.conf
LogFile /var/log/clamav/clamd.log
LogFileMaxSize 0
LogTime yes
LogSyslog yes
PidFile /var/run/clamav/clamd.pid
TemporaryDirectory /var/tmp
DatabaseDirectory /var/lib/clamav
LocalSocket /var/run/clamav/clamd.sock
FixStaleSocket yes
TCPSocket 3310
TCPAddr 127.0.0.1
MaxConnectionQueueLength 30
MaxThreads 50
ReadTimeout 300
User clam
AllowSupplementaryGroups yes
ScanPE yes
ScanELF yes
DetectBrokenExecutables yes
ScanOLE2 yes
ScanMail yes
ScanArchive yes
ArchiveBlockEncrypted no
[root@router ~]#

clamdを起動させる

[root@router ~]# chkconfig --list clamd
clamd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@router ~]# chkconfig clamd on
[root@router ~]# /etc/init.d/clamd start
Starting Clam AntiVirus Daemon:                            [  OK  ]
[root@router ~]#

*起動が完了するまで多少時間を要する。なのでマシンの再起動時には留意が必要かと

ウイルス検出テスト

http://www.eicar.org/85-0-Download.htmlにウイルス検出向けのファイルがある。
これをダウンロードしてスキャンさせ、検出できるかを試す

[root@router ~]# curl -O  http://www.eicar.org/download/eicar.com
 
[root@router ~]# clamscan  --no-summary --infected ./*
./eicar.com: Eicar-Test-Signature FOUND
[root@router ~]#

と認識はできた模様

ウィルス定義ファイルの更新

ウイルス定義ファイルの取得はclamavパッケージに付属のfreshclamコマンドにて行われる
その設定ファイルは/etc/freshclam.confである。特に修正を加えず、そのまま実行して最新ファイルを取得します。

[root@router ~]# freshclam
ClamAV update process started at Sun Apr  3 12:24:55 2016
 :
Downloading main.cvd [100%]
 :
Downloading daily.cvd [100%]
daily.cvd updated (version: 21484, sigs: 83932, f-level: 63, builder: neo)
Downloading bytecode.cvd [100%]
bytecode.cvd updated (version: 275, sigs: 45, f-level: 63, builder: amishhammer)
Database updated (4302767 signatures) from db.jp.clamav.net (IP: 203.178.137.175)
[root@router ~]#

clamav-dbパッケージには自動取得のcronファイル(/etc/cron.daily/freshclam)が入っている。
/etc/crontabから、毎日 4:02 にウイルス定義ファイルの更新が行われる。

ポートリダイレクションの設置

br0に届く80番ポートのリクエストを 3128 ポートへリダイレクトさせる。3127番へ回されたパケットはsquidに回される。
まずはiptableでパケット制御を施す。止めていたiptablesを起動させ、設定を消去する

[root@router ~]# /etc/init.d/iptables start
[root@router ~]# iptables -F -t filter && iptables -X -t filter    *filterテーブルの初期化
[root@router ~]# iptables -F -t nat && iptables -X -t nat          *natテーブルの初期化
[root@router ~]# /etc/init.d/iptables  status
テーブル: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination
 
Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination
 
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
 
テーブル: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
 
Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
 
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
 
[root@router ~]#

そして、natテーブルへポートへリダイレクトの設定を加える

[root@router ~]# iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j REDIRECT --to-port 3128
[root@router ~]# iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             anywhere            tcp dpt:http redir ports 3128
 
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
 
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
[root@router ~]#

この設定を保存します。現状だとメモリーに展開しただけで、再起動すると元に戻る

[root@router ~]# /etc/init.d/iptables save
ファイアウォールのルールを /etc/sysconfig/iptables に保存中[  OK  ]
[root@router ~]#

squidclamav

proxyサーバのsquidとclamavを連携させるソフトウエア。本家 http://squidclamav.darold.net/
ここでは squidclamav-4.0.tar.gz を使います。本家サイトにはなかったが、google先生に教えてもらいました。
*コンパイルしますので、事前に開発環境を導入する必要がある

[root@router ~]# gzip -cd squidclamav-4.0.tar.gz | tar xf - && cd squidclamav-4.0
 
[root@router squidclamav-4.0]# ./configure && make && make install
[root@router squidclamav-4.0]# cp squidclamav.conf.dist /etc/squidclamav.conf

/usr/local/binにsquidclamavがインストールされる
設定ファイルは下記のようにした。

[root@router ~]# grep -v -e '^\s*#' -e '^\s*$'  /etc/squidclamav.conf
squid_ip 127.0.0.1
squid_port 3128
logfile /var/log/squidclamav.log
redirect http://localhost/cgi-bin/clwarn.cgi
debug 0
force 1
stat 1
clamd_local /var/run/clamav/clamd.sock
clamd_port 3310
timeout 60
content ^.*\/.*$
[root@router ~]#

ウイルスファイルが見つかった際に知らせるredirect先を「http://localhost/cgi-bin/clwarn.cgi」とした。
なので、このrouterマシンでhttpdを稼動させ、このcgiファイルを設定する。

[root@router ~]# yum install httpd
[root@router ~]# cp squidclamav-4.0/clwarn.cgi /var/www/cgi-bin
[root@router ~]# chkconfig httpd on && /etc/init.d/httpd start

squidのインストール

proxyサーバを導入する。前述のsquidclamavと連携してリダイレクトされたポート3128へのhttpリクエストを受けて、代理として相手先のデータを取得する。その際clamavと絡めてウイルスかどうかを判断する。

[root@router ~]# yum install squid

squidの設定ファイル(/etc/squid/squid.conf)を調整する。

   acl CONNECT method CONNECT
 + acl mynet src 192.168.0.0/255.255.255.0
 + http_access allow mynet
 + url_rewrite_program /usr/local/bin/squidclamav
 + url_rewrite_children 15
 + url_rewrite_access deny localhost
   http_access allow manager localhost

 - http_port 3128
 + http_port 3128 transparent

そして、squidを起動させる

[root@router ~]# chkconfig squid on
[root@router ~]# /etc/init.d/squid start

テスト

この中継routerを経由してターゲットとしたn2サイトにアクセスしてみる。
通常ページと、ウイルスファイルを置いたURLにアクセスしてみる。

[root@n2 ~]# cd /var/www/html/
[root@n2 html]# curl -O  http://www.eicar.org/download/eicar.com

そてい、片方からこのn2サイトへアクセスすると
2016y04m06d_231457811.png
このように表示される。

謝辞

今回、こちらのサイトを参照させて頂きました。
http://wiki.princo.org/L2透過型(bridge)構成でSquid(2.6)+ClamAVウィルスフィルタ構築


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2016-04-23 (土) 22:00:36 (1679d)