トップページ»2.マイプロダクト»各国アクセス拒否リスト付tcp.smtp生成スクリプト

2.マイプロダクト



各国アクセス拒否リスト付tcp.smtp生成スクリプト

ウチのサービスとして公開しているqmail用各国アクセス拒否リストだが、テキストだからエディタでtcp.smtpに追加、tcp.smtp.cdb化すればいいとは言えど、定期的に更新しなければならないとなると結構面倒。 拒否する国が増えてくると更にやってられなくなってくる。

というわけで簡単な拒否リスト付tcp.smtp生成スクリプトをperlで作ってみたので公開します。

動作概要

1)指定した国コード(JP等、複数指定可)を元にウチのサイトから拒否リストをダウンロード
2)ダウンロードしたファイルをtcp.smtpの指定可所に追加し標準出力に出す

必要なもの

  • perl
  • wget

あらかじめ上記のものを使える状態にしておいてください。 尚、wget使ってるのは手抜きのためです。:p

スクリプトのダウンロード

http://akionweb.com/myobjects/adlmake.pl.txt

テキストファイルなので、ブラウザでそのままクリックすると単に表示されます。 IE等のブラウザでダウンロードしたい方は右クリックして対象をファイルに保存で対応してください。




インストール(って程でもない)

上記ファイルを任意の場所にダウンロードして名前を変えてください。(必要に応じてchown,chmodして下さい)

wget http://akionweb.com/myobjects/adlmake.pl.txt
mv adlmake.pl.txt adlmake.pl

設定

現在使用しているtcp.smtpをadlmake.plと同じディレクトリに名前を変えてコピーします。 名前はデフォルトでadlmake.templateです。

cp /etc/tcp.smtp ./adlmake.template

adlmake.templateファイルは生成用のテンプレートとして使用します。

次にadlmake.templateをエディタで開いてください。 この際、過去に各国アクセス拒否リストを使用していて、拒否リストがadlmake.templateに含まれていた場合、それら全てを削除してください。

拒否リストを追加したい場所に以下の行を挿入します。 この<>内の部分が実際の拒否リストに置き換わります。

<ADL_DENY_COUNTRYS={国コード1,国コード2,国コード3,…}>

国コードはカンマで区切ることで複数指定できます。 例えば日本とアメリカとカナダを拒否したい場合は、

<ADL_DENY_COUNTRYS=JP,US,CA>

となります。 国コードはISO 3166で定義されたものです。(参考:ISO 3166 Code lists) もちろんウチのリストに載っていない場合は使えませんので、ウチのリストに乗っているか確認した上で指定してください。

ここまでできたら準備完了です。

使い方

adlmake.plがあるディレクトリで以下のコマンドを試してみてください。 結果は新しいファイル(tcp.smtp.adl)に落ちるので、以前のtcp.smtpを壊すことはありません。 安心して実行してください。

perl adlmake.pl > ./tcp.smtp.adl

tcp.smtp.adlをエディタで開き結果を上から下まで確認してください。 正しい場所に拒否リストが埋め込まれていればOKです。 NGの場合はもう一度設定を見直してください。

結果が正しいようであれば通常通りtcp.smtp.cdbに反映していきます。

/usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < ./tcp.smtp.adl

以上で完了です。 以後、更新したい時や拒否する国をテンプレートに追加した都度同様の作業をしてください。

使用上の注意

このスクリプトは(手抜きのため)エラー処理は一切していません。 従ってcron等を使って自動的に更新する場合思わぬ結果になるかもしれません。 cronを使って完全自動化する場合は、各自必要なエラー処理などを施した上で使用してください。

おまけ

拒否リストをそのまま使うと:denyを指定しているため単純に相手を拒否します。 相手はなぜ拒否されているのか知ることはできません。

拒否する相手に対して何らかのメッセージを返したい場合はadlmake.plの14行目のコメントを外して下さい。 相手にダブルクオテーション内のメッセージを返すことができます。 メッセージは任意で変更してもらって良いです。

但し、これをやるためにはrblsmtpdが動作することが必須です!! 必ず前もって準備してください。

尚、この作業をすると副産物としてmaillogにどの国を拒否したかログが残るようになります。 これはサーバー管理者的にも嬉しいんじゃないでしょうか。

その他

いつものように本スクリプトは完全無保証です。 利用者のリスクの下ご利用下さい。

それからもっと良いものを作った方は私に下さい。(笑)


投稿日 : 2006年5月18日

この記事に関する言及

このエントリーのトラックバックURL:
http://akionweb.com/mt-tb.cgi/295

コメント

 アクセス拒否リスト生成スクリプトを使わせて頂きました。
わたしもtcp.smtpにスパムのアドレスをちまちまと登録していた口なんですが、このスクリプトのおかげで、アジア諸国からのスパムを撃退できそうです。どうもありがとうございます。

投稿者 難波鷹史 : 2006年10月25日 20:05

難波鷹史さんこんにちは。

自分で使うために作っただけのものなので、足らない部分ばかりかとは思いますが、少しでもお役に立てたとするならば光栄です。

投稿者 AKI ON WEB : 2006年10月27日 18:30

このページに対する感想、意見をお寄せ下さい。




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)

おことわり

当サイトに掲載している全ての情報は、全て当サイト管理者が個人的、実験的に試した事、又は独自に調査したものです。 従ってその情報に誤りがある可能性も多分にあります。 当サイトの情報をそのまま鵜呑みにされませんようお願い申し上げます。 また当サイトの情報を元に作業されたりする場合はそれをご理解頂いた上で、あくまで自己責任の元で行ってください。

トップページ»2.マイプロダクト»各国アクセス拒否リスト付tcp.smtp生成スクリプト