8.10. Postfix サービスを保護する
Postfix は、SMTP (Simple Mail Transfer Protocol) を使用して他の MTA 間で電子メッセージを配信したり、クライアントや配信エージェントに電子メールを送信したりするメール転送エージェント (MTA) です。MTA は相互間のトラフィックを暗号化できますが、デフォルトではそうしない場合があります。設定をより安全な値に変更することで、さまざまな攻撃に対するリスクを軽減することもできます。
8.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
バイトです。
8.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
パッケージがシステムにインストールされている
手順
Dovecot をセットアップします。
/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 サーバーのデフォルト設定を想定しています。オプション: TCP 経由で Postfix 認証リクエストをリッスンするように Dovecot をセットアップします。
service auth { inet_listener { port = port-number } }
/etc/dovecot/conf.d/10-auth.conf
ファイルのauth_mechanisms
パラメーターを編集して、電子メールクライアントが Dovecot での認証に使用する方法を指定します。auth_mechanisms = plain login
auth_mechanisms
パラメーターは、さまざまなプレーンテキストおよび非プレーンテキストの認証方法をサポートしています。
/etc/postfix/main.cf
ファイルを変更して Postfix をセットアップします。Postfix SMTP サーバーで SMTP 認証を有効にします。
smtpd_sasl_auth_enable = yes
SMTP 認証用の Dovecot SASL 実装の使用を有効にします。
smtpd_sasl_type = dovecot
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
ファイルで指定されたポート番号に置き換えます。Postfix SMTP サーバーがクライアントに提供する SASL メカニズムを指定します。暗号化されたセッションと暗号化されていないセッションに異なるメカニズムを指定できることに注意してください。
smtpd_sasl_security_options = noanonymous, noplaintext smtpd_sasl_tls_security_options = noanonymous
前のディレクティブは、暗号化されていないセッションでは匿名認証が許可されず、暗号化されていないユーザー名またはパスワードを送信するメカニズムが許可されていないことを指定しています。暗号化セッション (TLS を使用) の場合、非匿名認証メカニズムのみが許可されます。