送信メールの量を制限するために postfix + policyd2 を使用しようとしています。しかし、policyd2 ポリシーを実装するとアクセスが拒否され、何をしても拒否されます。
- Postfix バージョン 2.11.4
- PolicyD2 (cluebringer) バージョン 2.0.14-1
電子メール クライアントからのエラー ボックス:
メール送信中にエラーが発生しました。メールサーバーが応答しました: 4.7.1 <[メールアドレス]>: 受信者アドレスが拒否されました: アクセスが拒否されました。メッセージの受信者を確認してください[メールアドレス]そしてさらに試みる。
postfix で policyd2 をオフにすると、/etc/postfix/main.cf
すべてが動作します。
smtpd_end_of_data_restrictions=check_policy_service inet:127.0.0.1:10031
smtpd_recipient_restrictions=check_policy_service inet:127.0.0.1:10031,
再度オンにすると、次のようになります/var/log/maillog
:
postfix/smtpd[3228]: >>> START Helo command RESTRICTIONS <<<
postfix/smtpd[3228]: generic_checks: name=reject_invalid_helo_hostname
postfix/smtpd[3228]: reject_invalid_hostaddr: [192.168.0.10]
postfix/smtpd[3228]: generic_checks: name=reject_invalid_helo_hostname status=0
postfix/smtpd[3228]: >>> END Helo command RESTRICTIONS <<<
postfix/smtpd[3228]: >>> START Recipient address RESTRICTIONS <<<
postfix/smtpd[3228]: generic_checks: name=check_policy_service
postfix/smtpd[3228]: trying... [127.0.0.1]
postfix/smtpd[3228]: auto_clnt_open: connected to 127.0.0.1:10031
postfix/smtpd[3228]: send attr request = smtpd_access_policy
postfix/smtpd[3228]: send attr protocol_state = RCPT
postfix/smtpd[3228]: send attr protocol_name = ESMTP
postfix/smtpd[3228]: send attr client_address = 88.88.88.88
postfix/smtpd[3228]: send attr client_name = example.pl
postfix/smtpd[3228]: send attr reverse_client_name = example.pl
postfix/smtpd[3228]: send attr helo_name = [192.168.0.10]
postfix/smtpd[3228]: send attr sender = [email protected]
postfix/smtpd[3228]: send attr recipient = [email protected]
postfix/smtpd[3228]: send attr recipient_count = 0
postfix/smtpd[3228]: send attr queue_id =
postfix/smtpd[3228]: send attr instance = c9c.5584b989.ab0c0.0
postfix/smtpd[3228]: send attr size = 368
postfix/smtpd[3228]: send attr etrn_domain =
postfix/smtpd[3228]: send attr stress =
postfix/smtpd[3228]: send attr sasl_method = PLAIN
postfix/smtpd[3228]: send attr sasl_username = [email protected]
postfix/smtpd[3228]: send attr sasl_sender =
postfix/smtpd[3228]: send attr ccert_subject =
postfix/smtpd[3228]: send attr ccert_issuer =
postfix/smtpd[3228]: send attr ccert_fingerprint =
postfix/smtpd[3228]: send attr ccert_pubkey_fingerprint =
postfix/smtpd[3228]: send attr encryption_protocol = TLSv1
postfix/smtpd[3228]: send attr encryption_cipher = ECDHE-RSA-AES256-SHA
postfix/smtpd[3228]: send attr encryption_keysize = 256
postfix/smtpd[3228]: 127.0.0.1:10031: wanted attribute: action
postfix/smtpd[3228]: input attribute name: action
postfix/smtpd[3228]: input attribute value: DEFER
postfix/smtpd[3228]: 127.0.0.1:10031: wanted attribute: (list terminator)
postfix/smtpd[3228]: input attribute name: (end)
postfix/smtpd[3228]: check_table_result: inet:127.0.0.1:10031 DEFER policy query
postfix/smtpd[3228]: NOQUEUE: reject: RCPT from example.pl[88.88.88.88]: 450 4.7.1 <[email protected]>: Recipient address rejected: Access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<[192.168.0.10]>
postfix/smtpd[3228]: generic_checks: name=check_policy_service status=2
postfix/smtpd[3228]: >>> END Recipient address RESTRICTIONS <<<
postfix/smtpd[3228]: > example.pl[88.88.88.88]: 450 4.7.1 <[email protected]>: Recipient address rejected: Access denied
postfix/smtpd[3228]: watchdog_pat: 0x83b23a8
ポリシーの例。
ポリシーの作成:
INSERT INTO policies VALUES (1, 'In Out', 10, 'In Out Policy', 0);
INSERT INTO policy_members VALUES (1, 1, 'any', 'any', '' ,0);
クォータの追加 - アクション:
INSERT INTO quotas (PolicyID,Name,Track,Period,Verdict,Data) VALUES (1,'Sender:user@domain', 'Sender:user@domain', 60, 'DEFER', 'Deferring: To many messages from sender in last 60s.');
INSERT INTO quotas (PolicyID,Name,Track,Period,Verdict,Data) VALUES (1,'Recipient:@domain', 'Recipient:@domain', 60, 'REJECT', 'Quota limit reached.');
クォータ制限を追加します:
INSERT INTO quotas_limits (QuotasID, Type, CounterLimit) VALUES (1,'MessageCount', 12);
INSERT INTO quotas_limits (QuotasID, Type, CounterLimit) VALUES (2,'MessageCount', 20);
Web GUI を使用できない (PHP なし) ため、正しいかどうかわかりません。さまざまなポリシーの例を検索して試してみましたが、エラーはまったく同じままです。
答え1
policyd2 sqlite3 データベース ファイルの権限が間違っていました。
PolicyD2 には、特定のユーザーとしてデーモンを実行する機能があります。私の場合:
/etc/policyd.conf
# User to run this daemon as
user=policyd
group=policyd
データベースの権限は root:root でした。
-rw-r--r-- root root policyd2.db
policyd:policyd に変更した後、メールを送信できるようになりました。
-rw-r--r-- policyd policyd policyd2.db
これで、アクセス拒否エラーの意味が理解できました。