ラベル セキュリティ の投稿を表示しています。 すべての投稿を表示
ラベル セキュリティ の投稿を表示しています。 すべての投稿を表示

2016-03-30

OpenBlocks IoT Familyをユーザー定義スクリプトと組み合わせて遠隔地へのアクセス手段として利用する

OpenBlocks IoT Family には、モバイル回線での接続が可能なモデルがあります。モバイル回線を使って、遠隔地のアクセス手段にOpenBlocks IoT Familyを利用する方法を紹介します。

OBDN技術ブログによる動作検証は、該当するデバイスやソフトウェアの動作について、保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

はじめに


OpenBlocks IoT Family (以下OpenBlcoks)には、モバイル回線の通信機能があります。IoTゲートウェイとしては多くの場合常時ネットワーク接続手段の一つとして利用しますが、 OpenBlocksではモバイル回線の ON / OFF を SMS のメッセージによって制御する機能が用意されています。つまり通常時は通信していない状態にしておき、必要な時だけ回線を接続できるのです。また SMS を使ってあらかじめ設定しておいたシェルスクリプトを動かす機能もあります。これらのSMSによる制御機能を活用して、遠隔地のネットワークへアクセス手段としての OpenBlocks を利用します。

なお SMS を使って OpenBlocks を制御するためには、SMS に対応した SIM を使う必要があります。データ通信のみの SIM では SMS を扱うことはできませんのでご注意下さい。

リモートアクセス


次の図を見て下さい。



このような環境で、遠隔地からメンテナンスなどでサーバーにアクセスしたいというのはシステムの運用ではごく普通の要望です。

OpenBlocks の中身は Debian GNU/Linux のサーバーですので、遠隔地からOpenBlocksへログインできれば、目的のサーバーやネットワーク機器へアクセスできます。このために SSH (Secure Shell)のトンネルを活用してみます。

SSHポートフォワーディング


SSHにはTCPの接続を中継する機能が用意されています。これはポートフォワーディングやトンネリングと呼ばれます。このSSHのTCPの中継機能を例をあげて説明しましょう。

ある会社のオフィス内にWebサーバー HostA があり、インターネット上にシステム運用者がアクセスできるサーバー HostB がある場合を例にします。オフィスには NAT を使ったファイアウォールが用意されていて、オフィス内部からインターネットへは比較的自由にアクセスできるような設定になっています。この場合以下の図のように HostA から HostB へ SSH を経由してログインするのは広く行われています。



ここでインターネット側にある HostB から HostA に SSH でログインしたい場合どうしたら良いのでしょうか。

前述の通り HostA → HostB は特別な設定を行わなくても SSH で接続できるのは明らかですが、HostB → HostA の SSH 接続はファイアウォールがあることと、HostA がプライベート IP アドレスを利用しているため簡単にはできません。ここで利用するのが SSHによるポートフォワーディングです。

次の図を見てください。



この例は HostA から接続する際に、SSH のポートフォワーディングの設定で、HostB のIPv4 ループバックアドレスである 127.0.0.1 のポート番号 10022 を、HostA の IPv4 ループバックアドレスである 127.0.0.1 の ポート番号 22 つまり HostA の SSH サービスへ接続しています。

具体的には HostA から HostB へ SSH 接続する場合に次のように SSH コマンドに -R オプションを指定して起動します。(注:今回 SSH接続のオプションは全てコマンドの引数で指定していますが、これらは SSH の config ファイルで指定できます)

HostA$ ssh -R 10022:127.0.0.1:22 HostB
..........
.....
..........
HostB$ 

SSH で HostA から HostB へログインできたら、前述のポートフォワーディングが設定できています。この状態になれば HostB 側で 次のように IPv4 アドレスで 127.0.0.1 ポート番号 10022 に接続する ssh コマンドを実行すると、HostA へログインできます

HostB$ ssh -p 10022 127.0.0.1
..........
.....
..........
HostA$ 

リモートアクセスのための SSH の設定


SSH ポートフォワーディングを理解できたところで、OpenBlocks を設定してみます。前述の例で HostA が OpenBlocks となります。

まずは OpenBlocks で SSH ログイン認証のための鍵を作ります。機械的なログインに利用するため、パスフレーズは空にします。

root@obsiot:~# ssh-keygen -t ecdsa -N "" -C "Remote Access for BX1"
Generating public/private ecdsa key pair.
Enter file in which to save the key (/root/.ssh/id_ecdsa):
Your identification has been saved in /root/.ssh/id_ecdsa.
Your public key has been saved in /root/.ssh/id_ecdsa.pub.
The key fingerprint is:
13:4d:49:02:63:b6:e5:ac:2b:77:c3:46:bb:d1:63:42 Remote Access for BX1
The key's randomart image is:
+--[ECDSA  256]---+
|      =.o.o.     |
|     o * +.      |
|      . + .      |
|       . .       |
|      . E        |
|       = +       |
|    . o O +      |
|     o o * .     |
|        .        |
+-----------------+
root@obsiot:~#
root@obsiot:~# ls -l .ssh/id_ecdsa*
-rw------- 1 root root 227 Mar 29 11:43 .ssh/id_ecdsa
-rw-r--r-- 1 root root 183 Mar 29 11:43 .ssh/id_ecdsa.pub
root@obsiot:~#

この鍵を HostB との間でログインに使うため、authorized_keys を設定します。

root@obsiot:~# cat .ssh/id_ecdsa.pub  >> .ssh/authorized_keys

またこの鍵のペアを HostB の SSH でログインするユーザー(ここでは tunuser )の ~/.ssh ディレクトリに設定します。

tunuser@HostB$ ls -l .ssh
total 8
-rw-------  1 tunuser wheel  227 Mar 29 11:43 id_ecdsa
-rw-r--r--  1 tunuser wheel  183 Mar 29 11:43 id_ecdsa.pub
tunuser@HostB$ cp .ssh/id_ecdsa.pub .ssh/authorized_keys
tunuser@HostB$ ls -l .ssh
total 12
-rw-r--r--  1 tunuser wheel  183 Mar 29 12:22 authorized_keys
-rw-------  1 tunuser wheel  227 Mar 29 11:43 id_ecdsa
-rw-r--r--  1 tunuser wheel  183 Mar 29 11:43 id_ecdsa.pub
tunuser@HostB$ 

以上が設定できたら OpenBlocks から HostB にログインできるかどうかを確認しみます。この時一緒にポートフォワーディングも指定しています。(注:OpenBlocks をインターネットへ接続した状態で実験しています)

root@obsiot:~# ssh -R 10022:127.0.0.1:22 tunuser@HostB
The authenticity of host 'HostB (XXX.XXX.XXX.XXX)' can't be established.
ECDSA key fingerprint is d5:5e:df:18:bb:69:8e:e7:91:11:f5:d5:ff:3d:90:c4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'HostB,XXX.XXX.XXX.XXX' (ECDSA) to the list of known hosts.
..........

.....
..........
tunuser@HostB$ 

この通りログインを確認できました。ポートフォワーディングも指定してあるので、HostB 側から OpenBlocks へログインしてみます。(注:OpenBlocks のデフォルトではSSH 接続が閉じているため設定で解放する必要があります)

tunuser@HostB$ ssh -p 10022 root@127.0.0.1
The authenticity of host '[127.0.0.1]:10022 ([127.0.0.1]:10022)' can't be established.
ECDSA key fingerprint is 08:03:4c:2f:35:7b:15:d2:99:b8:42:f5:66:8c:3a:68.
No matching host key fingerprint found in DNS.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[127.0.0.1]:10022' (ECDSA) to the list of known hosts.
Linux obsiot.example.org 3.10.17-poky-edison #1 SMP PREEMPT Fri Mar 11 12:01:23 JST 2016 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Mar 29 11:07:29 2016
root@obsiot:~#

この通りポートフォワーディングを使って、インターネットにあるサーバー HostB から OpenBlocks へのログインが確認できました。

OpenBlocks の SMS コントロールコマンド(抜粋)


今回のリモートアクセスで利用するSMSコントロールコマンドを以下に挙げます。


コマンド
コマンドの内容
CON
モバイル回線を接続する
COFF
モバイル回線を切断する
SSHON
SSHを解放する
SSHOFF
SSHを閉鎖する
USCR1F
ユーザー定義のシェルスクリプトの1番をフォアグラウンドで実行する

OpenBlocks に設定した SIM の電話番号へ SMS を使ってこれらのコマンドを送ると、コマンドに応じて OpenBlocks が動作します。また SMS のコントロールコマンドは複数を"+"で接続して 1通の SMS で送ることで、連続した動作を指定できます。

例えば、モバイル回線を接続してユーザー定義シェルスクリプトの1番を実行し、モバイル回線を切断するには次のようなコマンドを送ります。

      CON+USCR1F+COFF

OpenBlocks の設定


SMS 制御でリモートアクセスを行うための OpenBlocks の設定の要点をまとめてみます。

  1. 通常時はモバイル回線は接続せず、回線の ON / OFF は SMS で制御する。
  2. モバイル回線が ON になったら SSH で HostB へ接続してポートフォワーディングを有効にするシェルスクリプトを用意する

まず上記 1 を設定します。これは WEB の設定メニューの「ネットワーク」メニューの「基本」タブの下部にある「サービスネットワーク (モバイル回線)」で設定します。



各項目の設定ポイントは次の通りです。
  • [使用設定]は「使用する」を選んでモバイル回線が利用できるようにします。
  • [APN]、[ユーザー名]、[パスワード]、[認証方式]の項目は利用する SIM に合わせて設定します。
  • [自動接続]は OpenBlocks の起動時にモバイル回線を接続するかどうかを設定するもので、通常時はモバイル回線は OFF にしておくので「自動接続しない」を選びます。
  • [SMSコントーロール]は「有効」を選択し、SMS の制御に使う電話番号を登録します。 OpenBlocks ではセキュリティ面から SMS の制御は、登録した電話番号からのみ受け付けるようになっています。

SSHポートフォワーディングを起動するシェルスクリプト


SSHポートフォワーディングを起動するシェルスクリプトは、[拡張]メニューの[スクリプト編集]のタブで、「ユーザー定義スクリプト1」を選んでから内容を入力します。



シェルスクリプトの内容は次の通りです。

#!/bin/sh

ssh -T -R 10022:127.0.0.1:22 tunuser@HostB sleep 600

この ssh コマンドはシェルスクリプトの中で起動するため、ユーザーのインタラクティブなコマンド操作を受け付ける必要はありません。そこで -T オプションを指定して、HostBでの pty を要求しないように設定しています。

ssh コマンドで HostB に対して「sleep 600」を設定します。これは SSH が 600秒間(つまり10分間)接続し、その後 sleep の終了とともに SSH の接続が終了します。何もしないと 10 分間で接続が切れる設定となります。「え?それじゃ 10分間しか SSH 接続が利用できないの?」という心配の必要はありません。SSH のポートフォワーディングでは、ポートフォワーディングの利用中は SSH 接続が切れることはありません。つまりこのスクリプトが起動してから10分以内にポートフォワーディングの接続を使って、HostB から OpenBlocks へログインすれば、そのポートフォワーディング経由のログインセッションが続いている限りSSH 接続も維持されます。

以上の設定が完了したら、OpenBlocksを一旦再起動します。

リモートアクセスを使ってみる


以上の設定が終わったので、実際に試してみましょう。OpenBlocks の SIM の電話番号に対して次の SMS のメッセージを送ります。

     CON+SSHON+USCR1F+SSHOFF+COFF

意味は、(1)モバイル回線を接続、(2)SSH接続を許可、(3)ユーザー定義シェルスクリプト1を実行、(4)シェルスクリプトの終了後SSH接続を不許可にし、(5)モバイル回線を切断、ということになります。

SMS の送信後 40秒ぐらいで OpenBlocks が HostB に SSH 接続を行います。その状態で HostB から以下のコマンドを実行すれば、OpenBlocks へログインできます。

tunuser@HostB$ ssh -p 10022 root@127.0.0.1

実際に試してみると SSH の接続までに 40秒近くかかるため、SSH 接続が成立したタイミングがはっきりしないという難点があることがわかりました。そこで例えばシェルスクリプトを次のように修正すると、tunuser アカウントのホームディレクトリに 「SSHOK」というファイルがあるか無いかで SSH 接続が成立しているかどうか判断できわかりやすくなります。

#!/bin/sh

ssh -T -R 10022:127.0.0.1:22 tunuser@HostB 'touch SSHOK ; sleep 600 ; rm SSHOK'

この他にもシェルスクリプトを工夫することで、HostB が停止している場合は別の HostC へ接続するなど様々なバリエーションが考えられます。

終わりに


SSH ポートフォワーディングは、ここで紹介したものとは逆向きつまり SSH の接続元から接続先へのポートフォワーディングもできます。ちなみに紹介例の向きのポートフォワーディングをリモートフォワード、逆向きをローカルフォワードと言います。本例での HostB から OpenBlocks へ SSH でログインする場合にもポートフォワーディングを併用できるので、サーバーのリモートデスクトップ接続を外部へ中継することなども可能です。

一昔前でしたらリモートアクセスには電話回線を通じてアナログモデムが使われているのが普通で、サーバーやネットワークのメンテナンスを行う人は必ずモデムを所有していました。しかし今ではモデムを所有している人は少なくなりつつあるどころか、モデムそのものの存在すら知らない人が増えているのも事実です。OpenBlocks のこのような使用例はモデムの代替の一つの解になるのではと思います。

2014-04-08

[.tested] SnortによるIPS構築 その1 [debian Wheezy][AX3][A7]

Snortはオープンソースのネットワーク型IDSであり、IPSとしても利用することが可能です。
また、周辺ツールを利用することにより、Webでのアラート検索を行うことも可能です。
Snortは、debian wheezyのパッケージにも含まれて居ますが、今回は、IPSでの利用も考慮し、最新のバージョンのソースコードよりsnort本体をビルドする方法をご紹介します。


Snort


OBDN技術ブログによる動作検証は、該当するソフトウェアの動作の保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>
OpenBlocks AX3/4 Debian 7.1 kernel: 3.2.40 JモデルまたはDPモデル

1. Snort最新版のビルド


以下の手順は、基本的な開発環境が導入済みであることを前提としています。
(手順に関しては、右のタグにあるソフトウェア動作検証より記事をリンクしています)

debianパッケージから必要なライブラリをインストール

# aptitude install bison flex libpcre3 libpcre3-dev libssl-dev libnetfilter-queue-dev

以下、snortの最新のバージョンのビルドに必要な、一部の新しいバージョンのライブラリを用意します。

linpcap


# wget http://www.tcpdump.org/release/libpcap-1.5.3.tar.gz
# tar zxvf libpcap-1.5.3.tar.gz
# cd libpcap-1.5.3
# ./configure --prefix=/usr --enable-shared
# make
# make install

lindnet


# wget https://libdnet.googlecode.com/files/libdnet-1.12.tgz
# tar zxvf libdnet-1.12.tgz
# cd libdnet-1.12.tgz
# ./configure --prefix=/usr --enable-shared
# make
# make install

snortおよびdaqパッケージのインストール

www.snort.orgからsnortおよびdaqの最新のソースコードを入手して下さい。

daq-2.0.2

# tar -zxvf daq-2.0.2.tar.gz
# cd  daq-2.0.0
# ./configure
# make
# make install
# cd /usr/local/lib
# ldconfig -v /usr/local/lib

snort-2.9.6.0

# tar -zxvf snort-2.9.6.0.tar.gz
# cd snort-2.9.4.5
# ./configure --enable-sourcefire
# make
# make install
# cd /usr/local/lib
# ldconfig -v /usr/local/lib

2. 設定


snort.orgでアカウント作成

https://www.snort.org/account/oinkcode
で、’Generate code’ とするとOinkcodeが発行されるのでコードを控えておきます。

Snortルールの入手と展開

Snortルールを入手します。

# wget http://www.snort.org/reg-rules/snortrules-snapshot-2960.tar.gz/<Oinkcode> -O snortrules-snapshot-2960.tar.gz

/etc/snortに展開します。

# mkdir /etc/snort
# cd /etc/snort/
# tar zxvf /usr/local/src/snortrules-snapshot-2955.tar.gz
# cp ./etc/* .
# cp /usr/local/src/snort-2.9.5.6/etc/* .
# rm /etc/snort/Makefile*

空のホワイトリスト、ブラックリストを作成します。

# touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules

snortユーザの追加、パーミッションの変更

# groupadd -g 40000 snort
# useradd snort -u 40000 -d /var/log/snort -s /sbin/nologin -c SNORT_IDS –g snort
# cd /etc/snort
# chown -R snort:snort *

/etc/snort/snort.confを編集し、/etc/snortなど、設定ファイルのパスの変更、対象ネットワークアドレスなどを変更します。

2. 動作テスト


以下のオプションにて動作テストを行います。
# snort -T -i eth0 -u snort -g snort -c /etc/snort/snort.conf

3.さいごに


今回は、snortをOpenBlocks Aシリーズでビルドする手順を説明しました。
次回にて、IPSとしての設定、Webからのアラートの監視方法などについてご紹介する予定です。

2014-01-09

[.tested] SquidGuardによるURLフィルタリング [Debian Wheezy][AX3][A7]


前回の記事において、ClamAVによるアンチウィルスゲートウェイの構築方法をご紹介しました。
今回は、この環境にURLフィルタリングの機能として、SquidGuardを導入します。

 SquidGuard:

OBDN技術ブログによる動作検証は、該当するソフトウェアの動作を保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>
OpenBlocks AX3/4 Debian 7.1 kernel: 3.2.40
OpenBlocks AX7 Debian 7.1 kernel: 3.2.40

1.事前準備

squid3などの環境は、前回の記事をご参照下さい。
今回は、前回の環境の上に追加で設定しています。

[.tested] Clam AntiVirusによるWebフィルタリング [Debian Wheezy][AX3][A7]

2.SquidGuardのインストールと設定


squidguardをdebianのパッケージよりインストールします。

# aptitude install squidguard

ドメイン、URLリストの用意

ブロックしたいURL、パスしたいURLをドメイン毎および、URL指定により設定します。
blacklistに関しては、国内においてフリーでメンテナンスされているものは、おそらくありません。
このソリューションを利用する場合、国内サイトのURL/ドメインリストは自身で管理する必要があります。
海外のサイトに関しては、SquidGuardのページからもリンクされていますが、個人使用に限り、無償で提供されるリストがありますので、海外のポルノサイトやスパムサイトなどをある程度ブロックできるのではないかと思います。
今回は、 Shalla Secure Services からblacklistを取得しました。
必要なリストだけを展開すればいいのですが、今回は全て取得しています。

# wget http://www.shallalist.de/Downloads/shallalist.tar.gz
# tar xvzf shallalist.tar.gz
# cp -R BL /var/lib/squidguard/db

/var/lib/squidguard/db/BLの下に全てのカテゴリのデータが展開されていますので、必要なものを使用して下さい。
また、自身で管理するリストの作成は、 /var/lib/squidguard/dbの下に別のディレクトリを作成して管理します。
たとえば、denyというディレクトリを作成し、以下の様に、domainsとurlsというテキストファイルを作成します。

# ls -la deny
total 32
drwxr-xr-x 2 proxy proxy 4096 Jan  8 17:20 .
drwxr-xr-x 4 proxy proxy 4096 Jan  7 17:08 ..
-rw-r--r-- 1 proxy proxy   73 Jan  8 17:20 domains
-rw-r--r-- 1 proxy proxy   32 Dec 26 17:55 urls

それぞれ、domain名またはurlを列記したテキストファイルとなります。

squidGuard.confの設定

時間でのアクセス制限なども可能ですが、今回は、最もシンプルな記述をしています。
badが自身で管理するブラックリスト、pornが、上記のサイトより取得したポルノサイトのブラックリストです。localnetはこちらの環境のIPアドレスを記述していますので、ネットワーク環境に合わせて変更して下さい。

# cat squidGuard.conf
#
# CONFIG FILE FOR SQUIDGUARD
#
# Caution: do NOT use comments inside { }
#

dbhome /var/lib/squidguard/db
logdir /var/log/squidguard

#
# SOURCE ADDRESSES:
#

src localnet {
        ip      192.168.3.0/24
}

#
# DESTINATION CLASSES:
#

dest good {
}

dest bad {
        domainlist      deny/domains
        urllist         deny/urls
}

dest porn {
        domainlist      BL/porn/domains
        urllist         BL/porn/urls
}

#
# ACL RULES:
#

acl {
        localnet {
                pass good !bad !porn
        }
        default {
                pass none
                redirect http://192.168.3.103/cgi-bin/squidGuard-simple.cgi?clientaddr=%a&clientname=%n&clientuser=%i&clientgroup=%s&targetgroup=%t&url=%u
                log /var/log/squidguard/block.log
        }
}

redirectの記述は、該当するアドレスのリクエストを受け取った時に、警告ページへリダイレクトする設定であり、cgiスクリプトとして、squidguardパッケージに付属するサンプルを若干修正しています。 警告表示のためのサーバが必要ですが、前回設定したsquidclamav用のapache2環境を使用しています。

# cd /usr/share/doc/squidguard/examples/
# gunzip squidGuard-simple-de.cgi.gz
# cp squidGuard-simple-de.cgi.gz /usr/lib/cgi-bin/

そのままでも動作はしますが、squidguardのロゴファイルを、
http://www.squidguard.org/Logos/squidGuard.gif
に変更しています。

dbファイルは、Berkeley DB形式に変更する必要があります。

全てを更新する場合:
# squidGuard -C all

変更したカテゴリだけを変更する場合:
# squidGuard -C /var/lib/squidguard/db/deny

更新後、dbファイルのユーザ、グループを変更します。

# chown -R proxy /var/lib/squidguard/db/
# chgrp -R proxy /var/lib/squidguard/db/

3.squid3の設定


squidguardは、squidclamavの設定から呼び出すことも可能ですが、squid3側で設定することをお勧めします。

/etc/squid3/squid.confに以下の行を追加します。該当のオプションがある部分を編集してください。

  :
url_rewrite_program /usr/bin/squidGuard -c /etc/squidguard/squidGuard.conf
  :

編集後、squid3の設定のリロードを行います。

# service squid3 reload


4.動作確認


ブロック指定したドメインのwebサイトにアクセスしてみます。



今回は、前回最後に設定した透過型設定であるため、ブラウザ側でのproxy設定は行っていません。

5.Wifi接続によるモバイルデバイスへの対応


Wifi APとして動作させる方法としては、以下の記事を参考にして下さい。
今回はブリッジ設定により同一セグメントとして扱いました。

 [.tested] Logitec LAN-W150NU2 Wheezyパッケージ、新カーネルによるデバイス評価およびAP構築 [Debian Wheezy][AX3][A6]

/etc/network/interfacesのbr0設定に関しては、前回の記事で行った、eth0-eth1ブリッジの設定を変更する必要はありません。wlan0はhostapdが起動時にaddします。

以下、iphone4Sでアクセスした場合のスクリーンショットです。

<テストウィルス検出時>

<URLフィルタリング>

6.さいごに


今回は、squidguardを使用したURLフィルタリング装置の構築を行いました。
同時にWifiAPとして設定することにより、モバイルデバイス向けのWebフィルタリングも行ってみました。

2013-12-20

[.tested] Clam AntiVirusによるWebフィルタリング [Debian Wheezy][AX3][A7]


Clam AntiVirus は、オープンソースで提供されるクロスプラットフォームのアンチウイルスソフトウェアであり、OpenBlocksが採用するDebianにおいてもパッケージが用意されています。

 Clam AntiVirus:

今回、clamav、squid3、squidclamav(+c-icap)による、webアンチウィルスゲートウェイについて、squidを利用した、proxy型構成、および、透過型の構成について、設定の手順を紹介します。


OBDN技術ブログによる動作検証は、該当するソフトウェアの動作を保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>
OpenBlocks AX3/4 Debian 7.1 kernel: 3.2.40
OpenBlocks AX7 Debian 7.1 kernel: 3.2.40

1.事前準備


squidclamavは最新のパッケージをビルドする必要がありますので、開発環境および、必要なライブラリをあらかじめインストールしておく必要がります。

開発環境のインストール
# aptitude install build-essential

ライブラリのインストール
# aptitude install curl libcurl4-gnutls-dev c-icap libicapapi-dev

2.clamav-daemonのインストールと設定


clamavをdebianのパッケージよりインストールします。


# aptitude installclamav-daemon

パッケージインストールにより、clamdは自動的に立ち上がる設定となりますが、初期化のために、一度手動で立ち上げを行う必要があるようです。

# /etc/init.d/clamav-daemon start

3.squid3のインストールと初期設定


squid3をdebianのパッケージからインストールします。

# aptitude install squid3

まずは、web proxyとして必要な設定を行います。
/etc/squid3/squid.conf の、該当する部分を追加または、コメントを外してください。
今回は、localnetとして、192.168.3.x を設定し、そこに許可を与えています。

  :
acl localnet src 192.168.3.0/24 # local network
  :
http_access allow localnet
  :

一度再起動し、ブラウザよりproxyサーバを指定して動作確認します。

# /etc/init.d\squid3 restart

squidclamavを使用するための、c-icapの設定追加については次項で説明します。

4.squidclamavのインストールと設定


squidclamavを入手します。

 SquidClamav : Securing Web Delivery (antivirus for Squid):


より、最新の6.10を入手しました。

# wget http://sourceforge.net/projects/squidclamav/files/squidclamav/6.10/squidclamav-6.10.tar.gz

解凍し、ビルド、インストール作業を行います。

# tar xvzf squidclamav-6.10.tar.gz
# cd squidclamav-6.10
# ./configure --prefix=/usr/local/c-icap
# make
# make install

警告表示用のコンテンツサーバとして、apache2を使用しています。
新規にインストールする場合は、以下の手順となります。

# aptitude install apache2

squidclamavをビルドした場所より、警告用画面表示のcgiをapache2のデフォルトのcgi-binディレクトリへコピーします。

# cp cgi-bin/clwarn.cgi /usr/lib/cgi-bin

/etc/squidclamav.confを編集し、redirect先を指定します。
サーバのIPアドレスはご使用のものを記述してください。

# tredirect http://192.168.3.103/cgi-bin/clwarn.cgi

5.squid3+c-icapの設定


squid3の追加設定

/etc/squid3/squid.confを編集し、c-icapに対応した以下のパラメータを変更、もしくは追加記述して下さい。

icap_enable on
icap_send_client_ip on
icap_send_client_username on
icap_client_username_encode off
icap_client_username_header X-Authenticated-User
icap_preview_enable on
icap_preview_size 1024
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

 c-icap関連の設定

/etc/c-icap/c-icap.confに、以下の記述を追加します。

Service squidclamav squidclamav.so

c-icap を自動起動させるため、/etc/default/c-icapを修正します。

START=yes

c-icapおよび、squid3を再起動します。(もしくはreboot)

# /etc/init.d\squid3 restart
# /etc/init.d\c-icap restart

6.proxy型設定での動作確認


テスト用のデータとして、以下のサイトのデータを利用します。

Home ° EICAR - European Expert Group for IT-Security:


テスト用ウィルスをダウンロードすると、以下の警告画面が表示されます。



7.透過型構成への変更


proxyサーバの設定が不要な透過モードでのWebフィルタリングを行う場合は、ブリッジ構成のため、ネットワークポートを複数備えるAX3もしくはA7を使用します。

ブリッジ構成へのネットワーク設定変更

ブリッジの構成のために、bridge-utilsをインストールします。

# aptitude install bridge-utils

/etc/network/interfaces を編集し、eth0、eth1の設定を全てコメントで外し、
br0を設定します。
( 以下の設定はこちらでのテスト環境ですので、ご自身の環境に合わせて変更して下さい)

auto br0
iface br0 inet static
address 192.168.3.103
netmask 255.255.255.0
network 192.168.3.0
broadcast 192.168.3.255
gateway 192.168.3.1
dns-nameservers 172.16.12.10
bridge_ports eth0 eth1

iptablesによる、ポートの変換設定

ポート80から送出されたリクエストパケットを3128へリダイレクトする設定を行います。

# iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j REDIRECT --to-port 3128

/etc/squid3/squid.confを編集します。

http_port 3128 transparent

本装置は、フィルタを行いたいノードのHubの上流へIN-OUTの形で接続してください。

8.さいごに


今回は、clamavを使用したWebフィルタリング装置の構築方法として、proxy型/透過型の最低限必要な設定を行いました。
squidに関しては、URLフィルタリングも比較的簡単に実装出来ますので、別途パフォーマンスのチューニングポイントと合わせてご紹介します。

2012-03-28

【最新ITトピック】 IPA、ファジングによる脆弱性検出の有効性の実証結果を公開

ソフトウェア製品などに何万種類もの問題を起こしそうなデータ(例:極端に長い文字列)を送り込み、ソフトウェア製品の動作状態(例:製品が異常終了する)から脆弱性を発見する技術、ファジングについて、IPAがその有効性の実証と、普及の促進を目的とした「脆弱性検出の普及活動」を開始しました。

IPA プレス発表: ファジングによる脆弱性検出の有効性の実証結果の公開 ~「ファジング活用の手引き」を活用し、ソフトウェア開発にファジングの導入を~

今後のソフトウェアリリース/管理に向けて欠かせない技術と言えるでしょう。

2012-03-19

【最新ITトピック】Cisco ルータとの拠点間 VPN 相互接続を実現したPacketiX VPN の IPsec 対応ベータ 2 を公開 L2TPv3 over IPsec に対応し、Cisco および SEIL との接続が可能に

レイヤ2/3 VPNソフトウェア製品である、PacketiX VPN ServerのIPsecサーバーとして動作するベータ版が、ベータ2において、「L2TPv3」 (国際標準規格: RFC3931)に対応すると発表されました。

ソフトイーサ: Cisco ルータとの拠点間 VPN 相互接続を実現したPacketiX VPN の IPsec 対応ベータ 2 を公開

この機能は本日よりベータ 2 として無償でダウンロード提供を開始し、 2012 年 11 月 30 日まで利用可能。日本語版・中国語 (簡体字) 版の 2 カ国語で提供されています。

L2TPv3 over IPsec (RFC3931) に対応した VPN ルータとの相互接続を可能とし、ソフトイーサ社では、
    ・Cisco Systems 社製 Cisco ルータ (2005 年以降に発売された L2TPv3 対応のもの)
    ・IIJ 社製 SEIL ルータ (L2TPv3 対応のもの)
との接続が可能な事を確認されており、Point-to-Multipointに対応した上位Cisco製品に代わり、PacketiX VPN Serverによる複数拠点とのVPN接続を可能としています。

なお、本機能は、次回リリース版の製品版 PacketiX VPN Server に正式な機能として組み込まれるほか、オープンソース版 UT-VPN にも搭載され、無料で利用可能になるとともに、開発部分のソースコードも公開も予定されています。

2012-03-14

【最新ITトピック】DELL、SonicWallを買収

DELLが、UTMやSSL-VPN製品を始めとしたセキュリティアプライアンス製品を手がけるSonicWall社を買収すると発表しました。

Dell Announces Intent to Acquire SonicWALL, Inc.

クラウド化を中心とした流れの中で、エッジ側のネットワーク環境までも含むトータルなソリューション展開をしていく、ということは規定路線とも思えます。