目次
メーリングリスト用添付ファイル除去フィルタ

(2002/02/15更新) マルチパートメッセージ形式でないUUENCODE形式による添付データを抑止する機能を追加しました。2002年1月27日に発生したコンピュータウィルス「MYPARTY」はUUENCODE形式で添付されるものですが、そのようなタイプのウィルスについても、メーリングリストで拡散するのを防御できるようになりました。
(2002/03/18更新) メールヘッダに指定されたバウンダリー文字列が「"」で囲まれていない場合に添付ファイルの除去が行われないという問題が判明したため、対処しました。お知らせくださったユーザー様に感謝いたします。
(2002/04/26更新) 「"」で囲まれて指定されたバウンダリー文字列にスペースが含まれていた場合にスクリプトがハングアップするというバグを改修しました。

1. 概要
 添付ファイル付きのメールがメーリングリストに流れると、メールのサイズ制限の厳しいサーバに受信を拒絶されて配送事故が起こることがあります。また、送信者の故意でなくても、送信者のパソコンがウィルスに冒されてメーリングリスト宛にウィルス付きメールを投げた場合、ウィルスの被害がいっきに拡大してしまうおそれがあります。
 ここでご紹介するのは、メーリングリストプログラムの前段で添付ファイルの除去を行うGAWKスクリプトです(UNIX系のOSを使ったサーバで動作します)。このスクリプトは、簡易メーリングリスト用GAWKスクリプト、Majordomo、fmlなど任意のメーリングリストプログラムの前処理フィルタとして使うことができます。
 これを使えば、ファイル添付のために一般的に使われているマルチパートメッセージ形式の場合、プレーンテキスト以外のタイプのデータはすべてメールの本体から削除されます。また、UUENCODEという古い方式でメール本文に貼り付けられた符号化文字列は抑止されます。送信者のパソコンがウィルス付きメールを投げた場合、メールは配信されてしまいますが、ウィルスは添付ファイルごと削除されます。
 添付ファイルを流すニーズのないメーリングリストでの安全策としてお奨めします(添付ファイルが必須であるイントラネットの業務用メーリングリストにはお奨めしません)。

2. スクリプトの仕様
ファイル名: a-filter (attachment eliminating filter) ダウンロード
(Microsoft Internet Explorerでは、右クリックして「対象をファイルに保存」を選んでください。)

 メール本体のデータタイプをContent-Typeヘッダに基づいて判別し、プレーンテキストのデータのみを許可します。それ以外のタイプのデータであれば削除して次のような警告メッセージに置き換えます。
** An attachment was eliminated. **
The content specification had been as follows:

Content-Type: application/octet-stream; name="virus.exe"
Content-Disposition: attachment; filename="virus.exe"
Content-Transfer-Encoding: base64
ここで、空白行の後の部分は、元あったデータタイプ指定ヘッダを表示したもので、これで添付ファイル名などの情報がわかります。マルチパートメッセージ形式のメールの場合は、各パートに対してこのチェックを行います。
 通常、添付ファイル付きのメールはマルチパートメッセージ形式になりますが、そうでない添付ファイルのみのメールでも、添付ファイルが除去されます。一方、マルチパートメッセージ形式であっても、プレーンテキストのパートは削除されません。
 また、メールの本文にUUENCODE形式で添付データが書き込まれていた場合は、次の例のように抑止します。
begin 777 virus.exe
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
** UUENCODE data was suppressed. **
end
行頭から「begin」で始まり、次に八進数(0〜7)3桁、次に任意の名前が続く形の行は、UUENCODE形式の符号化の始まりとみなされます。ただし、これは送信者が書き込んだ文字列と偶然一致する可能性があるため、その後3行までは抑止せずに残します。しかし、UUENCODE形式の符号化に使われうる文字だけから成る行が連続したら、4行目以降を抑止し、警告メッセージに置き換えます。抑止は、「end」行の直前まで、またはUUENCODE形式の符号化に使われえない文字を含む行が現れる直前まで継続します。
 メーラーによっては、本文中のUUENCODE形式を解析して添付ファイルとして処理するものがあります。上記のように抑止されたUUENCODEデータは、復元できず、“破損ファイル”になります。したがって、UUENCODE形式で送られてきたコンピュータウィルスは、このフィルタを通れば、その添付ファイルを開いても活動できなくなります。

3. 設定方法
 以下の設定は、rootになって行ってください。

(1) GAWKをインストールする
 もしメーリングリストサーバにまだGAWKが入っていなければ、GAWKをインストールしてください。方法については、「簡易メーリングリスト用GAWKスクリプト」をご覧ください。

(2) スクリプトを設定する
 前記2.でスクリプトをダウンロードしたら、それをサーバに置きます。ディレクトリ位置はどこでもかまいませんが、後記(3)のエイリアス設定では、/var/mlistというディレクトリを作ってあってその下に置くと仮定しています。別の場所に置く場合は、エイリアス設定をそれに合わせてください。
 スクリプトファイルのモードは、以下のようにしてください。
chmod 755 a-filter

(3) エイリアス設定を変更する
 /etc/aliasesファイルでのメーリングリストの別名定義がたとえば
friends:    "|/var/mlist/friends.sh"
であった場合、これを以下のように書き換えます(ほかのメーリングリストプログラムの場合は、「/var/mlist/friends.sh」の部分をそれに読み替えてください)。
friends:    "|/var/mlist/a-filter|/var/mlist/friends.sh"

 /etc/aliasesファイルの編集が終わったら、
newaliases
を実行してください。これでフィルタが適用されます。

ご注意 事前に、自分だけに配信される試験用メーリングリストに適用してフィルタの動作確認をしておくことをお勧めします。

[付録 A] 改造
HTMLメールを許可するには
 受信者のブラウザのセキュリティ設定が甘い場合、悪意のあるHTMLメールがばらまかれると、悪意のあるサイトに自動的にアクセスして何らかの危害が加えられるおそれがあります。そこで、このスクリプトは、プレーンテキストのみを許可し、添付ファイルとともにHTMLテキストも禁止するようにしてあります。
 HTMLメールを流したいというニーズがある場合は、スクリプトを以下のように変更すれば、「plain」という条件がはずされ、HTMLメールが許可されます。

10行目 変更前
      match($0, /\nContent-Type:(\n?[ \t])*(text\/plain|multipart)/)) {
変更後
      match($0, /\nContent-Type:(\n?[ \t])*(text|multipart)/)) {
77行目 変更前
      match($0, /(^|\n)Content-Type:(\n?[ \t])*text\/plain/)) {
変更後
      match($0, /(^|\n)Content-Type:(\n?[ \t])*text/)) {

目次 ホーム