このセクションの内容
•概要
•メッセージ処理のためのスクリプト
•スクリプトで使用されるテーブル
•利用可能な補助モジュール
概要
Dr.Web ICAPDコンポーネントはLuaプログラムインタプリタを介したインタラクションをサポートします(バージョン5.3.4を使用。Dr.Web for UNIX Internet Gatewaysに同梱)。Luaで記述されたスクリプトは、HTTPプロトコルメッセージの解析と処理のためにコンポーネントで使用できます。
ICAPプロトコルを介してプロキシサーバーからスキャンのために受信したHTTPメッセージ(リクエストまたはレスポンス)の解析は、Dr.Web ICAPDの設定でMessageHookパラメータの値として指定されたLuaスクリプト(Luaコードのスニペットか、必要な処理プログラムを含むファイルへのパスで指定できる)を使用して実行されます。
メッセージ処理のためのスクリプト
スクリプトの必要条件
このスクリプトには、メッセージスキャンモジュールのエントリポイントとなるグローバル関数が含まれている必要があります(Dr.Web ICAPDは、新たに受信したメッセージを処理する際にこの関数を呼び出します)。処理関数は、次の呼び出し規則を満たす必要があります。
1.関数名はmessage_hookです。
2.引数はMessageContextテーブルのみです(関数から処理されたメールメッセージに関する情報へのアクセス権限を提供します)。
3.戻り値は文字列です。戻り値は、スキャンされたメッセージの判定、つまり、メッセージをスキップするかブロックするかを決定します。以下の値を使用できます。
•"pass"では、メッセージが受信者に渡されます(サーバーへのHTTPリクエスト、クライアントへのHTTPレスポンス)。
•"block"は、HTTPメッセージは受信者に送信されず、クライアントはブロックされたWebページを含むHTTPレスポンスを受信します。
関数の実行時に異なる値が返された場合やエラーが発生した場合は、スキャンエラーとして扱われます。この場合のクライアントへのレスポンスは、BlockUnchecked設定パラメータの値によって異なります。
スキャンのために受信したすべてのHTTPメッセージについて、Dr.Web ICAPDにPass判定を常に返す正しい関数定義の例は以下のとおりです(以降、ctx引数はMessageContextテーブルのインスタンスです)。
function message_hook(ctx)
return "pass"
end
|
次に示す例のスクリプトは、Active DirectoryのWeb Adminsグループのメンバー以外のすべてのユーザーに対して、Dr.WebドキュメントWebサイト以外のすべてのリソースへのアクセスをブロックします。
local dwl = require "drweb.lookup"
function message_hook(ctx)
-- Not to block access to resources at the document website
-- of Doctor Web
if ctx.req.url.in_list{"download.geo.drweb.com"} then
return "pass"
end
-- To allow access to users from the WebAdmins group
-- in Active Directory
if dwl.check("WebAdmins", "AD@WinRoot", ctx.icap.user) then
return "pass"
end
-- Block access for all the others (to all resources)
return "block"
end
|
スクリプトで使用されるテーブル
テーブルMessageContext
このテーブルはmessage_hook関数の入力引数として使用され、処理されたHTTPメッセージに関する情報(タイプ、ヘッダー、本文、送信者と受信者に関する情報(ある場合))へのアクセスを提供します。
フィールド
|
説明
|
データタイプ
|
direction
|
HTTPメッセージタイプ。次の値を取ります。
•"request" - HTTPリクエスト
•"response" - HTTPレスポンス |
文字列
|
icap
|
ICAPリクエストヘッダーに関する情報。
|
テーブルICAP
|
request
|
HTTPリクエストヘッダーに関する情報。
|
テーブルRequest
|
response
|
HTTPレスポンスヘッダーに関する情報。
|
テーブルResponse
|
body
|
HTTPメッセージ本文に関する情報。
|
テーブルBody
|
無効になったメタメソッド:なし
|
テーブルICAP
このテーブルはMessageContextテーブルのicapフィールドとして使用されます。HTTPプロキシサーバーからのICAPリクエストに関するデータが含まれます。
フィールド
|
説明
|
データタイプ
|
user
|
ICAPリクエストのX-Client-Usernameヘッダーから取得したユーザーに関する情報。
|
テーブルUser
|
src
|
リクエストを送信したクライアントのIPアドレス(プロキシサーバーによって送信されたICAPリクエストのX-Client-IPヘッダーから取得)またはnil(アドレスが不明な場合)。
|
テーブルIpAddress
|
field
|
ICAPリクエストヘッダーの配列。
|
HeaderFieldテーブルの配列
|
search
|
正規表現を使用してヘッダーを検索する関数。patterns引数(つまり、検索パターン、Perl構文(PCRE)の1つ(文字列)または複数(文字列の配列)の正規表現)を要求し、使用可能なすべてのヘッダーを検索します。引用符で囲まれた文字列を使用する場合は、スラッシュ文字をエスケープする必要があります。
次のブール値を返します。
•true - field.name .. ": " .. field.value.decoded文字列が、少なくとも1つのヘッダーに対して指定した少なくとも1つの正規表現と一致する場合。
•false - 一致するものがない場合。 |
機能
|
value
|
唯一の引数であるヘッダー名(文字列)を要求する関数。指定された名前を持つ最初のヘッダーの値を返します。この名前のヘッダーがない場合はnilを返します。
|
機能
|
無効になったメタメソッド:なし
|
テーブルUser
このテーブルにはユーザーの名前とドメインが含まれます。どちらのフィールドもオプションです。
フィールド
|
説明
|
データタイプ
|
user
|
ユーザー名
|
文字列
|
domain
|
ユーザードメイン
|
文字列
|
無効になったメタメソッド:
•__toString - この関数は、Userコンテンツを文字列(UTF-8)として返します。
•__concat - この関数は、User文字列値と別の文字列を連結します。 |
テーブルHeaderField
このテーブルではHTTPまたはICAPメッセージヘッダーを指定します。
フィールド
|
説明
|
データタイプ
|
name
|
ヘッダー名。
|
文字列
|
value
|
ヘッダー値。
|
文字列
|
無効になったメタメソッド:なし
|
テーブルRequest
このテーブルではHTTPリクエストのヘッダーを指定します。
フィールド
|
説明
|
データタイプ
|
method
|
リクエストで使用されたHTTPプロトコルメソッド("POST"など)。ICAPリクエストにHTTPリクエストヘッダーが含まれていない場合はnil。
|
文字列
|
url
|
HTTPリクエストが送信されるリソースのURL。
|
テーブルUrl
|
content_type
|
HTTPリクエストのContent-Typeヘッダーの情報。
|
ContentTypeテーブル
|
field
|
HTTPリクエストヘッダーの配列。
|
HeaderFieldテーブルの配列
|
search
|
正規表現を使用してヘッダーを検索する関数。patterns引数(つまり、検索パターン、Perl構文(PCRE)の1つ(文字列)または複数(文字列の配列)の正規表現)を要求し、使用可能なすべてのヘッダーを検索します。引用符で囲まれた文字列を使用する場合は、スラッシュ文字をエスケープする必要があります。
次のブール値を返します。
•true - field.name .. ": " .. field.value.decoded文字列が、少なくとも1つのヘッダーに対して指定した少なくとも1つの正規表現と一致する場合。
•false - 一致するものがない場合。 |
機能
|
value
|
唯一の引数であるヘッダー名(文字列)を要求する関数。指定された名前を持つ最初のヘッダーの値を返します。この名前のヘッダーがない場合はnilを返します。
|
機能
|
無効になったメタメソッド:なし
|
テーブルContentType
このテーブルでは、Content-Typeヘッダーから取得する値を指定します。
フィールド
|
説明
|
データタイプ
|
type
|
メッセージ部分のMIMEタイプ
|
文字列
|
subtype
|
メッセージ部分のサブタイプ
|
文字列
|
param
|
次のフィールドを持つテーブル配列形式のヘッダーパラメータ:
•nameはパラメータの名前(文字列)です。
•valueはパラメータの値(文字列)です。 |
テーブル配列
|
match
|
唯一の引数media_types、つまりMIMEタイプを指定する文字列の配列を要求する関数。リスト内の各文字列は"type/subtype"、"type/*"、"*/*"のいずれかの形式でなければなりません。
次のブール値を返します。
•true - 本文のMIMEタイプが指定された文字列(大文字と小文字が区別されない)のいずれかに一致するか、配列に文字列"*/*"が含まれている場合。
•false - それ以外の場合。 |
機能
|
無効になったメタメソッド:
•__tostringは、デコードされたヘッダー値を返す関数です。
•__concatは、ヘッダーの復号化された値と文字列を連結する関数です。 |
テーブルUrl
このテーブルではURLを指定します。
フィールド
|
説明
|
データタイプ
|
scheme
|
スキーム(プロトコル)プレフィックス(例:"http")。プレフィックスがない場合、値はnilになります。
|
文字列
|
host
|
ホスト名またはIPアドレス(例:"example.com")。ホスト名がない場合、値はnilになります。
|
文字列
|
port
|
ポート番号(例:80)。番号がない場合、値はnilになります。
|
番号
|
path
|
リソースへのパス(例:"index.html")。パスがない場合、値はnilになります。
|
文字列
|
query
|
デコードされたリクエストパラメータ。パラメータがない場合、値はnilになります。
|
文字列
|
legal_url
|
URLがowners_noticeカテゴリーに属する場合、フィールドには所有者のWebサイトへのURLが含まれます。属さない場合は、nilになります。
|
文字列
|
in_list
|
唯一の引数hosts、つまりホストリスト(文字列の配列)を要求する関数。次のブール値を返します。
•true - hostが指定されたドメインのいずれかのサブドメインであるか、それらのいずれかに一致する場合。
•false - hostが指定されたドメインのいずれかのサブドメインでないか、それらのいずれにも一致しない場合。 |
機能
|
categories
|
1つのオプション引数filter、つまりUrlCategoryFilterテーブルを受け取る関数(引数がない場合は、空のテーブルを使用するのと同じです)。フィルターで指定されたURL条件を満たすすべてのカテゴリーを反復処理できる、反復子関数を返します。
|
機能
|
in_categories
|
唯一の引数categories、つまりURLカテゴリーリスト(文字列の配列)を要求する関数。次のブール値を返します。
•true - URLが指定されたカテゴリーの少なくとも1つに該当する場合。
•false - URLが、指定されたカテゴリーの少なくとも1つに該当しない場合。
categories配列が空の場合は、常にfalseを返します。UrlCategoryFilterテーブルのcategoryフィールドの説明にある可能なカテゴリー値を参照してください。
|
機能
|
raw
|
生のデコードされていないURL。
|
テーブルRawUrl
|
無効になったメタメソッド:
•__toString - この関数は、Urlコンテンツを文字列(UTF-8)として返します。
•__concat - この関数は、Url文字列値と別の文字列を連結します。 |
テーブルRawUrl
このテーブルには、デコードされていないURLデータが含まれます。
フィールド
|
説明
|
データタイプ
|
scheme
|
スキーム(プロトコル)プレフィックス(例:"http")。プレフィックスがない場合、値はnilになります。
|
文字列
|
host
|
ホスト名またはIPアドレス(例:"example.com")。ホスト名またはIPアドレスがない場合、値はnilになります。
|
文字列
|
port
|
ポート番号(例:80)。ポート番号がない場合、値はnilになります。
|
番号
|
path
|
リソースへのパス(例:"index.html")。パスがない場合、値はnilになります。
|
文字列
|
query
|
デコードされたリクエストパラメータ。パラメータがない場合、値はnilになります。
|
文字列
|
無効になったメタメソッド:
•__toString - この関数は、RawUrlコンテンツを文字列(UTF-8)として返します。
•__concat - この関数は、RawUrl文字列値と別の文字列を連結します。 |
テーブルUrlCategoryFilter
このテーブルではURLカテゴリーのフィルターを指定します(フィールドはすべてオプションです)。
フィールド
|
説明
|
データタイプ
|
category
|
URLが該当するカテゴリーのリスト(大文字と小文字は区別されません)。リストには次の値が含まれる場合があります。
•"infection_source" - 感染源。
•"not_recommended" - 非推奨のWebサイト。
•"adult_content" - アダルトコンテンツ。
•"violence" - 暴力。
•"weapons" - 武器。
•"gambling" - ギャンブル。
•"drugs" - 薬物。
•"obscene_language" - 卑猥な表現。
•"chats" - チャット。
•"terrorism" - テロリズム。
•"free_email" - 無料メール。
•"social_networks" - ソーシャルネットワーク。
•"owners_notice" - 著作権者からの申し立てによってリストに登録されたWebサイト。
•"online_games" - オンラインゲーム。
•"anonymizers" - アノニマイザー。
•"cryptocurrency_mining_pools" - 仮想通貨マイニングプール。
•"jobs" - 求人情報のWebサイト。
•"black_list" - ブラックリスト。 |
文字列または文字列のテーブル
|
category_not
|
URLが該当しないカテゴリーのリスト(大文字と小文字は区別されません)。
|
文字列または文字列のテーブル
|
無効になったメタメソッド:なし
|
フィルターフィールドが指定されていない(値がnilである)場合、すべての脅威がフィルターと一致します。
複数のフィルターフィールドが指定されている場合、条件は接続詞(論理積)によって結合されます。フィルターフィールドがテーブル(リスト)の場合、オブジェクトは少なくとも1つのテーブル(リスト)の項目と一致する必要があります。
テーブルResponse
このテーブルではHTTPレスポンスヘッダーを指定します。
フィールド
|
説明
|
データタイプ
|
status
|
HTTPレスポンスコード、またはICAPリクエストにHTTPレスポンスヘッダーが含まれていない場合はnil。
|
番号
|
reason
|
レスポンスコードへのコメント。コメントがない場合はnil。
|
文字列
|
content_type
|
HTTPレスポンスのContent-Typeヘッダーから取得される情報。
|
テーブルContentType
|
field
|
HTTPレスポンスヘッダーの配列。
|
HeaderFieldテーブルの配列
|
search
|
正規表現を使用してヘッダーを検索する関数。必須のpatterns引数(つまり、検索パターン、Perl構文(PCRE)の1つ(文字列)または複数(文字列の配列)の正規表現)を受け入れ、使用可能なすべてのヘッダーを検索します。引用符で囲まれた文字列を使用する場合は、スラッシュ文字をエスケープする必要があります。
次のブール値を返します。
•true - field.name .. ": " .. field.value.decoded文字列が、少なくとも1つのヘッダーに対して指定した少なくとも1つの正規表現と一致する場合。
•false - field.name .. ": " .. field.value.decoded文字列がどのヘッダーに対しても、どの正規表現とも一致しない場合。 |
機能
|
value
|
唯一の引数であるヘッダー名(文字列)を要求する関数。指定された名前を持つ最初のヘッダーの値を返します。この名前のヘッダーがない場合はnilを返します。
|
機能
|
無効になったメタメソッド:なし
|
テーブルBody
このテーブルではHTTPメッセージ本文を指定します。
フィールド
|
説明
|
データタイプ
|
has_threat
|
1つのオプション引数filter、つまりThreatFilterテーブルを受け取る関数(引数がない場合は、空のテーブルを使用するのと同じです)。次のブール値を返します。
•true - HTTPメッセージ本文に、指定されたfilter条件を満たす脅威が含まれている場合。
•false - メッセージ本文に、指定された条件を満たす脅威が存在しない場合。 |
機能
|
threats
|
1つのオプション引数filter、つまりThreatFilterテーブルを受け取る関数(引数がない場合は、空のテーブルを使用するのと同じです)。HTTPメッセージ本文で検出されたすべての脅威を反復処理できる反復子関数を返します。脅威は、Virusテーブルを使用して指定されます。
|
機能
|
content_type
|
HTTPリクエストまたはレスポンスのContent-Typeヘッダーから取得された本文のMIMEタイプに関する情報が含まれます(解析されているメッセージのタイプによって異なります)。
|
テーブルContentType
|
scan_error
|
本文のスキャンエラー(発生した場合)。それ以外の場合はnil。以下の値を使用できます。
•"path_not_absolute" - 指定されたパスは絶対パスではありません。
•"file_not_found" - ファイルが見つかりませんでした。
•"file_not_regular" - ファイルは通常のファイルではありません。
•"file_not_block_device" - ブロックデバイスではありません。
•"name_too_long" - 名前が長すぎます。
•"no_access" - アクセスが拒否されました。
•"read_error" - 読み取りエラーが発生しました。
•"write_error" - 書き込みエラー。
•"file_too_large" - ファイルが大きすぎます。
•"file_busy" - ファイルは使用中です。
•"unpacking_error" - アンパックエラー。
•"password_protected" - アーカイブはパスワードで保護されています。
•"arch_crc_error" - CRCアーカイブエラー。
•"arch_invalid_header" - 無効なアーカイブヘッダー。
•"arch_no_memory" - アーカイブを解凍するための十分なメモリがありません。
•"arch_incomplete" - 不完全なアーカイブ。
•"can_not_be_cured" - ファイルを修復できません。
•"packer_level_limit" - 圧縮されたオブジェクトのネスティングレベルの上限を超えました。
•"archive_level_limit" - アーカイブのネスティングレベルの上限を超えました。
•"mail_level_limit" - メールファイルのネスティングレベルの上限を超えました。
•"container_level_limit" - コンテナのネスティングレベルの上限を超えました。
•"compression_limit" - 圧縮率の上限を超えました。
•"report_size_limit" - レポートサイズの上限を超えました。
•"scan_timeout" - スキャンタイムアウトの上限を超えました。
•"engine_crash" - スキャンエンジンの障害。
•"engine_hangup" - スキャンエンジンのハングアップ。
•"engine_error" - スキャンエンジンエラー。
•"no_license" - アクティブなライセンスが見つかりません。
•"multiscan_too_late" - マルチスキャンエラー。
•"curing_limit_reached" - 修復試行の上限を超えました。
•"non_supported_disk" - サポートされていないディスクタイプ。
•"unexpected_error" - 予期しないエラー。 |
文字列
|
無効になったメタメソッド:なし
|
テーブルVirus
このテーブルでは脅威を指定します。
フィールド
|
説明
|
データタイプ
|
name
|
脅威の種類(Doctor Webの分類による)
|
文字列
|
type
|
脅威の種類(Doctor Webの分類による)。以下の値を使用できます。
•"known_virus" - 既知の脅威(ウイルスデータベースに登録されている脅威)。
•"virus_modification" - 既知の脅威の亜種。
•"unknown_virus" - 未知の脅威、疑わしいオブジェクト。
•"adware" - 広告プログラム。
•"dialer" - ダイアラープログラム。
•"joke" - ジョークプログラム。
•"riskware" - 潜在的に危険なプログラム。
•"hacktool" - ハッキングツール。 |
文字列
|
無効になったメタメソッド:なし
|
テーブルThreatFilter
このテーブルでは脅威のフィルターを指定します。フィールドはすべてオプションです。
フィールド
|
説明
|
データタイプ
|
category
|
脅威が該当するカテゴリーのリスト(大文字と小文字は区別されません)。Virusテーブルのtypeフィールドの説明にあるカテゴリーのリストを参照してください。
|
文字列または文字列のテーブル
|
category_not
|
脅威が該当しないカテゴリーのリスト(大文字と小文字は区別されません)。
|
文字列または文字列のテーブル
|
無効になったメタメソッド:なし
|
フィルターフィールドが指定されていない(値がnilである)場合、脅威はフィルターと一致します。複数のフィルターフィールドが指定されている場合、条件は接続詞(論理積)によって結合されます。フィルターフィールドがテーブル(リスト)の場合、オブジェクトは少なくとも1つのテーブル(リスト)の項目と一致する必要があります。
使用例:
1. HTTPメッセージで見つかったすべての脅威の名前をログへ書き込む。
local dw = require "drweb"
function message_hook(ctx)
for virus in ctx.body.threats() do
dw.notice("threat found: " .. virus.name)
end
return "pass"
end
|
2. カテゴリーフィルターに一致する脅威名と、脅威が検出されたメッセージ部分の名前をログに書き込む。
local dw = require "drweb"
function message_hook(ctx)
for v in ctx.body.threats({category = "known_virus"}) do
dw.notice("found known virus: " .. v.name)
end
return "pass"
end
|
利用可能な補助モジュール
LuaのプログラムスペースでDr.Web for UNIX Internet Gatewaysとやり取りするために、次の特定のモジュールをインポートできます。
モジュール名
|
機能
|
drweb
|
Luaプログラムを起動したDr.Web for UNIX Internet GatewaysコンポーネントのログにLuaプログラムからのメッセージを記録する機能と、Luaプロシージャの非同期実行の手段を提供するモジュール
|
drweb.lookup
|
Dr.Web LookupDモジュールを呼び出して、外部ソースからデータを要求するためのツールを提供するモジュール
|
drweb.regex
|
文字列と正規表現を一致させるためのインターフェースを提供するモジュール
|
drweb.config
|
Dr.Web ICAPD設定パラメータ値を持つテーブルを提供するモジュール
|
drwebモジュールの内容
1.機能
このモジュールには、次のような機能があります。
•LuaプログラムからのメッセージをDr.Web for UNIX Internet Gatewaysコンポーネントログに保存する:
▫log(<level>, <message>)は<message>文字列をDr.Web for UNIX Internet Gatewaysログに<level>レベル(必要なレベルは、「debug」、「info」、「notice」、「warning」、「error」を使用して定義します)で書き込みます。
▫debug(<message>)は<message>文字列をDr.Web for UNIX Internet GatewaysログにDEBUGレベルで書き込みます。
▫info(<message>)は<message>文字列をDr.Web for UNIX Internet GatewaysログにINFOレベルで書き込みます。
▫notice(<message>)は<message>文字列をDr.Web for UNIX Internet GatewaysログにNOTICEレベルで書き込みます。
▫warning(<message>)は<message>文字列をDr.Web for UNIX Internet GatewaysログにWARNINGレベルで書き込みます。
▫error(<message>)は<message>文字列をDr.Web for UNIX Internet GatewaysログにERRORレベルで書き込みます。
•Luaプロシージャの同期を管理する:
▫sleep(<sec.>)はこのLuaプロシージャインスタンスの実行を指定された秒数で一時停止します。
▫async(<Lua function>[, <argument list>])は、指定された関数を非同期的に起動し、指定された引数リストに渡します。async関数呼び出しはすぐに完了し、戻り値(Futureテーブル)を使用すると、<Lua function>の結果を取得できます。
•IpAddressテーブルにIPアドレスを追加する:
▫ip(<address>)は、IpAddressテーブルの形式で<address>文字列として送信される、IPアドレスを指定します。IPv4またはIPv6アドレスのいずれかを使用できます。
•テキストファイルから外部データをアップロードする:
▫load_set(<file path>)は、指定されたテキストファイルのコンテンツからtrue値を含むテーブルを生成します。ファイルから読み取られた文字列はキーとして使用されます。空の文字列と空白を含む文字列は無視されます。
▫load_array(<file path>)は、指定されたテキストファイルのコンテンツから文字列の配列を生成します。空の文字列と空白文字のみで構成される文字列は無視され、配列には含まれません。
2.テーブル
•Futureテーブルは、async関数を使用して関数を実行した後の保留中の結果を表します。
フィールド
|
説明
|
データタイプ
|
wait
|
async関数を使用して開始した関数の結果を返す関数。関数がまだ実行を完了していない場合は、完了を待って結果を返します。waitが呼び出される前に関数が完了した場合、結果はすぐに返されます。開始された関数が失敗した場合、wait呼び出しは同じエラーを生成します。
|
機能
|
無効になったメタメソッド:なし
|
•IpAddressテーブルはIPアドレスを表します。
フィールド
|
説明
|
データタイプ
|
belongs
|
IpAddressテーブルに保存されているIPアドレスが、指定されたサブネット(IPアドレス範囲)に所属しているかどうかを確認する関数
"<IP address>"または"<IP address>/<mask>"のような文字列を唯一の引数として受け取ります。ここで、<IP address>はホストアドレスまたはネットワークアドレス("127.0.0.1"など)、<mask>はサブネットワークマスク("255.0.0.0"などのIPアドレスとして、または"8"などの数値形式で指定できます)です。
次のブール値を返します。
•trueは、アドレスが指定されたアドレスの少なくとも1つと等しいか、指定されたサブネット(IPアドレスの範囲)の少なくとも1つに属していることを示します。
•false - それ以外の場合。 |
機能
|
無効になったメタメソッド:
•__tostringは、文字列内のIpAddressを変更する関数(例:"127.0.0.1"(IPv4)または"::1"(IPv6))です。
•__concatは、IpAddressを文字列に結合する関数です。
•__eqは、2つのIpAddressが等しいことを確認する関数です。
•__bandは、マスクを適用するための関数(例:dw.ip('192.168.1.2') & dw.ip('255.255.254.0'))です。 |
3.例
•非同期的に開始される手順によって生成されるメッセージをログへ書き込む:
local dw = require "drweb"
-- This function waits two seconds and returns a string,
-- received as an argument
function out_msg(message)
dw.sleep(2)
return message
end
-- "Main" function
function intercept(ctx)
-- Output of a string at the NOTICE level to the Dr.Web for UNIX Internet Gateways log
dw.notice("Intercept function started.")
-- An asynchronous start of two copies of the out_msg function
local f1 = dw.async(out_msg, "Hello,")
local f2 = dw.async(out_msg, " world!")
-- Waiting for the completion of the copies of the function
-- out_msg and output its results to log
-- the Dr.Web for UNIX Internet Gateways log at the DEBUG level
dw.log("debug", f1.wait() .. f2.wait())
end
|
•スケジュールされた手順を作成する:
local dw = require "drweb"
-- Save the table Future in the future global variable in order
-- to preven the removal by the garbage collector
future = dw.async(function()
while true do
-- Everyday, the following message is displayed in the log
dw.sleep(60 * 60 * 24)
dw.notice("A brand new day began")
end
end)
|
•文字列で表現されたIPアドレスをIpAddressテーブルに変更する:
local dw = require "drweb"
local ipv4 = dw.ip("127.0.0.1")
local ipv6 = dw.ip("::1")
local mapped = dw.ip("::ffff:127.0.0.1")
|
drweb.lookupモジュールの内容
1.機能
このモジュールは次の機能を提供します。
•lookup(<request>, <parameters>)は、Dr.Web LookupDモジュールを介して利用できる外部ストレージからデータを要求します。<request>引数は、Dr.Web LookupD設定内のセクション(文字列<type>@<tag>)に対応している必要があります。<parameters>引数は任意で、リクエストを生成するために使用される置換を表します。以下の自動的に許可されるマーカーを使用できます。
▫$u、$Uは、クライアントコンポーネントによって送信されたユーザー名(user)に自動的に置き換えられます。
▫$d、$Dは、クライアントコンポーネントによって送信されたドメイン(domain)に自動的に置き換えられます。
これらの引数はテーブルとして設定されます。このテーブルのキーと値は文字列でなければなりません。この関数は、リクエストの結果である文字列の配列を返します。
•check(<checked string>、<request>、<parameters>)は、Dr.Web LookupDモジュールを介して利用できる外部リポジトリで<checked string>が見つかった場合にtrueを返します。引数<request>および<parameters>はlookup関数の引数と同じです(上記を参照)。<checked string>引数は、文字列または__tostringメタメソッドを持つテーブル(つまり、文字列にフォーマットできる)であると想定されます。
2.例
•LookupD.LDAP.usersデータソースから取得したユーザーのログリストへ書き込む:
local dw = require "drweb"
local dwl = require "drweb.lookup"
-- "Main" function
function intercept(ctx)
-- Writing the string at the NOTICE level to the Dr.Web for UNIX Internet Gateways log
dw.notice("Intercept function started.")
-- Writing the request results to the Dr.Web for UNIX Internet Gateways log
-- to the 'ldap@users' data source
for _, s in ipairs(dwl.lookup("ldap@users", {user="username"})) do
dw.notice("Result for request to 'ldap@users': " .. s)
end
end
|
drweb.regexモジュールの内容
1. 機能
このモジュールは次の機能を提供します。
•search(<template>, <text>[, <flags>]) - <text>文字列に<template>正規表現と一致するサブストリングが含まれている場合はtrueを返します。オプションの<flags>パラメータ(整数)は、関数の動作に影響を与える一連のフラグであり、論理和でつなげられます。
•match(<template>, <text>[, <flags>]) - <template>正規表現がそのサブストリングだけでなく<text>ストリング全体と一致しなければならない点を除いてsearchと同じです。
2. 利用可能なフラグ
•ignore_caseはテキストの大文字と小文字を区別しません。
3. 例
local rx = require "drweb.regex"
rx.search("te.?t", "some TexT") -- false
rx.search("te.?t", "some TexT", rx.ignore_case) -- true
rx.match("some.+", "some TexT") -- true
|
drweb.configモジュールの内容
1. 機能
このモジュールには関数はありません。
2. 利用可能なテーブル
このモジュールは、次のフィールドを持つテーブルを提供します。
フィールド
|
説明
|
データタイプ
|
whitelist
|
Whitelist設定パラメータの値。
|
文字列の配列
|
blacklist
|
Blacklist設定パラメータの値。
|
文字列の配列
|
adlist
|
Adlist設定パラメータの値。
|
文字列の配列
|
block_url_categories
|
ブロックされるURLカテゴリーのリスト(Yesに設定されたBlock*パラメータ値に基づく)。
|
文字列の配列
|
block_threats
|
ブロックされる脅威カテゴリーのリスト(Yesに設定されたBlock*パラメータ値に基づく)。
|
文字列の配列
|
block_unchecked
|
BlockUnchecked設定パラメータの値。
|
論理
|
無効になったメタメソッド:なし
|
3. 例
local cfg = require "drweb.config"
function message_hook(ctx)
-- Block messages containing threats
-- from the list of threats to be blocked
if ctx.body.has_threat{category = cfg.block_threats} then
return "block"
end
-- To permit access to all other resources
return "pass"
end
|
|