オープンソース

一覧へ

8. SaMMAで利用できる高度な機能

ここではSaMMAで利用できる発展的な機能について解説します。

SaMMAで利用できる発展的な機能には以下のものがあります。

8.1. Whitelist機能

特定のIPアドレスまたはネットワークアドレスから届いたメールについて添付ファイルの安全化を行わないようにするための機能です。 ホワイトリストの設定ファイルはsamma.confのWhiteListPathの項目で指定することができます。

  1. ホワイトリストファイルを読み込みます。 (例:/usr/local/etc/samma/whitelist)
  2. ホワイトリストファイルに記述されているIPアドレス(IPv4,IPv6両対応)と送信元アドレスとを比較します。
  3. ファイル内に記述されているアドレスと送信元アドレスが一致した場合、安全化・削除処理を行わずにメールを送信します。
samma.confの設定例3
WhitelistPath=/usr/local/etc/samma/whitelist

ホワイトリスト設定ファイルにはIPアドレスまたはネットワークアドレスを指定します。IPv4とIPv6に対応しています。

whitelistの設定例
# IPv4
192.168.1.1
# IPv4 Network
192.168.30.0/24
# IPv6
2001:268:35d:2::8
# IPv6 Network
2001:268:35d:30::100/64

8.2. 変換不可能ファイル名の強制ファイル名設定機能

添付ファイル名に変換不可能文字が含まれていた場合、ファイル名をsamma.conf のAttachmentFileAliasの項目に設定したファイル名に変換します。

samma.confの設定例4
AttachmentFileAlias=UnknownFileName

上記の設定例の場合、添付ファイル名に変換不可能文字が含まれていた場合に ファイル名を「UnknownFileName」に変換し、安全化を行います。

複数ファイルが添付されていた場合、以下のようにファイル名が変換されます。

  • UnknownFileName
  • UnknownFileName(1)
  • UnknownFileName(2)

8.3. 二重安全化防止機能

ファイルの二重安全化を防ぐための機能です。 この機能を有効にすると、メールヘッダに「X-SaMMA-Enc: YES」が含まれていた 場合、添付ファイルの安全化を行いません。

samma.confの設定例5
[二重安全化防止を行う場合]
LoopCheck=yes

[二重安全化防止を行わない場合]
LoopCheck=no

8.4. BCC自動追加機能

安全化モードのみ利用可能な機能です。

samma.confのAutoBccOptionが「yes」の場合、BCC自動追加機能の処理を行います。

Note

BCC自動追加機能とは、宛先メールアドレスがいずれもある正規表現のパターン にマッチしない場合に、指定したメールアドレスにもメールを送信する機能です。

  1. すべての宛先メールアドレスについての判定を行います。
  2. パターンマッチングの条件には正規表現を使用します(例:.*@designet.co.jp)。
  3. すべて一致しなかった場合、指定したメールアドレスを宛先に追加します。

LDAPのメールアカウントに、autoBccConditionString属性とautoBccMailAddress属性が設定されている場合は、それぞれを条件とメールアドレスとして使用します。 autoBccConditionString属性とautoBccMailAddress属性が設定されていない場合は、 samma.confのDefaultAutoBccConditionStringとDefaultAutoBccMailAddrを、 条件とメールアドレスとして使用します。

なお、autoBccConditionString属性とautoBccMailAddress属性のどちらか一方のみを設定することはできません。

8.5. 安全化の選択機能

安全化モードのみ利用可能な機能です。

この機能を利用することで、メールの宛先ごとに添付ファイルの安全化方式を設定することができるようになります。

Note

宛先ごとに安全化方式を変更する方法は、安全化ポリシーを使った設定で利用できます。LDAPを利用したユーザ個別設定では利用できません。

  1. 内部ドメインDBを読み込みます。
  2. 拡張子DBを読み込みます。
  3. コマンドDBを読み込みます。
  4. 各DBファイルに記述されているアドレスと送信元アドレスが一致した場合、コマンドDBに指定された方式で安全化します。
  5. MIMEタイプファイルを読み込みます。
  6. 安全化されたファイルの拡張子がMIMEタイプファイルに記載されている場合、対応するコンテントタイプを適用します。

8.5.1. 安全化の選択機能を利用するための設定

宛先ごとに安全化方式を設定できるようにするには、以下の設定をする必要があります。

  • samma.confの設定
  • 内部ドメインDBの準備
  • 拡張子DBの準備
  • コマンドDBの準備
  • MIMEタイプファイル(mime.types)の準備

宛先ごとに安全化方式を変更するには、まずはベースとなる方式を決めておく必要があります。 ベースとなる設定に加え、次の設定項目が必須となります。

  • ExtensionDB
    • 拡張子DBの形式と拡張子DBへのパスを指定します。
  • CommandDB
    • コマンドDBの形式とコマンドDBへのパスを指定します。
  • MimeTypeFile
    • 拡張子に合わせてコンテントタイプを変更するためのファイルを指定します。

以下は、オンラインストレージ連携をベースとした場合の設定例です。

samma.confの設定例(安全化モード:宛先ごとに安全化方式を変更する場合)
CommandPort=17777
CommandPass=secret
SyslogFacility=local1
ListenIP=127.0.0.1
ListenPort=20026
EncryptionTmpDir=/tmp
ZipCommand=/usr/local/bin/os_uploader
SenderDB=btree:/usr/local/etc/samma/sender.db
RcptDB=btree:/usr/local/etc/samma/rcpt.db
TemplatePath=/usr/local/etc/samma/samma.tmpl
ErrorMessageTemplatePath=/usr/local/etc/samma/errmsg.tmpl
SendmailCommand=/usr/sbin/sendmail -i
ZipfileName=AttachFile.%Y%m%d.txt
ZipAttachmentContentType=text/plain
MailsaveTmpDir=/tmp
PasswordLength=8
StrCode=SJIS
DefaultEncryption=no
UserPolicy=no
AttachmentFileAlias=UnknownFileName
LoopCheck=no
AllowCharEnvelopeFrom=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`~!@#$%^&*()_+-={}|[]:";'<>?,./
ExtensionDB=btree:/usr/local/etc/samma/extension.db
CommandDB=btree:/usr/local/etc/samma/command.db
MimeTypeFile=/usr/local/etc/samma/mime.types

Note

ベースとなるオンラインストレージ連携の設定については オンラインストレージ連携方式を利用する場合 を参照してください。

8.5.1.1. コマンドDBファイル(command)の作成

宛先メールアドレス又はドメイン毎に安全化方式を設定することができます。 安全化方式はコマンドで指定します。書式は次のとおりです。

[書式]
設定行 = <シンボル><アドレスパート> <コマンド>
  • <シンボルverb>には次のものが指定できます。
    • 無し: <シンボル>を指定しない場合、続く<アドレスパート>を安全化対象とします。
    • # : コメントとして扱われ動作には影響しません。
    • @ : 続く<アドレスパート>をFQDNとして扱い受信者アドレスのドメインと比較します。一致した場合に、その受信者を安全化対象とします。
  • <アドレスパート>には次のものが記述できます。
    • メールアドレス : メールアドレスを設定すると、受信者アドレスとの完全一致で比較を行います。
    • ドメイン : シンボルが'@'の場合には受信者アドレスのドメインと完全一致で比較を行います。
    • シンボルが無い場合はサブドメインとして受信者アドレスのドメインと比較を行います。
    • <シンボル><アドレスパート>は、宛先ユーザ設定ファイルに指定している値と一致している必要があります。
  • <コマンド>には次のものが指定できます。
    • 任意のコマンド : samma.confに設定されている安全化方式(ZipCommand)を、ここで指定したコマンドに変更します。
  • コマンドには以下の文字を指定することができます。
    • 半角英数(A-Za-z0-9)
    • 記号(!#$%&'*+-./:;<=>?@[]^_`{|}~"(),)

SaMMAの入手と展開 の方法でインストールした場合、/usr/local/etc/sammaにコマンドDBファイル(command)を配置します。

コマンドDBファイル(command)の設定例
@designet.co.jp /usr/bin/zip ← 指定したFQDNの安全化方式をzipコマンドを使ってZIP暗号化方式に設定
user@designet.co.jp /usr/local/bin/os_uploader ← 指定したメールアドレスの添付ファイルの安全化方式をオンラインストレージ連携に設定

makeコマンドを実行することでコマンドDB(command.db)が作成されます。 作成されるデータベースの形式は btree です。

$ cd /usr/local/etc/samma
$ make

データベースの形式を変更する場合やデータベース名を任意の名前に変更する場合には、makemap コマンドを使用し、データベースに変換してください。データベース形式は hash または btree が指定できます。

makemapコマンドによるコマンドDB作成例
$ makemap -e btree /usr/local/etc/samma/command.db < command

makemapコマンドの-eオプションは空の値を許可する設定です。

Note

command.dbに設定した宛先メールアドレス又はドメインは、rcpt.dbとextension.dbにも設定が必要です。 rcpt.dbとextension.dbの設定については 安全化ポリシーの設定 を参照してください。

8.5.1.2. MIMEタイプファイル(mime.types)の作成

続いて、MimeTypeFileに指定したMIMEタイプファイル(mime.types)を準備します。 MIMEタイプファイルは、添付ファイル名の拡張子から定義されているMIMEタイプを取得します。

以下はMIMEタイプファイルの設定例です。

MIMEタイプファイルの設定例
# MIMEタイプ        # 拡張子
application/zip     zip zp _zp
text/plain          txt text c h

1行あたり2つの設定項目をスペースまたはタブ区切りで記述します。#で始まる行はコメント行として無視されます。 また、「mailcap」パッケージに含まれるものと同様の形式のファイルとします。(mailcapパッケージは、CentOSでは標準でインストールされていま す。)

  • MIMEタイプ
    • 拡張子ごとに定義されたMIMEタイプです。添付ファイルの拡張子を元にこの項目から

新しいMIMEタイプを取得します。書式チェックは行いません。

  • 拡張子
    • MIMEタイプを定義する拡張子です。添付ファイルと同じ拡張子だった場合、対応するMIMEタイプが適用されます。拡張子を複数指定する場合は、スペース区切りで羅列します。拡張子の存在しない行は、書式上許可されますが無視されます。

上記の場合、添付ファイルの拡張子がzip, zp, _zp のいずれかの場合、MIMEタイプはapplication/zipが適用されます。 また、添付ファイルの拡張子がtxt, text, c, h のいずれかの場合、MIMEタイプはtext/plainが適用されます。

なお、拡張子がMIMEタイプファイルになかった場合は、application/octet-stream が適用されます。

Note

MimeTypeFileの設定がされていない場合は、samma.confに設定されている(ZipAttachmentContentType)が適用されます。

8.6. 削除ファイルリスト添付機能

削除モードのみ利用可能な機能です。

SaMMAの削除モードでは、元の添付ファイルを削除した後に、削除したファイルのファイル名を羅列したテキストファイルを新たに添付します。

作成される削除ファイルリスト名は、samma.confのDeleteListNameの設定に従います。

8.7. 暗号化ZIPファイル無害化機能

無害化モードのみ利用可能な機能です。

この機能を利用することで、安全な送信元から送られてきた場合でも、暗号化ZIPを無害化することが可能になります。

以下は、送信元の安全性に関わらず、暗号化ZIPを無害化し、通常のZIPファイルは無害化しない場合の設定例になります。

samma.confの設定例
HarmlessProc=convert,encrypt,delete
SenderCheck=check-spf,check-senderip,check-senderdomain
HarmlessConf=/usr/local/etc/samma/harmless.conf
SafetySenderHarmlessConf=/usr/local/etc/samma/safetysenderharmless.conf
harmless.confの設定例
# 元のMIMEタイプ        変換後のMIMEタイプ       拡張子     変換コマンド
multipart/alternative  text/plain                .alt      alternative
multipart/mixed        multipart/mixed           -         multipart
text/html              text/plain                .txt      /usr/bin/python-html2text
application/zip        application/zip           -         !/usr/bin/check_enc_zip.sh
safetysenderharmless.confの設定例
# 元のMIMEタイプ        変換後のMIMEタイプ       拡張子     変換コマンド
application/zip        application/zip           -         !/usr/bin/check_enc_zip.sh
*                      -                         -         @none

上記の例は、添付ファイルがzipファイルの場合に、変換コマンドを呼び出す設定例です。 変換コマンドの先頭に!をつけることで、ログを抑制することができます。

check_enc_zip.shでは、zipファイルが暗号化zipかどうかを判定しています。 暗号化zipの場合は、FALSE(1)を返すことで、無害化を行うようにしています。

/usr/bin/check_enc_zip.shの設定例
#!/bin/bash

tmp=/tmp/check_enc_zip.sh.tmp.`date '+%Y%m%d&%H%M%S'`.$$
cat > $tmp
unzip -t -P '' $tmp > /dev/null 2>&1
if [ $? -ne 0 ]
then
rm -f $tmp
exit 1
fi

cat $tmp
rm -f $tmp
exit 0
一覧へ