web-dev-qa-db-ja.com

haproxyの背後でpostfixを構成する方法?

ここ数年、中小企業向けに問題なくメールサーバーを稼働させていました。

会社が成長したので、少し冗長性を追加し、ロードバランサーを前面に配置したフェイルオーバーメールサーバー(haproxy)を追加しました。

すべてが1週間前までうまくいき、スパマーの犠牲になり、すべてをシャットダウンしなければならなくなりました。グーグルをたくさん使って、正しい設定のないロードバランサーが私のポストフィックスをオープンリレーに変換することがわかりました。

私はこれを解決したいし、多くのドキュメントも見つけましたが、率直に言って、私は少し迷っています。他の変更点の中でhaproxy.cfgにsend-proxyを追加する必要があることはわかっていますが、postfixを再度強化するためにpostscreenを追加する方法がわかりません。

誰かが私を案内したり、少なくとも私が見つけられなかったリンクを、これをどのようにして達成することができるかについてのマニュアルやチュートリアルに教えてもらえますか?

私はpostfixの公式ドキュメントで迷子になっていることを認めます。

事前に感謝します

3
Joe Silencio

HAProxy usint TProxyを介したSMTP

クライアントのIPアドレスを保持するには、 TProxy を使用する必要があります。 tproxyの検索これは、パブリックIPがhaproxyにヒットしていることを前提としています。

または単にMXを使用してください

別の方法は、NAT 2つのパブリックIPからのポート25で、2つのMXレコードを使用することです。MTAはロードバランシングも処理します。

1
Aaron

Tcpモードでhaproxyを実行する必要があります。

 frontend smtp_in *:25 (SMTP port)
    mode                tcp
    default_backend     smtp_out


 backend smtp_out
    balance leastconn
    server  smtp-server-1.domain.com  smtp-server-1.domain.com:25
    server  smtp-server-2.domain.com  smtp-server-2.domain.com:25
1

多分これは誰かを助ける。私はkubernetesクラスター内で実行しているため、haproxyの構成は異なります。しかし、Postfixの設定では、2つのファイルを適宜更新します

master.cf

# Exposed SMTP service (postscreen support is needed to support the proxy protocol [search postscreen_upstream_proxy_protocol in main.cf])
smtp      inet  n       -       -       -       1       postscreen
smtpd     pass  -       -       -       -       -       smtpd

main.cf

# This is required to support the proxy protocol to acquire the correct source ip address from whoever is connecting to this server
# It's really important to get this information because otherwise ALL your connections will come from your internal ip address
# Guess what you allow to send emails, without question? Thats right! You're $mynetworks. Which means because you cannot get the
# correct source ip address, it permits EVERYBODY TO SEND EMAIL THROUGH YOUR SERVER! You basically become an open relay
postscreen_upstream_proxy_protocol = haproxy
postscreen_upstream_proxy_timeout = 5s
0