2.10. Postfix サービスを保護する

Postfix は、SMTP (Simple Mail Transfer Protocol) を使用して他の MTA 間で電子メッセージを配信したり、クライアントや配信エージェントに電子メールを送信したりするメール転送エージェント (MTA) です。MTA は相互間のトラフィックを暗号化できますが、デフォルトではそうしない場合があります。設定をより安全な値に変更することで、さまざまな攻撃に対するリスクを軽減することもできます。

2.10.2. DoS 攻撃を制限するための Postfix 設定オプション

攻撃者は、トラフィックでサーバーをあふれさせたり、クラッシュを引き起こす情報を送信したりして、サービス拒否 (DoS) 攻撃を引き起こす可能性があります。/etc/postfix/main.cf ファイルで制限を設定することにより、このような攻撃のリスクを軽減するようにシステムを設定できます。既存のディレクティブの値を変更するか、<directive> = <value> 形式のカスタム値で新しいディレクティブを追加できます。

DoS 攻撃を制限するには、次のディレクティブリストを使用します。

smtpd_client_connection_rate_limit
このディレクティブは、時間単位ごとにクライアントがこのサービスに対して行うことができる接続試行の最大数を制限します。デフォルト値は 0 です。これは、クライアントが時間単位で Postfix が受け入れることができる数と同じ数の接続を行うことができることを意味します。デフォルトでは、ディレクティブは信頼できるネットワークのクライアントを除外します。
anvil_rate_time_unit
このディレクティブは、レート制限を計算する時間単位です。デフォルト値は 60 秒です。
smtpd_client_event_limit_exceptions
このディレクティブは、接続およびレート制限コマンドからクライアントを除外します。デフォルトでは、ディレクティブは信頼できるネットワークのクライアントを除外します。
smtpd_client_message_rate_limit
このディレクティブは、単位時間当たりのクライアントからリクエストへのメッセージ配信の最大数を定義します (Postfix が実際にそれらのメッセージを受け入れるかどうかに関係なく)。
default_process_limit
このディレクティブは、特定のサービスを提供する Postfix 子プロセスのデフォルトの最大数を定義します。master.cf ファイル内の特定のサービスについては、このルールを無視できます。デフォルトでは、値は 100 です。
queue_minfree
このディレクティブは、キューファイルシステムでメールを受信するために必要な空き容量の最小量を定義します。このディレクティブは現在、Postfix SMTP サーバーがメールを受け入れるかどうかを決定するために使用されています。デフォルトでは、Postfix SMTP サーバーは、空き容量が message_size_limit の 1.5 倍未満の場合に、MAIL FROM コマンドを拒否します。空き容量の最小値をこれよりも高く指定するには、message_size_limit の 1.5 倍以上の queue_minfree 値を指定します。デフォルトの queue_minfree 値は 0 です。
header_size_limit
このディレクティブは、メッセージヘッダーを格納するためのメモリーの最大量をバイト単位で定義します。ヘッダーが大きい場合、余分なヘッダーは破棄されます。デフォルトでは、値は 102400 バイトです。
message_size_limit
このディレクティブは、エンベロープ情報を含むメッセージの最大サイズをバイト単位で定義します。デフォルトでは、値は 10240000 バイトです。

2.10.3. Postfix が SASL を使用する設定

Postfix は Simple Authentication and Security Layer (SASL) ベースの SMTP 認証 (AUTH) をサポートしています。SMTP AUTH は Simple Mail Transfer Protocol の拡張です。現在、Postfix SMTP サーバーは次の方法で SASL 実装をサポートしています:

Dovecot SASL
Postfix SMTP サーバーは、UNIX ドメインソケットまたは TCP ソケットのいずれかを使用して、Dovecot SASL 実装と通信できます。Postfix と Dovecot アプリケーションが別のマシンで実行している場合は、この方法を使用します。
Cyrus SASL
有効にすると、SMTP クライアントは、サーバーとクライアントの両方でサポートおよび受け入れられる認証方法を使用して、SMTP サーバーで認証する必要があります。

前提条件

  • dovecot パッケージがシステムにインストールされている

手順

  1. Dovecot をセットアップします。

    1. /etc/dovecot/conf.d/10-master.conf ファイルに次の行を含めます。

      service auth {
        unix_listener /var/spool/postfix/private/auth {
          mode = 0660
          user = postfix
          group = postfix
        }
      }

      前の例では、Postfix と Dovecot の間の通信に UNIX ドメインソケットを使用しています。また、/var/spool/postfix/ ディレクトリーにあるメールキュー、および postfix ユーザーとグループの下で実行しているアプリケーションを含む Postfix SMTP サーバーのデフォルト設定を想定しています。

    2. オプション: TCP 経由で Postfix 認証リクエストをリッスンするように Dovecot をセットアップします。

      service auth {
        inet_listener {
            port = port-number
        }
      }
    3. /etc/dovecot/conf.d/10-auth.conf ファイルの auth_mechanisms パラメーターを編集して、電子メールクライアントが Dovecot での認証に使用する方法を指定します。

      auth_mechanisms = plain login

      auth_mechanisms パラメーターは、さまざまなプレーンテキストおよび非プレーンテキストの認証方法をサポートしています。

  2. /etc/postfix/main.cf ファイルを変更して Postfix をセットアップします。

    1. Postfix SMTP サーバーで SMTP 認証を有効にします。

      smtpd_sasl_auth_enable = yes
    2. SMTP 認証用の Dovecot SASL 実装の使用を有効にします。

      smtpd_sasl_type = dovecot
    3. Postfix キューディレクトリーに相対的な認証パスを指定します。相対パスを使用すると、Postfix サーバーが chroot で実行しているかどうかに関係なく、設定が確実に機能することに注意してください。

      smtpd_sasl_path = private/auth

      この手順では、Postfix と Dovecot の間の通信に UNIX ドメインソケットを使用します。

      通信に TCP ソケットを使用する場合に、別のマシンで Dovecot を探すように Postfix を設定するには、次のような設定値を使用します。

      smtpd_sasl_path = inet: ip-address : port-number

      前の例で、ip-address を Dovecot マシンの IP アドレスに置き換え、port-number を Dovecot の /etc/dovecot/conf.d/10-master.conf ファイルで指定されたポート番号に置き換えます。

    4. Postfix SMTP サーバーがクライアントに提供する SASL メカニズムを指定します。暗号化されたセッションと暗号化されていないセッションに異なるメカニズムを指定できることに注意してください。

      smtpd_sasl_security_options = noanonymous, noplaintext
      smtpd_sasl_tls_security_options = noanonymous

      前のディレクティブは、暗号化されていないセッションでは匿名認証が許可されず、暗号化されていないユーザー名またはパスワードを送信するメカニズムが許可されていないことを指定しています。暗号化セッション (TLS を使用) の場合、非匿名認証メカニズムのみが許可されます。