Postfix:SASL認証にシンプルなファイルを使用する方法?


8

Debian VPSでPostfixを実行して、アプリケーションから電子メールを送信したいのですが。アプリケーション(他のVPSで実行)は、SMTPを介してPostfixに接続します。Postfixは受信メールを処理する必要はありません。発信メッセージを送信するだけです。

第三者中継を防ぐには、SASL認証を使用する必要があります。しかし、SASL認証のためにDovecotやMySQLを実行したくありません。

シンプルなファイル(ユーザー名とパスワードを含む)を使用してSASL認証を設定するにはどうすればよいですか?

私はすでに同様の質問を見つけました。しかし、そこに与えられた満足のいく答えはありません。


ファイアウォールを使用して、他のVPSのIPアドレスのみが接続できるようにします。さらに、ファイアウォールに障害が発生した場合でも、main.cfでmynetworks変数を設定して、postfixにそれを認識させることができます。SASLが本当に必要な場合は、postfixに付属のSASL_READMEを読み、/ etc / sasldbを「データベース」として使用するようにSASLを設定します。箱から出して動作するはずです。saslpasswdは、ファイルを追加/削除/変更します。
AndreasM 2013年

回答:


14

現在、Postfixは2つのSASL認証方式のみをサポートしています。その1つはDovecotですが、これは望ましくありません。もう1つはCyrusです。これは、Postfixを書き直さなくても取得できるものとほぼ同じです。別の認証デーモン(saslauthd)を実行する必要がありますが、認証ファイルは簡単に編集および更新できます。

Cyrus SASLの基本的な使用法はpostfixドキュメントサイトにありますが、ここでは簡単な説明を示します。なんらかの混乱を招くものがある場合は、リンクをご覧ください

まず、プラグインを使用してCyrus SASLをインストールしますsasldb。(それを行う方法は読者の練習として残されています。おそらく、unixのブランドが使用しているパッケージシステムにパッケージがあるはずです。)PostfixとSASLの間の通信は、unixドメインソケットを介して行われるため、 SASLグループにpostfixを追加し、そのグループにディレクトリへの読み取りおよび実行権限があることを確認し/var/run/saslauthdます。

SASLを構成する

/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):

ユーザー名と一緒にドメインを指定すると、ユーザーは認証時に「ユーザー名」だけでなく「ユーザー名@ example.com」を使用する必要があることに注意してください。

入力したユーザーを確認するには、を実行しsasldblistusers2ます。

saslauthdを起動し、次のようにして認証が機能することを確認します

testsaslauthd -u username@example.com -p password

Postfixを構成する

それが終わったら、/ etc / postfix / main.cfを編集して、SASLを使用し、それがSMTPであることを認証していることをCyrusに通知するようにPostfixに指示します。

smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd

次に、postfixをリロードすると、設定されます。


幅広い回答ありがとうございます!私はすべての手順を実行しましたが、すべてがうまくいくようです。sasldblistusers2追加したユーザーのリストを正しく出力します。ただし、を実行するとtestsaslauthd、次の結果が得られます0: NO "authentication failed"。どうすれば修正できるかわかりますか?これは私の/var/log/auth.logsaslauthd[30471]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=pam] [reason=PAM auth error]
ジョナサン

これは、saslauthdがsasldbの代わりにPAMを使用しようとしていることを意味します。起動に使用したコマンドラインは何ですか?
ジェニーD

私はtestaslauthdを使用し(元の回答で説明したとおり)、-s smtpdそれに追加してみました。saslauthd を設定MECHANISMS="sasldb"/etc/default/saslauthdて再起動すると、testsaslauthdから同じ結果が得られます。認証ログには、別のメッセージを示していますsaslauthd[3706]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=sasldb] [reason=Unknown]
ジョナサン・

2
うーん、testaslauthdは、次のようにユーザー名とドメインの部分を個別に指定すると機能しtestsaslauthd -u username -r example.com -p XXXます0: OK "Success."。今私は... Postfixはこれを回避できるかどうかを確認します
ジョナサン

使用する-s smtpd場合は、sasldbの代わりにPAMを使用するので、使用しないでください
Jenny D

1

第三者中継を防ぐには、SASL認証を使用する必要があります。

SASLは、これを防ぐための数多くの方法の1つにすぎません。もう1つは、他のVPSで使用するIPをホワイトリストに登録するか、TLSクライアント証明書を要求することです(これは最も安全な方法と言えます)。

Postfixマシンで署名CAをセットアップし、電子メールを送信するVPSごとに1つの証明書に署名するだけです。
次に、送信されたすべてのメールに対して完全なクライアント証明書の検証を要求します。他の送信方法を無効にします。

postfixはSASLを直接サポートしていないため、要求することはできません。


1

いくつかのことを明確にします

sasldbでアカウントを作成します。

% saslpasswd2 -c -u fqdn username

認証のテスト:

% testsaslauthd -u username -p password

(注:ユーザー名の後にfqdn 続きません

rootアカウントを作成することも追加したいと思います

% saslpasswd2 -c -u example.com root

認証させません

% testsaslauthd -u root -p some_password
0: NO "authentication failed"

しかし、これはバグではありません。これは単なる安全機能です。


0

着信メールを処理する必要がない場合は、認証に煩わされないでください。ファイアウォールで着信トラフィックをブロックするか、ローカルホストのみに制限します。

 inet_interfaces = 127.0.0.1

オープンリレーの問題はなくなり、postfixを介してメールを送信する必要があるアプリケーションの複雑さも回避できます。


答えてくれてありがとう。アプリケーションは他のVPSで実行されているため、Postfixはlocalhost以外のホストからメールを受信します。
ジョナサン

予想される接続のIPを定義し、それらをPostfix構成またはファイアウォール構成のいずれかにリストできますか?たとえば、それらはすべて単一のネットブロック、または簡単にリストできるIPまたはブロックの十分に小さいセットにある場合があります。または、仮想ホスト間でプライベートネットワークを使用することもできます。
mc0e 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.