少し問題があります。独自のスクリプトを実行するために、一部のクライアントにサーバーへのアクセスを提供しています(もちろん、独自のchroot環境などで)。今日発生した問題:一部の人々はポート25でローカルホストへのtelnetアクセスを取得し、ほぼオープンリレーである世界中に電子メールを送信しています:(
Postfixを使用していますが、認証も必要です。
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unauth_destination
ただし、ローカルスクリプトは明らかにsasl認証を受ける必要はありません。 permit_mynetworksからローカルホストを削除すると、一部のスパム対策ルーチンが機能しなくなります...
では、ローカルホストが認証なしで外部にではなくローカルにメールを配信できるようにするために、postfixを構成するにはどうすればよいですか?
助言がありますか?
したがって、スパム対策ルーチンはlocalhostを使用しており、悪意のある人々はlocalhostを使用しており、postfixは違いを区別できません。
悪意のあるユーザーを禁止するか、信頼できるネットワーク(permit_mynetworks
)からローカルホストを削除し、他のものを使用するようにスパム対策を構成します。または、 smtpd_client_restrictionscheck_ccert_access
でスパム対策を許可します。
質問に戻ります。あなたはこのようなものを求めています:
/etc/postfix/main.cf:
smtpd_recipient_restrictions =
/* replace permit_mynetworks with the next line */
check_client_access hash:/etc/postfix/client_access,
/* your other stuff */
permit_sasl_authenticated,
check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf,
reject_unauth_destination
smtpd_restriction_classes = local_only
local_only =
check_recipient_access hash:/etc/postfix/local_domains, reject
/etc/postfix/client_access:
localhost local_only
127.0.0.1 local_only
/* check bash#postconf mynetworks for full list of your networks */
/etc/postfix/local_domains:
this.domain OK matches this.domain and subdomains
that.domain OK matches that.domain and subdomains
ただし、スパム対策は外部の受信者にメールを再挿入するため、おそらく機能しません。しかし、それは状況によって異なります。
スパム対策ツールに関する詳細情報をお知らせください。サポートできる場合があります。
UDP:
メールフローがこの設定をどのように通過しているかを説明してください。
制限クラスをよりよく説明することはできません 公式ドキュメント 。
接尾辞制限クラス
Postfix SMTPサーバーは、SMTPサーバーのaccess(5)テーブルの右側にあるreject_rbl_clientやreject_unknown_client_hostnameなどのアクセス制限をサポートしています。これにより、クライアントまたはユーザーごとに異なるジャンクメール制限を実装できます。
すべての受信者にアクセス制限のリストを指定する必要があると、すぐに面倒になります。接尾辞制限クラスを使用すると、UCE制限のグループ(「許容」、「制限」など)に覚えやすい名前を付けることができます。
Postfix制限クラスが存在する本当の理由は、もっとありふれたものです。Postfixアクセステーブルの右側にルックアップテーブルを指定することはできません。これは、Postfixが事前にルックアップテーブルを開く必要があるためですが、読者はおそらくこれらの低レベルの詳細を気にしないでしょう。
制限クラスlocal_only
をsmtpd_restriction_classes = local_only
で定義します。そして
local_only =
check_recipient_access hash:/etc/postfix/local_domains,
reject
「このクラスがチェックされるたびに、チェック check_recipient_access (指定された access(5) データベースで解決されたRCPT TOアドレス、ドメイン、親ドメイン、またはlocalpart @を検索し、実行します。対応するアクション。)最初にメールを拒否し、それ以外の場合はlocal_domains
ファイルに「this.domainがチェックに合格した場合、that.domainがチェックに合格した場合」と表示されます。
ただし、この制限クラスをすべての電子メールに適用する必要はありません。送信ホストがlocalhostの場合に適用し、permit_mynetworks
ルールを削除します。これを行うには、 check_client_access hash:/ etc/postfix/client_access (指定されたアクセスデータベースで、クライアントのホスト名、親ドメイン、クライアントのIPアドレス、または最下位のオクテットを削除して取得したネットワークを検索します。を参照してください。 access(5) 詳細についてはマニュアルページ。)smtpd_recipient_restrictionsへ。 /etc/postfix/client_access
ファイルをチェックし、そのlocalhost
がlocal_only
制限を適用するかどうかを確認するように指示されています。それがまさに私たちがやりたいことです。
それが役に立てば幸い。
メールフローは次のとおりです。
localhost
apply local_only
制限クラスの場合)UPD2興味があるかもしれないsmtpd_recipient_restrictions(および他の自己定義クラス)の別のオプションを見つけました
次のいずれかに該当する場合にリクエストを許可します。
- Postfixはメールフォワーダーです。解決されたRCPTTOドメインは$ relay_domainsまたはそのサブドメインと一致し、アドレスには送信者指定のルーティング(user @ elsewhere @ domain)が含まれていません。
- Postfixが最終的な宛先です。解決されたRCPTTOドメインは、$ mydestination、$ inet_interfaces、$ proxy_interfaces、$ virtual_alias_domains、または$ virtual_mailbox_domainsと一致し、アドレスには送信者指定のルーティング(user @ elsewhere @ domain)が含まれていません。
1つのオプションは、iptablesを使用して、それらのユーザーがポート25でローカルホストに接続できないようにすることです。例:
iptables -A OUTPUT -p tcp -d 127.0.0.1 --dport 25 -m owner --uid-owner user1 -j REJECT
iptables -A OUTPUT -p tcp -d 127.0.0.1 --dport 25 -m owner --uid-owner user2 -j REJECT
[etc]