MTA Eximに基づく新しい叀いスパム察策手法

䌁業メヌルをスパムから保護するための方法論に぀いお説明したす。これにより、個々のアドレスフィルタリングツヌルを掻甚し、これらの方法の欠点を回避できたす。
これらの手法は、DMZにある䌁業のメヌルサヌバヌを閉じるSMTPプロキシで䜿甚できるこずに泚意しおください。

倚くの堎合、管理者は、アプロヌチの欠点により、いく぀かの効果的なフィルタリング手法を避けたす。 たずえば、DNSBLフィルタヌは、たずえば、個々のプロバむダヌのアドレスブロック党䜓の䞀郚ずしお、誀っおフィルタヌに萜ちたノヌドに誀怜出を䞎えるこずがよくありたす。 AずPTRレコヌドが䞀臎しない堎合、たたはDNSサヌビスに単に問題がある堎合、PTRレコヌドの単玔な定矩に基づいお頻繁に䜿甚されるフィルタリング方法も倱敗する傟向がありたす。

この蚘事では、個々のフィルタリング方法をより小さなものに分割し、1぀の拒吊ルヌルの結果だけでなく、送信ノヌドに関する集玄デヌタに埓っおフィルタリングを行う方法を瀺したいず思いたす。

この手法は長い間存圚しおおり、さたざたな専門家によるさたざたなアむデアの実装に出䌚いたした。5幎前にexim-users@exim.orgメヌリングリストでこのバリ゚ヌションに぀いお簡単に説明したした蚘事はメヌリングリストアヌカむブにありたす 実装の容易さずドキュメントの入手可胜性が、郵䟿管理者によっお䜿甚されるこずはほずんどありたせん。

hornsnhoofs.comドメむンを含むHorns'n'Hoofs瀟のメヌルを䟋に䜿甚しお、発明されおいないが完党に機胜する「戊い」のフィルタリング手法を怜蚎しおみたしょう。

この実装の䞻な考え方は、SQLデヌタベヌスに保存されおいるサヌバヌ自身のブラックリストを陀き、どのチェックも「重芁」ではないずいうこずです。 蚀い換えるず、DNSBLの䜿甚を拒吊したり、盎接および逆DNSレコヌドが他のホストスパムテストず䞀臎するかどうかを確認したりするこずはありたせんが、その埌、別のチェックたずえば、DSNBL SpamHausで点灯。

テストが倱敗するたびに、特定の数のポむントがレタヌの「スパム」に远加されるだけで、構成のいく぀かの「コントロヌルポむント」のこれらのポむントの合蚈量に基づいお、受け入れたたは拒吊の決定が行われたす。 このアプロヌチにより、倚くのツヌルを䜿甚しおメヌル送信者を評䟡し、同時にフィルタヌの誀怜知いわゆる誀怜知のレベルを䞋げるこずができたす。
この蚘事は、読者がEximを受信サヌバヌずしおむンストヌルおよび構成できるこずを前提ずしおいたす。 たた、読者が湿疹の少なくずも簡単な怜玢を䜜成できるこずを願っおいたす。
もちろん、有胜な管理者はSMTPプロトコルを知る必芁があり、その動䜜の原理はRFC 821、2821、5321で詳しく説明されおいたす。ロシア語ぞの翻蚳はネットワヌク䞊で簡単に芋぀けるこずができたす。 倚くのスパム察策方法の理論的な説明は、RFC 2505に蚘茉されおいたす。

それでは、メヌルサヌバヌの蚭定の説明を始めたしょう
合蚈スコアは倉数$acl_c_spamscore保存されたす。 これは構成プログラムの䞻芁な倉数であり、他のすべおのMTAの動䜜はその倀に䟝存したす。

たず、初期倀-0を蚭定したす。たずえば、aclでは、 HELO MAIL FROM匕数をチェックしたす。
 acl_check_sender:    warn set acl_c_spamscore = 0    [...]    accept 


UPD論理゚ラヌに気付いたナヌザヌslimlvに感謝したす。

接続時にすぐに初期化が行われないのはなぜですか 非垞に簡単-RSETコマンドを送信するず、カりンタヌがれロにリセットされ、SMTPセッションが再開されたす。 これが行われない堎合、ポむント数は同じたたになり、RSETチヌムの前に行われた同じチェックに察しお新しいポむントが远加されたす。
これは、MTAをデバッグするずきに䞍䟿です。戊闘システムでは、カりンタヌがれロにリセットされる堎所は関係ありたせん-ノヌドが接続された盎埌acl_smtp_connect内、たたは䟋のようにMAIL FROMを送信した埌

別の重芁な倉数は$acl_c_bouncemessage 、これはすべおのチェックの結果に関するメッセヌゞを加算したす。 MTAの高品質のデバッグに必芁です。 サヌバヌのログで、どのチェックが完了しおおらず、ポむントがいく぀獲埗されたかをすぐに確認できたす。たた、ワむダの反察偎で電子メヌルを読む管理者は、SMTPセッションが壊れた理由を理解し、゚ラヌを修正できたすそう、それは95でした。 、カブのみを傷぀けたす。 ただし、適切に構成されたフィルタリングシステム昚幎は1぀しかありたせんでの誀怜出は非垞に少ないため、この倉数はデバッグ時の郜合䞊のみ䜿甚したす。

チェックの倧郚分はacl_check_senderセクション「MAIL FROM<email@address.any>」の送信埌に発生するSMTPセッションのフェヌズに含たれおいたす

最初から始めたしょう

 acl_check_sender:    [...]     warn set acl_c_spamscore = 0    drop hosts = +blacklisted_hosts         message = Connection closed. IP [$sender_host_address] is listed in Blacklist.    [...]    accept 


サヌバヌのログに蚘録があり、そこからメッセヌゞが送信された電子メヌルずIPアドレスになった埌、サヌバヌのロヌカル「ブラックリスト」MySQLデヌタベヌス内にある堎合は䞍芁なドロップノヌドを無効にできたす。远加のSMTPコマンド、DNSおよびDNSBLク゚リを䜿甚したトラフィック。

ブラックリスト自䜓は、 IP varchar(15)ずTimestamp int(11)の2぀のフィヌルドで構成されるデヌタベヌス内のテヌブルです。IPアドレスずデヌタベヌスにunix_time圢匏で远加された時刻が栌玍されたすこの圢匏では、過去の数を枛算するず䟿利です秒

ブラックリストク゚リの䟋は非垞に簡単です SELECT IP FROM antispam.blacklist WHERE IP='1.1.1.1' limit 1" 。

メヌルサヌバヌからのデヌタベヌスの操䜜も基本的に実装されおいたす。 これを行うには、メむン構成セクションにディレクティブを远加したす。

 hostlist blacklisted_hosts = ${lookup mysql {SELECT IP FROM antispam.blacklist \                                            WHERE IP='$sender_host_address' limit 1} \                             } 


そのため、1぀のIPアドレスたたは芁求が䜕も返されなかった堎合はれロアドレスからリストを䜜成し、さらにアクセスリストで+blacklisted_hostsずしおポヌリングしたす。

もちろん、デヌタベヌスの接続のためのパラメヌタヌを含む蚭定のhide mysql_servers = 127.0.0.1/antispam/mta/mtapassあるhide mysql_servers = 127.0.0.1/antispam/mta/mtapassディレクティブhide mysql_servers = 127.0.0.1/antispam/mta/mtapassを忘れおはいけたせん。

ブラックリストテヌブルには、以䞋に瀺すMTA自䜓でIPアドレスが自動的に入力されたす。

次に、スパム察策の「匟頭」を芋おください。

   warn !condition = ${lookup{$sender_address_domain}wildlsearch{/CONFIG_PREFIX/\ additional/trusted_zones}{1}{0}}       set acl_c_spamscore = ${eval:$acl_c_spamscore+20}       set acl_c_bouncemessage = $acl_c_bouncemessage Suspicious e-mail address; 


ここで、trusted_zonesは、exim構成のフォルダヌ内の远加ディレクトリヌにあるプレヌンテキストファむルです。 次のようなものが含たれおいたす。

 ^.*\\.ru\$ ^.*\\.ua\$ ^.*\\.by\$ ^.*\\.com\$ ^.*\\.org\$ ^.*\\.net\$ ^.*\\.edu\$ 

正芏衚珟は、電子メヌルアドレスDNSずはただ関係ありたせんから通垞通信を受けるドメむンゟヌンを衚したす。 䞊蚘の䟋には必芁な最小倀が含たれおおり、必芁に応じお線集できたす。

譊告指什は、手玙が受け入れられたり拒吊されたりする必芁がないこずをEximaに䌝​​えたす。 条件を満たし、セッションをさらに凊理するだけです。

このこずから、送信者のアドレスにある受信メヌルに察しおドメむンゟヌンのない文字を送信するノヌドメッセヌゞ本文の "From"芋出しず混同しないでくださいは20ポむントを受け取り、先に進みたす。

 #-----------------------------DNS Records verify------------------------------------    warn !verify = reverse_host_lookup         set acl_c_spamscore = ${eval:$acl_c_spamscore+30}         set acl_c_bouncemessage = $acl_c_bouncemessage Reverse host lookup failed; 

+30ポむント-盎接ADNSレコヌドず逆PTRDNSレコヌドが䞀臎しない堎合。

     warn condition = ${if eq {$acl_c_reverse_zone}{}}         set acl_c_spamscore = ${eval:$acl_c_spamscore+50}         set acl_c_bouncemessage = $acl_c_bouncemessage No DNS PTR record found; 


別の50-リバヌスPTR録音の欠劂。
埌で瀺すように、ノヌドを「グレヌリスト」グレヌリストに入れるには8぀のポむントで十分です。

 #----------------------------------------------------------------------------------- 


$acl_c_reverse_zone倉数がここに衚瀺され、このチェックの結果ノヌドのDNS PTR倀が含たれおいるこずが$acl_c_reverse_zoneたす。

          set acl_c_reverse_zone = ${escape:${lookup dnsdb{ptr=$sender_host_address}}} 

ノヌドの接続時より正確なacl_smtp_connect内、たたはacl_check_helo HELO匕数のチェック時に、その倀を蚭定できたす。
$acl_c_spamscore初期化されたす。 違いはわずかです。 䞀般的にどこでも構築を䜿甚できたす

     warn condition = ${if eq {${escape:${lookup dnsdb{ptr=$sender_host_address}}}}\ {}} 


ただし、このようなルックアップごずに、DNSク゚リが生成されるこずに泚意しおください。 倧量のメヌルスパムがあるず、これにより䞍芁な負荷が発生したす。 小さなフロヌでは、違いを感じるこずはほずんどありたせん。

 #-----------------------------Dynamic IP pools processing---------------------------    warn condition = ${lookup {$acl_c_reverse_zone}wildlsearch{CONFIG_PREFIX/\ additional/dynamic_pools}{1}{0}\                      }         set acl_c_spamscore = ${eval:$acl_c_spamscore+70}         set acl_c_bouncemessage = $acl_c_bouncemessage Suspected PTR DNS record \ points to dynamic IP pool; 


DNSホストが動的アドレスプヌルをポむントしおいる堎合、送信ホストは+70ポむントを受け取りたす。 そのようなプヌルは、りむルスの繁殖地であり、その結果、ボットネットにずっお良い土壌です。

 #----------------------------------------------------------------------------------- 


dynamic_poolsファむルは、trusted_zonesファむルず構造が䌌おおり、モデム、adslマネヌゞャヌ、および動的に割り圓おられたipを持぀他のノヌドのDNSレコヌドをチェックするための正芏衚珟が含たれおいたす。

 ^.*([0-9]+).([0-9]+).([0-9]+).([0-9]+).* ^.*host.([0-9]+).* ^.*dynamic.* ^.*dial.* ^.*ppp.* ^.*pptp.* ^.*broadband.* ^.*dhcp.* 

これに独自のルヌルを远加できたすが、これは必芁最小限のものです。

 #---------------------------Geographical DNS zone processing------------------------    warn !condition = ${lookup {$sender_host_name}wildlsearch{/CONFIG_PREFIX/\ additional/trusted_zones}{1}{0}}         set acl_c_spamscore = ${eval:$acl_c_spamscore+20}         set acl_c_bouncemessage = $acl_c_bouncemessage Untrusted domain zone; 


電子メヌルのチェックに以前に䜿甚されたのず同じtrusted_zonesが、実際のDNSレコヌドによるフィルタリングに䜿甚されるようになりたした。

ドメむンゟヌンのリストにない䞭囜、メキシコ、韓囜などからのメヌルの堎合、+ 20ポむント。

 #------------------------------------------------------------------------------------------ #-------------------Huge DSL & DialUp ISP's DNS zone processing---------------------    warn condition = ${lookup {$sender_host_name}wildlsearch{CONFIG_PREFIX/\ additional/spamvertised_isp}{1}{0}}         set acl_c_spamscore = ${eval:$acl_c_spamscore+40}         set acl_c_bouncemessage = $acl_c_bouncemessage Spamvertised ISP DNS zone; 


ボットネットによっお生成される発信トラフィックのフィルタリングを気にしない個々の倧芏暡プロバむダヌを+40ポむント。

 #----------------------------------------------------------------------------------- 


spamvertised_ispファむルには、モデラヌがポヌト25ログで蚈算ぞの発信接続を蚱可する倚くの倧芏暡プロバむダヌがリストされおいたす。

 ^.*comcast\\.net ^.*pppoe\\.mtu-net\\.ru ^.*qwerty\\.ru ^.*ono\\.com ^.*virtua\\.com\\.br 


独自のメモを远加できたす。 それも必芁です

 #----------------------------Handler for impossible HELO's-------------------------    warn condition = ${if or {\                                 {match{$sender_helo_name}{localhost}}\                                 {match{$sender_helo_name}{mail.hornsnhoofs.com}}\                                 {match{$sender_helo_name}{^127\\.0\\.0\\.([0-9]+)}}\                             }{1}{0}\                      }         set acl_c_spamscore = ${eval:$acl_c_spamscore+60}         set acl_c_bouncemessage = $acl_c_bouncemessage HELO $sender_helo_name is forged; 


+60は、HELOの匕数ずしおメヌルサヌバヌ受信を瀺すスパマヌを指したす。

 #---------------------------------------------------------------------------------- #------------------------------Handler for wrong HELO's----------------------------    warn !condition = ${if or {\                                 {match{$sender_helo_name}{^.+\\.((?i)[az]+)\$}}\                                 [...]                              }{1}{0}\                       }         set acl_c_spamscore = ${eval:$acl_c_spamscore+20}         set acl_c_bouncemessage = $acl_c_bouncemessage HELO name is not \ Fully Qualified Domain Name; 


HELOがFQDNでない堎合、+ 20スパムポむント。

 #---------------------------------------------------------------------------------- #--------------------------Handler for forged HELO arguments-----------------------    warn !condition = ${if or {\                                 {eq{$sender_helo_name}{$sender_host_name}}\                              }\                       }         set acl_c_spamscore = ${eval:$acl_c_spamscore+20}         set acl_c_bouncemessage = $acl_c_bouncemessage HELO not equals Hostname; 


HELO匕数が送信ホストのマスタヌDNSレコヌドAず䞀臎しない堎合、さらに20。

 #---------------------------------------------------------------------------------- #------------------------Handler for suspicious HELO arguments---------------------    warn !condition = ${lookup {$sender_helo_name}wildlsearch{/CONFIG_PREFIX/\ additional/trusted_zones}{1}{0}}         set acl_c_spamscore = ${eval:$acl_c_spamscore+20}         set acl_c_bouncemessage = $acl_c_bouncemessage Suspicious HELO argument; 


叀き良きtrusted_zonesがHELO匕数のテストに䜿甚されるようになりたした。
䞭囜人、韓囜人、その他のメキシコ人日本人が+20ポむント。
 #---------------------------------------------------------------------------------- 


最埌に、DNSBLポヌリングの正しい実装

そのようなシステムでのみ茝くノヌドをオフにするこずはできたせん。 圌が偶然そこに着いた可胜性が高い。

DNSBLの䜿甚を完党に攟棄しないでください-これは匷力なフィルタリングツヌルです。

ノヌドをスパマヌず宣蚀できるのは、このようなシステムを2぀以䞊同時に実行する堎合のみです。

 #-------------------------------DNSBL processing section---------------------------    warn dnslists = sbl.spamhaus.org         set acl_c_spamscore = ${eval:$acl_c_spamscore+60}         set acl_c_bouncemessage = $acl_c_bouncemessage Listed in DNSBL $dnslist_domain;    warn dnslists = bl.spamcop.net         set acl_c_spamscore = ${eval:$acl_c_spamscore+60}         set acl_c_bouncemessage = $acl_c_bouncemessage Listed in DNSBL $dnslist_domain;    warn dnslists = dnsbl.sorbs.net         set acl_c_spamscore = ${eval:$acl_c_spamscore+60}         set acl_c_bouncemessage = $acl_c_bouncemessage Listed in DNSBL $dnslist_domain;    warn dnslists = dul.ru         set acl_c_spamscore = ${eval:$acl_c_spamscore+60}         set acl_c_bouncemessage = $acl_c_bouncemessage Listed in DNSBL $dnslist_domain; 


「DNSブラックリスト」に入るず、+ 60ポむント。 同時に2぀のリストに入るず、ノヌドは120ポむントを受け取りたす。これは、そこからのメヌルの受信を停止するには十分ですが、ロヌカルブラックリストに自動的に远加するには䞍十分です。 送信メヌルサヌバヌの管理者が少なくずも1぀のDNSBLからすばやくサブスクラむブを解陀できた堎合、メヌル転送の圱響は最小限になりたす。

DNSBLポヌリングは、他のチェックず組み合わせお-スパマヌを非垞によく排陀し、これらのポむントは、IPアドレスを1週間ロヌカルブラックリストに入れるためにしばしば重芁になりたす。

 #-----------------------------------------------------------------------------------    warn !verify = sender/callout=3m,defer_ok         set acl_c_spamscore = ${eval:$acl_c_spamscore+60}         set acl_c_bouncemessage = $acl_c_bouncemessage Cannot complete sender verify; 


ここでコヌルアりトが行われたす送信者ボックスの存圚を確認したす。 サヌバヌには怜蚌のために最倧3分間が䞎えられおいたすそれ以倖の堎合、接続がハングするため、怜蚌が完了するのを埅たずに「良い」送信者が脱萜するリスクがありたす、リモヌトノヌドのアクセス䞍胜は怜査の成功ず芋なされたす。 ぀たり ノヌドは、䞍圚のほずんどの堎合は停の電子メヌルアドレスからメヌルを送信するず、60ポむントを受け取りたす。

そのため、www @ webserver.example.orgのようなアドレスからの正圓なメヌル送信を行うべきではありたせん。 コヌルアりトは䞀般的なフィルタリング方法であり、倚くの最新のMTA実装でサポヌトされおいたす。

     accept condition = ${if >{$acl_c_spamscore}{145}} 

ここでは、ちょっずしたトリック-145ポむント以䞊のノヌド-がロヌカルブラックリストの真の候補です。 それらをチェックする必芁はもうありたせん。次のACLに転送し、そこで厳しく犁止したす。

     accept delay = ${eval:$acl_c_spamscore/2}s 


145ポむントを獲埗しおいない人は、拷問セッションの遅延を経隓したす。受信MTAは、䞍正な接続を暡倣し、スパムポむントの数の半分に盞圓する数秒間フリヌズしたす。 60ポむントのノヌドが30秒間「䞭断」されたずしたす。

通垞、スパマヌは応答を埅぀時間があたりなく、15〜20秒で萜ちたす。

そこで、最埌のACLに到達し、SMTPセッションのパラメヌタヌの正確性を確認したしたRCPT TOの埌に機胜したす。 その䞭には、合蚈ポむントの「重み付け」ず、手玙のさらなる運呜の決定がありたす。

 acl_check_rcpt: [...] #------Spamtraps check-------    warn condition = ${lookup {$local_part@$domain}lsearch{/CONFIG_PREFIX/\ additional/spamtraps}{1}{0}}         set acl_c_spamscore = ${eval:$acl_c_spamscore+50}         set acl_c_bouncemessage = $acl_c_bouncemessage Spamtrap hit; 


スパムトラップに陥った堎合は+50ポむント。

 #---------------------------- 


トラップアドレスのリストは、次の行に電子メヌルで送信されるspamtrapsファむルにありたす。

 spamtrap@hornsnhoofs.com honeypot@hornsnhoofs.com 


などなど。

独自のスパムトラップを䜿甚するこずは、電子メヌルのボットでむンタヌネットを掘る倧芏暡なメヌラヌから身を隠す良い方法です。 次に、これらのアドレスは、メヌリングリストの䞀郚ずしお転送、販売、および配垃されたす。 ぀たり、それらはスパマヌによっお拡散されたす。

そのようなアドレスの最初の配垃には困難が生じるため、それらはスパマヌに送信されたす。 たずえば、䌚瀟のメむンWebサむトでwpoisonなどのメカニズムを䜿甚できたす。 䞻なこずは、怜玢゚ンゞンによるむンデックス䜜成の犁止を忘れないこずですrobots.txtたたはMETA CONTENT = "NOINDEX、NOFOLLOW"を䜿甚。

倚くの堎合、叀いドメむンには既にアドレスが砎棄されおいるか、たったく存圚しおいたせんが、それでも1぀のスパムが送信されたす。 これらは、スパムトラップずしお䜿甚するのに理想的な候補です。 䞻なこずは、そのようなボックスは長期間䜿甚しないでください。さらに良いこずに、䜿甚しないでください。

逆説的に、それは事実です-今日䜿甚しおいるトラップアドレスの倚くは、スパムデヌタベヌスを陀き、どこにも存圚しおいたせん。 そこにどのように登堎したかは䞍明ですが、スパムが定期的に届きたす。 メヌラヌのログを長期間調べお、そこに䌌たようなものがあるこずを確認しおください。

 #---------------------------Blacklist Processing Section------------------------    drop !senders = :         !condition = ${if <{$acl_c_spamscore}{150}}         message = Connection closed. Spamscore threshold (150 points) reached. \                   Spamscore is $acl_c_spamscore! \                   Warning: IP [$sender_host_address] added to Blacklist. \                   Details: $acl_c_bouncemessage         condition = ${lookup mysql \                         {\                             insert into antispam.blacklist (IP,Timestamp)\                             values ('${sender_host_address}',${tod_epoch});\                         }\                      } 


150ポむント以䞊を獲埗できた人は、チャンピオンず宣蚀されたす それらのIPアドレスはロヌカルブラックリストに登録され、それらに぀いおの名声は1週間止たりたせん。
その䞭にあるノヌドは、「MAIL FROM」コマンドを送信した盎埌にドロップしたす。

 #------------------------------------------------------------------------------- 


すでに述べたように、ブラックリストのレコヌドの有効期間は1週間604800秒です。 ベヌスは1時間ごずにクラりンで枅掃されたす。

 #!/bin/bash echo "delete from blacklist where Timestamp < `echo "\`date +%s\`-604800" | bc`;" | /usr/local/bin/mysql -u mta -pmtapass antispam echo "optimize table blacklist" | /usr/local/bin/mysql -u mta -pmtapass antispam 

     deny condition = ${if >{$acl_c_spamscore}{100}}         condition = ${if ={$acl_c_validrcpt}{1}}         message = Message rejected. Spamscore threshold (100 points) reached. \                   Spamscore is $acl_c_spamscore! Details: acl_c_bouncemessage 


ここではすべおが簡単です。 100点以䞊を獲埗-「550メッセヌゞ拒吊」を受け取りたした。 同時に、埗点ず倱敗したチェックのレポヌトの数がログに蚘録されたす。 同じ情報は、ワむダの反察偎のメヌルの皮ず䞀緒に行きたす。 突然誰かがデバッグに圹立ちたす。

セッションを䞭断せずにaclで受信に文字を持ち蟌たず、ルヌタヌずトランスポヌトによる凊理を開始せずにたわごずを送信するこずが重芁です。そうしないず、むベントがうたく機胜しない堎合がありたす。

返信の圢匏でスパムを送信するこずに぀いお簡単に説明したす。存圚しないメヌルアドレスnosuchaddress@hornsnhoofs.comに「MAIL FROM」の「vasyapupkin@gmail.com」を瀺すスパムレタヌを曞くず、そのメヌルはメヌルサヌバヌで受け入れられ、メヌルを受信した埌、ルヌタヌは宛先アドレスが存圚しないず刀断するず、サヌバヌはスパムメヌルを新しい゚ンベロヌプでラップし、そのたわごずの行を远加しお「送信者」に返送したす-Vasya Pupkin、Gmail.comで疑わない。

次に、生地䌚瀟はサヌバヌを「ブラックリスト」にすばやく远加し、そのIPからのメヌルの受信をブロックしたす。 今、あなたは技術サポヌトに説明的な手玙を曞いお、厄介なスパマヌが笑いたす。

ただし、これは珟象の非垞に簡単な説明であり、それを防ぐ他の方法がありたすが、セッションを停止せずに嫌いな人を転送する戊術が最も正しいです。

より䟿利なデバッグのために、この情報をレタヌのサヌビスヘッダヌに远加するこずもできたす。 ただし、これは非垞にオプションです。
     accept condition = ${if <{$acl_c_spamscore}{70}}           condition = ${if ={$acl_c_validrcpt}{1}} 

スパムポむントが70未満のホストは正圓であるず芋なされ、受信者のアドレス $acl_c_validrcpt が存圚する堎合、ホストからの手玙を受け入れたす。

この倉数が倀を取埗する方法に぀いおは説明したせん。 メヌルナヌザヌに関するデヌタの保存方法によっお異なりたす。 LDAP怜玢でActive Directoryの受信者のメヌルアドレスを確認した埌、私からそれが真実たたは1぀だけになるず蚀いたす。これは、Eximでサポヌトされおいる限り、ナヌザヌがいるすべおのデヌタベヌスに察しお実行できたす。

最も興味深いのは、ノヌドが70ポむントから100ポむントの埗点になるこずです。正圓なホストやスパマヌに起因するものではありたせん。したがっお、それらをgrelistで29分間ラップしたす間隔は、MTA送信者によるメヌルキュヌの2回目の実行を想定しお遞択されたす。

 #--------------------------Greylist Processing Section--------------------------    defer condition = ${if ={$acl_c_validrcpt}{1}}          condition = ${lookup mysql \                          {\                              select Source from antispam.greylist where \                              Source='$sender_host_address' \                              and Timestamp > ${eval:$tod_epoch-1740} limit 1\                          }{1}{0}\                       }          message = Message deferred. Try again later. You was been already greylisted.    accept condition = ${lookup {$acl_c_reverse_zone}wildlsearch{CONFIG_PREFIX/\ additional/dynamic_pools}{1}{0}}           condition = ${if ={$acl_c_validrcpt}{1}}           condition = ${lookup mysql \                          {\                              select Source from antispam.greylist where \                              Source='$sender_host_address' \                              and grey_hash = '${md5:${lc:$sender_address\ $local_part@$domain}}' \                              and Timestamp < ${eval:$tod_epoch-1740} limit 1 \                          }{1}{0}\                        }           condition = ${lookup mysql \                          {\                              delete from antispam.greylist where \                              Source='$sender_host_address' \                              and grey_hash = '${md5:${lc:$sender_address\ $local_part@$domain}}' \                          }\                        }    accept !condition = ${lookup {$acl_c_reverse_zone}wildlsearch{CONFIG_PREFIX/\ additional/dynamic_pools}{1}{0}}           condition = ${if ={$acl_c_validrcpt}{1}}           condition = ${lookup mysql \                          {\                              select Source from antispam.greylist where \                              Source='$sender_host_address' \                              and grey_hash = '${md5:${lc:$sender_address\ $local_part@$domain}}' \                              and Timestamp < ${eval:$tod_epoch-1740} limit 1 \                          }{1}{0}\                        }           condition = ${lookup mysql \                          {\                              insert into antispam.whitelist (IP, Timestamp) \                              values ('$sender_host_address',$tod_epoch) \                          }{1}{1}\                        }           condition = ${lookup mysql \                          {\                              delete from antispam.greylist where \                              Source='$sender_host_address' \                              and grey_hash = '${md5:${lc:$sender_address\ $local_part@$domain}}' \                          }\                        }    defer condition = ${if ={$acl_c_validrcpt}{1}}          condition = ${if >={$acl_c_spamscore}{70}}          condition = ${lookup mysql \                          {\                              insert into antispam.greylist (Source,grey_hash,Timestamp) \                              values ('$sender_host_address',\ '${md5:${lc:$sender_address$local_part@$domain}}',\                              ${tod_epoch}); \                          }\                        }          message = Message deferred. Spamscore is $acl_c_spamscore! Try again later. \                    Greylisting in progress. Details: $acl_c_bouncemessage #----------------------------------------------------------------------------- 

defer , c 4xx, , .

: SMTP- 451 , « », .

«», : ip- .

, , greylist, : Source varchar(15) , grey_hash varchar(32) , Timestamp int(11)。 Sourceフィヌルドには送信者のIPアドレスが含たれ、gray_hashは送信者ず受信者のアドレスからのmd5ハッシュ、Timestampはレコヌドがunix_time圢匏で远加された時刻です。それに加えお、グレヌ化にはホワむトリストテヌブルが必芁です。これにより、グレヌ化に合栌したノヌドのアドレスを远加できたす。ホワむトリストテヌブルの圢匏は、䞊蚘のブラックリストテヌブルの圢匏を完党に繰り返したす。
テヌブルはクラりンによっおもクリアされたす。グレヌリストのレコヌドは1日、ホワむトリストの月は保存されたす。

     deny message = Message rejected. No such user here. Relaying denied. $acl_c_support         set acl_c_spamscore = ${eval:$acl_c_spamscore+5}         set acl_c_bouncemessage = $acl_c_bouncemessage RCPT Fail;         delay = ${eval:$acl_c_spamscore/2}s 

最高の犬の飌育者の掚奚によるず、最埌のフィルタリング芏則は犁止されおいたす。圌の仕事は、「閉じた」ファむアりォヌルの最埌のルヌルにいくらか䌌おおりdeny ip from any to any、SMTPセッションのみに圱響したす。

さらに、「RCPT TO」の間違ったアドレスごずにSMTPプロトコルでは1文字に耇数の受信者を指定できたす、ノヌドは無条件のブロッキングしきい倀に達するたで、5぀の远加スパムポむントを受け取りたす。

ああ、はい-各「RCPT TO」の埌にセッションを遅らせる拷問もありたす。

メヌルサヌバヌの構成で少なくずもこれらの構成を䜿甚するず、誀怜知の数を増やすこずなくスパムの玄90〜95を削枛できたす。

( -) ( , , gmail.com mail.ru, , , ) .

, .

, SPF DKIM, , « » ( -), , . , .

Source: https://habr.com/ru/post/J133215/


All Articles