キャプチャスパム保護

スパム対策技術に関するいくつかの研究の後、私は自分で作ることにしました。



問題は、見つかったメソッドが1つの単純な条件を満たさないということです。 レターのテキストはサーバーにダウンロードされず、レターを受け入れるかどうかの決定はヘッダーの分析のみに基づいていることが望ましい。

メールサーバーと同じコンピューターにWebサーバーがあるため、次のアルゴリズムが実装されました。

-送信者のホワイトリストを作成し、そこから文字を制限なしで受け入れます

-送信者がホワイトリストにない場合、ホワイトリストにアドレスを追加する方法を示すエラーが送信者に送信されます

-Webサーバーで、ホワイトリストにアドレスを追加するためのcaptchaを含むページを作成します



そのため、順番に(ubuntuを使用しているため、このタイプのディストリビューション用の手順です):

1.ホワイトリストを保存するためにpostgresqlを使用します。

sudo apt-get install apache2 postgresql-8.3 postfix php



/etc/postgresql/8.3/main/pg_hba.confファイルに次の行を挿入します

local whitelist whitelist password







次に、単一のホワイトリストテーブルでホワイトリストデータベースを作成します



sudo su - postgres

psql -c "create user whitelist password '1'" ( )

psql -c "create database whitelist owner whitelist"

psql -d whitelist -c "create table whitelist(email varchar, primary key(email))"









2.データベースの準備ができたら、メールアドレスを追加するページを作成します ホワイトリストにメールします。

ダウンロードkcaptcha http://www.captcha.ru/kcaptcha/

whitelist.phpを作成します。

 <? session_start(); ?> <html><head><title></title> </head> <body> <div align="center"> <table width="80%"><tr><td> <h1>    </h1>       , ,    . </td></tr> <tr><td align="center" class="formbg"> <form action="/whitelist_add.php" method="post"> <table><tr> <td>  e-mail :</td> <td><input type="text" name="email" class="inp"/></td></tr> <tr><td> </td></tr> <tr> <td valign="bottom">  :</td> <td><img src="/kcaptcha/index.php?<?=session_name()?>=<?=session_id()?>"><br/><input type="text" name="keystring" class="inp"></td></tr> <tr><td> </td></tr> <tr><td colspan="2" align="center"><input type="submit" value="     "></td> </tr></table> </form> </td></tr> </table> </body> </html> 
      





<? session_start(); ?> <html><head><title></title> </head> <body> <div align="center"> <table width="80%"><tr><td> <h1> </h1> , , . </td></tr> <tr><td align="center" class="formbg"> <form action="/whitelist_add.php" method="post"> <table><tr> <td> e-mail :</td> <td><input type="text" name="email" class="inp"/></td></tr> <tr><td> </td></tr> <tr> <td valign="bottom"> :</td> <td><img src="/kcaptcha/index.php?<?=session_name()?>=<?=session_id()?>"><br/><input type="text" name="keystring" class="inp"></td></tr> <tr><td> </td></tr> <tr><td colspan="2" align="center"><input type="submit" value=" "></td> </tr></table> </form> </td></tr> </table> </body> </html>









ファイルwhitelist_add.php

 <? session_start(); $correct = false; if(count($_POST)>0){ if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){ $correct = true; } } unset($_SESSION['captcha_keystring']); ?> <html><head><title> </title> </head> <body> <div align="center"> <table width="80%"><tr><td> <h1><? if($correct) { $dbconn = pg_connect("host=localhost dbname=whitelist user=whielist password=1") //    ,    .1 or die('Could not connect: ' . pg_last_error()); // Performing SQL query $result = pg_prepare($dbconn, "check_query", 'select email from white_list where email = $1'); $result = pg_execute($dbconn, "check_query", array($_POST['email'])); if(pg_fetch_array($result)) { ?>      <? } else { $result = pg_prepare($dbconn, "insert_query", 'insert into white_list(email) values($1)'); $result = pg_execute($dbconn, "insert_query", array($_POST['email'])); ?>    !<? } if($result) { pg_free_result($result); } pg_close($dbconn); } else { ?>   <? }?> </h1><? if($correct) { ?>        <? } else { ?>  <a href="whitelist.php"> </a> <? } ?> </td></tr> <tr><td><br/><br/><a href="/whitelist.php">   </a></td></tr> </table> </body> </html>
      
      







3.ヘッダーをフィルタリングするように接尾辞を設定します



ディレクトリ/ etc / postfixにブロックファイルを作成します

/.*/ REJECT \n\n******** your e-mail should be in our whitelist ******** \n Visit http://[ ]/whitelist.php \n\n *******************************************\n\n







同じディレクトリにpg_whitelist.cfファイルを作成します

hosts = localhost

user = whitelist

password = 1 # . 1

dbname = whitelist

query = select 'permit' from white_list where email = '%s'









/etc/postfix/main.confファイルに追加します

smtpd_sender_restrictions = check_sender_access pgsql:/etc/postfix/pg_whitelist.cf, check_sender_access regexp:/etc/postfix/block







4.後置をオーバーロードする:

sudo /etc/init.d/postfix reload



このメカニズムは約1年間使用します。 使用初日から、スパムは遮断されました。 もちろん、時々自分で顧客の住所を入力する必要がありますが、基本的に彼らは自分でそれを見つけます。 スパムは次の2つの理由で突破する可能性があります。返信先アドレスが入力されていないか、受信者と一致するかどうか。 残念ながら、From = Toが見つからなかったことを確認する簡単な方法を見つける時間はありませんでした。



All Articles