ようこそゲストさん

Magical Diary, beta version

メッセージ欄

分類 【Postfix】 で検索

一覧で表示する

[Postfix] PostfixとAMaViSでウイルススキャン

2007/07/22 8:04 HIRATA Yasuyuki

方針

  1. *:25で待ち受けているPostfixはプロクシとして動作して、受け取ったメールを 127.0.0.1:10024 で待ち受けている AMaViS へ引き渡す。
  2. 127.0.0.1:24 で待ち受けている AMaViS は、ClamAVやSpamAssassinで処理を行い、問題が無ければ 127.0.0.1:10025 で待ち受けている Postfix へ引き渡す。(ウイルスが含まれていれば、接続元 (Postfix) に対してエラーを返す。
  3. 127.0.0.1:10025 で待ち受けているPostfixは、受け取ったメールを適切に配送する。(127.0.0.1 から受け取る以外、通常の動作と変わりが無い。)

これを図に表したものを以下に示す:

 the net
    |
    v
+---------+        +----------+     +---------+
| *:25    | -----> | L:10024  | --> | L:10025 | --> (deliver)
| Postfix | proxy  | AMaViS   |     | Postfix |
+---------+        +----------+     +---------+
                     ^      ^
                     |      |
                     v      v
             +---------+  +--------------+
             | L:3310  |  | perl module  |
             | ClamAV  |  | SpamAssassin |
             +---------+  +--------------+
* "L" は 127.0.0.1 を表す

導入するべきパッケージ (ports)

  • mail/postfix
  • security/amavisd-new
  • security/clamav

設定手順

  1. 正常に Postfix が動作するように設定する。
  2. /usr/local/etc/amavisd.conf に下記の設定を行う。これにより、127.0.0.1:10024 で AMaViS が動作する。
    $inet_socket_port = 10024;
    $final_virus_destiny = D_REJECT;
    
  3. AMaViSを再起動する。
    # /usr/local/etc/rc.d/amavisd restart
    
  4. master.cf中、smtpの項目を下記の通り修正:
    smtp      inet  n       -       y       -       -       smtpd
      -o smtpd_proxy_filter=127.0.0.1:10024
      -o smtpd_client_connection_count_limit=10
    
  5. master.cfに下記内容を追加:
    127.0.0.1:10025 inet n - y - - smtpd
      -o content_filter=
      -o local_recipient_maps=
      -o relay_recipient_maps=
      -o smtpd_restriction_classes=
      -o smtpd_client_restrictions=
      -o smtpd_helo_restrictions=
      -o smtpd_sender_restrictions=
      -o smtpd_recipient_restrictions=permit_mynetworks,reject
      -o mynetworks=127.0.0.0/8
      -o strict_rfc821_envelopes=yes
    
  6. Postfixを再起動する。
    # /usr/local/etc/rc.d/postfix reload
    
  7. テストする。ここで本文で送っている文字列は試験用のウイルスであり、実害は無い。
    % telnet localhost smtp
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    220 pluto.ansi.co.jp ESMTP Postfix
    HELO pluto.ansi.co.jp
    250 pluto.ansi.co.jp
    MAIL FROM:<postmaster@asuka.net>
    250 2.1.0 Ok
    RCPT TO:<postmaster@asuka.net>
    250 2.1.5 Ok
    DATA
    354 End data with .
    To: postmaster
    From: postmaster
    Subject: test
    Date: Date: Sun, 22 Jul 2007 11:22:33 +0900 (JST)
    X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
    .
    554 5.7.0 Reject, id=18885-14 - VIRUS: Eicar-Test-Signature
    QUIT
    221 2.0.0 Bye
    Connection closed by foreign host.
    

注意点

content_filter を利用して AmaViSを呼び出すことは推奨しない。これは、一度Postfixがメールを受け取りキューに入った時点で呼び出されるため、送信者 (多くの場合、無関係な第三者) へのエラーメールを発生させるためである。

[Postfix] 特定の国からのメールをすべて拒否

2007/07/17 1:44 HIRATA Yasuyuki

中国 (支那の方) と韓国からの spam が多いため、国ごと拒否する作戦。(どうせ spam 以外のメール来ないからいいやと。)

  1. まず、各NICからIPアドレス割り当て状況一覧を取得。
  2. mkreject.pl を利用して Postfix で扱う形式に変換する。(Postmap コマンドに path が通っている必要がある。) 作成された reject_??.db は適当なディレクトリ (/usr/local/etc/postfix/reject_cc など) に配置する。(Mkreject.pl は1時間くらいで適当に作ったものなのでかなり手抜きです。一応動きますが。)
    % perl mkreject.pl delegated-*-latest
    
  3. Postfix の main.cf に以下のように設定。ファイル reject_kr, reject_cn はそれぞれ韓国・中国のデータ。
    smtpd_client_restrictions =
      permit_mynetworks
      check_client_access hash:/usr/local/etc/postfix/reject_cc/reject_kr
      check_client_access hash:/usr/local/etc/postfix/reject_cc/reject_cn
    
  4. Postfix を再起動。
    # /usr/local/sbin/postfix reload
    
  5. /var/log/maillog を確認して中韓からのメールが拒否されていることを確認する。

うちの環境では、中国と韓国からのメールを拒否することで spam が8割以上減少した。ただし、この方法ではこれらの国からメールをまったく受信できなくなるため、十分に検討した上で設定する必要がある。

reject_kr_log.png

  • アドレス収集ボットからアドレスを隠蔽する Magical Diary, beta version HIRATA Yasuyuki
    ウェブサイトにメールアドレスを掲載するとボット (bot = robot) に収集され、そのうちspamが大量に押し寄せるようになる。私のアドレスも10年ほど前から無防備に晒していたため、今では1日に500通ほどのspamが送信されてくる。(実際には、前述...
© 2007 HIRATA Yasuyuki <yasu@asuka.net>, all rights reserved