このセクションの内容:
•概要 •メッセージ処理のためのスクリプト •使用中のテーブル •利用可能な補助モジュール 概要
Dr.Web ICAPDコンポーネントはLuaプログラムインタプリタを介したインタラクションをサポートします(バージョン5.3.4を使用。Dr.Web for UNIX Internet Gatewaysに同梱)。Luaで記述されたスクリプトは、HTTPプロトコルメッセージの分析と処理のためにコンポーネントで使用できます。
ICAPプロトコルを介してプロキシサーバーからスキャンのために受信したHTTPメッセージ(リクエストまたはレスポンス)の分析は、対応するMessageHookパラメータのDr.Web ICAPD設定で指定されたLuaスクリプト(Luaコードまたは必要な処理プログラムを含むファイルへのパスとして指定できます)を使用して実行されます。
メッセージ処理のためのスクリプト
スクリプトの必要条件
ファイルには、メッセージスキャンモジュールのエントリポイントとなるグローバル関数が含まれている必要があります(Dr.Web ICAPDは、新しく受信したメッセージを処理する際にこの関数を呼び出します)。処理関数は、次の呼び出し規則を満たす必要があります。
1.関数名は message_hookです。 2.引数はMessageContextテーブルのみです(関数から処理されたメッセージに関する情報へのアクセス権限を提供します)。 3.単一の戻り値は文字列です。戻り値は、スキャンされたメッセージの判定、つまり、メッセージをスキップするかブロックするかを決定します。可能な値: •"pass"は、受信者に渡されます(サーバーへのHTTPリクエスト、クライアントへのHTTPレスポンス)。 •"block"は、HTTPメッセージは受信者に送信されず、クライアントはブロックされたWebページを含むHTTPレスポンスを受信します。 関数が異なる値を返すか、その実行がエラーのために中断された場合、Dr.Web ICAPDは、スキャンエラーとクライアントへのレスポンスがBlockUnchecked設定パラメータの値に依存すると見なします。
スキャンのために受信したすべてのHTTPメッセージについて、Dr.Web ICAPDにPass判定を無条件に返す正しいスクリプト定義の例(以下では、ctx引数はMessageContextテーブルのインスタンスです)。
function message_hook(ctx)
return "pass"
end
|
例
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
|
正規表現を使用してヘッダーを検索する関数。Perl構文(PCRE)の1つの必須patterns引数(検索パターン:1つ(文字列)または複数(文字列の配列))の正規表現を受け入れます。使用可能なすべてのヘッダーを検索します。引用符で囲まれた文字列を使用する場合は、スラッシュ文字をエスケープする必要があります。
ブール値を返します。
•true - field.name .. ": " .. field.value.decoded文字列が、少なくとも1つのヘッダーに対して指定した少なくとも1つの正規表現と一致する場合。 •false - それ以外の場合。 |
機能
|
value
|
1つの必須引数、ヘッダー名(文字列)を受け取る関数。指定された名前を持つ最初のヘッダーの値を返します。この名前のヘッダーがない場合は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
|
正規表現を使用してヘッダーを検索する関数。Perl構文(PCRE)の1つの必須patterns引数(検索パターン:1つ(文字列)または複数(文字列の配列))の正規表現を受け入れます。使用可能なすべてのヘッダーを検索します。引用符で囲まれた文字列を使用する場合は、スラッシュ文字をエスケープする必要があります。
ブール値を返します。
•true - field.name .. ": " .. field.value.decoded文字列が、少なくとも1つのヘッダーに対して指定した少なくとも1つの正規表現と一致する場合。 •false - それ以外の場合。 |
機能
|
value
|
1つの必須引数、ヘッダー名(文字列)を受け取る関数。指定された名前を持つ最初のヘッダーの値を返します。この名前のヘッダーがない場合はnilを返します。
|
機能
|
無効になったメタメソッド:なし
|
テーブルContentType
Content-Typeヘッダーから取得した値を説明するテーブル。以下のフィールドを含みます。
フィールド
|
説明
|
データタイプ
|
type
|
メッセージ部分のMIMEタイプ
|
文字列
|
subtype
|
メッセージ部分のサブタイプ
|
文字列
|
param
|
次のフィールドを持つテーブル配列形式のヘッダーパラメータ:
•nameはパラメータ名(文字列)です。 •valueはパラメータ値(文字列)です。 |
テーブル配列
|
match
|
1つの必須引数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
|
1つの必須引数hosts、つまりホストリスト(文字列の配列)を受け取る関数。ブール値を返します。
•true - hostが指定されたドメインのいずれかのサブドメインであるか、それらのいずれかに一致する場合。 •false - それ以外の場合。 |
機能
|
categories
|
1つのオプション引数filter、つまりUrlCategoryFilterテーブルを受け取る関数(引数がない場合は、空のテーブルを使用するのと同じです)。フィルターで指定されたURL条件を満たすすべてのカテゴリーを反復処理できる反復子関数を返します。
|
機能
|
in_categories
|
1つの必須引数categories、つまりURLカテゴリーリスト(文字列の配列)を受け取る関数。ブール値を返します。
•true - URLが指定されたカテゴリーの少なくとも1つに該当する場合。 •false - それ以外の場合。 categories配列が空の場合は、常にfalseを返します。UrlCategoryFilterテーブルのcategoryフィールドの説明にある可能なカテゴリー値を参照してください。
|
機能
|
raw
|
生のデコードされていないURL。
|
テーブルRawUrl
|
無効になったメタメソッド:
•__toString - この関数は、Urlコンテンツを文字列(UTF-8)として返します。 •__concat - この関数は、Url文字列値と別の文字列を連結します。 |
テーブルRawUrl
復号化されていないURLデータを含むテーブル。以下のフィールドを含みます。
フィールド
|
説明
|
データタイプ
|
scheme
|
スキーム(プロトコル)プレフィックス。例:"http"。ない場合はnil。
|
文字列
|
host
|
ホスト名またはIPアドレス。例:"example.com"。ない場合は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
|
正規表現を使用してヘッダーを検索する関数。Perl構文(PCRE)の1つの必須patterns引数(検索パターン:1つ(文字列)または複数(文字列の配列))の正規表現を受け入れます。使用可能なすべてのヘッダーを検索します。引用符で囲まれた文字列を使用する場合は、スラッシュ文字をエスケープする必要があります。
ブール値を返します。
•true - field.name .. ": " .. field.value.decoded文字列が、少なくとも1つのヘッダーに対して指定した少なくとも1つの正規表現と一致する場合。 •false - それ以外の場合。 |
機能
|
value
|
1つの必須引数、ヘッダー名(文字列)を受け取る関数。指定された名前を持つ最初のヘッダーの値を返します。この名前のヘッダーがない場合は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.機能
このモジュールは次の機能を提供します。
1.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レベルで書き込みます。 1.2.Luaプロシジャの同期管理のための機能:
•sleep(<sec.>)はこのLuaプロシジャインスタンスの実行を指定された秒数で一時停止します。 •async(<Lua function>[, <argument list>])は、指定された関数の非同期開始を起動し、指定された引数リストに転送します。async関数呼び出しはすぐに完了し、戻り値(Futureテーブル)を使用すると、<Lua function>の結果を取得できます(まだ実行が完了していない場合は、完了するまで待機している可能性があります)。 1.3.IPアドレスをIpAddressテーブルとして表示するための機能:
•ip(<address>)は、IpAddressテーブルの形式で<address>文字列として送信される、IPアドレスを指定します。IPv4またはIPv6アドレスのいずれかを使用できます。 1.4.テキストファイルから外部データをアップロードするには:
•load_set(<file path>)は、指定されたテキストファイルのコンテンツからtrue値を含むテーブルを生成し、ファイルから読み取られた文字列はキーとして使用されます。空の文字列と空白文字のみで構成される文字列は無視され、テーブルには含まれません。 •load_array(<file path>)は、指定されたテキストファイルのコンテンツから文字列の配列を生成します。空の文字列と空白文字のみで構成される文字列は無視され、配列には含まれません。 2.テーブル
2.1.Futureテーブルは、async関数を使用して関数を実行した後の保留中の結果を表します。テーブルには以下のフィールドを含みます。
フィールド
|
説明
|
データタイプ
|
wait
|
async関数を使用して開始した関数の結果を返す関数。関数がまだ実行を完了していない場合は、完了を待って結果を返します。waitが呼び出される前に関数が完了した場合、結果はすぐに返されます。開始された関数が失敗した場合、wait呼び出しは同じエラーを生成します。
|
機能
|
無効になったメタメソッド:なし
|
2.2 IpAddressテーブルはIPアドレスを表します。以下のフィールドを含みます。
フィールド
|
説明
|
データタイプ
|
belongs
|
指定したサブネット(IPアドレス範囲)のIpAddressテーブルに保存されている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.例
3.1.非同期的に開始される手順によって生成される、ログへの出力メッセージ:
local dw = require "drweb"
-- この関数は2秒間待機して文字列を返します。
-- 引数として受信されます
function out_msg(message)
dw.sleep(2)
return message
end
-- 「メイン」関数
function intercept(ctx)
-- NOTICEレベルでDr.Web for UNIX Internet Gatewaysログに文字列を出力します
dw.notice("Intercept function started.")
-- out_msg関数の2つのコピーを非同期で起動します
local f1 = dw.async(out_msg, "Hello,")
local f2 = dw.async(out_msg, " world!")
-- out_msg関数のコピーの完了を待機中です
-- out_msgとその結果をログに出力します
-- Dr.Web for UNIX Internet Gateways ログにデバッグレベルで出力します
dw.log("debug", f1.wait() .. f2.wait())
end
|
3.2.指定されたスケジュールに従って定期的に開始する手順を作成する:
local dw = require "drweb"
-- Futureテーブルをfutureグローバル変数で保存し、
-- Luaのガベージコレクターにより
-- 計画されたタスクが破壊されないようにします
future = dw.async(function()
while true do
-- 毎日、次のメッセージがログに表示されます
dw.sleep(60 * 60 * 24)
dw.notice("A brand new day began")
end
end)
|
3.3.文字列のIPアドレスを変更する:
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>引数はオプションで、リクエストを生成するために使用される置換を表します。これらのパラメータはテーブルとして設定されます。このテーブルのキーと値は文字列でなければなりません。この関数は、リクエストの結果である文字列の配列を返します。 •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"
-- 「メイン」関数
function intercept(ctx)
-- NOTICEレベルでDr.Web for UNIX Internet Gatewaysログに文字列を出力します
dw.notice("Intercept function started.")
-- リクエスト結果をDr.Web for UNIX Internet Gatewaysログへ出力
-- 'ldap@users’データソースへ
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
|
|