きまぐれほげほげひろば

s25rtarpitgreylist

このプログラムは、qmailのsmtpプログラム(qmail-smtpd)を実行される直前にこのプログラムを実行して スパム送信元らしいホストの接続を拒否する、qmail用のホスト選択式スパム対策ソフトです。

このプログラムは拒否するホストの判定にgreylistingというメール再送を要求するアルゴリズムを使用しています。(スパマーは早く大量にメールを送信したいので再送信を嫌がり、再送信しません。)

しかし、このgreylistというアルゴリズムだけでは副作用が大きすぎますので、 S25R(選択的SMTP拒否)というアルゴリズムを使用して、スパマーがよく利用する 動的IPアドレスらしいホストのみをgreylistingの対象とするようにしています。

また、tarpit(SMTP接続時に意図的に応答を遅らせる)を実施することにより、 スパム送信元ホストの接続を拒否します。(スパマーは早く大量にメールを送信したいので、 応答遅延を嫌がり自ら切断します)

このプログラムはperlスクリプトで実装されています。qmailやその関連ソフトウェアにパッチを適用する方式ではありませんので簡単に導入できます。

このプログラムは佐藤 潔 様の考案された「taRgrey - S25R + tarpitting + greylisting」(Postfix用)のアルゴリズムを参考に、同じく佐藤様の「Qgrey - S25R + qgreylist パッチ」(Qmail用)を参考に、ホスト名ベースのホワイトリスト・ブラックリスト、tarpitting(応答遅延)を追加する形で作成しています。

佐藤様に感謝です。 またS25Rを考案された浅見様にも感謝です。またバグ報告、新機能の提案を提供くださいました皆様にも感謝です。

注意点
  • 説明文が英語からの直訳っぽいのは、機械翻訳を使用してできるだけ一発で英語に翻訳できるようにしたいからです。お許しください。
  • 私にはネーミングセンスがありませんので、プログラム名や変数名が異常に長いです。お許しください。

長い説明を読まずに、早くダウンロードしたい場合はこちら

  • IPアドレスベースのホワイトリスト(正規表現での指定可)
  • ホスト名ベースのホワイトリスト(正規表現での指定可)
  • IPアドレスベースのブラックリスト(正規表現での指定可)
  • ホスト名ベースのブラックリスト(正規表現での指定可)
  • HELOホスト名ベースのブラックリスト(正規表現での指定可)
  • HELOホスト名の簡易検査(FQDNチェック、接続ホスト名とのドメイン簡易チェック)
  • S25R (選択的SMTP拒否)
  • tarpit(応答遅延)
  • greylisting
  • greylistingを回避するための無効なSMTPコマンド発行および即切断対策。 (ver1.2追加)
  • DNSBLを利用した接続拒否 (ver1.5追加)
  • HELOホスト名またはMail FromメールアドレスドメインのSPFチェック (ver1.6追加)

機能ごとに、その機能を有効にするか無効にするかを切り替えるスイッチがついています。

ホワイトリスト

ここに定義したホストは無条件でqmail-smtpdに引き渡します(拒否しません)。 IPアドレスベースのものとホスト名ベースのものがあります。対象の指定には正規表現を使用することができます。

プロバイダから割り当てられたホスト名を使用する正規のメールサーバーや   S25Rの条件に該当してしまう正規のメールサーバーをこのホワイトリストに登録することにより   greylistの罠に嵌るのを防ぎます。

ホワイトリストのメンテナンスについてはこちらをご参照ください。
「s25rtarpitgreylist のホワイトリスト・ブラックリストのメンテナンスについて」

ブラックリスト

ここに定義したホストは無条件で接続を切断し拒否をします。正規のメールサーバーのような振舞いをするスパム送信元ホスト等を定義します。 IPアドレスベースのものとホスト名ベースのものがあります。対象の指定には正規表現を使用することができます。

  スパム送信元ホストをブラックリストに登録することにより、初回接続から2分から1日の間隔(greylistのデフォルト設定)で再送信してくるホストのメール送信を除外できます。(手動登録)

tarpit(応答遅延)

SMTP接続時に意図的にSMTPグリーティングの応答を遅らせます。スパムを送信するホストはメールを大量送信するため応答の遅延を嫌がり切断します。

  • 2分から1日の間隔(qgreylistのデフォルト設定)で送信してくるスパム送信元ホストをSMTP応答遅延で除外できる可能性があります。(blacklist管理の手間が減るかもしれません)
  • 再送信できない正当なsmtpサーバーがある場合、応答遅延を待つことができればwhitelistに追加しなくても救済できる可能性があります。(whitelist管理の手間が減るかもしれません・この動作はデフォルトではありません)

S25R(選択的SMTP拒否)

スパムを送信するホストは動的IPアドレスという前提で 動的IPアドレスらしいホスト名を持つホストと持たないホストを振り分けます。 動的IPアドレスらしいホスト名を持たないホストは接続が許可されます。 動的IPアドレスらしいホスト名を持つホスト(逆引きできないホストも含む)は 後の処理(ここではgreylist・tarpit)に任されます。

S25Rの詳細についてはこちら

副作用の大きいgreylist処理の対象を減らします。

DNSBLを利用した接続拒否 (ver1.5.0追加)

DNSBLに登録されているホストからの接続を拒否します。

DNSBLは、スパムを送信するIPアドレスを集めた、ボランティアや企業などで運営されるデータベースです。

tarpitやgreylistingを回避してくるspam送信ホストに有効です。

greylisting

メール送信ホストの初回接続時にqmailの代わりにこのプログラムが応答し、そのホストに対して再送要求させます(ダミー応答)。 その後、再送してきたホストの接続を許可してqmail-smtpに連携します。 但し、すぐに再送してきたホストは拒否します。 (接続情報(IPアドレス、接続時間)をgreylistで管理します)

greylistの詳細についてはこちら
このプラグラムの実装では、以下の点でオリジナルのgreylistと異なる挙動をします。

  • このプログラムでは宛先ホワイトリストを実装していません。
  • このプログラムでは、一度でも再送に失敗(すぐに再送してきた)したことがあると接続を拒否する機能を実装しています。(スパム送信ホストが短い間隔で長時間何度も再送信を試みた場合、初回接続からの再送不許可時間を越えて再送信を繰り返したときに再送が許可されてしまうという問題に対処するため)

スパマーは他のホストにメールを送信することを優先するので再送しないことが多いです。よって、これでスパムを防ぐことができるかもしれません。

greylistingを回避するための無効なSMTPコマンド発行および即切断対策 (ver1.2追加)

SMTPの仕様外のコマンドを要求して様子を見るホストの接続を拒否し、greylistへの登録をキャンセルします。 そのことにより、このホストからの接続を拒否します。

また、HELOでホスト名を名乗らずにすぐにQUITを発行するホストと、HELOの直後にすぐQUITを発行するホストの接続を拒否し、greylistへの登録をキャンセルします。

HELOの簡易検査

接続ホストがHELOコマンドで名乗るホスト名を調べます。greylistingの ダミー応答中のみ実施します。(接続ホストの情報がgreylistに 登録されるときのみ実施。greylistによる接続許可が承認されたホストに 対しては、この機能は効きません。)

HELOホスト名ブラックリスト

ここに定義したHELOホスト名を名乗ったホストの接続を切断して拒否します。 さらにそのホストのgreylistの登録をキャンセル(削除)します。 ホスト名の登録に正規表現を使用することができます。
また、同時にIPアドレスを正規表現で指定することで拒否するホストを限定することもできます(ver1.1追加)。

スパム送信元ホストが特徴あるHELOホスト名を名乗る場合に有効です。

HELOホスト名ホワイトリスト(ver1.4.3追加)

ここに定義したHELOホスト名を名乗ったホストの接続を許可します。 ホスト名の登録に正規表現を使用することができます。
また、同時にIPアドレスを正規表現で指定することで許可するホストを限定することもできます。

名前解決できない冗長化された正規のメールサーバが決まったHELOを名乗る場合などに有効です。

FQDNチェック

HELOコマンドで名乗るホスト名がFQDNになっているかをチェックします。(実装は上記の「HELOホスト名ブラックリスト」の条件で行ってます) FQDNでない場合、ホストの接続を切断して拒否し、さらにgreylistの登録をキャンセル(削除)します。

正しくないHELOホスト名を名乗るホストに有効です。(スパム送信ホストはFQDNでないHELOホスト名を名乗ることがあります。「localhost」やWindowsのコンピュータ名など。)

接続ホスト名とのドメイン簡易チェック

HELOコマンドで名乗るホスト名のドメインと、実際の逆引きホスト名のドメインが一致するかチェックします。 一致しない場合、ホストとの接続を切断して拒否し、greylistの登録をキャンセル(削除)します。

正しくないHELOホスト名を名乗るホストに有効です。

接続IPアドレスチェック(ver1.1追加)

HELOコマンドで名乗ったホスト名がIPアドレスだったときに、接続元IPアドレスと比較して異なれば、そのホストとの接続を切断して拒否し、greylistの登録をキャンセル(削除)します。

正しくないHELOホスト名を名乗るホストに有効です。

HELOホスト名またはMail FromメールアドレスドメインのSPFチェック (ver1.6追加)

接続ホストがHELOコマンドで名乗るホスト名と接続ホストのIPアドレスを、SPFレコードに登録されているかチェックします。または接続ホストがMAIL FROMコマンドでメールアドレスのドメイン部分と接続ホストのIPアドレスを、SPFレコードに登録されているかチェックします。 接続ホストが名乗るドメイン所属DNSサーバのSPFレコードにIPアドレスが登録されていない場合は接続を切断して拒否し、greylistの登録をキャンセル(削除)します。

正しくないHELOホスト名を名乗るホスト、または正しくないMail Fromを名乗るメールに有効です。またDNSのAレコードやMXレコードに登録されていない送信専用メールサーバを一時的に救うことができます。(SPFレコードに登録されていれば)

この機能はMail::SPFモジュールを使用します。このモジュールはperlの標準セットに含まれていませんので、この機能を使用する場合はCPANからMail::SPFモジュールをインストールしてください。

ごちゃごちゃ書くより処理順を示したほうがわかりやすいと思うので処理順(ロジック)を示します。

メインロジック

機能処理内容その他
1greylistgreylistからしばらくアクセスがないホストの記録を削除
2接続ホストがリレークライアント→許可
3qmail-vida用SMTP-AUTH回避設定が有効、かつ環境変数USERが設定されている→許可ver1.3.0追加
4接続ホストがホスト名ベースホワイトリストに登録されている→許可
5接続ホストがIPアドレスベースホワイトリストに登録されている→許可
6S25R接続ホストのホスト名がS25Rの条件に該当しない→許可
7接続ホストがホスト名ベースブラックリストに登録されている→再送要求(拒否)
8接続ホストがIPアドレスベースブラックリストに登録されている→再送要求(拒否)
9接続ホストがDNSBLに登録されている→再送要求(拒否) (この機能はデフォルト無効です)
10greylist接続ホストがgreylistに登録されていない→10-1へ 登録されている→11へ
10-1tarpittingtarpitting(指定秒数待つ)
 (オプションで待てたら→許可 も可)
 (待てない→接続ホストが自ら切断)
10-2greylist接続ホストをgreylistに登録
10-3greylistSMTPダミー応答
10-4-1接続ホストがSMTP-AUTHで認証問い合わせ。→接続ホストのgreylist登録時間を古い時間に修正。&再送要求(拒否)(再試行により手順11及びに手順12に該当せず許可になる)ver1.3.0追加
10-4-2接続ホストがHELOで名のったホスト名がホワイトリストに登録されている→接続ホストのgreylist登録時間を古い時間に修正。&再送要求(拒否)(再試行により手順11に該当せず許可になる)ver1.4.3追加
10-4-3接続ホストがHELOで名のったホスト名がブラックリストに登録されている。またはHELOホスト名がFQDNでない。→qreylistから登録を削除&再送要求(拒否)
10-4-4original接続ホストがHELOで名のったホスト名がIPアドレスで、かつ実際の接続元IPアドレスと異なる。→qreylistから登録を削除&再送要求(拒否)ver1.1追加
10-4-5接続ホストがHELOで名のったホスト名のドメイン部分が逆引きホスト名のドメイン部分と異なる→qreylistから登録を削除&再送要求(拒否)
10-4-6接続ホストがMAIL FROMで名のったメールアドレスのドメイン部分とIPアドレスの組み合わせが、そのドメインのDNSのSPFレコードと一致する→接続ホストのgreylist登録時間を古い時間に修正。&再送要求(拒否)(再試行により手順11及びに手順12に該当せず許可になる)ver1.6.0追加
10-4-7originalSMTPコマンドの発行数が一定以下→qreylistから登録を削除&再送要求(拒否)ver1.2追加
10-4-8originalSMTPで未定義のコマンドの発行数が一定以上→qreylistから登録を削除&再送要求(拒否)ver1.2追加
10-5greylist→再送要求(拒否)
11greylist接続ホストが指定した回数以上、「初回接続から近すぎる」(手順11)になっている →再送要求(拒否)
12greylist接続ホストの接続が初回接続から近すぎる →再送要求(拒否)
13greylist接続ホストのgreylistのアクセス時間を更新
14greylist→許可
  • qmail
  • perl 5.6 以上 (ver1.5.0以下は perl 5.004以上)
  • perlモジュール Mail::SPF ( 使用しない場合、またはver1.5.0以下は不要 )

このプログラムは単一のperlスクリプトですので、簡単にインストールできます。

以下にインストール手順を示します。

  1. ここからアーカイブをダウンロード
  2. ダウンロードしたアーカイブファイルを展開
  3. # tar zxvf s25rtarpitgreylist_1.6.0.tar.gz
  4. 展開したディレクトリに移動
  5. # cd s25rtarpitgreylist_1.6.0
  6. 設定値を変更します。(変更しなくても動作可能です。チューニングする場合のみ変更してください)
  7. # vi s25rtarpitgreylist.pl

    または

    # vi s25rtarpitgreylist.ini
  8. 初めてインストールするときは6.へ。手動でインストールする場合またはアップデートする場合は7.へ
  9. セットアップスクリプトを実行。 (スクリプトファイルが/var/qmai/bin/に、各リストファイルが/var/qmai/s25rtarpitgreylist/にコピーされます)
  10. # ./setup.sh

    8.へ

  11. 手動でインストールする場合またはアップデートする場合は以下の手順を実行してください。不要な箇所は読み飛ばしてください。
  12. アップデートする場合はs25rtarpitgreylist.plのコピーのみです。s25rtarpitgreylist.iniを編集した場合はこのファイルもコピーしてください。

    # cp s25rtarpitgreylist.pl /var/qmail/bin # chmod 755 /var/qmail/bin/s25rtarpitgreylist.pl # mkdir /var/qmail/s25rtarpitgreylist # mkdir /var/qmail/s25rtarpitgreylist/tmp # cp s25rlist_hostname /var/qmail/s25rtarpitgreylist # cp whitelist_ipaddr /var/qmail/s25rtarpitgreylist # cp whitelist_hostname /var/qmail/s25rtarpitgreylist # cp blacklist_ipaddr /var/qmail/s25rtarpitgreylist # cp blacklist_hostname /var/qmail/s25rtarpitgreylist # cp blacklist_helohost /var/qmail/s25rtarpitgreylist # cp greylist /var/qmail/s25rtarpitgreylist # cp dnsbllist /var/qmail/s25rtarpitgreylist # cp s25rtarpitgreylist.ini /var/qmail/s25rtarpitgreylist # touch /var/qmail/s25rtarpitgreylist/whitelist # touch /var/qmail/s25rtarpitgreylist/blacklist # touch /var/qmail/s25rtarpitgreylist/lastdeletetime # chown -R qmaild /var/qmail/s25rtarpitgreylist

    権限の設定は手抜きしてます。

    8.へ

  13. 設定値のチェックを行います。実行引数なしでs25rtarpitgreylist.plを実行します。出力値が全て[ OK ]であれば合格です。
  14. # /var/qmail/bin/s25rtarpitgreylist.pl ==== run check mode ==== Dir_Data:/var/qmail/s25rtarpitgreylist [ OK ] Dir_Tmp:/var/qmail/s25rtarpitgreylist/tmp [ OK ] Path_Whitelist:/var/qmail/s25rtarpitgreylist/whitelist [ OK ] Path_Whitelist_Ipaddr:/var/qmail/s25rtarpitgreylist/whitelist_ipaddr [ OK ] Path_Whitelist_Hostname:/var/qmail/s25rtarpitgreylist/whitelist_hostname [ OK ] Path_Blacklist:/var/qmail/s25rtarpitgreylist/blacklist [ OK ] Path_Blacklist_Ipaddr:/var/qmail/s25rtarpitgreylist/blacklist_ipaddr [ OK ] Path_Blacklist_Hostname:/var/qmail/s25rtarpitgreylist/blacklist_hostname [ OK ] Path_Greylist:/var/qmail/s25rtarpitgreylist/greylist [ OK ] Path_S25rlist_Hostname:/var/qmail/s25rtarpitgreylist/s25rlist_hostname [ OK ] Path_Blacklist_Helohost:/var/qmail/s25rtarpitgreylist/blacklist_helohost [ OK ] ---- check patternfile ----
  15. 起動スクリプト修正(qmail-smtpdの前に(qmail-vidaの場合はqmail-smtpupの前に)このプログラムを実行するようにする+接続ホストを名前解決できるようにする)
  16. # vi /etc/init.d/qmail :(中略) # qmail smtpd start /usr/local/bin/tcpserver -vhR -u ${qmaild_uid} -g ${nofiles_gid} \ -x /home/vpopmail/etc/tcp.smtp.cdb 0 smtp \ /var/qmail/bin/s25rtarpitgreylist.pl \ /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd & :(中略)
    • 名前解決できないと全ての接続がgreylistingされてしまいます
    • s25rtarpitgreylist.plはqmail-smtpdの直前(s25rtarpitgreylist.plの引数でqmail-smtpdを起動するようにする)(qmail-vidaの場合はqmail-smtpupの直前に(s25rtarpitgreylist.plの引数でqmail-smtpupを起動するようにする))

    qmail-vidaの場合は以下に示すようなこともできます。但し作者はqmail-vidaの環境を持ってないので”ノーテスト”です。

    # vi /etc/init.d/qmail :(中略) # qmail smtpd start /usr/local/bin/tcpserver -vhR -u ${qmaild_uid} -g ${nofiles_gid} \ -x /hoge/hoge/etc/tcp.smtp.cdb 0 smtp \ qmail-smtpup $MYSVNAME \ checkpassword \ /var/qmail/bin/s25rtarpitgreylist.pl \ /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd & :(中略)

    先に、qmail-smtpupとcheckpasswordにHELOおよびSMTP-AUTHを処理させてからs25rtarpitgreylist.plに渡すことにより、SMTP-AUTHで許可されたユーザ(接続)は、許可されたリレークライアント同様に、無条件で接続を許可するようにできます。但し、s25rtarpitgreylistによるHELOのチェックは行われません。

    この設置方法を採用する場合、以下の設定を必ず行ってください。

    • ${Mode_Escape_SmtpAuth_ForVida} = 1 にしてください。(SMTP-AUTH許可接続が無条件で許可されるようになります)
    • ${Threshold_Count_SmtpCommand} = 0 にしてください。さもないと、HELOコマンドはカウントされないので、正しいSMTPコマンド発行数でも拒否されてしまいます。

SPFチェック機能を使用する場合はCPANからMail::SPFモジュールをインストールしてください。

Mail::SPFモジュールの一般的なインストール手順は以下です。途中で何か聞かれたら、依存するモジュールのインストールが必要とのことですので「yes」で答えてください。

# perl -MCPAN -e shell cpan> install Mail::SPF :(中略) ---- Unsatisfied dependencies detected during [J/JM/JMEHNLE/mail-spf/Mail-SPF-v2.007.tar.gz] ----- Error Net::DNS NetAddr::IP version Net::DNS::Resolver::Programmable Shall I follow them and prepend them to the queue of modules we are processing right now? [yes] yes :(中略) cpan> quit

ファイルが多くなってきましたので、ディレクトリツリーでファイルの説明です。

/var/qmail/ + bin/ | + s25rtarpitgreylist.pl 実行スクリプト(本体) + s25rtarpitgreylist/ + s25rlist_hostname S25Rリスト + whitelist IPアドレスベースのホワイトリスト + whitelist_ipaddr IPアドレスベースのホワイトリスト(正規表現指定) + whitelist_hostname ホスト名ベースのホワイトリスト(正規表現指定) + blacklist IPアドレスベースのブラックリスト + blacklist_ipaddr IPアドレスベースのブラックリスト(正規表現指定) + blacklist_hostname ホスト名ベースのブラックリスト(正規表現指定) + blacklist_helohost HELOホストのブラックリスト(正規表現指定) + greylist greylist (このファイルは編集しないでください) + dnsbllist 利用するdnsblのホスト名のリスト + s25rtarpitgreylist.ini 実行スクリプトの動作設定ファイル(オプション)

s25rtarpitgreylist/s25rtarpitgreylist.iniについては以下を参照。

設定項目がたくさんありますが、qmailのインストール先をデフォルトから変更していない場合は、これらの設定項目の値を初期値から変更しなくても正しく動作します。

設定はスクリプト(bin/s25rtarpitgreylist.pl)で行います。しかし、s25rtarpitgreylist/s25rtarpitgreylist.iniが存在しているときは、s25rtarpitgreylist.iniでの設定が優先されます。

Dir_Data

S25Rリストやホワイトリスト、ブラックリスト、greylistのファイルを格納するディレクトリのパスを指定します。qmaildユーザが読み書きできる必要があります。

Dir_Qmailcontrol

qmailのcontrol/ディレクトリのパスを指定します。

Dir_Tmp

このプログラムが一時的に使用するディレクトリのパスを指定します。qmaildユーザが読み書きできる必要があります。

Enable_Flock (Ver1.2.3追加)

flock関数を使用するかどうかを設定します。

0または1の数値を指定します。

0
flock関数を使用しない。ファイルのロックをロックファイル形式で行います。perlのバージョンが5.004以下の場合は必ずこちらを選択してください。
1
flock関数を使用する(デフォルト)。ファイルのロックをflock関数を使用して行います。こちらの方が動作の確実性が高いです。

Mode_PrintMsg_AccurateReason (Ver1.3.0追加)

greylistで拒否したときに正しい理由を返すかどうかを設定します。

0または1の数値を指定します。

0
正しい理由を表示しない(デフォルト)
1
正しい理由を表示する。正しい理由を表示すると接続してきたユーザが驚くかもしれません。

Enable_Eval (Ver1.3.1追加)

evalを使用するかを指定します。

セキュリティー的な問題で使用したくない人もいると思いますので、パラメータで使用するかしないか選択できるようにしています。

0または1の数値を指定します。

0
evalを使用しない。この場合、設定の内容により致命的エラーが発生してプログラムが停止する場合があります。
1
evalを使用する。(デフォルト)

Mode_Log_Output_Level

ログ出力のレベル(頻度)を設定します。

LOG_LV_DEBUG
デバッグログを出力します。(動作情報を出力します)
LOG_LV_INFO
情報ログを出力します。(エラーと拒否した結果のみ出力します)
Path_Whitelist

IPアドレスベースのホワイトリストファイルのパスを指定します。

ファイルの内容は、許可したいホストのIPアドレスを指定したリスト(改行区切り)です。

Path_Whitelist_Ipaddr (Ver1.4.0 追加)

IPアドレスベースのホワイトリストファイルのパスを指定します。

ファイルの内容は、許可したいホストのIPアドレスを指定したリスト(改行区切り)です。IPアドレスの指定にperlの正規表現が使用できます。

Path_Whitelist_Hostname

ホスト名ベースのホワイトリストファイルのパスを指定します。

ファイルの内容は許可したいホストのホスト名のリスト(改行区切り)です。ホスト名の指定にperlの正規表現が使用できます。書式は異なりますがこちらのホワイトリストもそのまま使用できます(このプログラムにて余計な情報は読み取らないようにしています)

Mode_Blacklist

ブラックリストの機能の有効/無効、および動作方法を設定します。

0から2までの数値を指定します。

0
無効
1
有効。(デフォルト)。S25Rの後にブラックリストのマッチングを行います。このモードの場合、拒否したいホスト名がS25Rリストにマッチしない場合、S25Rリストとブラックリスト両方に拒否したいホスト名を登録する必要があります。しかし、とある国別ドメインの動的IPアドレスらしいホスト全部を拒否する、ということができるので使い勝手は良いと思います。
2
有効。S25Rの前にブラックリストのマッチングを行います。

Path_Blacklist

IPアドレスベースのブラックリストファイルのパスを指定します。

ファイルの内容は、接続を拒否したいホストのIPアドレスを指定したリスト(改行区切り)です。

Path_Blacklist_Ipaddr (Ver1.4.0 追加)

IPアドレスベースのブラックリストファイルのパスを指定します。

ファイルの内容は接続を拒否したいホストのIPアドレスを指定したリスト(改行区切り)です。IPアドレスの指定にperlの正規表現が使用できます。

Path_Blacklist_Hostname

ホスト名ベースのブラックリストファイルのパスを指定します。

ファイルの内容は接続を拒否したいホストのホスト名のリスト(改行区切り)です。ホスト名の指定にperlの正規表現が使用できます。

Mode_Greylist

greylisting機能の有効/無効を設定します。

0,1の値を指定します。

0
greylistingを無効にします。
1
greylistingを有効にします。(デフォルト)

Path_Greylist

greylistファイルのパスを指定します。

ファイルの内容はgreylistでアクセス制御するホストの各種情報(改行区切り)のリストです。
レコードの書式は
「IPアドレス 登録日(初回アクセス)の日付 登録日(初回アクセス)の時刻 最終アクセスの日付 最終アクセスの時刻 初回接続に近すぎて失敗した数」
です。
このファイルは、このプログラムによって自動的に更新されます。

Path_Lock_Greylist

greylistの編集中を示すロックファイルのパスを指定します。

このファイルを配置するディレクトリはqmaildユーザが読み書き削除できる権限を必要とします。

Path_Tmp_Greylist

greylistの自動更新中に使用する一時ファイルのパスを指定します。

このファイルを配置するディレクトリはqmaildユーザが読み書き削除できる権限を必要とします。

Path_Lastdeletetime_Greylist

greylistに登録されている期限切れしたホストの情報を削除した日時を管理するファイルのパスを指定します。

このファイルの最終編集時間で日時を管理しています。 このファイルを配置するディレクトリはqmaildユーザが読み書き削除できる権限を必要とします。

Sec_Checkinterval_Greylist

greylistに登録されている期限切れしたホストの情報を削除するための検索の間隔(秒数)を指定します。

Sec_Suppression_Connect

再送要求後の、メールの受信を許可する、初回接続からの秒数を指定します。

例えば、Sec_Suppression_Connect=120 のとき、
2008-03-20 22:00:00に初めて接続したホストを再送要求したとします。
このとき、再送にあたる2回目の接続が
2008-03-20 22:01:30であれば、初回接続より120秒経過していないので再び拒否し再送要求します。
2008-03-20 22:02:10であれば、初回接続より120秒経過しているのでそのホストの接続を許可します。

Sec_Validity_Goodhost

greylistに登録されているホストのうち、接続が許可されているホスト(初回接続日時!=アクセス日時)の情報の有効期限(秒数)を指定します。

有効期限が切れたホストの情報はgreylistから削除されます。

Sec_Validity_Nogoodhost

greylistに登録されているホストのうち、接続が許可されていないホスト(初回接続日時=アクセス日時、再送待ち状態)の情報の有効期限(秒数)を指定します。

有効期限が切れたホストの情報はgreylistから削除されます。この値をSec_Suppression_Connectより小さくしないでください。

Msg_Connection

メール送信ホストから接続された時のHELOコマンドで答えるメッセージを設定します。この値が空のままであるとqmailのcontrolディレクトリにあるsmtpgreetingまたはmeファイルの内容が設定されます。

このHELOメッセージには使用しているプログラムの名前やバージョン情報が表示されます。しかし、このプログラムの場合、このプログラムの名前を表示すると、このプログラムに対する対策を講じられる可能性があるため、これらの情報を表示しないほうがよいでしょう。

Sec_Smtptimeout

SMTP接続のタイムアウト秒数を設定します。

Sec_Smtpcmdwait

このプログラムによるSMTPダミー応答中の、SMTPの各コマンドごとの応答落ち時間(秒数)を指定します。

スパム送信ホストは遅延を嫌がるので自ら切断するかもしれません。

Threshold_Count_Comesoon

接続を拒否する初回接続に近すぎて拒否した数の閾値を指定します。

初回接続に近すぎて拒否した数がこの値を超えると、初回接続より指定の時間を経過しても接続を拒否します。短い間隔で何度も再送してきて最終的にSec_Suppression_Connectの設定秒数を超えてしまう場合に有効です。

Mode_Ipfile_Thirdoctet

接続ホストをIPアドレスの第3オクテットまで使用して登録情報とマッチングするかどうかを設定します。(第4オクテットはマッチングに使用しない)

0
IPアドレスの全てのオクテットを使用して登録情報とマッチングを行います(デフォルト)
1
IPアドレスの第3オクテットまで使用して登録情報とマッチングを行います。

greylistに登録されている情報が非常に多く動作が鈍くなっている場合に有効です。

Threshold_Count_SmtpCommand (ver1.2追加)

greylistへの登録を拒否する、接続ホストのSMTPコマンド発行数を指定します。

接続ホストが発行するSMTPコマンドがこの設定値より少ない時、接続ホストのgreylistへの登録を、このプログラムはキャンセル(削除)します。

0以上の整数を指定します。
0
この機能を無効にします。
1
QUITだけを発行してくるホストに有効な設定値です。
2
QUITだけと、HELO -> QUIT のようなSMTPコマンドの発行をしてくるホストに有効な設定値です。(デフォルト値)
3以上
お勧めしません。

Threshold_Count_UnknownSmtpCmd (ver1.2追加)

greylistへの登録を拒否する、接続ホストの規格外SMTPコマンド発行数を指定します。

接続ホストが発行する規格外のSMTPコマンドがこの設定値より多い時、接続ホストのgreylistへの登録を、このプログラムはキャンセル(削除)します。

0以上の整数を指定します。
0
この機能を無効にします。(デフォルト)
1以上
デタラメなSMTPコマンドを発行してくるホストに有効な設定値です。

Mode_SmtpTimeout_Deny (ver1.2追加)

SMTP接続がタイムアウトした接続ホストのgreylistへの登録を拒否する機能の有効と無効の切り替えを指定します。

通常のgreylistのアルゴリズムを接続ホストが回避する場合があるので、接続ホストのSMTP接続がタイムアウトになった時点でgreylistへの登録を拒否します。

0,1を指定します。
0
この機能を無効にします。(デフォルト)
1
この機能を有効にします。

Mode_S25rlist

S25Rによる動的IPアドレスらしいホストの選別をする機能を有効にするか無効にするかを設定します。

0,1の値を指定します。

0
S25Rによる動的IPアドレスらしいホストの選別をする機能を無効にします
1
S25Rによる動的IPアドレスらしいホストの選別をする機能を有効にします(デフォルト)
この機能を有効にしないと、全てのホストに対してgreylistingすることになります。

Path_S25rlist_Hostname

S25Rリストのファイルのパスを指定します。

ファイルの内容は動的IPアドレスらしいホスト名のリスト(改行区切り)です。ホスト名の指定にperlの正規表現を使用することができます。 Mode_Blacklistの値を「1」(デフォルト)にしている場合は、ブラックリストの内容も追加で定義してください。 書式は異なりますがこちらの「/etc/postfix/rejectionsファイルの中身」で紹介されているリストも使用することができます。(このプログラムにて余計な部分を読みこまないようにしています)

Mode_Tarpit

tarpit(応答遅延)の機能の有効/無効、および動作方法を設定します。

0から2までの数値を指定します。

0
無効
1
有効(デフォルト)。greylistに登録されていないホストに対してtarpitを実施します。
2
有効。全てのホスト(ホワイトリスト・ブラックリストにマッチしない、S25Rリストにマッチする)に対して常にtarpitを実施します。

Sec_Tarpit

tarpit(応答遅延)する秒数を指定します。

ここで指定した秒数だけ接続直後のSMTPグリーティングの応答を遅らせます。デフォルトでは65秒ですが125秒ぐらいでも実用範囲だと思います(副作用には注意してください)。

Mode_Accept_Tarpitwaithost

tarpit(応答遅延)を待つことができたホストを許可するかどうかを設定します。

0から1までの数値を指定します。

0
許可しません(デフォルト)。後のgreylistingに許可の判断を委ねます。
1
許可します。
greylistingしたくない場合は1を設定してください。

Mode_Badhelohost

接続ホストがHELOで名乗るホスト名のブラックリストの機能の有効/無効を設定します。

0から1までの数値を指定します。

0
無効
1
有効(デフォルト)

Path_Blacklist_Helohost

HELOで名乗るホスト名ベースのブラックリストファイルのパスを指定します。

ファイルの内容は、接続を拒否したいホストの名乗るHELOホスト名を指定したリスト(改行区切り)です。ホスト名の指定にperlの正規表現を使用することができます。 FQDNチェックもこのファイル内の定義で行っています。
レコードの書式は
「拒否するHELOホスト名 [拒否する逆引きホスト名またはIPアドレス(名前解決不可時)]」
です。左から2カラム目のホスト名は省略できます。省略時は全ホスト対象です。

Path_Whitelist_Helohost (ver1.4.3追加)

HELOで名乗るホスト名ベースのホワイトリストファイルのパスを指定します。

ファイルの内容は、接続を許可したいホストの名乗るHELOホスト名を指定したリスト(改行区切り)です。ホスト名の指定にperlの正規表現を使用することができます。
レコードの書式は
「許可するHELOホスト名 [許可する逆引きホスト名またはIPアドレス(名前解決不可時)]」
です。左から2カラム目のホスト名は省略できます。省略時は全ホスト対象です。

ホワイトリストにマッチ場合、接続を一旦切断します。そのホストから再度接続があった場合、無条件で接続を許可します。

Mode_Compare_Hostname_Octetlevel

接続ホストがHELOで名乗るホスト名(FQDN)のドメイン部分と接続ホストの逆引きホスト名(FQDN)のドメイン部分を比較する機能の有効/無効を設定します。

逆引きできないホストにはこの機能は働きません。また、ローカルネットワークに配置された配信専用のメールサーバーはHELOで名乗るホスト名がFQDNでないことが多いので、この機能を有効にした場合、このようなホストから送信されるメールを受信できなくなるリスクがあります。

0-2の値で指定します。

0
無効(デフォルト)。ドメイン部分を比較しません。
1
有効(お勧めかも)。トップレベルドメイン(TLD)のみの一致をチェックします。
2
有効。トップレベルドメイン(TLD)とセカンドレベルドメイン(SLD)の一致をチェックします。

この機能はgTLDであるかccTLDであるかまではチェックしません。よってSLDまでしかチェックしません。

Mode_Check_RemotoIp_HeloIp

接続ホストがHELOでIPアドレスを名乗った時に、接続元のIPアドレスと比較する機能の有効/無効を設定します。

0-1の値で指定します。

0
無効。
1
有効(デフォルト)。

Mode_Escape_SmtpAuth (ver1.3.0追加)

このパラメータはSMTP-AUTH接続をしてきたホストをgreylistにより許可するかを設定します。

greylistのダミー応答中にAUTHコマンドを送信してきた時、そのホストのgreylist情報の登録時間を古い時間に修正します。それにより次回接続時には、greylistにより接続が許可されます。(よって初めてAUTHを送してきた接続は一旦は切断されます)

0-1の値で指定します。

0
無効(デフォルト)。
1
有効。このパラメータは非常に高いリスクがあるかもしれません。接続ホストがAUTHコマンドを送信してきたときに認証までしませんので、スパマーがでたらめなAUTHコマンドを送信してきても、次回接続時に許可されてしまいます。

Mode_Escape_SmtpAuth_ForVida (ver1.3.0追加)

このパラメータはSMTP-AUTH接続をしてきたホストを許可するかを設定します。qmail-vida専用です。

SMTP-AUTHをした接続はqmail-smtpupとcheckpasswordにより環境変数USERがセットされています。この環境変数USERがセットされていた場合、接続を許可します。このパラメータを有効にする場合、標準の設置方法とは異なります。こちらを参照してください。

0-1の値で指定します。

0
無効(デフォルト)。
1
有効。

Mode_DNSBL

DNSBLを利用した接続拒否機能の有効/無効を設定します。

DNSBLを利用することには賛否両論がありますので。デフォルトでは無効にしています。しかし、利用するのであればS25Rで対象を絞った後にDNSBLを利用すれば誤判定が減り有効活用できるかもしれません。利用するDNSBLは後述するリストファイルで指定できます。

0,1,2の値で指定します。

0
無効(デフォルト)。
1
有効(お勧め)。S25Rの後に機能します。(S25Rで動的IPアドレスらしいホストに絞り込んだホストにのみDNSBLと比較します)
2
有効。S25Rの前に機能します。(全ての接続ホストをDNSBLとの比較対象にします)

Path_DNSBLList

利用するDNSBLをリストしたファイルのパスを設定します。

ファイルの内容は、利用するDNSBLを指定したリスト(改行区切り)です。

利用するDNSBLを複数指定できますが、たくさん指定すると問い合わせ時間が増えるのでパフォーマンスが落ちます。

Sec_Timeout_DNSBL

1つのDNSBLに問い合わせる際のタイムアウト(秒数)を指定します。

タイムアウトになると、そのDNSBLへの問い合わせを中断します。

2 (デフォルト)

Smtpcode_Reject_DNSBL

DNSBLに登録されているために拒否した時のSMTP応答コード。

"450" (デフォルト)

Mode_SPF_For_Helo

接続ホストがHELOで名乗るホスト名とIPアドレスをSPFレコードと比較する機能の有効/無効を設定します。

ローカルネットワークに配置された配信専用のメールサーバーはHELOで名乗るホスト名がFQDNでないことが多いので、この機能を有効にした場合、このようなホストから送信されるメールを受信できなくなるリスクがあります。

0,1の値で指定します。

0
無効(デフォルト)。
1
有効

Mode_SPF_For_Mailfrom

接続ホストがMAIL FROMで伝えるメールアドレスのドメイン部分と接続ホストのIPアドレスを、SPFレコードと比較する機能の有効/無効を設定します。

0,1の値で指定します。

0
無効(デフォルト)。
1
有効

Level_OK_SPF

再試行後の接続を許可するSPFチェック結果レベルを設定します。

SPF検査結果がここで設定した値以下であれば、再試行後の接続で許可になります。

0から7の値で指定します。

0
pass(デフォルト。SPF検査に合格。SPFレコードに登録されているホスト名とIPアドレス)
1
neutral
2
none(SPFレコードが公開されていない)
3
permerror
4
temperror
5
error
6
softfail(SPFレコードに登録されていないIPアドレスであるが弱い失敗)
7
fail(SPF検査に失敗。SPFレコードに登録されていないIPアドレス)

Level_NG_SPF

接続を拒否するSPFチェック結果レベルを設定します。

SPF検査結果がここで設定した値以上であれば、接続を拒否します。(応答コード550で切断)

0から7の値で指定します。

0
pass(SPF検査に合格。SPFレコードに登録されているホスト名とIPアドレス)
1
neutral
2
none(SPFレコードが公開されていない)
3
permerror
4
temperror
5
error
6
softfail(SPFレコードに登録されていないIPアドレスであるが弱い失敗)
7
fail(デフォルト。SPF検査に失敗。SPFレコードに登録されていないIPアドレス)

  • このパッチの適用により、100%スパムを除外できることはありません。もちろん、保障はしません。
  • このパッチの適用により、いかなる損害等が発生したとしても私は責任を負いません。自己責任でご使用ください。
ver1.6.0 (2011/3/26)
  • SMTPダミー応答時に、HELOおよびにMAILFROMに対してSPF検査する機能を追加しました。(デフォルト無効です)
  • 設定ファイルを実行スクリプトと別に持てるようにしました。
ver1.5.0 (2009/10/26)
  • DNSBLに登録されているホストを接続拒否する機能を追加しました。(デフォルト無効です)
ver1.4.3 (2009/9/7)
  • HELOで名乗ったホスト名のホワイトリスト機能を追加しました。
ver1.4.2 (2009/5/6)
  • HELOで応答されたホスト名を、IPアドレスかホスト名か正しく判断できていない不具合を修正しました。
ver1.4.1 (2009/3/9)
  • SMTPダミー応答中に、宛先(RCPTなど)を指定されて450エラーを返した後、すぐに切断するように修正しました。
  • HELOで角括弧付きでIPアドレスを名乗ったとき、角括弧を除去して送信元IPアドレスを比較するように修正しました。
  • コメント行にあった全角丸括弧をなくしました。
  • ㌧クス!2chの皆さん!(ホスト制限かかっていたのでここでお礼申し上げます)
ver1.4.0 (2009/2/8)
  • IPアドレスベースのホワイトリスト/ブラックリストで、正規表現を使用できるようになりました。これにより正規表現を使用してIPアドレスの範囲指定ができます。(既存のIPアドレスベースのリストとは別のファイルです)
  • 設定項目のファイルパスの正当性チェックと正規表現の文法チェックを行う、設定値チェックモードを実装しました。
ver1.3.1 (2008/12/2)
  • ホスト名のホワイトリスト/ブラックリスト/S25Rリストにて、致命的な正規表現の文法エラーがあってもプログラム停止しないようにしました。
ver1.3.0 (2008/11/3)
  • SMTP-AUTH接続を受け入れるようにする設定の追加(但し接続ユーザ側での再試行が必要)
  • SMTP-AUTH接続を受け入れるようにする設定の追加(qmail-vida版・こちらは再試行の必要なし)
  • 接続拒否時に正確な理由を接続ユーザに返す設定の追加。
ver1.2.5 (2008/10/19)
  • 紛らわしい警告ログメッセージを修正
  • その他もろもろ・・・

巷の噂では不安定らしい(まだロックリストが更新されない)ですが、作者の開発環境およびに本番環境(100アカウント、5000通/日)では、そのような現象が発生していないので、対処が困難です。先述の症状が発生する場合は、動作を停止した上で/var/qmail/s25rtarpitgreylist/tmp以下にあるファイルを削除してみてください。それでも解決しない場合は、比較的安定している1.2.2を使用してください。

ver1.2.4 (2008/9/28)
  • バグ修正(1.2.3で発生。greylistが機能しなくなってましたので修正しました)
ver1.2.3 (2008/9/21)
  • greylistをロックする方法に、flockを使用するものを追加しました。(こちらをデフォルト動作にしています。perlのバージョンが5.004以下をご使用の方は、従来のファイルロック動作に変更してください)
  • その他、細かい修正・・・
ver1.2.2 (2008/8/29)
  • ロックファイルを残したまま異常終了したときの対応として、長時間残っているロックファイルがあれば無視して削除するように修正しました。
  • 接続高頻度状態での同時ロック取得発生時に、1つの接続以外はできるだけ待つように修正しました。
ver1.2.1 (2008/8/21)
  • greylistの有効時間切れホストの登録削除機能が正常に機能していませんでしたので修正しました。(ホストからアクセスがある度にこの機能が動作してましたので、パラメータどおりの時間をあけて動作するように修正しました。)
  • 原因不明で潰れてしまったgreylistのエントリー(行データ)を無視し、削除するように修正しました。※このバージョン以前では、プログラムが強制終了されます。

出来るだけこのバージョン以上にアップデートしてください。上記にもありますとおり、このバージョン以前では、何らかの原因でgreylistが壊れているとプログラムが強制終了されてします。即ち、greylistが壊れると、greylistの判定が必要なメールは受信できなくなる可能性があります。

ver1.2 (2008/7/1)
  • SMTPダミー応答時に、接続ホストが発行したSMTPコマンド数が指定した数より少なければ、greylistへの登録をキャンセルする機能を追加。
  • SMTPダミー応答時に、接続ホストが発行した未定義のSMTPコマンド数が指定した数より多ければ、greylistへの登録をキャンセルする機能を追加。
  • SMTPダミー応答時にタイムアウトになった接続ホストのgreylistへの登録をキャンセルする機能を追加。
  • 少々バグフィックス(深刻なものではありません)
ver1.1.1 (2008/6/13)
  • 1.1の新機能のバグフィックス(^^;。このバージョンでの新機能はありません。
ver1.1 (2008/5/21)
  • HELOでIPアドレスを名乗った場合、ホストのIPアドレスと比較して異なれば拒否する処理を追加しました
  • HELOで名乗ったホスト名のブラックリストにて、オプションでホストのIPアドレスも比較できるようにしました。(例えば、63.123.124.*からの接続でHELOで「*.info」を名乗った場合拒否する)

qmail-vidaをご使用の皆様へ

設置方法について、こちらをご覧ください。
おまけ
何かありましたら以下のメールアドレスまで。(自宅サーバーのため届かない可能性があります。多忙のため100%返信するとは限りません(しなくてもごちゃごちゃいわないでください)) webmaster@chidipy.jpn.com
戻る