Eximアカウントのスパムフライトの解析

歴史的に、受信メールのスパムをフィルタリングすることにもっと注意を払い、送信メールをほぼ完全に忘れてしまいました。
この状況の分析を開始すると、アドレスが動的に与えられるため、メールトラフィックでだれが「なりすまし」をしているのか実際にはわからないという事実に直面しました。 spamassassinも(これまでのところ)本当に役に立たない。発信スパムは着信スパムのほぼ2倍低い評価だからだ。
そして、まず第一に、カットの下で設定されている小さな研究を実施することが決定されました。

ソースデータ


初期データとして、次のものがあります。

何が欲しい


当然のことながら、主なタスクは、どのユーザーが私たちを通して「スパム」しているのかを見つけることです。 このために
  1. メールを送信するIPアドレスを見つける
  2. IPアドレスによって、現在このアドレスを使用しているユーザーを見つけます
  3. 後続の分析に必要な情報をテーブルに記録します(login、ip、email_from、email_to、email_time、spam_score)

ポイントについて:
  1. Exim変数からIPアドレスを抽出します- $ sender_host_address
  2. abillsテーブルのdv_callsには​​現在のオンラインセッションが含まれているため、リクエストによりこのアドレスを取得したユーザーを見つけます。
    SELECT concat("login=",user_name) FROM dv_calls WHERE INET_NTOA(framed_ip_address)='${quote_mysql:$sender_host_address}'; 

    パラメータ = 値のペアとして返される結果に注意してください
    。 Exim構成では、次のようになります。
    GET_LOGIN = SELECT concat("login=",user_name) FROM dv_calls WHERE INET_NTOA(framed_ip_address)='${quote_mysql:$sender_host_address}';

    -これは、メッセージのスパム対策チェック中に実行するマクロです。
  3. 実際、挿入によるデータの挿入は、スパム対策チェック時にも実行されます
    ADD_STATISTICS = INSERT INTO statistics VALUES ('$acl_m1','${quote_mysql:$sender_host_address}',\
    '${quote_mysql:$sender_address}','${quote_mysql:$acl_m4}',NOW(),$spam_score_int);


Exim


Eximの設定を簡単に見ていきましょう。
  1. 2つのマクロの定義:
    ADD_STATISTICS = INSERT INTO statistics VALUES ('$acl_m1','${quote_mysql:$sender_host_address}',\
    '${quote_mysql:$sender_address}','${quote_mysql:$acl_m4}',NOW(),$spam_score_int);

    GET_LOGIN = SELECT concat("login=",user_name) FROM dv_calls WHERE INET_NTOA(framed_ip_address)='${quote_mysql:$sender_host_address}';

  2. acl_smtp_rcptで、最初の段落を追加します。
    warn
    hosts = LOCAL_NETS
    set acl_m4 = $local_part@$domain

    -これはハックです。送信者のアドレスと受信者のアドレスの両方をテーブルに記録するためです。 しかし、これを行う場所では、変数$ local_partおよび$ domainは既に定義されていません(とにかくEximで持っているかどうかはわかりませんので、これについてのコメントを待っています)。
  3. 最初のacl_smtp_dataに、次を追加します。
    warn
    hosts = LOCAL_NETS
    set acl_m0 = ${lookup mysql{GET_LOGIN}{$value}{login=unknown}}
    set acl_m1 = ${extract{login}{$acl_m0}{$value}{unknown}}

    warn
    hosts = LOCAL_NETS
    spam = nobody:true
    set acl_m2 = ${lookup mysql{servers=localhost; ADD_STATISTICS}{$value}{0}}

    ここではコードの前半で-送信者アドレスでログインを決定し、それをacl_m1変数に書き込みます。 さらに、クライアントのログインを明確に判断できない場合、不明を書き込みます(この場合、これらはサーバーおよび監視サービスのメッセージになります)。
    後半では、すべてのクライアントのスパム対策メールをチェックします。 エントリサーバー= localhost;に注意してください ここでADD_STATISTICSは、請求サーバーではなくローカルサーバーでリクエストを実行する必要があることを明示的に示します。このようなEximレコードを使用すると、DBMSへの任意の数の異なる接続を使用できます。

Eximを再起動すると、結果が得られます。

予備調査結果


このアルゴリズムの作業中に、2人のスパム増殖ユーザーが見つかりました。 誰が偽のアドレスから181通の手紙を送信し、平均スパム率は24(スパム対策の規模)でした。 また、スパム対策は評価の順序(50-警告)(70-遮断)がまったく異なるように構成されていたため、当然ながら見逃していました。
最後に。 組織上の結論が出され、犯人のリストが関連当局に提出され、さらなる明確化(罰金、妨害、虐殺など)が行われました。

PS
仕様からほぼすべての情報を引き出します
このメモは、DBMSを使用するというアイデアを思い付きました。実際には、グレーリストについてです。これについては、後で紹介する予定です。


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


All Articles