starpitとは25番ポートにコネクションが成立するときに接続元の逆引き情報をもって、応答遅延をかける方法です。 つまり、smtpでのやり取りを始める前に動作してしまうので、実はこのままだとsmtp認証を行うには問題があります。
具体的には、smtp認証を使うクライアントは自宅やホテル、出先のモバイル端末から接続してくることが多いので、その接続元の逆引き情報はまさしくtarpittingに引っかかるアドレスになることが多いです。
しかも、smtp認証というのはしっかりsmtpのプロトコルでのやり取りとなるので、S25Rのフィルターに引っかかるとsmtp認証のプロトコルが始まる前に応答保留が掛かってしまいます。
実際の動作としては、smtp認証は応答保留なしで実行され、smtp認証を行わずにメールを送信しようとする相手にはS25Rのフィルターをかけ、必要なら応答保留を行うという動作が望まれます。
ということで、smtpでのやり取りを行う前に応答保留を行うというstarpitの理念とはちょっと外れてしまいますが、heloコマンドを送り、mailコマンドを受け付ける時点でS25Rフィルターをかけるようにmain.cfを変更します。
smtpd_sender_restrictions = |
一件、通常のstarpitと同じように見えますが、違うところは…
smtpd_sender_restrictions
の部分です。
通常のstarpitの場合には、ここが
smtpd_client_restrictions
となり、この場合はsmtpでのやり取りが始まる前に、この部分の評価式が実行されます。
順番的には、以下のように評価されます。
smtpd_client_restrictions コネクション成立時 |
つまり、smtpd_recipient_restrictionsの評価をするときにはsmtp認証は既に終わっているはず… というのが、smtp認証+starpitの肝の部分です。
2009/05/10
starpitの発案者である『佐藤』さんからコメントを頂きました。
応答保留を掛けたメールの詳細をログに残す為に、smtpd_recipient_restrictionsで制限をかけるのがお勧めとのこと… 確かに、mail fromとrcpt toの両方の情報がログに残ります。
私のようなブログにコメントをいただき、本当にありがとうございました。