That is great!

Can you consider override smtpd_service_name based on the reply ?
This would allow to have different smtpd profiles depending on some
criteria defined in the policy daemon .

Thanks,
José Borges Ferreira


On Sun, Sep 18, 2016 at 2:40 AM, Wietse Venema <wie...@porcupine.org> wrote:

> This is a rough design for the postscreen policy callout.
>
>         Wietse
>
> High-level description
> ======================
>
> After checking the postscreen_access_list, postscreen will call out
> to an optional policy service before making DNS queries or sending
> the PREGREET banner to the client.
>
> The policy test is just another test that the client must pass
> before it can talk to a real Postfix SMTP server.  Just like all
> other postscreen tests, a successful policy test is remembered for
> some amount of time so that a good client does not have to be tested
> with every connection that it makes.
>
> Configuration parameters:
>
>     postscreen_policy_service = inet:host:port | unix:pathname
>     postscreen_policy_timeout = time in seconds
>     postscreen_policy_default_ttl = time in seconds
>     postscreen_policy_default_action = pass | ignore | enforce | drop
>
> The host and port may be numeric or symbolic. If the policy server
> is local, specify 127.0.0.1 or ::1 for maximal robustness.
>
> Actions:
>
>     pass: Skip this test for this client, for the amount of time
>     specified with postscreen_policy_default_ttl.
>
>     ignore, enforce, drop: These actions have the exact same meaning
>     as with other postscreen tests (specifically, "enforce" allows
>     other tests to complete, rejects attempts to deliver mail with
>     a 550 SMTP reply, and logs the helo/sender/recipient information).
>     The postscreen_policy_default_ttl value is ignored.
>
> Protocol
> ========
>
> postscreen sends a request over a policy service connection and
> expects a reply over that same connection. Once the reply is received,
> that connection may be reused for another policy request. It is an
> error for a policy server to close a connection after sending a
> response.
>
> postscreen will use parallel connections when multiple policy queries
> are in progress.
>
> Each policy request contains name=value attributes with the local
> and remote address and port.
>
> Request format:
>     client_address "=" <IPv4 address> | <IPv6 address> <newline>
>     server_address "=" <IPv4 address> | <IPv6 address> <newline>
>     client_port "=" <numerical port> <newline>
>     server_port "=" <numerical port> <newline>
>     <newline>
>
> The order of the attributes is unspecified; the order shown above
> is just an example for readability. A policy server must ignore
> attribute names that it does not know.
>
> Each policy response must contain an action and may contain a ttl
> value that indicates how long postscreen will skip a policy test
> that returns a "pass" result.
>
> Reply format:
>     action "=" "pass" | "ignore" | "enforce" | "drop" <newline>
>     ttl "=" <time in seconds> <newline>
>     <newline>
>
> See "Configuration parameters" above for a description of actions.
> With actions other than "pass", postscreen ignores the ttl attribute.
>
> If a "pass" action specifies no ttl, postscreen_policy_default_ttl
> is used instead.
>
> Error handling
> ==============
>
> When postscreen cannot complete a policy service request, it will
> use the postscreen_policy_default_action and
> postscreen_policy_default_ttl.
>
> Examples of errors:
>
> - The policy server connection is not ready to write (write would block).
>
> - The policy server does not respond to a connection request or
>   policy request within the postscreen_policy_timeout.
>
> - The policy server response is malformed.
>
> Alternatives considered
> =======================
>
> Instead of doing the policy check before DNSBL and PREGREET checks,
> they could be done in parallel, at least some of the time. Then,
> the policy timeouts could be more relaxed. Unfortunately that
> requires that the PREGREET or DNSBL checks expire at the same time
> as the policy check ttl, which is hard to guarantee.
>

Reply via email to