オープンソース

一覧へ

4. SaMMA ZIP無害化プラグインの動作

本章では、前章で設定したZIP無害化プラグインの動作を順を追って解説します。

4.1. 動作の流れ

動作の流れは以下の通りです。

  • 無害化モードのSaMMAが設定されたメールサーバに、ZIPファイルが添付されたメールを送信する
  • SaMMAが添付されたZIPファイルを、ZIP無害化コネクタに渡す
  • ZIP無害化コネクタは、ZIPファイルをファイルシステム上に配置し、添付ファイルに無害化WEBインターフェースのURLを記載する
  • SaMMAがメールを送信する
  • メールを受け取ったユーザが、WEBインターフェースに接続する
  • WEBインターフェースで、無害化を実行する
  • 無害化完了後のZIPファイルがユーザ宛に届く

4.2. 前提

なお、本書では以下を前提として解説します

  • 前章で解説した設定が行われているものとします
  • メールの送信者を「sender@ext.example.com」とします
  • メールの受信者を「recipient@int.example.com」とします
  • 添付するZIPファイルの内容物はhtmlファイルとします
  • 添付するZIPファイルは、暗号化されているものとします

4.3. メールの送信から受信まで

まず「sender@ext.example.com」から「recipient@int.example.com」に対して、ZIPファイルを添付したメールを送信します。SaMMAがメールを受け取ると、ZIP無害化コネクタにZIPファイルのデータを渡します。ZIP無害化コネクタは、ZIPファイルを設定項目「ZipSaveDir」のパスに保存します。また宛先のメールアドレスには、無害化WEBインターフェースのURLが添付されたメールが届きます。

処理イメージ

4.3.1. ZIPファイルの保存場所について

ZIPファイルは、設定項目「ZipSaveDir」配下に、ランダムに生成したハッシュ値のディレクトリを作成して配置されます。またZIPファイル名はbase64エンコードして配置されます。配置されているパスは、パッケージに同梱されている「zsctrl」コマンドで確認が可能です。以下はファイル名とZIPファイルの配置パスを確認する例です。

確認例
# /usr/local/zipsanitize/bin/zsctrl list zipinfo filename,original
filename,original
doc.zip,/var/lib/samma/sanitaize/original/e8374746965e03277f44b7e7a3953e361edc630d98ac95abf2db1adeeca389a5/ZG9jLnppcA==
  • doc.zipがファイル名です。
  • /var/lib/..がZIPファイルの配置パスです。

4.3.2. ユーザに送信される添付ファイル

ユーザには、doc.zipという名前の添付ファイルが配送されます。ただし中身はテキストファイルとして参照が可能です。テキストファイルの中身は以下のような内容になります・

添付ファイル例
本メールに添付されていたファイルを参照するためには、以下のURLに接続してください。

添付ファイル名:doc.zip
URL:http://example.com/zipsanitize/?h=e8374746965e03277f44b7e7a3953e361edc630d98ac95abf2db1adeeca389a5

このURLに接続することで、無害化したZIPファイルを受け取ることができます。

4.4. WEBインターフェースの操作

URLに接続すると、以下のインターフェースが表示されます。

WEBインターフェース

入力項目は以下の通りです。

  • 無害化したZIPファイルを送信するメールアドレス(ひとつのみ指定可能)
  • ZIPファイルの展開パスワード

なおZIPファイルが暗号化されていない場合は、以下が表示されます。

WEBインターフェース

入力後、ボタンをクリックすると無害化処理が実行されます。

4.5. 無害化処理

WEBインターフェースから無害化処理が実行されると、無害化コマンドが動作します。無害化コマンドはルールに基づいて、無害化処理を実行します。無害化処理が完了した後、指定されたメールアドレスを送信します。

4.5.1. 無害化処理の並列動作について

同じメールが複数人に送られてくることはよくあります。この場合、本システムを使って複数人が無害化処理を実行する可能性があります。複数人が実行した場合、無害化処理の進行度愛によって、処理の方法が変化します。

4.5.1.1. 未処理の場合

まだZIPファイルが無害化されていない状態です。つまり、最初に無害化処理を実施した場合です。 この場合は、オリジナルのファイルを展開し、内包されるファイルを全てルールに基づいて無害化します。無害化完了後は、無害化を行ったファイルを再度ZIP化し、別のディレクトリに保存します。 またオリジナルのファイルを削除します。 ZIPファイルが暗号化されている場合は、ZIPファイルの展開の可否でパスワードの検査を行ないます。パスワードが適合している場合は、パスワードから不可逆なハッシュ値を生成してデータベースに登録します。また無害化が成功した場合は、同じパスワードで無害化したファイルをZIP化します。

4.5.1.2. 無害化実施中の場合

すでに誰かが無害化を実行し、無害化が現在進行中の場合は、後から無害化をした人のメールアドレス情報を処理キューとして保存して、処理を終了します。ただし、ZIPファイルが暗号化されている場合、パスワードが適合するかを検査してから、処理キューを登録します。

4.5.1.3. メール配信中の場合

無害化が完了し、メールを配信している最中の場合です。このステータスの場合に、無害化を実施したユーザに対しては、そのユーザのみ無害化済みのZIPファイルを送信します。

4.5.1.4. 無害化完了の場合

無害化済のZIPファイルを、無害化を実行したユーザに送信します。

4.6. 無害化後のZIPファイル

無害化後のZIPファイルは、メールで届きます。メールのは、設定項目「MailFrom」の値になります。メールの件名は、設定項目「MailSubject」の値になります。メールは「tmpl/mail.tmpl」ファイルの内容です。

メール例1(※ヘッダーなど実際はエンコードされます)
From: postmaster@example.com
To: recipient@int.example.com
Subject: 無害化を行ないました

ZIPファイルを無害化しました。
ZIPファイルに含まれるファイルが自動的に変換されています。

参照できないファイルがある場合は、管理者にお問い合わせください。
なお本メールに返信を行っても対応が行えません。ご注意ください。

実際に無害化された場合、ファイルの変換前と後では以下のように変化します。

元のファイル:test.html
<html>
<body>
<h1>これはテストです。</h1>
</body>
</html>
無害化後のファイル:test.html.txt
これはテストです。

4.7. 無害化エラー時の動作

無害化の処理でエラーが発生した場合、動作のパターンが複数存在します。

4.7.1. 無害化コマンドに失敗

なんらかの理由で無害化コマンドの実行に失敗した場合、設定項目「SanitizeFailedAction」の値で動きが変化します。 設定値として「pass」が指定されていた場合、無害化できなかったファイルをそのままZIPファイルに含めて、送信します。 「encrypt」が指定されていた場合、ランダムなパスワードでZIPファイルを作成し、送信します。 ランダムパスワードは、ログに出力されます。

この場合には警告メールを送信します。メールは、現在処理中の全てのユーザに送信されます。 メールの件名は、設定項目「WarnMailSubject」の値になります。メールは「tmpl/mailwarn.tmpl」ファイルの内容です。 このファイルは、設定項目「SanitizeFailedAction」の値がpassの場合を想定した文言になっています。 適宜変更してお使いください。

メール例2(※実際はMIMEエンコードされます)
From: postmaster@example.com
To: recipient@int.example.com
Subject: 一部ファイルの無害化に失敗しました。
添付されているZIPファイルには、無害化されていないファイルが含まれています。
注意して展開してください。

無害化に失敗したファイル一覧
/docs/test.html

参照できないファイルがある場合は、管理者にお問い合わせください。
なお本メールに返信を行っても対応が行えません。ご注意ください。

4.7.2. システム継続不可能なエラー

設定ファイルのシンタックスエラーや、データベースへの接続異常など、システムの継続が不可能な場合には、処理を中止します。

この場合にはエラーメールを送信します。メールは、現在処理中の全てのユーザに送信を試みます。 データベースに接続できないなど、キューの情報が取得できない場合は、無害化を実行したユーザのみにエラーメールを送信します。メールの件名は、設定項目「ErrMailSubject」の値になります。メールは「tmpl/mailerror.tmpl」ファイルの内容です。

メール例3(※実際はMIMEエンコードされます)
From: postmaster@example.com
To: recioient@int.example.com

ZIPファイルを無害化に失敗しました。

プロセスキーワード: e8374746965e03277f44b7e7a3953e361edc630d98ac95abf2db1adeeca389a5

管理者にお問い合わせください。
なお本メールに返信を行っても対応が行えません。ご注意ください。

以上が動作の解説です。

一覧へ