Debian VPSでPostfixを実行して、アプリケーションから電子メールを送信したいのですが。アプリケーション(他のVPSで実行)は、SMTPを介してPostfixに接続します。 Postfixは受信メールを処理する必要はありません。発信メッセージを送信するだけです。
第三者中継を防ぐには、SASL認証を使用する必要があります。ただし、SASL認証でDovecotやMySQLを実行したくありません。
単純なファイル(ユーザー名とパスワードを含む)を使用してSASL認証を設定するにはどうすればよいですか?
私はすでに同様の 質問 を見つけました。しかし、そこに与えられた満足のいく答えはありません。
現在、Postfixは2つのSASL認証方式のみをサポートしています。その1つはDovecotですが、これは望ましくありません。もう1つはCyrusです。これは、Postfixを書き直さなくても取得できるものとほぼ同じです。別の認証デーモン(saslauthd
)を実行する必要がありますが、認証ファイルは簡単に編集および更新できます。
Cyrus SASLを使用するための基本は postfixドキュメントサイト にありますが、ここでは簡単な説明を示します。 どうぞ混乱を招くものがあればリンクをご覧ください!
まず、プラグインsasldb
を使用してCyrus SASLをインストールします。 (それを行う方法は読者の演習として残されています。おそらく、unixブランドが使用しているパッケージシステムにパッケージがあるはずです。)PostfixとSASLの間の通信は、unixドメインソケットを介して行われるため、 SASLグループに接尾辞を追加し、そのグループにディレクトリ/var/run/saslauthd
に対する読み取りおよび実行権限があることを確認します。
/etc/sasl2/smtpd.confを編集して、SASLがsasldbを使用するように設定します。
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM
Sasldbプラグインは、saslがユーザー名とパスワードにBerkeley DBファイルを使用することを意味します。コマンドsaslpasswd2
を使用してユーザーを追加します。
$ saslpasswd2 -c -u example.com username
Password:
Again (for verification):
ユーザー名と一緒にドメインを指定すると、ユーザーは認証時に「username」だけでなく「[email protected]」を使用する必要があることに注意してください。
入力したユーザーを確認するには、sasldblistusers2
を実行します。
Saslauthdを起動し、次のようにして認証が機能することを確認します
testsaslauthd -u [email protected] -p password
それが終わったら、/ etc/postfix/main.cfを編集して、SASLを使用し、Cyrusに認証されていることをCyrusに通知するようにPostfixに指示します。
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd
次に、postfixをリロードすると、設定されます。
いくつかのことを明確にします
Sasldbでアカウントを作成します。
% saslpasswd2 -c -u fqdn username
認証のテスト:
% testsaslauthd -u username -p password
(注:ユーザー名はnotの後にfqdnが続きます)
Rootアカウントを作成することも追加したいと思います
% saslpasswd2 -c -u example.com root
認証させません、
% testsaslauthd -u root -p some_password
0: NO "authentication failed"
しかし、これはバグではありません。これは単なる安全機能です。
第三者中継を防ぐには、SASL認証を使用する必要があります。
SASLは、これを防ぐ多くの方法の1つにすぎません。もう1つは、他のVPSで使用するIPをホワイトリストに登録するか、TLSクライアント証明書を要求することです(これは最も安全な方法と言えます)。
Postfixマシンで署名CAをセットアップし、Eメールを送信するVPSごとに1つの証明書に署名するだけです。
次に、送信されたすべてのメールに対して完全なクライアント証明書の検証を要求します。他の送信方法を無効にします。
PostfixはSASLを直接サポートしていないため、要求することはできません。
着信メールを処理する必要がない場合は、認証に煩わされないでください。ファイアウォールで着信トラフィックをブロックするか、ローカルホストのみに制限します。
inet_interfaces = 127.0.0.1
オープンリレーの問題がなくなり、アプリケーションをPostfix経由で送信する必要があるアプリケーションの複雑化を回避できます。