SEO対策とセキュリティで企業をバックアップします。

インターネット上のアクセスボリュームUPをお約束します。

Postfixのセキュリティ制限チェックよくある勘違いについて

postfixでメールのチェックする機能の一つに「SMTP アクセス制限リスト」がある。具体的には以下の設定のことを指している。

  • ・smtpd_client_restrictions
  • ・smtpd_helo_restrictions
  • ・smtpd_sender_restrictions
  • ・smtpd_recipient_restrictions
  • ・smtpd_data_restrictions
  • ・smtpd_end_of_data_restrictions
  • ・smtpd_etrn_restrictions

この中でもよく使われるのがsmtpd_recipient_restrictions、smtpd_client_restrictions、smtpd_sender_restrictionsのあたりだと思う。この違いが実は非常にわかりにくく多くの人が勘違いしてしまうポイントである。

簡単に言ってしまうと下記の表ような感じになる。telnetでsmtpプロトコルを叩いて操作できる人ならすぐ理解できると思う。

メールエンヴェロープという言葉はご存知でしょうか?電子メールは実在する郵便で言うところの封書の仕組みと同じです。封筒に書いてある住所、宛名が実際に送付される先であり、差出人も同様である。これが電子メールでは(MAIL FROM,RCPT TOの箇所)。一方封書の中に入っている手紙にも宛名、差出人が書かれているのが普通ですよね。これが電子メールのメールBODYに書いてある「From: To:」なのです。封筒に書かれている宛名と手紙に書かれている宛名が違っても問題ありません。郵便は封筒の宛名を見て配送するので。電子メールも全く同様。 メールBODYはSMTPコマンドで言うとDATAコマンド発行以降で入力されたデータ部分を言います。

smtpd_sender_restrictionsMAIL FROMコマンド時点で評価する。それまでのコネクションでわかっている情報を使い判断
smtpd_recipient_restrictionsRCPT TOコマンド時点で評価する。それまでのコネクションでわかっている情報を使い判断
smtpd_client_restrictionsSMTPプロトコル通信上においてメールサーバが(クライアントが送信するコマンド)受信する各コマンドを評価する。ある意味全体に渡ってチェックする制限

各設定で被ってしまう設定(同じことをする設定)がよくある。そしてcheck_sender_access、check_client_access、check_recipient_accessの使う場所を誤解してしまうケースがある。どういうことかといえばsmtpd_recipient_restrictionsだからチェックファイルに対する命令はcheck_recipient_accessしか使えないと思い込んでしまうことだ。これは間違いでなんでもありだ。要はどこでも使えるから、最初にきちんと設計する必要がある。smtpd_recipient_restrictionsでもちろんcheck_sender_accessはありです。つまりRCPTの段階でsender情報をチェックするという意味なのでRCPT TOに指定しているメールアドレスを必ずしもチェックするだけというわけではない。設計者にとってどのタイミングで行うか!?というのが合理的であればどのように書いてもよいのである。それ故に大切なことはルールを配置する順番がフィルターを正しく動かす根拠となるということを理解することです。