Tips記事
» 2002年08月21日 19時37分 UPDATE

Postfixで特定拡張子の添付ファイルを拒否させたい

[木田佳克,ITmedia]

 セキュリティHow-To「第3回:メールサーバでのウイルススキャン −Postfix編−」で解説しているように、本来はウイルスに対する措置は、スキャンソフトをインストールするのが王道だろう。

 しかし、制限付きであるものの手軽に対処できる方法もある。ここで紹介する方法は、拡張子で判別するため一致する正規なファイルも拒否されてしまう問題はあるものの、拡張子scrやbatなどは、ほとんどの場合ウイルスだと限定できるだろう。

# vi /etc/postfix/main.cf

header_checks = regexp:/etc/postfix/header_checks

※ 上記の行を追加する

 次のような定義ファイルを作成した後には、postfix restartをして設定を有効にさせよう。

# cat /etc/postfix/header_checks

/^X-Mailer:.*PostMaster General/ REJECT
/name=.*\.scr/ REJECT
/name=.*\.exe/ REJECT
/name=\".*\.inf\"/ REJECT
/name=\".*\.scr\"/ REJECT
/name=\".*\.pif\"/ REJECT
/name=\".*\.bat\"/ REJECT
/name=\".*\.dll\"/ REJECT
/name=\".*\.vbs\"/ REJECT
/name=\".*\.reg\"/ REJECT
/^Return-Path:.*<#.*@.*>/ REJECT
/^From:.*<#.*@.*>/ REJECT

 上記の定義内容を解説しておこう。すべての行は正規表現に基づいた記述のため、ここで挙げる設定は一例にしかすぎない。冗長表現の違いにより、他のバリエーションも考えられるからだ。

 まず最初に「/^X-Mailer:」(X-Mailerは、メールソフトなどが書き込む内容)行の定義は、行頭(^)に「X-Mailer」が含まれるヘッダ文字列では、「PostMaster General」と書かれている場合には拒否する(REJECT)ことを意味する。

 「/name=」行は、「name=」が含まれるヘッダ内文字列に任意のファイル名(.*)に加え、「.」(\.)+「scr」で終わる拡張子(.*\)が含まれている場合に拒否(REJECT)を意味する。以下、数行は拡張子のバリエーションを増やしているだけで、定義方法自体に変わりはない。

 「/^Return-Path:」及び「/^From:」行の定義は、通常「Return-Path: 」などとEメールアドレスが記述されている個所に、何も書かれていない場合(つまりスパム目的だと判断される)に拒否(REJECT)を意味する。

 また、次のようにいろいろな拡張子を1行にひとまとめで指定する方法も考えられる。

/name=\".*\.(scr|pif|com|bat|shs|shb|vxd|rm|
chm|vbs|ini|cmd|do|hta|xl|reg|lnk|js|jse)"/ REJECT

 なお、定義ファイルを用意した後には、テキストファイルのheader_checksからheader_checks.dbファイルを生成する必要がある。最後は、次のようにPostfixをリロードしておこう。

# /usr/postfix/bin/postmap /etc/postfix/
header_checks ←上の行と続けて1行で
# /usr/postfix/bin/postfix reload

※ bin/以下のパスは一例だ。自分の環境に合わせる必要がある

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ