レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

sendmail で milter-regex を使ってスパム対策

2011年11月24日 2015年5月15日
sendmail spam

以前の記事
評判のさくらのVPSでSMTP(Sendmail)を公開する時にやっておきたいこと では、SPFの送信側の対処
sendmail で smf-spf を使ってSPF認証する では、SPFの受信側の対処について記述しました。

SPFの対処は、スパム対策の一つです。
今回は、別のスパム対策としてSMTPのHELOコマンドを使って、HELOとともに送られてくる送信者情報(一般的には送信者のホスト名になります)の以下のチェックを行うことでスパムと判断し対策を行ってみます。

  • 送信者のホスト名がドメインでない(ドットがない場合)名前を使っている場合
  • 送信者のホスト名が(受信側のSMTPサーバーの)IPアドレスを詐称している場合
HELOコマンドは、
SMTPクライアントをSMTPサーバに認識させるためのコマンドで、以下のフォーマットで送信されます。

HELO FQDN(ホスト名)

FQDN : DNSに登録されているホスト名になります。
FQDNが無いクライアントの場合は、IPアドレスを指定することもあります。

このHELOコマンドは、メールを送信するための最初のご挨拶という感じで、私は・・・です。と名乗っているようなものです。
受け取ったSMTPサーバーは、クライアントが誰だか認識できたらメールを送っても良いよ・・・と返信します。

HELOコマンドは、クライアントのホスト情報を知らせます。そこで偽装していれば、それはスパムの可能性が大きいです。 仮にスパムでなくとも、ルール違反でもありますから、そのようなクライアントからメールを受け取る必要もない・・と判断することもできるでしょう。

案外、このHELOコマンドによるスパム確認方法は有効です。 しかし、これも万全ではありえません。 ただ、spamassassinのような本文やサブジェクト(タイトル)によってスパムを確率で判断するよりは、まだ、確実性はあると思います。

このスパム対策のためにsendmail のMILTER機能を使って、対策を行います。

ここでは、milter-regex を使ってsendmailでHELO によるSPAM対策を行ってみます。

sendmail で milter-regex を使ってSPAM対策する

HELOのチェックをするために、milter-regex をインストールし、sendmail でメール受信時にチェック作業を行うために 情報を渡すように設定する必要があります。

まずは、milter-regex をインストールからはじめて、HELOをチェックするまでの手順を以降に記述します。

milter-regex をインストールする

milter-regex の rpm は、通常のリポジトリにはありません。
milter-regex の rpm は、EPEL で公開されています。
そのため、まずは、EPELのリポジトリをインストールするところから始めます。

  1. EPEL のリポジトリを追加する
    $ wget http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
    $ rpm -Uvh epel-release-5-4.noarch.rpm
    各バージョンとリポジトリファイルは、以下のとおりです。
    5.x 32bit 版 : http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
    5.x 64bit 版 : http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
    6.x 32bit 版 : http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
    6.x 64bit 版 : http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm

    Scientific Linuxも同じです。

  2. EPEL リポジトリは、無効にしておく

    EPEL リポジトリは、結構、最新版を取り込むには、有効なリポジトリです。ただ、何でもかんでも最新にしたくもないので、間違って意図しないものをインストールしてしまわないように、常に無効にしておきます。 使いたい時は、yum のパラメータに–enablerepo を指定して使うようにしておきます。

    /etc/yum.repos.d/epel.repo

    [epel]
    name=Extra Packages for Enterprise Linux 5 - $basearch
    #baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch
    mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch
    failovermethod=priority
    enabled=0
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
       :

  3. smf-spf をインストールする
    $ yum -y --enablerepo=epel install milter-regex
    Loading mirror speeds from cached hostfile
     * base: ftp.nara.wide.ad.jp
     * extras: ftp.nara.wide.ad.jp
    ...
    
    Complete!
    $ 


milter-regex を利用するように sendmail.mc を編集する

milter-regex を sendmailで利用するためには、MILTER が組み込まれていないといけません。通常、CentOS , Scientific Linux で提供されている Sendmailは、既に組み込まれています。
sendmailに組み込まれているかどうか確認するためには、以下のようにコマンドで確認することができます。

$ sendmail -d0.10
Version 8.13.8
 Compiled with: DNSMAP HESIOD HES_GETMAILHOST LDAPMAP LOG MAP_REGEX
                MATCHGECOS MILTER MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6
                NETUNIX NEWDB NIS PIPELINING SASLv2 SCANF SOCKETMAP STARTTLS
                TCPWRAPPERS USERDB USE_LDAP_INIT
...

上記のようにMILTERが含まれていればOKです。もし含まれていないようなら、再インストールするか、再構築してMILTERが組み込まれた状態にしましょう。

/etc/mail/sendmail.mc を以下のように追加します。

...
INPUT_MAIL_FILTER(`milter-regex',`S=unix:/var/spool/milter-regex/sock, T=S:30s;R:2m')
...

編集を終えたら、cfファイルを作成します。

$ m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

milter-regex を起動し、sendmail を再起動する

全ての設定を終えたら、milter-regex を起動し、sendmail を再起動します。

$ /etc/init.d/milter-regex start
milter-regex を起動中:                                     [  OK  ]

$ /etc/init.d/sendmail restart
sendmail を停止中:                                         [  OK  ]
sendmail を起動中:                                         [  OK  ]

$ chkconfig milter-regex on
最後にシステムの再起動があってもmilter-regex が自動で起動するようにchkconfigで設定しておきましょう。

milter-regex をカスタマイズする

milter-regex の設定には、
/etc/mail/milter-regex.conf の編集を行います。

デフォルトでは、何も設定されていません。

ここでは、スパムの可能性が大きい2点を設定します。

  • ドメインでない(ドットがない場合)
  • サーバーのIPアドレスを詐称
1
2
3
4
5
6
7
8
9
# Insert here Your milter-regex rules.
# See manpage milter-regex for details.
# You don't need to reload config; milter-regex reloads it when it changes.

reject "Malformed HELO (not a domain, no dot)"
helo /\./n

tempfail "Malformed HELO (can't be me)"
helo /^11\.22\.33\.44$/
  • 5 – 6 行 : HELOで送られてきたホスト情報にドット(.)を含まない場合は、拒否します。
  • 8 – 9 行 : HELOで送られてきたホスト情報が自IPアドレス(ここでは、例として 11.22.33.44 )の場合は、一時的に拒否します。

いずれも拒否されますが、この違いは、具体的にはSMTPのエラーコード 554 と 451 の違いになります。
これを簡単に説明すれば、
前者の場合、一般的にメールの送信側は、メールが送信できないと判断します。
後者の場合、一般的にメールは一時的に送信できないものと判断し、ある一定間隔の後、再送しようとします。
もしも、スパム送信の場合、いずれであっても、二度と同じメールを送信して来ないでしょう。しかし、スパム送信でない一般のメールサーバーからの送信なら、ある一定期間の後、再送してきます。その場合、再送として扱われるので、このチェックは外れます。

つまり、
rejectは絶対に変なサーバーからメール送信されようとしている場合に使います。
tempfailは、ほぼ間違いなく変なサーバーからメール送信されようとしている場合に使います。仮に間違っていた場合、最悪は、数日後にメールは再送されて来るはずです。

  • 正規表現のオプション
    e
    POSIX の拡張正規表現 こちらが、よく一般的な利用されている正規表現?だと思います。 メタ文字 “+”、”?”、”|” が使える方です。
    i
    大文字小文字の区別をしない。
    n
    マッチしない。
  • チェック設定項目
    helo [name]
    HELOコマンドで送られてきたクライアント情報が、name に指定された文字列(正規表現)に一致した場合、接続を拒否します。一般的に、クライアント情報は、ホスト名が提供されるはずです。
    connect [name] [address]
    送信者のホスト名とアドレスの両方が指定された正規表現に一致した場合、接続を拒否します。 数値アドレスには、IPv4ならドット(.)区切りで、IPv6ならコロン(:)16進数表記で設定できます。 ホスト名は、数値アドレスのDNSの逆引きの結果です。(sendmailのmilterプラグインが独立して実行した結果です。) 逆引きが失敗したときに、ホスト名は[]内に数値アドレスが含まれて出力されます。
  • 動作設定項目
    reject [message]
    メール受信を拒否します。SMTP応答は3桁のコード554 を返信し、永続的なエラーであることを通知します。 これによって、メールの送信側は、メール送信を断念すべきです。具体的にはメールキューが外され、送信不可の処理を行います。 messageは、ロギング情報( /var/log/maillog )へrejectが実施された時に出力されます。
    tempfail [message]
    メール受信を一時的に拒否します。SMTP応答は3桁のコード451 を返信し、一時的なエラーであることを通知します。 これによって、メールの送信側は、ある一定期間の後にメールを再送することができます。具体的にはメールキューに残され、一定期間の後、再送処理が実施されます。 messageは、ロギング情報( /var/log/maillog )へtempfailが実施された時に出力されます。

上記以外にもたくさんの設定可能な項目があります。
詳しくは、http://www.benzedrine.cx/milter-regex.html を参照してください。


telnet を使ってメール送信できないことを確認してみる

HELOコマンドによるスパムチェックなので、一般的なフリーメールなどからではテストできません。この場合、telnet で簡単に確認することができます。
2つのシェルを使って確認します。
シェル#1は、telnet でHELOコマンドを発行して確認します。
シェル#2は、常にメールログを確認できるようにしておきます。

シェル#1

$ telnet localhost 25
Trying 127.0.0.1...
Connected to mail.exmaple.com (127.0.0.1).
Escape character is '^]'.
220 mail.exmaple.com ESMTP Sendmail 8.13.8/8.13.8; Thu, 24 Nov 2011 16:53:08 +0900
HELO 11.22.33.44
250 mail.exmaple.com Hello mail.exmaple.com [127.0.0.1], pleased to meet you
quit
221 2.0.0 mail.exmaple.com closing connection
Connection closed by foreign host.
$ 

シェル#2

$ tail -f /var/log/maillog
        :
 
Nov 24 16:53:27 mail sendmail[22609]: pAO7r8qo022609: Milter: helo=11.22.33.44, reject=451 4.7.1 Malformed HELO (can't be me)
        :

ログ情報に、ちゃんとメッセージが表示されればOKです。


どうでしょうか、HELOでふてぶてしくもサーバーのIPアドレスを名乗るスパマーを排除するやり方を、簡単に解説してみました。

milter-regex は、このHELOのチェックだけでなく接続するIPアドレス、ホスト名などもチェックできます。 ヘッダー情報、メール本文の情報もチェックできます。

まだまだ使えそうですね。スパムに困っておられる方には、自前のフィルターを正規表現で作成できて、なかなか使い勝手が良いのでおすすめだと思います。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない検索ができないことがあります。


関連記事 :

httpd(apache)の最新版をインストールする(CentOS,ScientificLinux編)

httpd(apache)をインストールする(CentOS,ScientificLinux編) などでhttpd(apache)のインストールを ...

sendmail で smf-spf を使ってSPF認証する

以前の記事 評判のさくらのVPSでSMTP(Sendmail)を公開する時にやっておきたいこと では、SPFの送信側の対処について記述しました。 ...

sshpassを使ってパスワード指定のSSH接続を行ってみる(パスワード指定自動ログイン)

今回は、SSHです。 sshpass( Non-interactive ssh password authentication ) を使う ...

評判のさくらのVPSでSMTP(Sendmail)を公開する時にやっておきたいこと

以前の記事 評判のさくらのVPSを使うときに最初にやっておきたいこと(CentOS編) の SMTP(Sendmail)サーバー編で ...

リポジトリの追加・削除、無効・有効の設定をしてみる

このサイトでは、主に2つのリポジトリを追加、利用しています。 IUS – IUSコミュニティプロジェクトは、Redhat ...



コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

[ 画像提供元 : Amazon ] 先日、1TBのディスクの入れ替え時にバックアップをとろうとディスクコピーを行いました。 その際 ...

Windows で Linux ファイルシステム Ext4 のディスクをマウントするには? Ext3Fsd が、おそらく、最も簡単なツール ...

今回は、Windows で Compass を使ってみました。 Compass とは、 Sass(サス、Syntactica ...

今回は、Anti Adblock を使ってみました。 Anti Adblock とは、 そもそも Adblock という ウェブ ...

デスクトップ環境でない サーバーで、Webページのキャプチャー画像をコマンドで撮る には、wkhtmltoimage, CutyCapt ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ
Time : 0.2258 [s]