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フィルタリングも比較的簡単に実装出来ますので、別途パフォーマンスのチューニングポイントと合わせてご紹介します。

2013年12月12日木曜日

[.tested] TI CC2541 SensorTag Development Kit[debian Wheezy][AX3][A7]




先日、以下の記事で紹介した、TI CC2541 SensorTag Kitと、OpenBlocks Aシリーズとの接続評価を行いました。

TI CC2541 SensorTag Development Kit


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

<検証環境>
Debian 7.1 Wheezy
OpenBlocks AX3/4 kernel: 3.2.40
OpenBlocks A6/A7 kernel: 3.2.40

1. 事前準備


本装置は、Bluetooth LEにより通信を行うため、OpenBlocks本体に、USB Bluetoothアダプタを接続して使用します。
Bluetoothアダプタに関しては、以下の記事において、一部製品の接続検証を行っております。

 周辺機器接続テスト

上記の記事に、Bluetooth接続に関する説明を記述しておりますが、今回は、Bluetooth LEによる接続であるため、手順に関しては本記事にて説明します。

Bluez 5.12の導入

Debian Wheezyにて提供されるbluezパッケージでは、gatttoolによるデータのwriteが出来ず、Web検索したところ、以下のページを参考に、5.12をインストールしました。
また、下記ページでは今回使用したデバイスそのもののテストも行っています。

Michael Saunby: Raspberry Pi and TI CC2541 SensorTag:

導入に際しては、事前に開発環境のインストールを行ってください。
( すでに行っている場合は必要ありません)

# aptitude install build-essential

Bluez 5.12のビルドに必要なライブラリをインストールします。

# aptitude install libglib2.0-dev libdbus-1-dev libusb-dev libudev-dev libical-dev systemd libreadline-dev

Bluez 5.12を入手し、解凍します。

# wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.12.tar.xz
# tar -Jxvf bluez-5.12.tar.xz

INSTALLドキュメントに従い、インストールします。

# cd bluez-5.12/
# ./configure
# make
# make install

2. 接続方法


CC2541のデータハンドリングは、以下のTI Wikiに記述されています。

SensorTag User Guide - Texas Instruments Wiki:


今回は、wheezyのbluetoothサポートパッケージを導入していませんので、手動でデバイスの立ち上げからテストまでを行っています。

# hciconfig hci0 up

デバイスサイドにあるスイッチを押して、BLEデバイスのスキャンを行います。


# hcitool lescan
LE Scan ...
34:B1:F7:D5:59:2A (unknown)
34:B1:F7:D5:59:2A SensorTag
 :
 :

gatttoolにより、インタラクティブにセンサーデータを取得してみます。

# gatttool -i hci0 -b 34:B1:F7:D5:59:2A -I
[34:B1:F7:D5:59:2A][LE]> connect
Attempting to connect to 34:B1:F7:D5:59:2A
Connection successful
[34:B1:F7:D5:59:2A][LE]> primary
attr handle: 0x0001, end grp handle: 0x000b uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x000c, end grp handle: 0x000f uuid: 00001801-0000-1000-8000-00805f9b34fb
attr handle: 0x0010, end grp handle: 0x0022 uuid: 0000180a-0000-1000-8000-00805f9b34fb
attr handle: 0x0023, end grp handle: 0x002a uuid: f000aa00-0451-4000-b000-000000000000
attr handle: 0x002b, end grp handle: 0x0035 uuid: f000aa10-0451-4000-b000-000000000000
attr handle: 0x0036, end grp handle: 0x003d uuid: f000aa20-0451-4000-b000-000000000000
attr handle: 0x003e, end grp handle: 0x0048 uuid: f000aa30-0451-4000-b000-000000000000
attr handle: 0x0049, end grp handle: 0x0054 uuid: f000aa40-0451-4000-b000-000000000000
attr handle: 0x0055, end grp handle: 0x005c uuid: f000aa50-0451-4000-b000-000000000000
attr handle: 0x005d, end grp handle: 0x0061 uuid: 0000ffe0-0000-1000-8000-00805f9b34fb
attr handle: 0x0062, end grp handle: 0x0068 uuid: f000aa60-0451-4000-b000-000000000000
attr handle: 0x0069, end grp handle: 0xffff uuid: f000ffc0-0451-4000-b000-000000000000
[34:B1:F7:D5:59:2A][LE]> char-read-hnd 38
Characteristic value/descriptor: 00 00 00 00
[34:B1:F7:D5:59:2A][LE]> char-write-req 3c 01
Characteristic value was written successfully
[34:B1:F7:D5:59:2A][LE]> char-read-hnd 38
Characteristic value/descriptor: 4c 6d 46 60
[34:B1:F7:D5:59:2A][LE]>


上記の手順により、センサーデータから数値を取得することが出来ます。


ただし、このデバイスは常時監視する用途には向きません。
USBに直結するタイプのインターフェースも配布されていますので、別途入手して評価する予定です。

2013年12月11日水曜日

[.tested] OpenBlocks AX3/A7 OpenSSLベンチマーク [debian Wheezy][AX3][A7]

OpenSSLは、DebianのパッケージよりUbuntuの方が40%前後良い結果になるのですが、原因はコンパイルオプションの違いによるものと思われます。
今回、マイクロサーバ技術課にてDebianのOpenSSLを再構築、速度検証を行った結果を、当blogにて報告します。

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

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

1.OpenSSLの作成


開発環境の準備

SSD併用モードの検証機を用意します。
以下のコマンドを入力して、ビルド環境を作成します。

# apt-get install build-essential devscripts
# apt-get build-dep openssl
# apt-get source opnessl


OpenSSLのビルド

configはデフォルトで。

# cd openssl-1.0.1e
# ./config
# make


2.ベンチマーク


以下のopensslのオプションコマンドによるベンチマークを行いました。

# openssl speed md5 sha rc4 aes-128-cbc aes-256-cbc -elapsed

elapsedオプション このオプションを付けた場合は、経過時間に実時間を使用します。
付けない場合は、経過時間にユーザ時間を使用します。
( timeコマンドでいうところのrealを使うかuserを使うかの違いです。)


# time
real 0m0.000s
user 0m0.000s
sys 0m0.000s

AX3

MD5

16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
original 3959.72k 14570.50k 45317.27k 96043.04k 142521.75k
rebuild 3176.47k 11748.89k 38143.49k 86815.81k 139127.92k

SHA


SHA1
16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
original 4118.90k 13892.91k 37209.22k 64278.28k 81364.79k
rebuild 3258.12k 11657.12k 35595.82k 73223.14k 105856.43k

SHA256
16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
original 1185.47k 2831.95k 21233.46k 27692.57k 30383.88k
rebuild 9166.13k 22245.57k 40425.80k 50926.48k 55104.13k

SHA512
16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
original 1001.78k 4010.72k 5859.25k 8083.48k 9087.40k
rebuild 2900.56k 11631.05k 16581.49k 22607.95k 25313.55k

RC4

16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
original 76616.54k 92183.77k 99732.75k 101792.74k 101980.87k
rebuild 86311.48k 97458.94k 101188.81k 102165.26k 101828.47k

AES


AES 128 CBC
16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
original 19698.47k 24733.85k 26619.24k 27161.86k 27324.81k
rebuild 37864.58k 48231.72k 52411.28k 53509.61k 53727.00k

AES 256 CBC
16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
original 15526.19k 18610.97k 19649.15k 19927.86k 20001.00k
rebuild 31212.60k 37900.44k 40606.87k 41398.18k 41575.08k
A7

MD5

16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
original 1498.52k 5339.41k 15721.63k 30893.06k 42628.34k
rebuild 1175.85k 4268.61k 13349.97k 28286.55k 42101.42k

SHA


SHA1
16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
original 1297.46k 4093.24k 10183.34k 16189.44k 19507.88k
rebuild 1140.14k 3761.33k 9810.09k 16310.86k 20307.97k

SHA256
16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
original 1185.47k 2831.95k 5132.54k 6406.29k 6927.70k
rebuild 2689.97k 6131.58k 10653.60k 13119.15k 14002.60k

SHA512
16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
original 153.51k 617.22k 871.08k 1195.69k 1349.91k
rebuild 729.19k 2926.45k 4139.18k 5635.75k 6278.72k

RC4

16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
original 22444.42k 25887.09k 27038.89k 27221.73k 27396.78k
rebuild 22965.96k 26169.81k 27001.28k 27336.02k 27303.04k

AES


AES 128 CBC
16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
original 4880.32k 5504.11k 5666.79k 5733.38k 5720.79k
original 7606.46k 8501.16k 8808.19k 8854.03k 8899.24k

AES 256 CBC
16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
original 3751.82k 4089.11k 4202.92k 4214.39k 4232.53k
rebuild 5890.15k 6452.46k 6589.41k 6650.88k 6660.10k
3.検証結果から


AX3
  • AESは2倍程度高速となります。
  • MD5は遅くなります。
  • RC4, SHA1は大きく変わりません。SHA256, SHA512は数倍高速となります。
A7
  • AESは3割程度高速となります。
  • MD5は遅くなります。
  • RC4, SHA1は大きく変わりません。SHA256, SHA512は数倍高速となります。

暗号化アルゴリズム単位で指定できるので、MD5を指定しない前提であれば、リビルドをすることにより速度向上を見込めます。

2013年12月9日月曜日

TI CC2541 SensorTag Development Kit

TEXAS INSTRUMENTS社より、センサータグ開発キットCC2541が配布されているので、TIショップより入手しました。

 CC2541 SensorTag 開発キット - CC2541DK-SENSOR - TI ツール・フォルダ:

この開発キットは、以下のセンサー入力をBluetoothにより出力します。
  • IR 温度センサ
  • 湿度センサ
  • 圧力センサ
  • 加速度計
  • ジャイロスコープ
  • 磁力計


購入は、TIショップからの直接購入をお勧めします。($25で送料込み)
展示会などでの即売もあるようです。

Bluetooth LEデバイスとして、bluezでscan出来るところまでは確認しました。
OpenBlocksとの接続や監視ツールとの連携に関してはこれから行いたいと思います。

(TIのサイトより、各種OS向けの開発キットやテストツールが配布されていますが、ソースコードの入手にはagreementが必要になっていますので、muninプラグインなど作成した際の公開に関しては少し時間がかるかと思います)

2013年12月6日金曜日

[.tested] SII MB-B100-00 CDMA 1X 通信アダプタ [debian Wheezy][AX3][A7/A6]



SII MB-B100-00は、CDMA 1x 通信モジュール(セイコーインスツル製 WM-M200A)を内蔵したKDDI CDMA1x 汎用通信アダプタです。
KDDI CDMA 1x 通信サービスを利用して、パケット通信、SMS 受信、GPS 測位を行うことができます。
今回は、本装置によるパケット通信サービスをOpenBlocks AX/A7/A6で 利用するための検証を行います。

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

<検証環境>
Debian 7.1 Wheezy
OpenBlocks AX3/4 kernel: 3.2.40
OpenBlocks A6/A7 kernel: 3.2.40

<使用機器>
OpenBlocks AX3
OpenBlocks A6/A7
SII MB-B100-00 CDMA 1X 通信アダプタ

1. 事前準備


本装置は、RS-232Cインタフェースにより接続します。
OpenBlocksの場合は、RS-232Cポートに接続しますが、他社の外付けモデムと同様に、別売の
シリアル変換アダプタ(ストレート) PH-RD/RH/600を使用します。
(添付のクロスアダプタを使用する場合は、Dsub9pinのオスメスのシリアルクロスケーブルにより接続して下さい)


RS-232Cポートのデバイス名は、
/dev/ttyS1
になります。


2. 接続方法


接続は、他のモバイル通信アダプタと同様、pppconfigで設定を行います。

pppconfigをインストールします。

# aptitude install pppconfig

pppconfigの設定は以下の通りです。

Provider Name  au
Configure Nameservers (DNS)  Dynamic
Authentication Method for test  PAP
User Name  アカウント名(*1)
Password  パスワード(*1)
Speed  19200
Pulse or Tone  Tone
Phone Number  電話番号(*2)
Choose Modem Config Method  No
Select Modem Port  Manual
Manually Select Modem Port  /dev/ttyS1

(*1) 通信事業者より提供されたアカウント名、パスワードを使用してください。
(*2) 通信事業者より提供された番号を使用してください。

/etc/chatscripts/auを編集します。
ATZコマンドはこのモジュールの場合使用出来ません。
また、その後の処理も一部変更しています。
(****は発信する電話番号のため、置き換えてください)

# This chatfile was generated by pppconfig 2.3.18.
# Please do not delete any of the comments.  Pppconfig needs them.
#
# ispauth PAP
# abortstring
ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIAL TON
E' ABORT 'NO ANSWER' ABORT DELAYED
# modeminit
#'' ATZ
# ispnumber
#OK-AT-OK "ATDT****"
'' "ATDT****"
# ispconnect
CONNECT \d\c
# prelogin

# ispname
# isppassword
# postlogin

# end of pppconfig stuff

eth0や他のインタフェースが有効になっている場合は、/etc/ppp/peers/auに、以下の行を加えることにより、defaultrouteが変更されます。

replacedefaultroute


上記設定により、外部のサーバにアクセス出来ることを確認しました。

# pon au
# ifconfig ppp0
ppp0      Link encap:Point-to-Point Protocol
          inet addr:106.170.173.51  P-t-P:210.169.0.102  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:72 (72.0 B)  TX bytes:87 (87.0 B)

ただ、poffコマンドにより通信終了後、最初のATコマンドの出力が”NO CARRIER"となり、ponによる再ダイヤルの最初の1回目がエラーになります。
これを避けるためには、再度ダイヤルするか、リセット用の専用プログラムを作成し、ATコマンドを1度実行するなどの対策が必要かと思います。

なお、コンシューマ向けの機器と違い、M2M向けは通信データ量に対しての従量課金が細かく定義されるため、評価を行う際は、条件に注意して行ってください。