mirror of
https://github.com/vdukhovni/postfix
synced 2025-08-30 21:55:20 +00:00
postfix-2.9-20110116
This commit is contained in:
committed by
Viktor Dukhovni
parent
ee84c57d75
commit
b9df75b70d
@@ -16457,3 +16457,17 @@ Apologies for any names omitted.
|
|||||||
now configurable, in case someone needs this. Files:
|
now configurable, in case someone needs this. Files:
|
||||||
global/mail_params.h, postscreen/postscreen.c, mantools/postlink,
|
global/mail_params.h, postscreen/postscreen.c, mantools/postlink,
|
||||||
proto/postconf.proto.
|
proto/postconf.proto.
|
||||||
|
|
||||||
|
20110116
|
||||||
|
|
||||||
|
Cleanup: soft_bounce support for postscreen(8). Files:
|
||||||
|
postscreen/postscreen_smtpd.c, postscreen/postscreen_send.c.
|
||||||
|
|
||||||
|
Cleanup: for smtpd(8) compatibility, postscreen(8) now
|
||||||
|
strips deprecated route address prefixes from email addresses
|
||||||
|
(@here,@there:user@example becomes user@example). This is
|
||||||
|
primarily to make postscreen(8) logging more similar to
|
||||||
|
that of smtpd(8). File: postscreen/postscreen_smtpd.c.
|
||||||
|
|
||||||
|
Cleanup: documentation, in preparation for the Postfix 2.8
|
||||||
|
stable release.
|
||||||
|
@@ -13,15 +13,14 @@ postscreen(8) should not be used on SMTP ports that receive mail from end-user
|
|||||||
clients (MUAs). In a typical deployment, postscreen(8) is used on the "port 25"
|
clients (MUAs). In a typical deployment, postscreen(8) is used on the "port 25"
|
||||||
service, while MUA clients submit mail via the submission service.
|
service, while MUA clients submit mail via the submission service.
|
||||||
|
|
||||||
postscreen(8) is the first layer in a multi-layer defense.
|
postscreen(8) is part of a multi-layer defense.
|
||||||
|
|
||||||
* The postscreen(8) layer blocks connections from zombies and other spambots
|
* As the first layer, postscreen(8) blocks connections from zombies and other
|
||||||
that are responsible for about 90% of all spam. It is implemented as a
|
spambots that are responsible for about 90% of all spam. It is implemented
|
||||||
single process to make this defense as cheap as possible.
|
as a single process to make this defense as cheap as possible.
|
||||||
|
|
||||||
* The second layer implements more complex SMTP-level access checks that are
|
* The second layer implements more complex SMTP-level access checks with
|
||||||
available with Postfix SMTP servers, policy daemons, and Milter
|
Postfix SMTP servers, policy daemons, and Milter applications.
|
||||||
applications.
|
|
||||||
|
|
||||||
* The third layer performs light-weight content inspection with the Postfix
|
* The third layer performs light-weight content inspection with the Postfix
|
||||||
built-in header_checks and body_checks. This can block unacceptable
|
built-in header_checks and body_checks. This can block unacceptable
|
||||||
@@ -482,14 +481,29 @@ TTuurrnniinngg oonn ppoossttssccrreeeenn((88)) wwiitth
|
|||||||
To enable the postscreen(8) service and log client information without blocking
|
To enable the postscreen(8) service and log client information without blocking
|
||||||
mail:
|
mail:
|
||||||
|
|
||||||
1. Comment out the "smtp inet ... smtpd" service in master.cf, including any
|
1. Make sure that local clients and systems with non-standard SMTP
|
||||||
|
implementations are excluded from any postscreen(8) tests. The default is
|
||||||
|
to exclude all clients in mynetworks. To exclude additional clients, for
|
||||||
|
example, third-party performance monitoring tools (these tend to have
|
||||||
|
broken SMTP implementations):
|
||||||
|
|
||||||
|
/etc/postfix/main.cf:
|
||||||
|
# Exclude broken clients by whitelisting. Clients in mynetworks
|
||||||
|
# should always be whitelisted.
|
||||||
|
postscreen_access_list = permit_mynetworks,
|
||||||
|
cidr:/etc/postfix/postscreen_access.cidr
|
||||||
|
|
||||||
|
/etc/postfix/postscreen_access.cidr:
|
||||||
|
192.168.254.0/24 permit
|
||||||
|
|
||||||
|
2. Comment out the "smtp inet ... smtpd" service in master.cf, including any
|
||||||
"-o parameter=value" entries that follow.
|
"-o parameter=value" entries that follow.
|
||||||
|
|
||||||
/etc/postfix/master.cf:
|
/etc/postfix/master.cf:
|
||||||
#smtp inet n - n - - smtpd
|
#smtp inet n - n - - smtpd
|
||||||
# -o parameter=value ...
|
# -o parameter=value ...
|
||||||
|
|
||||||
2. Uncomment the new "smtpd pass ... smtpd" service in master.cf, and
|
3. Uncomment the new "smtpd pass ... smtpd" service in master.cf, and
|
||||||
duplicate any "-o parameter=value" entries from the smtpd service that was
|
duplicate any "-o parameter=value" entries from the smtpd service that was
|
||||||
commented out in step 1.
|
commented out in step 1.
|
||||||
|
|
||||||
@@ -497,24 +511,24 @@ mail:
|
|||||||
smtpd pass - - n - - smtpd
|
smtpd pass - - n - - smtpd
|
||||||
-o parameter=value ...
|
-o parameter=value ...
|
||||||
|
|
||||||
3. Uncomment the new "smtp inet ... postscreen" service in master.cf.
|
4. Uncomment the new "smtp inet ... postscreen" service in master.cf.
|
||||||
|
|
||||||
/etc/postfix/master.cf:
|
/etc/postfix/master.cf:
|
||||||
smtp inet n - n - 1 postscreen
|
smtp inet n - n - 1 postscreen
|
||||||
|
|
||||||
4. Uncomment the new "tlsproxy unix ... tlsproxy" service in master.cf. This
|
5. Uncomment the new "tlsproxy unix ... tlsproxy" service in master.cf. This
|
||||||
service implements STARTTLS support for postscreen(8).
|
service implements STARTTLS support for postscreen(8).
|
||||||
|
|
||||||
/etc/postfix/master.cf:
|
/etc/postfix/master.cf:
|
||||||
tlsproxy unix - - n - 0 tlsproxy
|
tlsproxy unix - - n - 0 tlsproxy
|
||||||
|
|
||||||
5. Uncomment the new "dnsblog unix ... dnsblog" service in master.cf. This
|
6. Uncomment the new "dnsblog unix ... dnsblog" service in master.cf. This
|
||||||
service does DNSBL lookups for postscreen(8) and logs results.
|
service does DNSBL lookups for postscreen(8) and logs results.
|
||||||
|
|
||||||
/etc/postfix/master.cf:
|
/etc/postfix/master.cf:
|
||||||
dnsblog unix - - n - 0 dnsblog
|
dnsblog unix - - n - 0 dnsblog
|
||||||
|
|
||||||
6. To enable DNSBL lookups, list some DNS blocklist sites in main.cf,
|
7. To enable DNSBL lookups, list some DNS blocklist sites in main.cf,
|
||||||
separated by whitespace. Different sites can have different weights. For
|
separated by whitespace. Different sites can have different weights. For
|
||||||
example:
|
example:
|
||||||
|
|
||||||
@@ -537,7 +551,7 @@ mail:
|
|||||||
run postmap(1) before the file can be used, and that it does not detect
|
run postmap(1) before the file can be used, and that it does not detect
|
||||||
changes after the file is read. It is new with Postfix version 2.8.
|
changes after the file is read. It is new with Postfix version 2.8.
|
||||||
|
|
||||||
7. Read the new configuration with "postfix reload".
|
8. Read the new configuration with "postfix reload".
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
@@ -549,9 +563,6 @@ Notes:
|
|||||||
* See "Tests before the 220 SMTP server greeting" for details about the
|
* See "Tests before the 220 SMTP server greeting" for details about the
|
||||||
logging from these postscreen(8) tests.
|
logging from these postscreen(8) tests.
|
||||||
|
|
||||||
* By default, postscreen(8) whitelists all clients in mynetworks. This is a
|
|
||||||
safety feature to avoid you from getting into trouble with local users.
|
|
||||||
|
|
||||||
* If you run Postfix 2.6 or earlier you must stop and start the master daemon
|
* If you run Postfix 2.6 or earlier you must stop and start the master daemon
|
||||||
("postfix stop; postfix start"). This is needed because the Postfix "pass"
|
("postfix stop; postfix start"). This is needed because the Postfix "pass"
|
||||||
master service type did not work reliably on all systems.
|
master service type did not work reliably on all systems.
|
||||||
@@ -575,6 +586,20 @@ those same parameter overrides for the postscreen(8) and tlsproxy(8) services.
|
|||||||
|
|
||||||
BBlloocckkiinngg mmaaiill wwiitthh ppoossttssccrreeeenn((88))
|
BBlloocckkiinngg mmaaiill wwiitthh ppoossttssccrreeeenn((88))
|
||||||
|
|
||||||
|
For compatibility with smtpd(8), postscreen(8) implements the soft_bounce
|
||||||
|
safety feature. This causes Postfix to reject mail with a "try again" reply
|
||||||
|
code.
|
||||||
|
|
||||||
|
* To turn this on for all of Postfix, specify "soft_bounce = yes" in main.cf.
|
||||||
|
|
||||||
|
* To turn this on for postscreen(8) only, append "-o soft_bounce=yes" (note:
|
||||||
|
NO SPACES around '=') to the postscreen entry in master.cf.
|
||||||
|
|
||||||
|
Execute "postfix reload" to make the change effective.
|
||||||
|
|
||||||
|
After testing, do not forget to remove the soft_bounce feature, otherwise
|
||||||
|
senders won't receive their non-delivery notification until many days later.
|
||||||
|
|
||||||
To use the postscreen(8) service to block mail, edit main.cf and specify one or
|
To use the postscreen(8) service to block mail, edit main.cf and specify one or
|
||||||
more of:
|
more of:
|
||||||
|
|
||||||
|
@@ -1,433 +1,15 @@
|
|||||||
The stable Postfix release is called postfix-2.7.x where 2=major
|
The stable Postfix release is called postfix-2.8.x where 2=major
|
||||||
release number, 7=minor release number, x=patchlevel. The stable
|
release number, 8=minor release number, x=patchlevel. The stable
|
||||||
release never changes except for patches that address bugs or
|
release never changes except for patches that address bugs or
|
||||||
emergencies. Patches change the patchlevel and the release date.
|
emergencies. Patches change the patchlevel and the release date.
|
||||||
|
|
||||||
New features are developed in snapshot releases. These are called
|
New features are developed in snapshot releases. These are called
|
||||||
postfix-2.8-yyyymmdd where yyyymmdd is the release date (yyyy=year,
|
postfix-2.9-yyyymmdd where yyyymmdd is the release date (yyyy=year,
|
||||||
mm=month, dd=day). Patches are never issued for snapshot releases;
|
mm=month, dd=day). Patches are never issued for snapshot releases;
|
||||||
instead, a new snapshot is released.
|
instead, a new snapshot is released.
|
||||||
|
|
||||||
The mail_release_date configuration parameter (format: yyyymmdd)
|
The mail_release_date configuration parameter (format: yyyymmdd)
|
||||||
specifies the release date of a stable release or snapshot release.
|
specifies the release date of a stable release or snapshot release.
|
||||||
|
|
||||||
If you upgrade from Postfix 2.6 or earlier, read RELEASE_NOTES-2.7
|
If you upgrade from Postfix 2.7 or earlier, read RELEASE_NOTES-2.8
|
||||||
before proceeding.
|
before proceeding.
|
||||||
|
|
||||||
Postscreen notes:
|
|
||||||
=================
|
|
||||||
|
|
||||||
To turn on postscreen, see "Configuring the postscreen(8) service"
|
|
||||||
in the POSTSCREEN_README file. This allows you to run postscreen
|
|
||||||
without blocking mail first.
|
|
||||||
|
|
||||||
The code is rock solid, but the user interface has dozens of
|
|
||||||
parameters, so it literally is like using a machine that has wires
|
|
||||||
hanging out on all sides. This makes it possible to do research.
|
|
||||||
The idea is to reduce the number of parameters once things settle
|
|
||||||
down.
|
|
||||||
|
|
||||||
NOTE: Some postscreen parameters implement stress-dependent behavior.
|
|
||||||
This is supported only when the default value is stress-dependent
|
|
||||||
(that is, the default looks like ${stress?XX}${stress:YY}, or it
|
|
||||||
is the $name of an smtpd_xxx parameter with a stress-dependent
|
|
||||||
default). Other postscreen parameters always evaluate as if the
|
|
||||||
stress value is equal to the empty string.
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20110111
|
|
||||||
======================================
|
|
||||||
|
|
||||||
For performance reasons the postscreen_access_list feature replaces
|
|
||||||
the postscreen_whitelist_networks and postscreen_blacklist_networks
|
|
||||||
features. CIDR-style access maps are some 100x faster than the code
|
|
||||||
that implemented the postscreen_white/blacklist_networks support.
|
|
||||||
It can match about 100 million CIDR patterns/second on a modern CPU,
|
|
||||||
which is not blindingly fast but adequate for the near future.
|
|
||||||
|
|
||||||
Major changes with snapshot 20110105
|
|
||||||
====================================
|
|
||||||
|
|
||||||
The SMTP server now supports contact information that is appended
|
|
||||||
to "reject" responses. This includes SMTP server responses that
|
|
||||||
aren't logged to the maillog file, such as responses to syntax
|
|
||||||
errors, or unsupported commands.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
smtpd_reject_footer = For assistance, call 800-555-0101.
|
|
||||||
|
|
||||||
Server response:
|
|
||||||
550-5.5.1 <user@example> Recipient address rejected: User unknown
|
|
||||||
550 5.5.1 For assistance, call 800-555-0101.
|
|
||||||
|
|
||||||
This feature supports macro expansion ($client_address, $localtime,
|
|
||||||
etc.), as documented in the postconf(5) manpage.
|
|
||||||
|
|
||||||
This feature is also supported as postscreen_reject_footer using
|
|
||||||
the same setting as smtpd_reject_footer by default.
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20110102
|
|
||||||
======================================
|
|
||||||
|
|
||||||
The smtpd_starttls_timeout default value is now stress-dependent.
|
|
||||||
By default, TLS negotiations must now complete under overload in
|
|
||||||
10s instead of 300s.
|
|
||||||
|
|
||||||
The Postfix SMTP server now always re-computes the SASL mechanism
|
|
||||||
list after successful completion of the STARTTLS command. Earlier
|
|
||||||
versions only re-computed the mechanism list when the values of
|
|
||||||
smtp_sasl_tls_security_options and smtp_sasl_security_options differ.
|
|
||||||
This could produce incorrect results, because the Dovecot authentication
|
|
||||||
server may change responses when the SMTP session is encrypted.
|
|
||||||
|
|
||||||
Major changes with snapshot 20110102
|
|
||||||
====================================
|
|
||||||
|
|
||||||
STARTTLS support for the postscreen(8) daemon. This is implemented
|
|
||||||
by a new tlsproxy(8) daemon that you will need to enable in master.cf
|
|
||||||
(see POSTSCREEN_README for instructions). tlsproxy(8) implements
|
|
||||||
its own tlsproxy_mumble versions of TLS-related smtpd_mumble
|
|
||||||
parameters. This leaves no confusion about which parameters will
|
|
||||||
affect tlsproxy(8) behavior, but it adds another 25 parameters to
|
|
||||||
the documentation.
|
|
||||||
|
|
||||||
Major changes with snapshot 20101223
|
|
||||||
====================================
|
|
||||||
|
|
||||||
The new tls_disable_workarounds parameter specifies a list or
|
|
||||||
bit-mask of OpenSSL bug work-arounds to disable. This may be necessary
|
|
||||||
if one of the work-arounds enabled by default in OpenSSL proves to
|
|
||||||
pose a security risk, or introduces an unexpected interoperability
|
|
||||||
issue. Some bug work-arounds known to be problematic are disabled
|
|
||||||
in the default value of the parameter when linked with an OpenSSL
|
|
||||||
library that could be vulnerable. See postconf(5) and TLS_README
|
|
||||||
for details.
|
|
||||||
|
|
||||||
With "tls_preempt_cipherlist = yes" the Postfix SMTP server will
|
|
||||||
choose its most preferred cipher that is supported (offered) by the
|
|
||||||
client. This can lead to a more secure or performant cipher choice,
|
|
||||||
but may also introduce interoperability problems when a client
|
|
||||||
announces support for a cipher that does not work. See postconf(5)
|
|
||||||
and TLS_README for details.
|
|
||||||
|
|
||||||
Major changes with snapshot 20101217
|
|
||||||
====================================
|
|
||||||
|
|
||||||
The lower-level code in the TLS engine was simplified by removing
|
|
||||||
an unnecessary layer of data copying. OpenSSL now writes directly
|
|
||||||
to the network. The difference in performance should be hardly
|
|
||||||
noticeable.
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20101206
|
|
||||||
======================================
|
|
||||||
|
|
||||||
Postfix by default no longer adds a "To: undisclosed-recipients:;"
|
|
||||||
header when no recipient specified in the message header. The
|
|
||||||
Internet mail RFCs have supported messages without recipient header
|
|
||||||
for almost 10 years now.
|
|
||||||
|
|
||||||
For backwards compatibility, specify:
|
|
||||||
|
|
||||||
/etc/postfix/main.cf
|
|
||||||
undisclosed_recipients_header = To: undisclosed-recipients:;
|
|
||||||
|
|
||||||
Note: both the ":" and ";" are required.
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20101202
|
|
||||||
======================================
|
|
||||||
|
|
||||||
Postfix now reports a temporary delivery error when the result of
|
|
||||||
virtual alias expansion would exceed the virtual_alias_recursion_limit
|
|
||||||
or virtual_alias_expansion_limit. Previously, Postfix would silently
|
|
||||||
drop the excess recipients and deliver the message.
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20101130
|
|
||||||
======================================
|
|
||||||
|
|
||||||
The postscreen(8) daemon now logs the client as [address]:port.
|
|
||||||
The port helps to distinguish between simultaneous sessions from
|
|
||||||
the same address, and the [] allow the same tool to be used with
|
|
||||||
old and new format logfiles, without producing errors for IPv6.
|
|
||||||
|
|
||||||
Major changes with snapshot 20101126
|
|
||||||
====================================
|
|
||||||
|
|
||||||
Support for address patterns in DNSBL and DNSWL lookup results.
|
|
||||||
|
|
||||||
For example, "reject_rbl_client example.com=127.0.0.[2,4,6..8]"
|
|
||||||
will reject clients when the lookup result is 127.0.0.2, 127.0.0.4,
|
|
||||||
127.0.0.6, 127.0.0.7, or 127.0.0.8.
|
|
||||||
|
|
||||||
The setting "postscreen_dnsbl_sites = example.com=127.0.0.[2,4,6..8]"
|
|
||||||
rejects the same clients.
|
|
||||||
|
|
||||||
An IPv4 address pattern has four fields separated by ".". Each
|
|
||||||
field is either a decimal number, or a sequence inside "[]" that
|
|
||||||
contains one or more comma-separated decimal numbers or number..number
|
|
||||||
ranges.
|
|
||||||
|
|
||||||
Thus, any pattern field can be a sequence inside "[]", but a "[]"
|
|
||||||
sequence cannot span multiple address fields, and a pattern field
|
|
||||||
cannot contain both a number and a "[]" sequence at the same time.
|
|
||||||
|
|
||||||
This means that the pattern 1.2.[3.4] is not valid (the sequence
|
|
||||||
[3.4] cannot span two address fields) and the pattern 1.2.3.3[6..9]
|
|
||||||
is also not valid (the last field cannot be both number 3 and
|
|
||||||
sequence [6..9] at the same time).
|
|
||||||
|
|
||||||
The syntax for IPv4 patterns is as follows:
|
|
||||||
|
|
||||||
v4pattern = v4field "." v4field "." v4field "." v4field
|
|
||||||
v4field = v4octet | "[" v4sequence "]"
|
|
||||||
v4octet = any decimal number in the range 0 through 255
|
|
||||||
v4sequence = v4seq_member | v4sequence "," v4seq_member
|
|
||||||
v4seq_member = v4octet | v4octet ".." v4octet
|
|
||||||
|
|
||||||
Major changes with snapshot 20101105
|
|
||||||
====================================
|
|
||||||
|
|
||||||
The Postfix SMTP server now supports DNS-based whitelisting with
|
|
||||||
several safety features: permit_dnswl_client whitelists a client
|
|
||||||
by IP address, and permit_rhswl_client whitelists a client by its
|
|
||||||
hostname. These features use the same syntax as reject_rbl_client
|
|
||||||
and reject_rhsbl_client, respectively. The main difference is that
|
|
||||||
they return PERMIT instead of REJECT.
|
|
||||||
|
|
||||||
Whitelisting is primarily a tool to reduce the false positive rate
|
|
||||||
of DNS blocklist lookups. Client name whitelisting should not be
|
|
||||||
used to make exceptions to access rules. The reason is that client
|
|
||||||
name lookup can fail unpredictably due to some temporary outage.
|
|
||||||
|
|
||||||
For safety reasons, permit_dnswl_client and permit_rhswl_client are
|
|
||||||
silently ignored when they would override reject_unauth_destination.
|
|
||||||
Also for safety reasons, the result is DEFER_IF_REJECT when DNS
|
|
||||||
whitelist lookup fails (this result will be made configurable).
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20101103
|
|
||||||
======================================
|
|
||||||
|
|
||||||
Postfix now requests default delivery status notifications when
|
|
||||||
adding a recipient with the Milter smfi_addrcpt action, instead of
|
|
||||||
"never notify" as with Postfix automatically-added recipients
|
|
||||||
(always_bcc and sender/recipient_bcc_maps).
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20101006
|
|
||||||
======================================
|
|
||||||
|
|
||||||
To avoid repeated delivery to mailing lists with pathological nested
|
|
||||||
alias configurations, the local(8) delivery agent now keeps the
|
|
||||||
owner-alias attribute of a parent alias, when delivering mail to a
|
|
||||||
child alias that does not have its own owner alias.
|
|
||||||
|
|
||||||
With this change, local addresses from that child alias will be
|
|
||||||
written to a new queue file, and a temporary error with one local
|
|
||||||
address will no longer result in repeated delivery to other mailing
|
|
||||||
list members. Specify "reset_owner_alias = yes" for the older,
|
|
||||||
more fragile, behavior.
|
|
||||||
|
|
||||||
The postconf(5) manpage entry for "reset_owner_alias" has more
|
|
||||||
background information on this issue.
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20100912
|
|
||||||
======================================
|
|
||||||
|
|
||||||
- If your DNSBL queries have a "secret" in the domain name, you
|
|
||||||
must now censor this information from the postscreen(8) SMTP
|
|
||||||
replies. For example:
|
|
||||||
|
|
||||||
/etc/postfix/main.cf:
|
|
||||||
postscreen_dnsbl_reply_map = texthash:/etc/postfix/dnsbl_reply
|
|
||||||
|
|
||||||
/etc/postfix/dnsbl_reply:
|
|
||||||
# Secret DNSBL name Name in postscreen(8) replies
|
|
||||||
secret.zen.spamhaus.org zen.spamhaus.org
|
|
||||||
|
|
||||||
The texthash: format is similar to hash: except that there is no need to
|
|
||||||
run postmap(1) before the file can be used, and that it does not detect
|
|
||||||
changes after the file is read. It is new with Postfix version 2.8.
|
|
||||||
|
|
||||||
- The postscreen "continue" action is now called "ignore". The old
|
|
||||||
name is still supported but no longer documented.
|
|
||||||
|
|
||||||
- The postscreen_hangup_action parameter was removed. Postscreen
|
|
||||||
now always behaves as if "postscreen_hangup_action = drop".
|
|
||||||
|
|
||||||
- The postscreen_cache_retention_time default was increased from
|
|
||||||
1d to 7d, to avoid deleting results from expensive deep SMTP
|
|
||||||
protocol tests too quickly.
|
|
||||||
|
|
||||||
Major changes with snapshot 20100912
|
|
||||||
====================================
|
|
||||||
|
|
||||||
The main change is a new SMTP protocol engine for deep protocol
|
|
||||||
tests, and for logging the helo/sender/recipient information when
|
|
||||||
postscreen rejects an attempt to deliver mail.
|
|
||||||
|
|
||||||
CAUTION: when postscreen rejects mail, it replies with the DNSBL
|
|
||||||
domain name. Use the postscreen_dnsbl_reply_map feature to hide
|
|
||||||
"password" information in DNSBL domain names. See the poststconf(5)
|
|
||||||
manpage for a specific example.
|
|
||||||
|
|
||||||
Deep protocol tests are implemented by a new SMTP protocol engine
|
|
||||||
that defers or rejects all attempts to deliver mail. The first,
|
|
||||||
test detects unauthorized SMTP command pipelining (an SMTP client
|
|
||||||
sends multiple commands, instead of sending one command and waiting
|
|
||||||
for the server response); a second deep protocol test implements
|
|
||||||
the Postfix SMTP server's smtpd_forbidden_commands feature (a client
|
|
||||||
sends commands such as CONNECT, GET, POST); and a third deep protocol
|
|
||||||
test detects spambots that send SMTP commands that end in newline
|
|
||||||
instead of carriage-return/newline. Real spambots rarely make this
|
|
||||||
mistake, but poorly-written software often does.
|
|
||||||
|
|
||||||
Deep protocol tests are disabled by default, because the built-in
|
|
||||||
SMTP engine cannot not hand off the "live" connection from a good
|
|
||||||
SMTP client to a Postfix SMTP server process. Instead, postscreen(8)
|
|
||||||
defers attempts to deliver mail with a 4XX status, and waits for
|
|
||||||
the client to disconnect. The next time a good client connects,
|
|
||||||
it will be allowed to talk to a Postfix SMTP server process to
|
|
||||||
deliver mail.
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20100830
|
|
||||||
======================================
|
|
||||||
|
|
||||||
Use "postfix reload" after installing this code, otherwise the
|
|
||||||
dnsblog(8) daemon may complain. The postscreen-to-dnsblog protocol
|
|
||||||
had to be changed to support DNSBL query result filters.
|
|
||||||
|
|
||||||
Major changes with snapshot 20100830
|
|
||||||
====================================
|
|
||||||
|
|
||||||
Postscreen DNSBL support is extended with optional fixed-string
|
|
||||||
filters, with optional integral weight factors, and with an adjustable
|
|
||||||
threshold to block SMTP clients with DNSBL score >= that threshold.
|
|
||||||
Support for wild-card patterns will be added later.
|
|
||||||
|
|
||||||
The updated postscreen configuration syntax is:
|
|
||||||
|
|
||||||
postscreen_dnsbl_sites = domain[=ipaddr][*weight] ...
|
|
||||||
postscreen_dnsbl_threshold = score
|
|
||||||
|
|
||||||
Elements inside [] are optional, ipaddr is an IPv4 address, and
|
|
||||||
weight and score are integral numbers. The [] are not part of the
|
|
||||||
postscreen_dnsbl_sites input. By default, weight and score are
|
|
||||||
equal to 1, and entries without filter will match any non-error
|
|
||||||
DNSBL reply. Use a negative weight value for whitelisting.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
To use example.com as a high-confidence blocklist, and to block
|
|
||||||
mail with example.net and example.org only when both agree, use:
|
|
||||||
|
|
||||||
postscreen_dnsbl_threshold = 2
|
|
||||||
postscreen_dnsbl_sites = example.com*2, example.net, example.org
|
|
||||||
|
|
||||||
To filter only DNSBL replies containing 127.0.0.4, use:
|
|
||||||
|
|
||||||
postscreen_dnsbl_sites = example.com=127.0.0.4
|
|
||||||
|
|
||||||
See also postconf(5) for the fine details.
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20100827
|
|
||||||
======================================
|
|
||||||
|
|
||||||
The Postfix SMTP client no longer appends the local domain when
|
|
||||||
looking up a DNS name without ".". Specify "smtp_dns_resolver_options
|
|
||||||
= res_defnames" to get the old behavior, which may produce unexpected
|
|
||||||
results.
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20100728
|
|
||||||
======================================
|
|
||||||
|
|
||||||
The format of the "postfix/smtpd[pid]: queueid: client=host[addr]"
|
|
||||||
logfile record has changed. When available, the before-filter client
|
|
||||||
information and the before-filter queue ID are now appended to the
|
|
||||||
end of the record.
|
|
||||||
|
|
||||||
Major changes with snapshot 20100728
|
|
||||||
====================================
|
|
||||||
|
|
||||||
Improved message tracking across SMTP-based content filters. The
|
|
||||||
logging example below is from an after-filter SMTP server. Here,
|
|
||||||
951F692462F is a before-filter queue ID, hades.porcupine.org is a
|
|
||||||
before-filter SMTP client, while 6B4A9924782 is the after-filter
|
|
||||||
queue ID, and localhost[127.0.0.1] is the SMTP-based content filter
|
|
||||||
that sends mail into the after-filter SMTP server.
|
|
||||||
|
|
||||||
postfix/smtpd[4074]: 6B4A9924782:
|
|
||||||
client=localhost[127.0.0.1],
|
|
||||||
orig_queue_id=951F692462F
|
|
||||||
orig_client=hades.porcupine.org[168.100.189.10]
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20100610
|
|
||||||
======================================
|
|
||||||
|
|
||||||
Postfix no longer appends the system-supplied default CA certificates
|
|
||||||
to the lists specified with *_tls_CAfile or with *_tls_CApath. This
|
|
||||||
prevents third-party certificates from getting mail relay permission
|
|
||||||
with the permit_tls_all_clientcerts feature.
|
|
||||||
|
|
||||||
Unfortunately this change may cause compatibility problems when
|
|
||||||
configurations rely on certificate verification for other purposes.
|
|
||||||
Specify "tls_append_default_CA = yes" for backwards compatibility.
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20100101
|
|
||||||
======================================
|
|
||||||
|
|
||||||
When periodic cache cleanup is enabled (the default), the postscreen(8)
|
|
||||||
server now requires that the cache database supports the "delete"
|
|
||||||
and "sequence" operations. To disable periodic cache cleanup specify
|
|
||||||
a zero postscreen_cache_cleanup_interval value.
|
|
||||||
|
|
||||||
Major changes with snapshot 20100101
|
|
||||||
====================================
|
|
||||||
|
|
||||||
Periodic cache cleanup for the postscreen(8) cache database. The
|
|
||||||
time between cache cleanup runs is controlled with the
|
|
||||||
postscreen_cache_cleanup_interval (default: 12h) parameter. Cache
|
|
||||||
cleanup increases the database access latency, so this should not
|
|
||||||
be run more often than necessary.
|
|
||||||
|
|
||||||
In addition, the postscreen_cache_retention_time (default: 1d)
|
|
||||||
parameter specifies how long to keep an expired entry in the cache.
|
|
||||||
This prevents a client from being logged as "NEW" after its record
|
|
||||||
expired only a little while ago.
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20091209
|
|
||||||
======================================
|
|
||||||
|
|
||||||
The postscreen daemon now checks the permanent whitelist before
|
|
||||||
the permanent blacklist. This makes the whitelist easier to use
|
|
||||||
for its intended purpose, which is to receive mail.
|
|
||||||
|
|
||||||
Incompatibility with snapshot 20091008
|
|
||||||
======================================
|
|
||||||
|
|
||||||
NOTE: You must stop and start the Postfix master daemon before you
|
|
||||||
can use the postscreen(8) daemon. This is needed because the Postfix
|
|
||||||
"pass" master service type did not work reliably on some systems.
|
|
||||||
|
|
||||||
Major changes with snapshot 20091008
|
|
||||||
====================================
|
|
||||||
|
|
||||||
Prototype postscreen(8) server that runs a number of time-consuming
|
|
||||||
checks in parallel for all incoming SMTP connections, before clients
|
|
||||||
are allowed to talk to a real Postfix SMTP server. It detects
|
|
||||||
clients that start talking too soon, or clients that appear on DNS
|
|
||||||
blocklists, or clients that hang up without sending any command.
|
|
||||||
|
|
||||||
By doing these checks in a single postscreen(8) process, Postfix
|
|
||||||
can avoid wasting one SMTP server process per connection. A side
|
|
||||||
benefit of postscreen(8)'s DNSBL lookups is that DNS records are
|
|
||||||
already cached before the Postfix SMTP server looks them up later.
|
|
||||||
|
|
||||||
postscreen(8) maintains a temporary whitelist of positive decisions.
|
|
||||||
Once an SMTP client is whitelisted, it is immediately forwarded
|
|
||||||
to a real Postfix SMTP server process without further checking.
|
|
||||||
|
|
||||||
By default, the program logs only statistics, and it does not run
|
|
||||||
any checks on clients in mynetworks (primarily, to avoid problems
|
|
||||||
with buggy SMTP implementations in network appliances). The logging
|
|
||||||
function alone is already useful for research.
|
|
||||||
|
|
||||||
postscreen(8) has been tested on FreeBSD and Linux systems. It
|
|
||||||
probably needs additional work before it can be used on Solaris.
|
|
||||||
|
|
||||||
|
352
postfix/RELEASE_NOTES-2.8
Normal file
352
postfix/RELEASE_NOTES-2.8
Normal file
@@ -0,0 +1,352 @@
|
|||||||
|
The stable Postfix release is called postfix-2.8.x where 2=major
|
||||||
|
release number, 8=minor release number, x=patchlevel. The stable
|
||||||
|
release never changes except for patches that address bugs or
|
||||||
|
emergencies. Patches change the patchlevel and the release date.
|
||||||
|
|
||||||
|
New features are developed in snapshot releases. These are called
|
||||||
|
postfix-2.9-yyyymmdd where yyyymmdd is the release date (yyyy=year,
|
||||||
|
mm=month, dd=day). Patches are never issued for snapshot releases;
|
||||||
|
instead, a new snapshot is released.
|
||||||
|
|
||||||
|
The mail_release_date configuration parameter (format: yyyymmdd)
|
||||||
|
specifies the release date of a stable release or snapshot release.
|
||||||
|
|
||||||
|
If you upgrade from Postfix 2.6 or earlier, read RELEASE_NOTES-2.7
|
||||||
|
before proceeding.
|
||||||
|
|
||||||
|
Major changes - DNSBL/DNSWL support
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
[Feature 20101126] Support for address patterns in DNSBL and DNSWL
|
||||||
|
lookup results.
|
||||||
|
|
||||||
|
For example, "reject_rbl_client example.com=127.0.0.[2,4,6..8]"
|
||||||
|
will reject clients when the lookup result is 127.0.0.2, 127.0.0.4,
|
||||||
|
127.0.0.6, 127.0.0.7, or 127.0.0.8.
|
||||||
|
|
||||||
|
The setting "postscreen_dnsbl_sites = example.com=127.0.0.[2,4,6..8]"
|
||||||
|
rejects the same clients.
|
||||||
|
|
||||||
|
An IPv4 address pattern has four fields separated by ".". Each
|
||||||
|
field is either a decimal number, or a sequence inside "[]" that
|
||||||
|
contains one or more comma-separated decimal numbers or number..number
|
||||||
|
ranges.
|
||||||
|
|
||||||
|
Thus, any pattern field can be a sequence inside "[]", but a "[]"
|
||||||
|
sequence cannot span multiple address fields, and a pattern field
|
||||||
|
cannot contain both a number and a "[]" sequence at the same time.
|
||||||
|
|
||||||
|
This means that the pattern 1.2.[3.4] is not valid (the sequence
|
||||||
|
[3.4] cannot span two address fields) and the pattern 1.2.3.3[6..9]
|
||||||
|
is also not valid (the last field cannot be both number 3 and
|
||||||
|
sequence [6..9] at the same time).
|
||||||
|
|
||||||
|
The syntax for IPv4 patterns is as follows:
|
||||||
|
|
||||||
|
v4pattern = v4field "." v4field "." v4field "." v4field
|
||||||
|
v4field = v4octet | "[" v4sequence "]"
|
||||||
|
v4octet = any decimal number in the range 0 through 255
|
||||||
|
v4sequence = v4seq_member | v4sequence "," v4seq_member
|
||||||
|
v4seq_member = v4octet | v4octet ".." v4octet
|
||||||
|
|
||||||
|
[Feature 20101105] The Postfix SMTP server now supports DNS-based
|
||||||
|
whitelisting with several safety features: permit_dnswl_client
|
||||||
|
whitelists a client by IP address, and permit_rhswl_client whitelists
|
||||||
|
a client by its hostname. These features use the same syntax as
|
||||||
|
reject_rbl_client and reject_rhsbl_client, respectively. The main
|
||||||
|
difference is that they return PERMIT instead of REJECT.
|
||||||
|
|
||||||
|
Whitelisting is primarily a tool to reduce the false positive rate
|
||||||
|
of DNS blocklist lookups. Client name whitelisting should not be
|
||||||
|
used to make exceptions to access rules. The reason is that client
|
||||||
|
name lookup can fail unpredictably due to some temporary outage.
|
||||||
|
|
||||||
|
For safety reasons, permit_dnswl_client and permit_rhswl_client are
|
||||||
|
silently ignored when they would override reject_unauth_destination.
|
||||||
|
Also for safety reasons, the result is DEFER_IF_REJECT when DNS
|
||||||
|
whitelist lookup fails (this result will be made configurable).
|
||||||
|
|
||||||
|
Major changes - Milter suppport
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
[Incompat 20101103] Postfix now requests default delivery status
|
||||||
|
notifications when adding a recipient with the Milter smfi_addrcpt
|
||||||
|
action, instead of "never notify" as with Postfix automatically-added
|
||||||
|
recipients (always_bcc and sender/recipient_bcc_maps).
|
||||||
|
|
||||||
|
Major changes - alias expansion
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
[Incompat 20101202] Postfix now reports a temporary delivery error
|
||||||
|
when the result of virtual alias expansion would exceed the
|
||||||
|
virtual_alias_recursion_limit or virtual_alias_expansion_limit.
|
||||||
|
Previously, Postfix would silently drop the excess recipients and
|
||||||
|
deliver the message.
|
||||||
|
|
||||||
|
[Incompat 20101006] To avoid repeated delivery to mailing lists
|
||||||
|
with pathological nested alias configurations, the local(8) delivery
|
||||||
|
agent now keeps the owner-alias attribute of a parent alias, when
|
||||||
|
delivering mail to a child alias that does not have its own owner
|
||||||
|
alias.
|
||||||
|
|
||||||
|
With this change, local addresses from that child alias will be
|
||||||
|
written to a new queue file, and a temporary error with one local
|
||||||
|
address will no longer result in repeated delivery to other mailing
|
||||||
|
list members. Specify "reset_owner_alias = yes" for the older,
|
||||||
|
more fragile, behavior.
|
||||||
|
|
||||||
|
The postconf(5) manpage entry for "reset_owner_alias" has more
|
||||||
|
background information on this issue.
|
||||||
|
|
||||||
|
Major changes - dns lookup
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
[Incompat 20100827] The Postfix SMTP client no longer appends the
|
||||||
|
local domain when looking up a DNS name without ".". Specify
|
||||||
|
"smtp_dns_resolver_options = res_defnames" to get the old behavior,
|
||||||
|
which may produce unexpected results.
|
||||||
|
|
||||||
|
Major changes - logging
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
[Incompat 20100728] The format of the "postfix/smtpd[pid]: queueid:
|
||||||
|
client=host[addr]" logfile record has changed. When available, the
|
||||||
|
before-filter client information and the before-filter queue ID are
|
||||||
|
now appended to the end of the record.
|
||||||
|
|
||||||
|
[Feature 20100728] Improved message tracking across SMTP-based
|
||||||
|
content filters. The logging example below is from an after-filter
|
||||||
|
SMTP server. Here, 951F692462F is a before-filter queue ID,
|
||||||
|
hades.porcupine.org is a before-filter SMTP client, while 6B4A9924782
|
||||||
|
is the after-filter queue ID, and localhost[127.0.0.1] is the
|
||||||
|
SMTP-based content filter that sends mail into the after-filter
|
||||||
|
SMTP server.
|
||||||
|
|
||||||
|
postfix/smtpd[4074]: 6B4A9924782:
|
||||||
|
client=localhost[127.0.0.1],
|
||||||
|
orig_queue_id=951F692462F
|
||||||
|
orig_client=hades.porcupine.org[168.100.189.10]
|
||||||
|
|
||||||
|
Major changes - reply footer
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
[Feature 20110105] The SMTP server now supports contact information
|
||||||
|
that is appended to "reject" responses. This includes SMTP server
|
||||||
|
responses that aren't logged to the maillog file, such as responses
|
||||||
|
to syntax errors, or unsupported commands.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
smtpd_reject_footer = For assistance, call 800-555-0101.
|
||||||
|
|
||||||
|
Server response:
|
||||||
|
550-5.5.1 <user@example> Recipient address rejected: User unknown
|
||||||
|
550 5.5.1 For assistance, call 800-555-0101.
|
||||||
|
|
||||||
|
This feature supports macro expansion ($client_address, $localtime,
|
||||||
|
etc.), as documented in the postconf(5) manpage.
|
||||||
|
|
||||||
|
This feature is also supported as postscreen_reject_footer using
|
||||||
|
the same setting as smtpd_reject_footer by default.
|
||||||
|
|
||||||
|
Major changes - rfc compliance
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
[Incompat 20101206] Postfix by default no longer adds a "To:
|
||||||
|
undisclosed-recipients:;" header when no recipient specified in the
|
||||||
|
message header. The Internet mail RFCs have supported messages
|
||||||
|
without recipient header for almost 10 years now.
|
||||||
|
|
||||||
|
For backwards compatibility, specify:
|
||||||
|
|
||||||
|
/etc/postfix/main.cf
|
||||||
|
undisclosed_recipients_header = To: undisclosed-recipients:;
|
||||||
|
|
||||||
|
Note: both the ":" and ";" are required.
|
||||||
|
|
||||||
|
Major changes - tls support
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
[Incompat 20110102] The Postfix SMTP server now always re-computes
|
||||||
|
the SASL mechanism list after successful completion of the STARTTLS
|
||||||
|
command. Earlier versions only re-computed the mechanism list when
|
||||||
|
the values of smtp_sasl_tls_security_options and smtp_sasl_security_options
|
||||||
|
differ. This could produce incorrect results, because the Dovecot
|
||||||
|
authentication server may change responses when the SMTP session
|
||||||
|
is encrypted.
|
||||||
|
|
||||||
|
[Incompat 20110102] The smtpd_starttls_timeout default value is now
|
||||||
|
stress-dependent. By default, TLS negotiations must now complete
|
||||||
|
under overload in 10s instead of 300s.
|
||||||
|
|
||||||
|
[Feature 20101223] The new tls_disable_workarounds parameter specifies
|
||||||
|
a list or bit-mask of OpenSSL bug work-arounds to disable. This may
|
||||||
|
be necessary if one of the work-arounds enabled by default in OpenSSL
|
||||||
|
proves to pose a security risk, or introduces an unexpected
|
||||||
|
interoperability issue. Some bug work-arounds known to be problematic
|
||||||
|
are disabled in the default value of the parameter when linked with
|
||||||
|
an OpenSSL library that could be vulnerable. See postconf(5) and
|
||||||
|
TLS_README for details.
|
||||||
|
|
||||||
|
With "tls_preempt_cipherlist = yes" the Postfix SMTP server will
|
||||||
|
choose its most preferred cipher that is supported (offered) by the
|
||||||
|
client. This can lead to a more secure or performant cipher choice,
|
||||||
|
but may also introduce interoperability problems when a client
|
||||||
|
announces support for a cipher that does not work. See postconf(5)
|
||||||
|
and TLS_README for details.
|
||||||
|
|
||||||
|
[Feature 20101217] The lower-level code in the TLS engine was
|
||||||
|
simplified by removing an unnecessary layer of data copying. OpenSSL
|
||||||
|
now writes directly to the network. The difference in performance
|
||||||
|
should be hardly noticeable.
|
||||||
|
|
||||||
|
[Incompat 20100610] Postfix no longer appends the system-supplied
|
||||||
|
default CA certificates to the lists specified with *_tls_CAfile
|
||||||
|
or with *_tls_CApath. This prevents third-party certificates from
|
||||||
|
getting mail relay permission with the permit_tls_all_clientcerts
|
||||||
|
feature.
|
||||||
|
|
||||||
|
Unfortunately this change may cause compatibility problems when
|
||||||
|
configurations rely on certificate verification for other purposes.
|
||||||
|
Specify "tls_append_default_CA = yes" for backwards compatibility.
|
||||||
|
|
||||||
|
Major changes - postscreen
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
[Incompat 20110111] The postscreen_access_list feature replaces the
|
||||||
|
postscreen_whitelist_networks and postscreen_blacklist_networks
|
||||||
|
features. Reason: CIDR-style access maps are some 100x faster than
|
||||||
|
the code that implemented the postscreen_white/blacklist_networks
|
||||||
|
support. CIDR maps can match about 100 million CIDR patterns/second
|
||||||
|
on a modern CPU, which is not blindingly fast but adequate for the
|
||||||
|
near future.
|
||||||
|
|
||||||
|
[Feature 20110102] STARTTLS support for the postscreen(8) daemon.
|
||||||
|
This is implemented by a new tlsproxy(8) daemon that you will need
|
||||||
|
to enable in master.cf (see POSTSCREEN_README for instructions).
|
||||||
|
tlsproxy(8) implements its own tlsproxy_mumble versions of TLS-related
|
||||||
|
smtpd_mumble parameters. This leaves no confusion about which
|
||||||
|
parameters will affect tlsproxy(8) behavior, but it adds another
|
||||||
|
25 parameters to the documentation.
|
||||||
|
|
||||||
|
[Incompat 20100912] If your DNSBL queries have a "secret" in the
|
||||||
|
domain name, you must now censor this information from the postscreen(8)
|
||||||
|
SMTP replies. For example:
|
||||||
|
|
||||||
|
/etc/postfix/main.cf:
|
||||||
|
postscreen_dnsbl_reply_map = texthash:/etc/postfix/dnsbl_reply
|
||||||
|
|
||||||
|
/etc/postfix/dnsbl_reply:
|
||||||
|
# Secret DNSBL name Name in postscreen(8) replies
|
||||||
|
secret.zen.spamhaus.org zen.spamhaus.org
|
||||||
|
|
||||||
|
The texthash: format is similar to hash: except that there is no need to
|
||||||
|
run postmap(1) before the file can be used, and that it does not detect
|
||||||
|
changes after the file is read. It is new with Postfix version 2.8.
|
||||||
|
|
||||||
|
[Incompat 20100912] The postscreen "continue" action is now called
|
||||||
|
"ignore". The old name is still supported but no longer documented.
|
||||||
|
|
||||||
|
[Incompat 20100912] The postscreen_hangup_action parameter was
|
||||||
|
removed. Postscreen now always behaves as if "postscreen_hangup_action
|
||||||
|
= drop".
|
||||||
|
|
||||||
|
[Incompat 20100912] The postscreen_cache_retention_time default was
|
||||||
|
increased from 1d to 7d, to avoid deleting results from expensive
|
||||||
|
deep SMTP protocol tests too quickly.
|
||||||
|
|
||||||
|
[Feature 20100912] SMTP protocol engine for deep protocol tests,
|
||||||
|
and for logging the helo/sender/recipient information when postscreen
|
||||||
|
rejects an attempt to deliver mail.
|
||||||
|
|
||||||
|
The postscreen SMTP protocol engine implements a number of deep
|
||||||
|
protocol tests and defers or rejects all attempts to deliver mail.
|
||||||
|
The first test detects unauthorized SMTP command pipelining (an
|
||||||
|
SMTP client sends multiple commands, instead of sending one command
|
||||||
|
and waiting for the server response); a second deep protocol test
|
||||||
|
implements the Postfix SMTP server's smtpd_forbidden_commands feature
|
||||||
|
(a client sends commands such as CONNECT, GET, POST); and a third
|
||||||
|
deep protocol test detects spambots that send SMTP commands that
|
||||||
|
end in newline instead of carriage-return/newline. Real spambots
|
||||||
|
rarely make this mistake, but poorly-written software often does.
|
||||||
|
|
||||||
|
Deep protocol tests are disabled by default, because the built-in
|
||||||
|
SMTP engine cannot not hand off the "live" connection from a good
|
||||||
|
SMTP client to a Postfix SMTP server process. To work around this,
|
||||||
|
postscreen(8) defers attempts to deliver mail with a 4XX status,
|
||||||
|
and waits for the client to disconnect. The next time a good client
|
||||||
|
connects, it will be allowed to talk to a Postfix SMTP server process
|
||||||
|
to deliver mail.
|
||||||
|
|
||||||
|
[Feature 20100830] Postscreen DNSBL support is extended with optional
|
||||||
|
fixed-string filters, with optional integral weight factors, and
|
||||||
|
with an adjustable threshold to block SMTP clients with DNSBL score
|
||||||
|
>= that threshold. Reply filters will be implemented later.
|
||||||
|
|
||||||
|
The updated postscreen configuration syntax is:
|
||||||
|
|
||||||
|
postscreen_dnsbl_sites = domain[=ipaddr][*weight] ...
|
||||||
|
postscreen_dnsbl_threshold = score
|
||||||
|
|
||||||
|
Elements inside [] are optional, ipaddr is an IPv4 address, and
|
||||||
|
weight and score are integral numbers. The [] are not part of the
|
||||||
|
postscreen_dnsbl_sites input. By default, weight and score are
|
||||||
|
equal to 1, and entries without filter will match any non-error
|
||||||
|
DNSBL reply. Use a negative weight value for whitelisting.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
To use example.com as a high-confidence blocklist, and to block
|
||||||
|
mail with example.net and example.org only when both agree, use:
|
||||||
|
|
||||||
|
postscreen_dnsbl_threshold = 2
|
||||||
|
postscreen_dnsbl_sites = example.com*2, example.net, example.org
|
||||||
|
|
||||||
|
To filter only DNSBL replies containing 127.0.0.4, use:
|
||||||
|
|
||||||
|
postscreen_dnsbl_sites = example.com=127.0.0.4
|
||||||
|
|
||||||
|
See also postconf(5) for the fine details.
|
||||||
|
|
||||||
|
[Incompat 20100101] When periodic cache cleanup is enabled (the
|
||||||
|
default), the postscreen(8) server now requires that the cache
|
||||||
|
database supports the "delete" and "sequence" operations. To disable
|
||||||
|
periodic cache cleanup specify a zero postscreen_cache_cleanup_interval
|
||||||
|
value.
|
||||||
|
|
||||||
|
[Feature 20100101] Periodic cache cleanup for the postscreen(8)
|
||||||
|
cache database. The time between cache cleanup runs is controlled
|
||||||
|
with the postscreen_cache_cleanup_interval (default: 12h) parameter.
|
||||||
|
Cache cleanup increases the database access latency, so this should
|
||||||
|
not be run more often than necessary.
|
||||||
|
|
||||||
|
In addition, the postscreen_cache_retention_time (default: 1d)
|
||||||
|
parameter specifies how long to keep an expired entry in the cache.
|
||||||
|
This prevents a client from being logged as "NEW" after its record
|
||||||
|
expired only a little while ago.
|
||||||
|
|
||||||
|
[Incompat 20091008] If you upgrade from Postfix 2.6 or earlier, you
|
||||||
|
must stop and start the Postfix master daemon before you can use
|
||||||
|
the postscreen(8) daemon. This is needed because the Postfix 2.6
|
||||||
|
"pass" master service type did not work reliably on some systems.
|
||||||
|
|
||||||
|
[Feature 20091008] Prototype postscreen(8) server that runs a number
|
||||||
|
of time-consuming checks in parallel for all incoming SMTP connections,
|
||||||
|
before clients are allowed to talk to a real Postfix SMTP server.
|
||||||
|
It detects clients that start talking too soon, or clients that
|
||||||
|
appear on DNS blocklists, or clients that hang up without sending
|
||||||
|
any command.
|
||||||
|
|
||||||
|
By doing these checks in a single postscreen(8) process, Postfix
|
||||||
|
can avoid wasting one SMTP server process per connection. A side
|
||||||
|
benefit of postscreen(8)'s DNSBL lookups is that DNS records are
|
||||||
|
already cached before the Postfix SMTP server looks them up later.
|
||||||
|
|
||||||
|
postscreen(8) maintains a temporary whitelist of positive decisions.
|
||||||
|
Once an SMTP client is whitelisted, it is immediately forwarded to
|
||||||
|
a real Postfix SMTP server process without further checking.
|
||||||
|
|
||||||
|
By default, the program logs only statistics, and it does not run
|
||||||
|
any checks on clients in mynetworks (primarily, to avoid problems
|
||||||
|
with buggy SMTP implementations in network appliances). The logging
|
||||||
|
function alone is already useful for research.
|
||||||
|
|
@@ -28,18 +28,18 @@ mail from end-user clients (MUAs). In a typical deployment,
|
|||||||
<a href="postscreen.8.html">postscreen(8)</a> is used on the "port 25" service, while MUA clients
|
<a href="postscreen.8.html">postscreen(8)</a> is used on the "port 25" service, while MUA clients
|
||||||
submit mail via the submission service. </p>
|
submit mail via the submission service. </p>
|
||||||
|
|
||||||
<p> <a href="postscreen.8.html">postscreen(8)</a> is the first layer in a multi-layer defense. <p>
|
<p> <a href="postscreen.8.html">postscreen(8)</a> is part of a multi-layer defense. <p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
<li> <p> The <a href="postscreen.8.html">postscreen(8)</a> layer blocks connections from zombies
|
<li> <p> As the first layer, <a href="postscreen.8.html">postscreen(8)</a> blocks connections from
|
||||||
and other spambots that are responsible for about 90% of all spam.
|
zombies and other spambots that are responsible for about 90% of
|
||||||
It is implemented as a single process to make this defense as cheap
|
all spam. It is implemented as a single process to make this defense
|
||||||
as possible. </p>
|
as cheap as possible. </p>
|
||||||
|
|
||||||
<li> <p> The second layer implements more complex SMTP-level access
|
<li> <p> The second layer implements more complex SMTP-level access
|
||||||
checks that are available with Postfix SMTP servers, policy daemons,
|
checks with Postfix SMTP servers, policy daemons, and Milter
|
||||||
and Milter applications. </p>
|
applications. </p>
|
||||||
|
|
||||||
<li> <p> The third layer performs light-weight content inspection
|
<li> <p> The third layer performs light-weight content inspection
|
||||||
with the Postfix built-in <a href="postconf.5.html#header_checks">header_checks</a> and <a href="postconf.5.html#body_checks">body_checks</a>. This can
|
with the Postfix built-in <a href="postconf.5.html#header_checks">header_checks</a> and <a href="postconf.5.html#body_checks">body_checks</a>. This can
|
||||||
@@ -672,6 +672,23 @@ without blocking mail: </p>
|
|||||||
|
|
||||||
<ol>
|
<ol>
|
||||||
|
|
||||||
|
<li> <p> Make sure that local clients and systems with non-standard
|
||||||
|
SMTP implementations are excluded from any <a href="postscreen.8.html">postscreen(8)</a> tests. The
|
||||||
|
default is to exclude all clients in <a href="postconf.5.html#mynetworks">mynetworks</a>. To exclude additional
|
||||||
|
clients, for example, third-party performance monitoring tools (these
|
||||||
|
tend to have broken SMTP implementations): </p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
/etc/postfix/<a href="postconf.5.html">main.cf</a>:
|
||||||
|
# Exclude broken clients by whitelisting. Clients in <a href="postconf.5.html#mynetworks">mynetworks</a>
|
||||||
|
# should always be whitelisted.
|
||||||
|
<a href="postconf.5.html#postscreen_access_list">postscreen_access_list</a> = <a href="postconf.5.html#permit_mynetworks">permit_mynetworks</a>,
|
||||||
|
<a href="cidr_table.5.html">cidr</a>:/etc/postfix/postscreen_access.cidr
|
||||||
|
|
||||||
|
/etc/postfix/postscreen_access.<a href="cidr_table.5.html">cidr</a>:
|
||||||
|
192.168.254.0/24 permit
|
||||||
|
</pre>
|
||||||
|
|
||||||
<li> <p> Comment out the "<tt>smtp inet ... smtpd</tt>" service
|
<li> <p> Comment out the "<tt>smtp inet ... smtpd</tt>" service
|
||||||
in <a href="master.5.html">master.cf</a>, including any "<tt>-o parameter=value</tt>" entries
|
in <a href="master.5.html">master.cf</a>, including any "<tt>-o parameter=value</tt>" entries
|
||||||
that follow. </p>
|
that follow. </p>
|
||||||
@@ -768,10 +785,6 @@ string. </p>
|
|||||||
greeting</a>" for details about the logging from these postscreen(8)
|
greeting</a>" for details about the logging from these postscreen(8)
|
||||||
tests. </p>
|
tests. </p>
|
||||||
|
|
||||||
<li> <p> By default, <a href="postscreen.8.html">postscreen(8)</a> whitelists all clients in
|
|
||||||
<a href="postconf.5.html#mynetworks">mynetworks</a>. This is a safety feature to avoid you from getting
|
|
||||||
into trouble with local users. </p>
|
|
||||||
|
|
||||||
<li> <p> If you run Postfix 2.6 or earlier you must stop and start
|
<li> <p> If you run Postfix 2.6 or earlier you must stop and start
|
||||||
the master daemon ("<tt>postfix stop; postfix start</tt>"). This
|
the master daemon ("<tt>postfix stop; postfix start</tt>"). This
|
||||||
is needed because the Postfix "pass" master service type did not
|
is needed because the Postfix "pass" master service type did not
|
||||||
@@ -802,6 +815,27 @@ services. </p>
|
|||||||
|
|
||||||
<h3> <a name="blocking"> Blocking mail with postscreen(8) </a> </h3>
|
<h3> <a name="blocking"> Blocking mail with postscreen(8) </a> </h3>
|
||||||
|
|
||||||
|
<p> For compatibility with <a href="smtpd.8.html">smtpd(8)</a>, <a href="postscreen.8.html">postscreen(8)</a> implements the
|
||||||
|
<a href="postconf.5.html#soft_bounce">soft_bounce</a> safety feature. This causes Postfix to reject mail with
|
||||||
|
a "try again" reply code. </p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li> <p> To turn this on for all of Postfix, specify "<tt><a href="postconf.5.html#soft_bounce">soft_bounce</a>
|
||||||
|
= yes</tt>" in <a href="postconf.5.html">main.cf</a>. </p>
|
||||||
|
|
||||||
|
<li> <p> To turn this on for <a href="postscreen.8.html">postscreen(8)</a> only, append "<tt>-o
|
||||||
|
<a href="postconf.5.html#soft_bounce">soft_bounce</a>=yes</tt>" (note: NO SPACES around '=') to the postscreen
|
||||||
|
entry in <a href="master.5.html">master.cf</a>. <p>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p> Execute "<tt>postfix reload</tt>" to make the change effective. </p>
|
||||||
|
|
||||||
|
<p> After testing, do not forget to remove the <a href="postconf.5.html#soft_bounce">soft_bounce</a> feature,
|
||||||
|
otherwise senders won't receive their non-delivery notification
|
||||||
|
until many days later. </p>
|
||||||
|
|
||||||
<p> To use the <a href="postscreen.8.html">postscreen(8)</a> service to block mail, edit <a href="postconf.5.html">main.cf</a> and
|
<p> To use the <a href="postscreen.8.html">postscreen(8)</a> service to block mail, edit <a href="postconf.5.html">main.cf</a> and
|
||||||
specify one or more of: </p>
|
specify one or more of: </p>
|
||||||
|
|
||||||
|
@@ -14,10 +14,11 @@ DNSBLOG(8) DNSBLOG(8)
|
|||||||
|
|
||||||
<b>DESCRIPTION</b>
|
<b>DESCRIPTION</b>
|
||||||
The <a href="dnsblog.8.html"><b>dnsblog</b>(8)</a> server implements an ad-hoc DNS
|
The <a href="dnsblog.8.html"><b>dnsblog</b>(8)</a> server implements an ad-hoc DNS
|
||||||
white/blacklist lookup service that will eventually be
|
white/blacklist lookup service. This may eventually be
|
||||||
replaced by an UDP client that is built directly into the
|
replaced by an UDP client that is built directly into the
|
||||||
<a href="postscreen.8.html"><b>postscreen</b>(8)</a> server.
|
<a href="postscreen.8.html"><b>postscreen</b>(8)</a> server.
|
||||||
|
|
||||||
|
<b>PROTOCOL</b>
|
||||||
With each connection, the <a href="dnsblog.8.html"><b>dnsblog</b>(8)</a> server receives a DNS
|
With each connection, the <a href="dnsblog.8.html"><b>dnsblog</b>(8)</a> server receives a DNS
|
||||||
white/blacklist domain name and an IP address. If the
|
white/blacklist domain name and an IP address. If the
|
||||||
address is listed under the DNS white/blacklist, the <b>dns-</b>
|
address is listed under the DNS white/blacklist, the <b>dns-</b>
|
||||||
@@ -84,7 +85,7 @@ DNSBLOG(8) DNSBLOG(8)
|
|||||||
software.
|
software.
|
||||||
|
|
||||||
<b>HISTORY</b>
|
<b>HISTORY</b>
|
||||||
This service is temporary with Postfix version 2.7.
|
This service was introduced with Postfix version 2.8.
|
||||||
|
|
||||||
<b>AUTHOR(S)</b>
|
<b>AUTHOR(S)</b>
|
||||||
Wietse Venema
|
Wietse Venema
|
||||||
|
@@ -6634,7 +6634,7 @@ and enabled instances are processed in reverse order. </p>
|
|||||||
<DT><b><a name="postscreen_access_list">postscreen_access_list</a>
|
<DT><b><a name="postscreen_access_list">postscreen_access_list</a>
|
||||||
(default: <a href="postconf.5.html#permit_mynetworks">permit_mynetworks</a>)</b></DT><DD>
|
(default: <a href="postconf.5.html#permit_mynetworks">permit_mynetworks</a>)</b></DT><DD>
|
||||||
|
|
||||||
<p> Permanent white/blacklist for remote SMTP client IP addresses;
|
<p> Permanent white/blacklist for remote SMTP client IP addresses.
|
||||||
<a href="postscreen.8.html">postscreen(8)</a> searches this list immediately after a remote SMTP
|
<a href="postscreen.8.html">postscreen(8)</a> searches this list immediately after a remote SMTP
|
||||||
client connects. Specify a comma- or whitespace-separated list of
|
client connects. Specify a comma- or whitespace-separated list of
|
||||||
commands (in upper or lower case) or lookup tables. The search stops
|
commands (in upper or lower case) or lookup tables. The search stops
|
||||||
@@ -6664,10 +6664,12 @@ server process. </dd>
|
|||||||
the search. Subject the client to the action configured with the
|
the search. Subject the client to the action configured with the
|
||||||
<a href="postconf.5.html#postscreen_blacklist_action">postscreen_blacklist_action</a> configuration parameter. </dd>
|
<a href="postconf.5.html#postscreen_blacklist_action">postscreen_blacklist_action</a> configuration parameter. </dd>
|
||||||
|
|
||||||
<dt> <b> dunno </b> </dt> <dd> When used inside a lookup table,
|
<dt> <b> dunno </b> </dt> <dd> All <a href="postscreen.8.html">postscreen(8)</a> access lists
|
||||||
return from the lookup table and evaluate the next command. <br>
|
implicitly have this command at the end. <br> When <b> dunno </b>
|
||||||
When used outside a lookup table, terminate the search, and subject
|
is executed inside a lookup table, return from the lookup table and
|
||||||
the client to the configured before/after 220 greeting tests. </dd>
|
evaluate the next command. <br> When <b> dunno </b> is executed
|
||||||
|
outside a lookup table, terminate the search, and subject the client
|
||||||
|
to the configured before/after 220 greeting tests. </dd>
|
||||||
|
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
@@ -6762,8 +6764,8 @@ one-letter suffix that specifies the time unit). Time units: s
|
|||||||
(default: ignore)</b></DT><DD>
|
(default: ignore)</b></DT><DD>
|
||||||
|
|
||||||
<p> The action that <a href="postscreen.8.html">postscreen(8)</a> takes when an SMTP client is
|
<p> The action that <a href="postscreen.8.html">postscreen(8)</a> takes when an SMTP client is
|
||||||
permanently blacklisted with the <a href="postconf.5.html#postscreen_blacklist_networks">postscreen_blacklist_networks</a>
|
permanently blacklisted with the <a href="postconf.5.html#postscreen_access_list">postscreen_access_list</a> parameter.
|
||||||
parameter. Specify one of the following: </p>
|
Specify one of the following: </p>
|
||||||
|
|
||||||
<dl>
|
<dl>
|
||||||
|
|
||||||
@@ -6885,9 +6887,8 @@ See <a href="postconf.5.html#smtpd_command_filter">smtpd_command_filter</a> for
|
|||||||
<DT><b><a name="postscreen_command_time_limit">postscreen_command_time_limit</a>
|
<DT><b><a name="postscreen_command_time_limit">postscreen_command_time_limit</a>
|
||||||
(default: ${stress?10}${stress:300}s)</b></DT><DD>
|
(default: ${stress?10}${stress:300}s)</b></DT><DD>
|
||||||
|
|
||||||
<p> The command "read" time limit for <a href="postscreen.8.html">postscreen(8)</a>'s built-in SMTP
|
<p> The time limit to read an entire command line with <a href="postscreen.8.html">postscreen(8)</a>'s
|
||||||
protocol engine. This bounds the time to receive an entire command.
|
built-in SMTP protocol engine. </p>
|
||||||
</p>
|
|
||||||
|
|
||||||
<p> This feature is available in Postfix 2.8. </p>
|
<p> This feature is available in Postfix 2.8. </p>
|
||||||
|
|
||||||
|
@@ -71,84 +71,100 @@ POSTSCREEN(8) POSTSCREEN(8)
|
|||||||
Problems and transactions are logged to <b>syslogd</b>(8).
|
Problems and transactions are logged to <b>syslogd</b>(8).
|
||||||
|
|
||||||
<b>BUGS</b>
|
<b>BUGS</b>
|
||||||
The <a href="postscreen.8.html"><b>postscreen</b>(8)</a> server does not yet implement the
|
The <a href="postscreen.8.html"><b>postscreen</b>(8)</a> built-in SMTP protocol engine currently
|
||||||
<b><a href="postconf.5.html#soft_bounce">soft_bounce</a></b> feature.
|
does not announce support for AUTH, XCLIENT or XFORWARD.
|
||||||
|
Support for AUTH may be added in the future. In the mean
|
||||||
The <a href="postscreen.8.html"><b>postscreen</b>(8)</a> built-in SMTP protocol engine currently
|
|
||||||
does not announce support for AUTH, XCLIENT or XFORWARD.
|
|
||||||
Support for AUTH may be added in the future. In the mean
|
|
||||||
time, if you need to make these services available on port
|
time, if you need to make these services available on port
|
||||||
25, then do not enable the optional "after 220 server
|
25, then do not enable the optional "after 220 server
|
||||||
greeting" tests.
|
greeting" tests.
|
||||||
|
|
||||||
The optional "after 220 server greeting" tests involve
|
The optional "after 220 server greeting" tests involve
|
||||||
<a href="postscreen.8.html"><b>postscreen</b>(8)</a>'s built-in SMTP protocol engine. When these
|
<a href="postscreen.8.html"><b>postscreen</b>(8)</a>'s built-in SMTP protocol engine. When these
|
||||||
tests succeed, <a href="postscreen.8.html"><b>postscreen</b>(8)</a> adds the client to the tempo-
|
tests succeed, <a href="postscreen.8.html"><b>postscreen</b>(8)</a> adds the client to the tempo-
|
||||||
rary whitelist but it cannot not hand off the "live" con-
|
rary whitelist but it cannot not hand off the "live" con-
|
||||||
nection to a Postfix SMTP server process in the middle of
|
nection to a Postfix SMTP server process in the middle of
|
||||||
a session. Instead, <a href="postscreen.8.html"><b>postscreen</b>(8)</a> defers attempts to
|
a session. Instead, <a href="postscreen.8.html"><b>postscreen</b>(8)</a> defers attempts to
|
||||||
deliver mail with a 4XX status, and waits for the client
|
deliver mail with a 4XX status, and waits for the client
|
||||||
to disconnect. The next time a good client connects, it
|
to disconnect. The next time a good client connects, it
|
||||||
will be allowed to talk to a Postfix SMTP server process
|
will be allowed to talk to a Postfix SMTP server process
|
||||||
to deliver mail. <a href="postscreen.8.html"><b>postscreen</b>(8)</a> mitigates the impact of
|
to deliver mail. <a href="postscreen.8.html"><b>postscreen</b>(8)</a> mitigates the impact of
|
||||||
this limitation by giving such tests a long expiration
|
this limitation by giving such tests a long expiration
|
||||||
time.
|
time.
|
||||||
|
|
||||||
<b>CONFIGURATION PARAMETERS</b>
|
<b>CONFIGURATION PARAMETERS</b>
|
||||||
Changes to <a href="postconf.5.html">main.cf</a> are not picked up automatically, as
|
Changes to <a href="postconf.5.html">main.cf</a> are not picked up automatically, as
|
||||||
<a href="postscreen.8.html"><b>postscreen</b>(8)</a> processes may run for several hours. Use
|
<a href="postscreen.8.html"><b>postscreen</b>(8)</a> processes may run for several hours. Use
|
||||||
the command "postfix reload" after a configuration change.
|
the command "postfix reload" after a configuration change.
|
||||||
|
|
||||||
The text below provides only a parameter summary. See
|
The text below provides only a parameter summary. See
|
||||||
<a href="postconf.5.html"><b>postconf</b>(5)</a> for more details including examples.
|
<a href="postconf.5.html"><b>postconf</b>(5)</a> for more details including examples.
|
||||||
|
|
||||||
NOTE: Some <a href="postscreen.8.html"><b>postscreen</b>(8)</a> parameters implement stress-
|
NOTE: Some <a href="postscreen.8.html"><b>postscreen</b>(8)</a> parameters implement stress-
|
||||||
dependent behavior. This is supported only when the
|
dependent behavior. This is supported only when the
|
||||||
default parameter value is stress-dependent (that is, it
|
default parameter value is stress-dependent (that is, it
|
||||||
looks like ${stress?X}${stress:Y}, or it is the $<i>name</i> of
|
looks like ${stress?X}${stress:Y}, or it is the $<i>name</i> of
|
||||||
an smtpd parameter with a stress-dependent default).
|
an smtpd parameter with a stress-dependent default).
|
||||||
Other parameters always evaluate as if the <b>stress</b> parame-
|
Other parameters always evaluate as if the <b>stress</b> parame-
|
||||||
ter value is the empty string.
|
ter value is the empty string.
|
||||||
|
|
||||||
<b>COMPATIBILITY CONTROLS</b>
|
<b>COMPATIBILITY CONTROLS</b>
|
||||||
<b><a href="postconf.5.html#postscreen_command_filter">postscreen_command_filter</a> ($<a href="postconf.5.html#smtpd_command_filter">smtpd_command_filter</a>)</b>
|
<b><a href="postconf.5.html#postscreen_command_filter">postscreen_command_filter</a> ($<a href="postconf.5.html#smtpd_command_filter">smtpd_command_filter</a>)</b>
|
||||||
A mechanism to transform commands from remote SMTP
|
A mechanism to transform commands from remote SMTP
|
||||||
clients.
|
clients.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_discard_ehlo_keyword_address_maps">postscreen_discard_ehlo_keyword_address_maps</a> ($<a href="postconf.5.html#smtpd_discard_ehlo_keyword_address_maps">smtpd_dis</a>-</b>
|
<b><a href="postconf.5.html#postscreen_discard_ehlo_keyword_address_maps">postscreen_discard_ehlo_keyword_address_maps</a> ($<a href="postconf.5.html#smtpd_discard_ehlo_keyword_address_maps">smtpd_dis</a>-</b>
|
||||||
<b><a href="postconf.5.html#smtpd_discard_ehlo_keyword_address_maps">card_ehlo_keyword_address_maps</a>)</b>
|
<b><a href="postconf.5.html#smtpd_discard_ehlo_keyword_address_maps">card_ehlo_keyword_address_maps</a>)</b>
|
||||||
Lookup tables, indexed by the remote SMTP client
|
Lookup tables, indexed by the remote SMTP client
|
||||||
address, with case insensitive lists of EHLO key-
|
address, with case insensitive lists of EHLO key-
|
||||||
words (pipelining, starttls, auth, etc.) that the
|
words (pipelining, starttls, auth, etc.) that the
|
||||||
<a href="postscreen.8.html"><b>postscreen</b>(8)</a> server will not send in the EHLO
|
<a href="postscreen.8.html"><b>postscreen</b>(8)</a> server will not send in the EHLO
|
||||||
response to a remote SMTP client.
|
response to a remote SMTP client.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_discard_ehlo_keywords">postscreen_discard_ehlo_keywords</a> ($<a href="postconf.5.html#smtpd_discard_ehlo_keywords">smtpd_discard_ehlo_key</a>-</b>
|
<b><a href="postconf.5.html#postscreen_discard_ehlo_keywords">postscreen_discard_ehlo_keywords</a> ($<a href="postconf.5.html#smtpd_discard_ehlo_keywords">smtpd_discard_ehlo_key</a>-</b>
|
||||||
<b><a href="postconf.5.html#smtpd_discard_ehlo_keywords">words</a>)</b>
|
<b><a href="postconf.5.html#smtpd_discard_ehlo_keywords">words</a>)</b>
|
||||||
A case insensitive list of EHLO keywords (pipelin-
|
A case insensitive list of EHLO keywords (pipelin-
|
||||||
ing, starttls, auth, etc.) that the <a href="postscreen.8.html"><b>postscreen</b>(8)</a>
|
ing, starttls, auth, etc.) that the <a href="postscreen.8.html"><b>postscreen</b>(8)</a>
|
||||||
server will not send in the EHLO response to a
|
server will not send in the EHLO response to a
|
||||||
remote SMTP client.
|
remote SMTP client.
|
||||||
|
|
||||||
<b>BEFORE-GREETING TRIAGE</b>
|
<b>TROUBLE SHOOTING CONTROLS</b>
|
||||||
<b><a href="postconf.5.html#dnsblog_service_name">dnsblog_service_name</a> (dnsblog)</b>
|
<b><a href="postconf.5.html#postscreen_expansion_filter">postscreen_expansion_filter</a> (see 'postconf -d' output)</b>
|
||||||
The name of the <a href="dnsblog.8.html"><b>dnsblog</b>(8)</a> service entry in mas-
|
List of characters that are permitted in
|
||||||
ter.cf.
|
<a href="postconf.5.html#postscreen_reject_footer">postscreen_reject_footer</a> attribute expansions.
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#postscreen_reject_footer">postscreen_reject_footer</a> ($<a href="postconf.5.html#smtpd_reject_footer">smtpd_reject_footer</a>)</b>
|
||||||
|
Optional information that is appended after a 4XX
|
||||||
|
or 5XX server response.
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#soft_bounce">soft_bounce</a> (no)</b>
|
||||||
|
Safety net to keep mail queued that would otherwise
|
||||||
|
be returned to the sender.
|
||||||
|
|
||||||
|
<b>PERMANENT WHITE/BLACKLIST TEST</b>
|
||||||
|
This test is executed immediately after a remote SMTP
|
||||||
|
client connects. If a client is permanently whitelisted,
|
||||||
|
the client will be handed off immediately to a Postfix
|
||||||
|
SMTP server process.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_access_list">postscreen_access_list</a> (<a href="postconf.5.html#permit_mynetworks">permit_mynetworks</a>)</b>
|
<b><a href="postconf.5.html#postscreen_access_list">postscreen_access_list</a> (<a href="postconf.5.html#permit_mynetworks">permit_mynetworks</a>)</b>
|
||||||
Permanent white/blacklist for remote SMTP client IP
|
Permanent white/blacklist for remote SMTP client IP
|
||||||
addresses; <a href="postscreen.8.html"><b>postscreen</b>(8)</a> searches this list immedi-
|
addresses.
|
||||||
ately after a remote SMTP client connects.
|
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_blacklist_action">postscreen_blacklist_action</a> (ignore)</b>
|
<b><a href="postconf.5.html#postscreen_blacklist_action">postscreen_blacklist_action</a> (ignore)</b>
|
||||||
The action that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> takes when an SMTP
|
The action that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> takes when an SMTP
|
||||||
client is permanently blacklisted with the
|
client is permanently blacklisted with the
|
||||||
<a href="postconf.5.html#postscreen_blacklist_networks">postscreen_blacklist_networks</a> parameter.
|
<a href="postconf.5.html#postscreen_access_list">postscreen_access_list</a> parameter.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_blacklist_networks">postscreen_blacklist_networks</a> (empty)</b>
|
<b>BEFORE-GREETING TESTS</b>
|
||||||
Network addresses that are permanently blacklisted;
|
These tests are executed before the remote SMTP client
|
||||||
see the <a href="postconf.5.html#postscreen_blacklist_action">postscreen_blacklist_action</a> parameter for
|
receives the "220 servername" greeting. If no tests remain
|
||||||
possible actions.
|
after the successful completion of this phase, the client
|
||||||
|
will be handed off immediately to a Postfix SMTP server
|
||||||
|
process.
|
||||||
|
|
||||||
|
<b><a href="postconf.5.html#dnsblog_service_name">dnsblog_service_name</a> (dnsblog)</b>
|
||||||
|
The name of the <a href="dnsblog.8.html"><b>dnsblog</b>(8)</a> service entry in mas-
|
||||||
|
ter.cf.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_dnsbl_action">postscreen_dnsbl_action</a> (ignore)</b>
|
<b><a href="postconf.5.html#postscreen_dnsbl_action">postscreen_dnsbl_action</a> (ignore)</b>
|
||||||
The action that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> takes when an SMTP
|
The action that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> takes when an SMTP
|
||||||
@@ -191,7 +207,18 @@ POSTSCREEN(8) POSTSCREEN(8)
|
|||||||
(default: up to 2 seconds under stress, up to 6
|
(default: up to 2 seconds under stress, up to 6
|
||||||
seconds otherwise).
|
seconds otherwise).
|
||||||
|
|
||||||
<b>AFTER-GREETING TRIAGE</b>
|
<b><a href="postconf.5.html#smtpd_service_name">smtpd_service_name</a> (smtpd)</b>
|
||||||
|
The internal service that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> forwards
|
||||||
|
allowed connections to.
|
||||||
|
|
||||||
|
<b>AFTER-GREETING TESTS</b>
|
||||||
|
These tests are executed after the remote SMTP client
|
||||||
|
receives the "220 servername" greeting. If a client passes
|
||||||
|
all tests during this phase, it will receive a 4XX
|
||||||
|
response to RCPT TO commands until the client hangs up.
|
||||||
|
After this, the client will be allowed to talk directly to
|
||||||
|
a Postfix SMTP server process.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_bare_newline_action">postscreen_bare_newline_action</a> (ignore)</b>
|
<b><a href="postconf.5.html#postscreen_bare_newline_action">postscreen_bare_newline_action</a> (ignore)</b>
|
||||||
The action that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> takes when an SMTP
|
The action that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> takes when an SMTP
|
||||||
client sends a bare newline character, that is, a
|
client sends a bare newline character, that is, a
|
||||||
@@ -231,150 +258,136 @@ POSTSCREEN(8) POSTSCREEN(8)
|
|||||||
Enable "pipelining" SMTP protocol tests in the
|
Enable "pipelining" SMTP protocol tests in the
|
||||||
<a href="postscreen.8.html"><b>postscreen</b>(8)</a> server.
|
<a href="postscreen.8.html"><b>postscreen</b>(8)</a> server.
|
||||||
|
|
||||||
<b>AFTER-TRIAGE CONTROLS</b>
|
|
||||||
<b><a href="postconf.5.html#smtpd_service_name">smtpd_service_name</a> (smtpd)</b>
|
|
||||||
The internal service that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> forwards
|
|
||||||
allowed connections to.
|
|
||||||
|
|
||||||
<b>CACHE CONTROLS</b>
|
<b>CACHE CONTROLS</b>
|
||||||
<b><a href="postconf.5.html#postscreen_cache_cleanup_interval">postscreen_cache_cleanup_interval</a> (12h)</b>
|
<b><a href="postconf.5.html#postscreen_cache_cleanup_interval">postscreen_cache_cleanup_interval</a> (12h)</b>
|
||||||
The amount of time between <a href="postscreen.8.html"><b>postscreen</b>(8)</a> cache
|
The amount of time between <a href="postscreen.8.html"><b>postscreen</b>(8)</a> cache
|
||||||
cleanup runs.
|
cleanup runs.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_cache_map">postscreen_cache_map</a> (btree:$data_direc-</b>
|
<b><a href="postconf.5.html#postscreen_cache_map">postscreen_cache_map</a> (btree:$data_direc-</b>
|
||||||
<b>tory/postscreen_cache)</b>
|
<b>tory/postscreen_cache)</b>
|
||||||
Persistent storage for the <a href="postscreen.8.html"><b>postscreen</b>(8)</a> server
|
Persistent storage for the <a href="postscreen.8.html"><b>postscreen</b>(8)</a> server
|
||||||
decisions.
|
decisions.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_cache_retention_time">postscreen_cache_retention_time</a> (7d)</b>
|
<b><a href="postconf.5.html#postscreen_cache_retention_time">postscreen_cache_retention_time</a> (7d)</b>
|
||||||
The amount of time that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will cache an
|
The amount of time that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will cache an
|
||||||
expired temporary whitelist entry before it is
|
expired temporary whitelist entry before it is
|
||||||
removed.
|
removed.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_bare_newline_ttl">postscreen_bare_newline_ttl</a> (30d)</b>
|
<b><a href="postconf.5.html#postscreen_bare_newline_ttl">postscreen_bare_newline_ttl</a> (30d)</b>
|
||||||
The amount of time that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will use the
|
The amount of time that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will use the
|
||||||
result from a successful "bare newline" SMTP proto-
|
result from a successful "bare newline" SMTP proto-
|
||||||
col test.
|
col test.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_dnsbl_ttl">postscreen_dnsbl_ttl</a> (1h)</b>
|
<b><a href="postconf.5.html#postscreen_dnsbl_ttl">postscreen_dnsbl_ttl</a> (1h)</b>
|
||||||
The amount of time that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will use the
|
The amount of time that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will use the
|
||||||
result from a successful DNS blocklist test.
|
result from a successful DNS blocklist test.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_greet_ttl">postscreen_greet_ttl</a> (1d)</b>
|
<b><a href="postconf.5.html#postscreen_greet_ttl">postscreen_greet_ttl</a> (1d)</b>
|
||||||
The amount of time that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will use the
|
The amount of time that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will use the
|
||||||
result from a successful PREGREET test.
|
result from a successful PREGREET test.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_non_smtp_command_ttl">postscreen_non_smtp_command_ttl</a> (30d)</b>
|
<b><a href="postconf.5.html#postscreen_non_smtp_command_ttl">postscreen_non_smtp_command_ttl</a> (30d)</b>
|
||||||
The amount of time that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will use the
|
The amount of time that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will use the
|
||||||
result from a successful "non_smtp_command" SMTP
|
result from a successful "non_smtp_command" SMTP
|
||||||
protocol test.
|
protocol test.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_pipelining_ttl">postscreen_pipelining_ttl</a> (30d)</b>
|
<b><a href="postconf.5.html#postscreen_pipelining_ttl">postscreen_pipelining_ttl</a> (30d)</b>
|
||||||
The amount of time that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will use the
|
The amount of time that <a href="postscreen.8.html"><b>postscreen</b>(8)</a> will use the
|
||||||
result from a successful "pipelining" SMTP protocol
|
result from a successful "pipelining" SMTP protocol
|
||||||
test.
|
test.
|
||||||
|
|
||||||
<b>RESOURCE CONTROLS</b>
|
<b>RESOURCE CONTROLS</b>
|
||||||
<b><a href="postconf.5.html#line_length_limit">line_length_limit</a> (2048)</b>
|
<b><a href="postconf.5.html#line_length_limit">line_length_limit</a> (2048)</b>
|
||||||
Upon input, long lines are chopped up into pieces
|
Upon input, long lines are chopped up into pieces
|
||||||
of at most this length; upon delivery, long lines
|
of at most this length; upon delivery, long lines
|
||||||
are reconstructed.
|
are reconstructed.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_client_connection_count_limit">postscreen_client_connection_count_limit</a></b>
|
<b><a href="postconf.5.html#postscreen_client_connection_count_limit">postscreen_client_connection_count_limit</a></b>
|
||||||
<b>($<a href="postconf.5.html#smtpd_client_connection_count_limit">smtpd_client_connection_count_limit</a>)</b>
|
<b>($<a href="postconf.5.html#smtpd_client_connection_count_limit">smtpd_client_connection_count_limit</a>)</b>
|
||||||
How many simultaneous connections any client is
|
How many simultaneous connections any client is
|
||||||
allowed to have with the <a href="postscreen.8.html"><b>postscreen</b>(8)</a> daemon.
|
allowed to have with the <a href="postscreen.8.html"><b>postscreen</b>(8)</a> daemon.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_command_count_limit">postscreen_command_count_limit</a> (20)</b>
|
<b><a href="postconf.5.html#postscreen_command_count_limit">postscreen_command_count_limit</a> (20)</b>
|
||||||
The limit on the total number of commands per SMTP
|
The limit on the total number of commands per SMTP
|
||||||
session for <a href="postscreen.8.html"><b>postscreen</b>(8)</a>'s built-in SMTP protocol
|
session for <a href="postscreen.8.html"><b>postscreen</b>(8)</a>'s built-in SMTP protocol
|
||||||
engine.
|
engine.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_command_time_limit">postscreen_command_time_limit</a> (${stress?10}${stress:300}s)</b>
|
<b><a href="postconf.5.html#postscreen_command_time_limit">postscreen_command_time_limit</a> (${stress?10}${stress:300}s)</b>
|
||||||
The command "read" time limit for <a href="postscreen.8.html"><b>postscreen</b>(8)</a>'s
|
The time limit to read an entire command line with
|
||||||
built-in SMTP protocol engine.
|
<a href="postscreen.8.html"><b>postscreen</b>(8)</a>'s built-in SMTP protocol engine.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_post_queue_limit">postscreen_post_queue_limit</a> ($<a href="postconf.5.html#default_process_limit">default_process_limit</a>)</b>
|
<b><a href="postconf.5.html#postscreen_post_queue_limit">postscreen_post_queue_limit</a> ($<a href="postconf.5.html#default_process_limit">default_process_limit</a>)</b>
|
||||||
The number of clients that can be waiting for ser-
|
The number of clients that can be waiting for ser-
|
||||||
vice from a real SMTP server process.
|
vice from a real SMTP server process.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_pre_queue_limit">postscreen_pre_queue_limit</a> ($<a href="postconf.5.html#default_process_limit">default_process_limit</a>)</b>
|
<b><a href="postconf.5.html#postscreen_pre_queue_limit">postscreen_pre_queue_limit</a> ($<a href="postconf.5.html#default_process_limit">default_process_limit</a>)</b>
|
||||||
The number of non-whitelisted clients that can be
|
The number of non-whitelisted clients that can be
|
||||||
waiting for a decision whether they will receive
|
waiting for a decision whether they will receive
|
||||||
service from a real SMTP server process.
|
service from a real SMTP server process.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_watchdog_timeout">postscreen_watchdog_timeout</a> (10s)</b>
|
<b><a href="postconf.5.html#postscreen_watchdog_timeout">postscreen_watchdog_timeout</a> (10s)</b>
|
||||||
How much time a <a href="postscreen.8.html"><b>postscreen</b>(8)</a> process may take to
|
How much time a <a href="postscreen.8.html"><b>postscreen</b>(8)</a> process may take to
|
||||||
respond to an SMTP client command or to perform a
|
respond to an SMTP client command or to perform a
|
||||||
cache operation before it is terminated by a built-
|
cache operation before it is terminated by a built-
|
||||||
in watchdog timer.
|
in watchdog timer.
|
||||||
|
|
||||||
<b>STARTTLS CONTROLS</b>
|
<b>STARTTLS CONTROLS</b>
|
||||||
<b><a href="postconf.5.html#postscreen_tls_security_level">postscreen_tls_security_level</a> ($<a href="postconf.5.html#smtpd_tls_security_level">smtpd_tls_security_level</a>)</b>
|
<b><a href="postconf.5.html#postscreen_tls_security_level">postscreen_tls_security_level</a> ($<a href="postconf.5.html#smtpd_tls_security_level">smtpd_tls_security_level</a>)</b>
|
||||||
The SMTP TLS security level for the <a href="postscreen.8.html"><b>postscreen</b>(8)</a>
|
The SMTP TLS security level for the <a href="postscreen.8.html"><b>postscreen</b>(8)</a>
|
||||||
server; when a non-empty value is specified, this
|
server; when a non-empty value is specified, this
|
||||||
overrides the obsolete parameters
|
overrides the obsolete parameters
|
||||||
<a href="postconf.5.html#postscreen_use_tls">postscreen_use_tls</a> and <a href="postconf.5.html#postscreen_enforce_tls">postscreen_enforce_tls</a>.
|
<a href="postconf.5.html#postscreen_use_tls">postscreen_use_tls</a> and <a href="postconf.5.html#postscreen_enforce_tls">postscreen_enforce_tls</a>.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#tlsproxy_service_name">tlsproxy_service_name</a> (tlsproxy)</b>
|
<b><a href="postconf.5.html#tlsproxy_service_name">tlsproxy_service_name</a> (tlsproxy)</b>
|
||||||
The name of the <a href="tlsproxy.8.html"><b>tlsproxy</b>(8)</a> service entry in mas-
|
The name of the <a href="tlsproxy.8.html"><b>tlsproxy</b>(8)</a> service entry in mas-
|
||||||
ter.cf.
|
ter.cf.
|
||||||
|
|
||||||
<b>OBSOLETE STARTTLS SUPPORT CONTROLS</b>
|
<b>OBSOLETE STARTTLS SUPPORT CONTROLS</b>
|
||||||
These parameters are supported for compatibility with
|
These parameters are supported for compatibility with
|
||||||
<a href="smtpd.8.html"><b>smtpd</b>(8)</a> legacy parameters.
|
<a href="smtpd.8.html"><b>smtpd</b>(8)</a> legacy parameters.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_use_tls">postscreen_use_tls</a> ($<a href="postconf.5.html#smtpd_use_tls">smtpd_use_tls</a>)</b>
|
<b><a href="postconf.5.html#postscreen_use_tls">postscreen_use_tls</a> ($<a href="postconf.5.html#smtpd_use_tls">smtpd_use_tls</a>)</b>
|
||||||
Opportunistic TLS: announce STARTTLS support to
|
Opportunistic TLS: announce STARTTLS support to
|
||||||
SMTP clients, but do not require that clients use
|
SMTP clients, but do not require that clients use
|
||||||
TLS encryption.
|
TLS encryption.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_enforce_tls">postscreen_enforce_tls</a> ($<a href="postconf.5.html#smtpd_enforce_tls">smtpd_enforce_tls</a>)</b>
|
<b><a href="postconf.5.html#postscreen_enforce_tls">postscreen_enforce_tls</a> ($<a href="postconf.5.html#smtpd_enforce_tls">smtpd_enforce_tls</a>)</b>
|
||||||
Mandatory TLS: announce STARTTLS support to SMTP
|
Mandatory TLS: announce STARTTLS support to SMTP
|
||||||
clients, and require that clients use TLS encryp-
|
clients, and require that clients use TLS encryp-
|
||||||
tion.
|
tion.
|
||||||
|
|
||||||
<b>TROUBLE SHOOTING CONTROLS</b>
|
|
||||||
<b><a href="postconf.5.html#postscreen_expansion_filter">postscreen_expansion_filter</a> (see 'postconf -d' output)</b>
|
|
||||||
List of characters that are permitted in
|
|
||||||
<a href="postconf.5.html#postscreen_reject_footer">postscreen_reject_footer</a> attribute expansions.
|
|
||||||
|
|
||||||
<b><a href="postconf.5.html#postscreen_reject_footer">postscreen_reject_footer</a> ($<a href="postconf.5.html#smtpd_reject_footer">smtpd_reject_footer</a>)</b>
|
|
||||||
Optional information that is appended after a 4XX
|
|
||||||
or 5XX server response.
|
|
||||||
|
|
||||||
<b>MISCELLANEOUS CONTROLS</b>
|
<b>MISCELLANEOUS CONTROLS</b>
|
||||||
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
|
||||||
The default location of the Postfix <a href="postconf.5.html">main.cf</a> and
|
The default location of the Postfix <a href="postconf.5.html">main.cf</a> and
|
||||||
<a href="master.5.html">master.cf</a> configuration files.
|
<a href="master.5.html">master.cf</a> configuration files.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#delay_logging_resolution_limit">delay_logging_resolution_limit</a> (2)</b>
|
<b><a href="postconf.5.html#delay_logging_resolution_limit">delay_logging_resolution_limit</a> (2)</b>
|
||||||
The maximal number of digits after the decimal
|
The maximal number of digits after the decimal
|
||||||
point when logging sub-second delay values.
|
point when logging sub-second delay values.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#command_directory">command_directory</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#command_directory">command_directory</a> (see 'postconf -d' output)</b>
|
||||||
The location of all postfix administrative com-
|
The location of all postfix administrative com-
|
||||||
mands.
|
mands.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#max_idle">max_idle</a> (100s)</b>
|
<b><a href="postconf.5.html#max_idle">max_idle</a> (100s)</b>
|
||||||
The maximum amount of time that an idle Postfix
|
The maximum amount of time that an idle Postfix
|
||||||
daemon process waits for an incoming connection
|
daemon process waits for an incoming connection
|
||||||
before terminating voluntarily.
|
before terminating voluntarily.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#process_id">process_id</a> (read-only)</b>
|
<b><a href="postconf.5.html#process_id">process_id</a> (read-only)</b>
|
||||||
The process ID of a Postfix command or daemon
|
The process ID of a Postfix command or daemon
|
||||||
process.
|
process.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#process_name">process_name</a> (read-only)</b>
|
<b><a href="postconf.5.html#process_name">process_name</a> (read-only)</b>
|
||||||
The process name of a Postfix command or daemon
|
The process name of a Postfix command or daemon
|
||||||
process.
|
process.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#syslog_facility">syslog_facility</a> (mail)</b>
|
<b><a href="postconf.5.html#syslog_facility">syslog_facility</a> (mail)</b>
|
||||||
The syslog facility of Postfix logging.
|
The syslog facility of Postfix logging.
|
||||||
|
|
||||||
<b><a href="postconf.5.html#syslog_name">syslog_name</a> (see 'postconf -d' output)</b>
|
<b><a href="postconf.5.html#syslog_name">syslog_name</a> (see 'postconf -d' output)</b>
|
||||||
The mail system name that is prepended to the
|
The mail system name that is prepended to the
|
||||||
process name in syslog records, so that "smtpd"
|
process name in syslog records, so that "smtpd"
|
||||||
becomes, for example, "postfix/smtpd".
|
becomes, for example, "postfix/smtpd".
|
||||||
|
|
||||||
<b>SEE ALSO</b>
|
<b>SEE ALSO</b>
|
||||||
@@ -387,12 +400,14 @@ POSTSCREEN(8) POSTSCREEN(8)
|
|||||||
<a href="POSTSCREEN_README.html">POSTSCREEN_README</a>, Postfix Postscreen Howto
|
<a href="POSTSCREEN_README.html">POSTSCREEN_README</a>, Postfix Postscreen Howto
|
||||||
|
|
||||||
<b>LICENSE</b>
|
<b>LICENSE</b>
|
||||||
The Secure Mailer license must be distributed with this
|
The Secure Mailer license must be distributed with this
|
||||||
software.
|
software.
|
||||||
|
|
||||||
<b>HISTORY</b>
|
<b>HISTORY</b>
|
||||||
Many ideas in <a href="postscreen.8.html"><b>postscreen</b>(8)</a> were explored in earlier work
|
This service was introduced with Postfix version 2.8.
|
||||||
by Michael Tokarev, in OpenBSD spamd, and in MailChannels
|
|
||||||
|
Many ideas in <a href="postscreen.8.html"><b>postscreen</b>(8)</a> were explored in earlier work
|
||||||
|
by Michael Tokarev, in OpenBSD spamd, and in MailChannels
|
||||||
Traffic Control.
|
Traffic Control.
|
||||||
|
|
||||||
<b>AUTHOR(S)</b>
|
<b>AUTHOR(S)</b>
|
||||||
|
@@ -3729,7 +3729,7 @@ and enabled instances are processed in reverse order.
|
|||||||
.PP
|
.PP
|
||||||
This feature is available in Postfix 2.6 and later.
|
This feature is available in Postfix 2.6 and later.
|
||||||
.SH postscreen_access_list (default: permit_mynetworks)
|
.SH postscreen_access_list (default: permit_mynetworks)
|
||||||
Permanent white/blacklist for remote SMTP client IP addresses;
|
Permanent white/blacklist for remote SMTP client IP addresses.
|
||||||
\fBpostscreen\fR(8) searches this list immediately after a remote SMTP
|
\fBpostscreen\fR(8) searches this list immediately after a remote SMTP
|
||||||
client connects. Specify a comma- or whitespace-separated list of
|
client connects. Specify a comma- or whitespace-separated list of
|
||||||
commands (in upper or lower case) or lookup tables. The search stops
|
commands (in upper or lower case) or lookup tables. The search stops
|
||||||
@@ -3757,11 +3757,16 @@ Blacklist the client and terminate
|
|||||||
the search. Subject the client to the action configured with the
|
the search. Subject the client to the action configured with the
|
||||||
postscreen_blacklist_action configuration parameter.
|
postscreen_blacklist_action configuration parameter.
|
||||||
.IP "\fB dunno \fR"
|
.IP "\fB dunno \fR"
|
||||||
When used inside a lookup table,
|
All \fBpostscreen\fR(8) access lists
|
||||||
return from the lookup table and evaluate the next command.
|
implicitly have this command at the end.
|
||||||
.br
|
.br
|
||||||
When used outside a lookup table, terminate the search, and subject
|
When \fB dunno \fR
|
||||||
the client to the configured before/after 220 greeting tests.
|
is executed inside a lookup table, return from the lookup table and
|
||||||
|
evaluate the next command.
|
||||||
|
.br
|
||||||
|
When \fB dunno \fR is executed
|
||||||
|
outside a lookup table, terminate the search, and subject the client
|
||||||
|
to the configured before/after 220 greeting tests.
|
||||||
.PP
|
.PP
|
||||||
Example:
|
Example:
|
||||||
.PP
|
.PP
|
||||||
@@ -3827,8 +3832,8 @@ one-letter suffix that specifies the time unit). Time units: s
|
|||||||
This feature is available in Postfix 2.8.
|
This feature is available in Postfix 2.8.
|
||||||
.SH postscreen_blacklist_action (default: ignore)
|
.SH postscreen_blacklist_action (default: ignore)
|
||||||
The action that \fBpostscreen\fR(8) takes when an SMTP client is
|
The action that \fBpostscreen\fR(8) takes when an SMTP client is
|
||||||
permanently blacklisted with the postscreen_blacklist_networks
|
permanently blacklisted with the postscreen_access_list parameter.
|
||||||
parameter. Specify one of the following:
|
Specify one of the following:
|
||||||
.IP "\fBignore\fR (default)"
|
.IP "\fBignore\fR (default)"
|
||||||
Ignore this result. Allow other tests to complete. Repeat
|
Ignore this result. Allow other tests to complete. Repeat
|
||||||
this test the next time the client connects.
|
this test the next time the client connects.
|
||||||
@@ -3898,8 +3903,8 @@ See smtpd_command_filter for further details.
|
|||||||
.PP
|
.PP
|
||||||
This feature is available in Postfix 2.8 and later.
|
This feature is available in Postfix 2.8 and later.
|
||||||
.SH postscreen_command_time_limit (default: ${stress?10}${stress:300}s)
|
.SH postscreen_command_time_limit (default: ${stress?10}${stress:300}s)
|
||||||
The command "read" time limit for \fBpostscreen\fR(8)'s built-in SMTP
|
The time limit to read an entire command line with \fBpostscreen\fR(8)'s
|
||||||
protocol engine. This bounds the time to receive an entire command.
|
built-in SMTP protocol engine.
|
||||||
.PP
|
.PP
|
||||||
This feature is available in Postfix 2.8.
|
This feature is available in Postfix 2.8.
|
||||||
.SH postscreen_disable_vrfy_command (default: $disable_vrfy_command)
|
.SH postscreen_disable_vrfy_command (default: $disable_vrfy_command)
|
||||||
|
@@ -13,10 +13,14 @@ Postfix DNS white/blacklist logger
|
|||||||
.ad
|
.ad
|
||||||
.fi
|
.fi
|
||||||
The \fBdnsblog\fR(8) server implements an ad-hoc DNS
|
The \fBdnsblog\fR(8) server implements an ad-hoc DNS
|
||||||
white/blacklist lookup service that will eventually be
|
white/blacklist lookup service. This may eventually be
|
||||||
replaced by an UDP client that is built directly into the
|
replaced by an UDP client that is built directly into the
|
||||||
\fBpostscreen\fR(8) server.
|
\fBpostscreen\fR(8) server.
|
||||||
|
.SH "PROTOCOL"
|
||||||
|
.na
|
||||||
|
.nf
|
||||||
|
.ad
|
||||||
|
.fi
|
||||||
With each connection, the \fBdnsblog\fR(8) server receives
|
With each connection, the \fBdnsblog\fR(8) server receives
|
||||||
a DNS white/blacklist domain name and an IP address. If the
|
a DNS white/blacklist domain name and an IP address. If the
|
||||||
address is listed under the DNS white/blacklist, the
|
address is listed under the DNS white/blacklist, the
|
||||||
@@ -80,7 +84,7 @@ The Secure Mailer license must be distributed with this software.
|
|||||||
.nf
|
.nf
|
||||||
.ad
|
.ad
|
||||||
.fi
|
.fi
|
||||||
This service is temporary with Postfix version 2.7.
|
This service was introduced with Postfix version 2.8.
|
||||||
.SH "AUTHOR(S)"
|
.SH "AUTHOR(S)"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
|
@@ -76,9 +76,6 @@ Problems and transactions are logged to \fBsyslogd\fR(8).
|
|||||||
.SH BUGS
|
.SH BUGS
|
||||||
.ad
|
.ad
|
||||||
.fi
|
.fi
|
||||||
The \fBpostscreen\fR(8) server does not yet implement
|
|
||||||
the \fBsoft_bounce\fR feature.
|
|
||||||
|
|
||||||
The \fBpostscreen\fR(8) built-in SMTP protocol engine
|
The \fBpostscreen\fR(8) built-in SMTP protocol engine
|
||||||
currently does not announce support for AUTH, XCLIENT or
|
currently does not announce support for AUTH, XCLIENT or
|
||||||
XFORWARD.
|
XFORWARD.
|
||||||
@@ -135,24 +132,46 @@ to a remote SMTP client.
|
|||||||
A case insensitive list of EHLO keywords (pipelining, starttls,
|
A case insensitive list of EHLO keywords (pipelining, starttls,
|
||||||
auth, etc.) that the \fBpostscreen\fR(8) server will not send in the EHLO
|
auth, etc.) that the \fBpostscreen\fR(8) server will not send in the EHLO
|
||||||
response to a remote SMTP client.
|
response to a remote SMTP client.
|
||||||
.SH "BEFORE-GREETING TRIAGE"
|
.SH "TROUBLE SHOOTING CONTROLS"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
.ad
|
.ad
|
||||||
.fi
|
.fi
|
||||||
.IP "\fBdnsblog_service_name (dnsblog)\fR"
|
.IP "\fBpostscreen_expansion_filter (see 'postconf -d' output)\fR"
|
||||||
The name of the \fBdnsblog\fR(8) service entry in master.cf.
|
List of characters that are permitted in postscreen_reject_footer
|
||||||
|
attribute expansions.
|
||||||
|
.IP "\fBpostscreen_reject_footer ($smtpd_reject_footer)\fR"
|
||||||
|
Optional information that is appended after a 4XX or 5XX server
|
||||||
|
response.
|
||||||
|
.IP "\fBsoft_bounce (no)\fR"
|
||||||
|
Safety net to keep mail queued that would otherwise be returned to
|
||||||
|
the sender.
|
||||||
|
.SH "PERMANENT WHITE/BLACKLIST TEST"
|
||||||
|
.na
|
||||||
|
.nf
|
||||||
|
.ad
|
||||||
|
.fi
|
||||||
|
This test is executed immediately after a remote SMTP client
|
||||||
|
connects. If a client is permanently whitelisted, the client
|
||||||
|
will be handed off immediately to a Postfix SMTP server
|
||||||
|
process.
|
||||||
.IP "\fBpostscreen_access_list (permit_mynetworks)\fR"
|
.IP "\fBpostscreen_access_list (permit_mynetworks)\fR"
|
||||||
Permanent white/blacklist for remote SMTP client IP addresses;
|
Permanent white/blacklist for remote SMTP client IP addresses.
|
||||||
\fBpostscreen\fR(8) searches this list immediately after a remote SMTP
|
|
||||||
client connects.
|
|
||||||
.IP "\fBpostscreen_blacklist_action (ignore)\fR"
|
.IP "\fBpostscreen_blacklist_action (ignore)\fR"
|
||||||
The action that \fBpostscreen\fR(8) takes when an SMTP client is
|
The action that \fBpostscreen\fR(8) takes when an SMTP client is
|
||||||
permanently blacklisted with the postscreen_blacklist_networks
|
permanently blacklisted with the postscreen_access_list parameter.
|
||||||
parameter.
|
.SH "BEFORE-GREETING TESTS"
|
||||||
.IP "\fBpostscreen_blacklist_networks (empty)\fR"
|
.na
|
||||||
Network addresses that are permanently blacklisted; see the
|
.nf
|
||||||
postscreen_blacklist_action parameter for possible actions.
|
.ad
|
||||||
|
.fi
|
||||||
|
These tests are executed before the remote SMTP client
|
||||||
|
receives the "220 servername" greeting. If no tests remain
|
||||||
|
after the successful completion of this phase, the client
|
||||||
|
will be handed off immediately to a Postfix SMTP server
|
||||||
|
process.
|
||||||
|
.IP "\fBdnsblog_service_name (dnsblog)\fR"
|
||||||
|
The name of the \fBdnsblog\fR(8) service entry in master.cf.
|
||||||
.IP "\fBpostscreen_dnsbl_action (ignore)\fR"
|
.IP "\fBpostscreen_dnsbl_action (ignore)\fR"
|
||||||
The action that \fBpostscreen\fR(8) takes when an SMTP client's combined
|
The action that \fBpostscreen\fR(8) takes when an SMTP client's combined
|
||||||
DNSBL score is equal to or greater than a threshold (as defined
|
DNSBL score is equal to or greater than a threshold (as defined
|
||||||
@@ -184,11 +203,20 @@ The amount of time that \fBpostscreen\fR(8) will wait for an SMTP
|
|||||||
client to send a command before its turn, and for DNS blocklist
|
client to send a command before its turn, and for DNS blocklist
|
||||||
lookup results to arrive (default: up to 2 seconds under stress,
|
lookup results to arrive (default: up to 2 seconds under stress,
|
||||||
up to 6 seconds otherwise).
|
up to 6 seconds otherwise).
|
||||||
.SH "AFTER-GREETING TRIAGE"
|
.IP "\fBsmtpd_service_name (smtpd)\fR"
|
||||||
|
The internal service that \fBpostscreen\fR(8) forwards allowed
|
||||||
|
connections to.
|
||||||
|
.SH "AFTER-GREETING TESTS"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
.ad
|
.ad
|
||||||
.fi
|
.fi
|
||||||
|
These tests are executed after the remote SMTP client
|
||||||
|
receives the "220 servername" greeting. If a client passes
|
||||||
|
all tests during this phase, it will receive a 4XX response
|
||||||
|
to RCPT TO commands until the client hangs up. After this,
|
||||||
|
the client will be allowed to talk directly to a Postfix
|
||||||
|
SMTP server process.
|
||||||
.IP "\fBpostscreen_bare_newline_action (ignore)\fR"
|
.IP "\fBpostscreen_bare_newline_action (ignore)\fR"
|
||||||
The action that \fBpostscreen\fR(8) takes when an SMTP client sends
|
The action that \fBpostscreen\fR(8) takes when an SMTP client sends
|
||||||
a bare newline character, that is, a newline not preceded by carriage
|
a bare newline character, that is, a newline not preceded by carriage
|
||||||
@@ -217,14 +245,6 @@ the server to respond.
|
|||||||
.IP "\fBpostscreen_pipelining_enable (no)\fR"
|
.IP "\fBpostscreen_pipelining_enable (no)\fR"
|
||||||
Enable "pipelining" SMTP protocol tests in the \fBpostscreen\fR(8)
|
Enable "pipelining" SMTP protocol tests in the \fBpostscreen\fR(8)
|
||||||
server.
|
server.
|
||||||
.SH "AFTER-TRIAGE CONTROLS"
|
|
||||||
.na
|
|
||||||
.nf
|
|
||||||
.ad
|
|
||||||
.fi
|
|
||||||
.IP "\fBsmtpd_service_name (smtpd)\fR"
|
|
||||||
The internal service that \fBpostscreen\fR(8) forwards allowed
|
|
||||||
connections to.
|
|
||||||
.SH "CACHE CONTROLS"
|
.SH "CACHE CONTROLS"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
@@ -267,8 +287,8 @@ with the \fBpostscreen\fR(8) daemon.
|
|||||||
The limit on the total number of commands per SMTP session for
|
The limit on the total number of commands per SMTP session for
|
||||||
\fBpostscreen\fR(8)'s built-in SMTP protocol engine.
|
\fBpostscreen\fR(8)'s built-in SMTP protocol engine.
|
||||||
.IP "\fBpostscreen_command_time_limit (${stress?10}${stress:300}s)\fR"
|
.IP "\fBpostscreen_command_time_limit (${stress?10}${stress:300}s)\fR"
|
||||||
The command "read" time limit for \fBpostscreen\fR(8)'s built-in SMTP
|
The time limit to read an entire command line with \fBpostscreen\fR(8)'s
|
||||||
protocol engine.
|
built-in SMTP protocol engine.
|
||||||
.IP "\fBpostscreen_post_queue_limit ($default_process_limit)\fR"
|
.IP "\fBpostscreen_post_queue_limit ($default_process_limit)\fR"
|
||||||
The number of clients that can be waiting for service from a
|
The number of clients that can be waiting for service from a
|
||||||
real SMTP server process.
|
real SMTP server process.
|
||||||
@@ -304,17 +324,6 @@ but do not require that clients use TLS encryption.
|
|||||||
.IP "\fBpostscreen_enforce_tls ($smtpd_enforce_tls)\fR"
|
.IP "\fBpostscreen_enforce_tls ($smtpd_enforce_tls)\fR"
|
||||||
Mandatory TLS: announce STARTTLS support to SMTP clients, and
|
Mandatory TLS: announce STARTTLS support to SMTP clients, and
|
||||||
require that clients use TLS encryption.
|
require that clients use TLS encryption.
|
||||||
.SH "TROUBLE SHOOTING CONTROLS"
|
|
||||||
.na
|
|
||||||
.nf
|
|
||||||
.ad
|
|
||||||
.fi
|
|
||||||
.IP "\fBpostscreen_expansion_filter (see 'postconf -d' output)\fR"
|
|
||||||
List of characters that are permitted in postscreen_reject_footer
|
|
||||||
attribute expansions.
|
|
||||||
.IP "\fBpostscreen_reject_footer ($smtpd_reject_footer)\fR"
|
|
||||||
Optional information that is appended after a 4XX or 5XX server
|
|
||||||
response.
|
|
||||||
.SH "MISCELLANEOUS CONTROLS"
|
.SH "MISCELLANEOUS CONTROLS"
|
||||||
.na
|
.na
|
||||||
.nf
|
.nf
|
||||||
@@ -368,6 +377,8 @@ The Secure Mailer license must be distributed with this software.
|
|||||||
.nf
|
.nf
|
||||||
.ad
|
.ad
|
||||||
.fi
|
.fi
|
||||||
|
This service was introduced with Postfix version 2.8.
|
||||||
|
|
||||||
Many ideas in \fBpostscreen\fR(8) were explored in earlier
|
Many ideas in \fBpostscreen\fR(8) were explored in earlier
|
||||||
work by Michael Tokarev, in OpenBSD spamd, and in MailChannels
|
work by Michael Tokarev, in OpenBSD spamd, and in MailChannels
|
||||||
Traffic Control.
|
Traffic Control.
|
||||||
|
@@ -28,18 +28,18 @@ mail from end-user clients (MUAs). In a typical deployment,
|
|||||||
postscreen(8) is used on the "port 25" service, while MUA clients
|
postscreen(8) is used on the "port 25" service, while MUA clients
|
||||||
submit mail via the submission service. </p>
|
submit mail via the submission service. </p>
|
||||||
|
|
||||||
<p> postscreen(8) is the first layer in a multi-layer defense. <p>
|
<p> postscreen(8) is part of a multi-layer defense. <p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
<li> <p> The postscreen(8) layer blocks connections from zombies
|
<li> <p> As the first layer, postscreen(8) blocks connections from
|
||||||
and other spambots that are responsible for about 90% of all spam.
|
zombies and other spambots that are responsible for about 90% of
|
||||||
It is implemented as a single process to make this defense as cheap
|
all spam. It is implemented as a single process to make this defense
|
||||||
as possible. </p>
|
as cheap as possible. </p>
|
||||||
|
|
||||||
<li> <p> The second layer implements more complex SMTP-level access
|
<li> <p> The second layer implements more complex SMTP-level access
|
||||||
checks that are available with Postfix SMTP servers, policy daemons,
|
checks with Postfix SMTP servers, policy daemons, and Milter
|
||||||
and Milter applications. </p>
|
applications. </p>
|
||||||
|
|
||||||
<li> <p> The third layer performs light-weight content inspection
|
<li> <p> The third layer performs light-weight content inspection
|
||||||
with the Postfix built-in header_checks and body_checks. This can
|
with the Postfix built-in header_checks and body_checks. This can
|
||||||
@@ -672,6 +672,23 @@ without blocking mail: </p>
|
|||||||
|
|
||||||
<ol>
|
<ol>
|
||||||
|
|
||||||
|
<li> <p> Make sure that local clients and systems with non-standard
|
||||||
|
SMTP implementations are excluded from any postscreen(8) tests. The
|
||||||
|
default is to exclude all clients in mynetworks. To exclude additional
|
||||||
|
clients, for example, third-party performance monitoring tools (these
|
||||||
|
tend to have broken SMTP implementations): </p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
/etc/postfix/main.cf:
|
||||||
|
# Exclude broken clients by whitelisting. Clients in mynetworks
|
||||||
|
# should always be whitelisted.
|
||||||
|
postscreen_access_list = permit_mynetworks,
|
||||||
|
cidr:/etc/postfix/postscreen_access.cidr
|
||||||
|
|
||||||
|
/etc/postfix/postscreen_access.cidr:
|
||||||
|
192.168.254.0/24 permit
|
||||||
|
</pre>
|
||||||
|
|
||||||
<li> <p> Comment out the "<tt>smtp inet ... smtpd</tt>" service
|
<li> <p> Comment out the "<tt>smtp inet ... smtpd</tt>" service
|
||||||
in master.cf, including any "<tt>-o parameter=value</tt>" entries
|
in master.cf, including any "<tt>-o parameter=value</tt>" entries
|
||||||
that follow. </p>
|
that follow. </p>
|
||||||
@@ -768,10 +785,6 @@ string. </p>
|
|||||||
greeting</a>" for details about the logging from these postscreen(8)
|
greeting</a>" for details about the logging from these postscreen(8)
|
||||||
tests. </p>
|
tests. </p>
|
||||||
|
|
||||||
<li> <p> By default, postscreen(8) whitelists all clients in
|
|
||||||
mynetworks. This is a safety feature to avoid you from getting
|
|
||||||
into trouble with local users. </p>
|
|
||||||
|
|
||||||
<li> <p> If you run Postfix 2.6 or earlier you must stop and start
|
<li> <p> If you run Postfix 2.6 or earlier you must stop and start
|
||||||
the master daemon ("<tt>postfix stop; postfix start</tt>"). This
|
the master daemon ("<tt>postfix stop; postfix start</tt>"). This
|
||||||
is needed because the Postfix "pass" master service type did not
|
is needed because the Postfix "pass" master service type did not
|
||||||
@@ -802,6 +815,27 @@ services. </p>
|
|||||||
|
|
||||||
<h3> <a name="blocking"> Blocking mail with postscreen(8) </a> </h3>
|
<h3> <a name="blocking"> Blocking mail with postscreen(8) </a> </h3>
|
||||||
|
|
||||||
|
<p> For compatibility with smtpd(8), postscreen(8) implements the
|
||||||
|
soft_bounce safety feature. This causes Postfix to reject mail with
|
||||||
|
a "try again" reply code. </p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li> <p> To turn this on for all of Postfix, specify "<tt>soft_bounce
|
||||||
|
= yes</tt>" in main.cf. </p>
|
||||||
|
|
||||||
|
<li> <p> To turn this on for postscreen(8) only, append "<tt>-o
|
||||||
|
soft_bounce=yes</tt>" (note: NO SPACES around '=') to the postscreen
|
||||||
|
entry in master.cf. <p>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p> Execute "<tt>postfix reload</tt>" to make the change effective. </p>
|
||||||
|
|
||||||
|
<p> After testing, do not forget to remove the soft_bounce feature,
|
||||||
|
otherwise senders won't receive their non-delivery notification
|
||||||
|
until many days later. </p>
|
||||||
|
|
||||||
<p> To use the postscreen(8) service to block mail, edit main.cf and
|
<p> To use the postscreen(8) service to block mail, edit main.cf and
|
||||||
specify one or more of: </p>
|
specify one or more of: </p>
|
||||||
|
|
||||||
|
@@ -12831,7 +12831,7 @@ IP address. </p>
|
|||||||
|
|
||||||
%PARAM postscreen_access_list permit_mynetworks
|
%PARAM postscreen_access_list permit_mynetworks
|
||||||
|
|
||||||
<p> Permanent white/blacklist for remote SMTP client IP addresses;
|
<p> Permanent white/blacklist for remote SMTP client IP addresses.
|
||||||
postscreen(8) searches this list immediately after a remote SMTP
|
postscreen(8) searches this list immediately after a remote SMTP
|
||||||
client connects. Specify a comma- or whitespace-separated list of
|
client connects. Specify a comma- or whitespace-separated list of
|
||||||
commands (in upper or lower case) or lookup tables. The search stops
|
commands (in upper or lower case) or lookup tables. The search stops
|
||||||
@@ -12861,10 +12861,12 @@ server process. </dd>
|
|||||||
the search. Subject the client to the action configured with the
|
the search. Subject the client to the action configured with the
|
||||||
postscreen_blacklist_action configuration parameter. </dd>
|
postscreen_blacklist_action configuration parameter. </dd>
|
||||||
|
|
||||||
<dt> <b> dunno </b> </dt> <dd> When used inside a lookup table,
|
<dt> <b> dunno </b> </dt> <dd> All postscreen(8) access lists
|
||||||
return from the lookup table and evaluate the next command. <br>
|
implicitly have this command at the end. <br> When <b> dunno </b>
|
||||||
When used outside a lookup table, terminate the search, and subject
|
is executed inside a lookup table, return from the lookup table and
|
||||||
the client to the configured before/after 220 greeting tests. </dd>
|
evaluate the next command. <br> When <b> dunno </b> is executed
|
||||||
|
outside a lookup table, terminate the search, and subject the client
|
||||||
|
to the configured before/after 220 greeting tests. </dd>
|
||||||
|
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
@@ -12900,8 +12902,8 @@ value to disable this feature. </p>
|
|||||||
%PARAM postscreen_blacklist_action ignore
|
%PARAM postscreen_blacklist_action ignore
|
||||||
|
|
||||||
<p> The action that postscreen(8) takes when an SMTP client is
|
<p> The action that postscreen(8) takes when an SMTP client is
|
||||||
permanently blacklisted with the postscreen_blacklist_networks
|
permanently blacklisted with the postscreen_access_list parameter.
|
||||||
parameter. Specify one of the following: </p>
|
Specify one of the following: </p>
|
||||||
|
|
||||||
<dl>
|
<dl>
|
||||||
|
|
||||||
@@ -13178,9 +13180,8 @@ and error commands. </p>
|
|||||||
|
|
||||||
%PARAM postscreen_command_time_limit ${stress?10}${stress:300}s
|
%PARAM postscreen_command_time_limit ${stress?10}${stress:300}s
|
||||||
|
|
||||||
<p> The command "read" time limit for postscreen(8)'s built-in SMTP
|
<p> The time limit to read an entire command line with postscreen(8)'s
|
||||||
protocol engine. This bounds the time to receive an entire command.
|
built-in SMTP protocol engine. </p>
|
||||||
</p>
|
|
||||||
|
|
||||||
<p> This feature is available in Postfix 2.8. </p>
|
<p> This feature is available in Postfix 2.8. </p>
|
||||||
|
|
||||||
|
@@ -7,10 +7,12 @@
|
|||||||
/* \fBdnsblog\fR [generic Postfix daemon options]
|
/* \fBdnsblog\fR [generic Postfix daemon options]
|
||||||
/* DESCRIPTION
|
/* DESCRIPTION
|
||||||
/* The \fBdnsblog\fR(8) server implements an ad-hoc DNS
|
/* The \fBdnsblog\fR(8) server implements an ad-hoc DNS
|
||||||
/* white/blacklist lookup service that will eventually be
|
/* white/blacklist lookup service. This may eventually be
|
||||||
/* replaced by an UDP client that is built directly into the
|
/* replaced by an UDP client that is built directly into the
|
||||||
/* \fBpostscreen\fR(8) server.
|
/* \fBpostscreen\fR(8) server.
|
||||||
/*
|
/* PROTOCOL
|
||||||
|
/* .ad
|
||||||
|
/* .fi
|
||||||
/* With each connection, the \fBdnsblog\fR(8) server receives
|
/* With each connection, the \fBdnsblog\fR(8) server receives
|
||||||
/* a DNS white/blacklist domain name and an IP address. If the
|
/* a DNS white/blacklist domain name and an IP address. If the
|
||||||
/* address is listed under the DNS white/blacklist, the
|
/* address is listed under the DNS white/blacklist, the
|
||||||
@@ -64,7 +66,7 @@
|
|||||||
/* HISTORY
|
/* HISTORY
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
/* This service is temporary with Postfix version 2.7.
|
/* This service was introduced with Postfix version 2.8.
|
||||||
/* AUTHOR(S)
|
/* AUTHOR(S)
|
||||||
/* Wietse Venema
|
/* Wietse Venema
|
||||||
/* IBM T.J. Watson Research
|
/* IBM T.J. Watson Research
|
||||||
|
@@ -20,8 +20,8 @@
|
|||||||
* Patches change both the patchlevel and the release date. Snapshots have no
|
* Patches change both the patchlevel and the release date. Snapshots have no
|
||||||
* patchlevel; they change the release date only.
|
* patchlevel; they change the release date only.
|
||||||
*/
|
*/
|
||||||
#define MAIL_RELEASE_DATE "20110115"
|
#define MAIL_RELEASE_DATE "20110116"
|
||||||
#define MAIL_VERSION_NUMBER "2.8"
|
#define MAIL_VERSION_NUMBER "2.9"
|
||||||
|
|
||||||
#ifdef SNAPSHOT
|
#ifdef SNAPSHOT
|
||||||
# define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE
|
# define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE
|
||||||
|
@@ -62,9 +62,6 @@
|
|||||||
/* DIAGNOSTICS
|
/* DIAGNOSTICS
|
||||||
/* Problems and transactions are logged to \fBsyslogd\fR(8).
|
/* Problems and transactions are logged to \fBsyslogd\fR(8).
|
||||||
/* BUGS
|
/* BUGS
|
||||||
/* The \fBpostscreen\fR(8) server does not yet implement
|
|
||||||
/* the \fBsoft_bounce\fR feature.
|
|
||||||
/*
|
|
||||||
/* The \fBpostscreen\fR(8) built-in SMTP protocol engine
|
/* The \fBpostscreen\fR(8) built-in SMTP protocol engine
|
||||||
/* currently does not announce support for AUTH, XCLIENT or
|
/* currently does not announce support for AUTH, XCLIENT or
|
||||||
/* XFORWARD.
|
/* XFORWARD.
|
||||||
@@ -117,22 +114,40 @@
|
|||||||
/* A case insensitive list of EHLO keywords (pipelining, starttls,
|
/* A case insensitive list of EHLO keywords (pipelining, starttls,
|
||||||
/* auth, etc.) that the \fBpostscreen\fR(8) server will not send in the EHLO
|
/* auth, etc.) that the \fBpostscreen\fR(8) server will not send in the EHLO
|
||||||
/* response to a remote SMTP client.
|
/* response to a remote SMTP client.
|
||||||
/* BEFORE-GREETING TRIAGE
|
/* TROUBLE SHOOTING CONTROLS
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
/* .IP "\fBdnsblog_service_name (dnsblog)\fR"
|
/* .IP "\fBpostscreen_expansion_filter (see 'postconf -d' output)\fR"
|
||||||
/* The name of the \fBdnsblog\fR(8) service entry in master.cf.
|
/* List of characters that are permitted in postscreen_reject_footer
|
||||||
|
/* attribute expansions.
|
||||||
|
/* .IP "\fBpostscreen_reject_footer ($smtpd_reject_footer)\fR"
|
||||||
|
/* Optional information that is appended after a 4XX or 5XX server
|
||||||
|
/* response.
|
||||||
|
/* .IP "\fBsoft_bounce (no)\fR"
|
||||||
|
/* Safety net to keep mail queued that would otherwise be returned to
|
||||||
|
/* the sender.
|
||||||
|
/* PERMANENT WHITE/BLACKLIST TEST
|
||||||
|
/* .ad
|
||||||
|
/* .fi
|
||||||
|
/* This test is executed immediately after a remote SMTP client
|
||||||
|
/* connects. If a client is permanently whitelisted, the client
|
||||||
|
/* will be handed off immediately to a Postfix SMTP server
|
||||||
|
/* process.
|
||||||
/* .IP "\fBpostscreen_access_list (permit_mynetworks)\fR"
|
/* .IP "\fBpostscreen_access_list (permit_mynetworks)\fR"
|
||||||
/* Permanent white/blacklist for remote SMTP client IP addresses;
|
/* Permanent white/blacklist for remote SMTP client IP addresses.
|
||||||
/* \fBpostscreen\fR(8) searches this list immediately after a remote SMTP
|
|
||||||
/* client connects.
|
|
||||||
/* .IP "\fBpostscreen_blacklist_action (ignore)\fR"
|
/* .IP "\fBpostscreen_blacklist_action (ignore)\fR"
|
||||||
/* The action that \fBpostscreen\fR(8) takes when an SMTP client is
|
/* The action that \fBpostscreen\fR(8) takes when an SMTP client is
|
||||||
/* permanently blacklisted with the postscreen_blacklist_networks
|
/* permanently blacklisted with the postscreen_access_list parameter.
|
||||||
/* parameter.
|
/* BEFORE-GREETING TESTS
|
||||||
/* .IP "\fBpostscreen_blacklist_networks (empty)\fR"
|
/* .ad
|
||||||
/* Network addresses that are permanently blacklisted; see the
|
/* .fi
|
||||||
/* postscreen_blacklist_action parameter for possible actions.
|
/* These tests are executed before the remote SMTP client
|
||||||
|
/* receives the "220 servername" greeting. If no tests remain
|
||||||
|
/* after the successful completion of this phase, the client
|
||||||
|
/* will be handed off immediately to a Postfix SMTP server
|
||||||
|
/* process.
|
||||||
|
/* .IP "\fBdnsblog_service_name (dnsblog)\fR"
|
||||||
|
/* The name of the \fBdnsblog\fR(8) service entry in master.cf.
|
||||||
/* .IP "\fBpostscreen_dnsbl_action (ignore)\fR"
|
/* .IP "\fBpostscreen_dnsbl_action (ignore)\fR"
|
||||||
/* The action that \fBpostscreen\fR(8) takes when an SMTP client's combined
|
/* The action that \fBpostscreen\fR(8) takes when an SMTP client's combined
|
||||||
/* DNSBL score is equal to or greater than a threshold (as defined
|
/* DNSBL score is equal to or greater than a threshold (as defined
|
||||||
@@ -164,9 +179,18 @@
|
|||||||
/* client to send a command before its turn, and for DNS blocklist
|
/* client to send a command before its turn, and for DNS blocklist
|
||||||
/* lookup results to arrive (default: up to 2 seconds under stress,
|
/* lookup results to arrive (default: up to 2 seconds under stress,
|
||||||
/* up to 6 seconds otherwise).
|
/* up to 6 seconds otherwise).
|
||||||
/* AFTER-GREETING TRIAGE
|
/* .IP "\fBsmtpd_service_name (smtpd)\fR"
|
||||||
|
/* The internal service that \fBpostscreen\fR(8) forwards allowed
|
||||||
|
/* connections to.
|
||||||
|
/* AFTER-GREETING TESTS
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
|
/* These tests are executed after the remote SMTP client
|
||||||
|
/* receives the "220 servername" greeting. If a client passes
|
||||||
|
/* all tests during this phase, it will receive a 4XX response
|
||||||
|
/* to RCPT TO commands until the client hangs up. After this,
|
||||||
|
/* the client will be allowed to talk directly to a Postfix
|
||||||
|
/* SMTP server process.
|
||||||
/* .IP "\fBpostscreen_bare_newline_action (ignore)\fR"
|
/* .IP "\fBpostscreen_bare_newline_action (ignore)\fR"
|
||||||
/* The action that \fBpostscreen\fR(8) takes when an SMTP client sends
|
/* The action that \fBpostscreen\fR(8) takes when an SMTP client sends
|
||||||
/* a bare newline character, that is, a newline not preceded by carriage
|
/* a bare newline character, that is, a newline not preceded by carriage
|
||||||
@@ -195,12 +219,6 @@
|
|||||||
/* .IP "\fBpostscreen_pipelining_enable (no)\fR"
|
/* .IP "\fBpostscreen_pipelining_enable (no)\fR"
|
||||||
/* Enable "pipelining" SMTP protocol tests in the \fBpostscreen\fR(8)
|
/* Enable "pipelining" SMTP protocol tests in the \fBpostscreen\fR(8)
|
||||||
/* server.
|
/* server.
|
||||||
/* AFTER-TRIAGE CONTROLS
|
|
||||||
/* .ad
|
|
||||||
/* .fi
|
|
||||||
/* .IP "\fBsmtpd_service_name (smtpd)\fR"
|
|
||||||
/* The internal service that \fBpostscreen\fR(8) forwards allowed
|
|
||||||
/* connections to.
|
|
||||||
/* CACHE CONTROLS
|
/* CACHE CONTROLS
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
@@ -239,8 +257,8 @@
|
|||||||
/* The limit on the total number of commands per SMTP session for
|
/* The limit on the total number of commands per SMTP session for
|
||||||
/* \fBpostscreen\fR(8)'s built-in SMTP protocol engine.
|
/* \fBpostscreen\fR(8)'s built-in SMTP protocol engine.
|
||||||
/* .IP "\fBpostscreen_command_time_limit (${stress?10}${stress:300}s)\fR"
|
/* .IP "\fBpostscreen_command_time_limit (${stress?10}${stress:300}s)\fR"
|
||||||
/* The command "read" time limit for \fBpostscreen\fR(8)'s built-in SMTP
|
/* The time limit to read an entire command line with \fBpostscreen\fR(8)'s
|
||||||
/* protocol engine.
|
/* built-in SMTP protocol engine.
|
||||||
/* .IP "\fBpostscreen_post_queue_limit ($default_process_limit)\fR"
|
/* .IP "\fBpostscreen_post_queue_limit ($default_process_limit)\fR"
|
||||||
/* The number of clients that can be waiting for service from a
|
/* The number of clients that can be waiting for service from a
|
||||||
/* real SMTP server process.
|
/* real SMTP server process.
|
||||||
@@ -272,15 +290,6 @@
|
|||||||
/* .IP "\fBpostscreen_enforce_tls ($smtpd_enforce_tls)\fR"
|
/* .IP "\fBpostscreen_enforce_tls ($smtpd_enforce_tls)\fR"
|
||||||
/* Mandatory TLS: announce STARTTLS support to SMTP clients, and
|
/* Mandatory TLS: announce STARTTLS support to SMTP clients, and
|
||||||
/* require that clients use TLS encryption.
|
/* require that clients use TLS encryption.
|
||||||
/* TROUBLE SHOOTING CONTROLS
|
|
||||||
/* .ad
|
|
||||||
/* .fi
|
|
||||||
/* .IP "\fBpostscreen_expansion_filter (see 'postconf -d' output)\fR"
|
|
||||||
/* List of characters that are permitted in postscreen_reject_footer
|
|
||||||
/* attribute expansions.
|
|
||||||
/* .IP "\fBpostscreen_reject_footer ($smtpd_reject_footer)\fR"
|
|
||||||
/* Optional information that is appended after a 4XX or 5XX server
|
|
||||||
/* response.
|
|
||||||
/* MISCELLANEOUS CONTROLS
|
/* MISCELLANEOUS CONTROLS
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
@@ -324,6 +333,8 @@
|
|||||||
/* HISTORY
|
/* HISTORY
|
||||||
/* .ad
|
/* .ad
|
||||||
/* .fi
|
/* .fi
|
||||||
|
/* This service was introduced with Postfix version 2.8.
|
||||||
|
/*
|
||||||
/* Many ideas in \fBpostscreen\fR(8) were explored in earlier
|
/* Many ideas in \fBpostscreen\fR(8) were explored in earlier
|
||||||
/* work by Michael Tokarev, in OpenBSD spamd, and in MailChannels
|
/* work by Michael Tokarev, in OpenBSD spamd, and in MailChannels
|
||||||
/* Traffic Control.
|
/* Traffic Control.
|
||||||
|
@@ -22,6 +22,10 @@
|
|||||||
/* a warning (except EPIPE) with the client address and port,
|
/* a warning (except EPIPE) with the client address and port,
|
||||||
/* and returns a non-zero result (all errors including EPIPE).
|
/* and returns a non-zero result (all errors including EPIPE).
|
||||||
/*
|
/*
|
||||||
|
/* psc_send_reply() does a best effort to send the reply, but
|
||||||
|
/* it won't block when the output is throttled by a hostile
|
||||||
|
/* peer.
|
||||||
|
/*
|
||||||
/* PSC_SEND_REPLY() is a legacy wrapper for psc_send_reply().
|
/* PSC_SEND_REPLY() is a legacy wrapper for psc_send_reply().
|
||||||
/* It will eventually be replaced by its expansion.
|
/* It will eventually be replaced by its expansion.
|
||||||
/*
|
/*
|
||||||
@@ -88,26 +92,26 @@ int psc_send_reply(PSC_STATE *state, const char *text)
|
|||||||
*/
|
*/
|
||||||
start = VSTRING_LEN(state->send_buf);
|
start = VSTRING_LEN(state->send_buf);
|
||||||
vstring_strcat(state->send_buf, text);
|
vstring_strcat(state->send_buf, text);
|
||||||
if (*var_psc_rej_footer && (*text == '4' || *text == '5'))
|
|
||||||
smtp_reply_footer(state->send_buf, start, var_psc_rej_footer,
|
|
||||||
STR(psc_expand_filter), psc_expand_lookup,
|
|
||||||
(char *) state);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XXX For soft_bounce support, it is not sufficient to fix replies here.
|
* For soft_bounce support, we also fix the REJECT logging before the
|
||||||
* We also need to fix the REJECT messages that are logged by the dummy
|
* dummy SMTP engine calls the psc_send_reply() output routine. We do
|
||||||
* SMTP engine. Those messages are set with the PSC_DROP_SESSION_STATE
|
* some double work, but it is for debugging only.
|
||||||
* and PSC_ENFORCE_SESSION_STATE macros, and we should not mess up all
|
|
||||||
* the code that invokes those macros.
|
|
||||||
*/
|
*/
|
||||||
#if 0
|
|
||||||
if (var_soft_bounce) {
|
if (var_soft_bounce) {
|
||||||
if (text[0] == '5')
|
if (text[0] == '5')
|
||||||
STR(state->send_buf)[start + 0] = '4';
|
STR(state->send_buf)[start + 0] = '4';
|
||||||
if (text[4] == '5')
|
if (text[4] == '5')
|
||||||
STR(state->send_buf)[start + 4] = '4';
|
STR(state->send_buf)[start + 4] = '4';
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
/*
|
||||||
|
* Append the optional reply footer.
|
||||||
|
*/
|
||||||
|
if (*var_psc_rej_footer && (*text == '4' || *text == '5'))
|
||||||
|
smtp_reply_footer(state->send_buf, start, var_psc_rej_footer,
|
||||||
|
STR(psc_expand_filter), psc_expand_lookup,
|
||||||
|
(char *) state);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Do a best effort sending text, but don't block when the output is
|
* Do a best effort sending text, but don't block when the output is
|
||||||
|
@@ -24,8 +24,12 @@
|
|||||||
/*
|
/*
|
||||||
/* Unlike the Postfix SMTP server, this engine does not announce
|
/* Unlike the Postfix SMTP server, this engine does not announce
|
||||||
/* PIPELINING support. This exposes spambots that pipeline
|
/* PIPELINING support. This exposes spambots that pipeline
|
||||||
/* their commands anyway. To pass this test, the client has
|
/* their commands anyway. Like the Postfix SMTP server, this
|
||||||
/* to speak SMTP all the way to the RCPT TO command.
|
/* engine will accept input with bare newline characters. To
|
||||||
|
/* pass the "pipelining" and "bare newline" test, the client
|
||||||
|
/* has to properly speak SMTP all the way to the RCPT TO
|
||||||
|
/* command. These tests fail if the client violates the protocol
|
||||||
|
/* at any stage.
|
||||||
/*
|
/*
|
||||||
/* No support is announced for AUTH, XCLIENT or XFORWARD.
|
/* No support is announced for AUTH, XCLIENT or XFORWARD.
|
||||||
/* Clients that need this should be whitelisted or should talk
|
/* Clients that need this should be whitelisted or should talk
|
||||||
@@ -42,10 +46,13 @@
|
|||||||
/* a per-session command counter, and terminates the session
|
/* a per-session command counter, and terminates the session
|
||||||
/* with a 421 reply when the command count exceeds the limit.
|
/* with a 421 reply when the command count exceeds the limit.
|
||||||
/*
|
/*
|
||||||
/* We limit the command count so that we don't have to worry
|
/* We limit the command count, as well as the total time to
|
||||||
/* about becoming blocked while sending responses (20 replies
|
/* receive a command. This limits the time per client more
|
||||||
/* of about 40 bytes plus greeting banners). Otherwise we would
|
/* effectively than would be possible with read() timeouts.
|
||||||
/* have to make the output event-driven, just like the input.
|
/*
|
||||||
|
/* There is no concern about getting blocked on output. The
|
||||||
|
/* psc_send() routine uses non-blocking output, and discards
|
||||||
|
/* output that the client is not willing to receive.
|
||||||
/* PROTOCOL INSPECTION VERSUS CONTENT INSPECTION
|
/* PROTOCOL INSPECTION VERSUS CONTENT INSPECTION
|
||||||
/* The goal of postscreen is to keep spambots away from Postfix.
|
/* The goal of postscreen is to keep spambots away from Postfix.
|
||||||
/* To recognize spambots, postscreen measures properties of
|
/* To recognize spambots, postscreen measures properties of
|
||||||
@@ -70,11 +77,11 @@
|
|||||||
/* making long-term decisions after single measurements, and
|
/* making long-term decisions after single measurements, and
|
||||||
/* that is why postscreen does not inspect message content.
|
/* that is why postscreen does not inspect message content.
|
||||||
/* REJECTING RCPT TO VERSUS SENDING LIVE SOCKETS TO SMTPD(8)
|
/* REJECTING RCPT TO VERSUS SENDING LIVE SOCKETS TO SMTPD(8)
|
||||||
/* When deep protocol tests are enabled, postscreen rejects
|
/* When post-handshake protocol tests are enabled, postscreen
|
||||||
/* the RCPT TO command from a good client, and forces it to
|
/* rejects the RCPT TO command from a good client, and forces
|
||||||
/* deliver mail in a later session. This is why deep protocol
|
/* it to deliver mail in a later session. This is why
|
||||||
/* tests have a longer expiration time than pre-handshake
|
/* post-handshake protocol tests have a longer expiration time
|
||||||
/* tests.
|
/* than pre-handshake tests.
|
||||||
/*
|
/*
|
||||||
/* Instead, postscreen could send the network socket to smtpd(8)
|
/* Instead, postscreen could send the network socket to smtpd(8)
|
||||||
/* and ship the session history (including TLS and other SMTP
|
/* and ship the session history (including TLS and other SMTP
|
||||||
@@ -188,7 +195,9 @@ static void psc_smtpd_read_event(int, char *);
|
|||||||
* Encapsulation. The STARTTLS, EHLO and AUTH command handlers temporarily
|
* Encapsulation. The STARTTLS, EHLO and AUTH command handlers temporarily
|
||||||
* suspend SMTP command events, send an asynchronous proxy request, and
|
* suspend SMTP command events, send an asynchronous proxy request, and
|
||||||
* resume SMTP command events after receiving the asynchrounous proxy
|
* resume SMTP command events after receiving the asynchrounous proxy
|
||||||
* response.
|
* response (the EHLO handler must asynchronously talk to the auth server
|
||||||
|
* before it can announce the SASL mechanism list; the list can depend on
|
||||||
|
* the client IP address and on the presence on TLS encryption).
|
||||||
*/
|
*/
|
||||||
#define PSC_RESUME_SMTP_CMD_EVENTS(state) do { \
|
#define PSC_RESUME_SMTP_CMD_EVENTS(state) do { \
|
||||||
PSC_READ_EVENT_REQUEST2(vstream_fileno((state)->smtp_client_stream), \
|
PSC_READ_EVENT_REQUEST2(vstream_fileno((state)->smtp_client_stream), \
|
||||||
@@ -411,15 +420,17 @@ static int psc_starttls_cmd(PSC_STATE *state, char *args)
|
|||||||
static char *psc_extract_addr(VSTRING *result, const char *string)
|
static char *psc_extract_addr(VSTRING *result, const char *string)
|
||||||
{
|
{
|
||||||
const unsigned char *cp = (const unsigned char *) string;
|
const unsigned char *cp = (const unsigned char *) string;
|
||||||
|
char *addr;
|
||||||
|
char *colon;
|
||||||
int stop_at;
|
int stop_at;
|
||||||
int inquote = 0;
|
int inquote = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* smtpd(8) incompatibility: we allow more invalid address forms, and we
|
* smtpd(8) incompatibility: we allow more invalid address forms, and we
|
||||||
* don't strip @site1,site2:user@site3 route addresses. We are not going
|
* don't validate recipients. We are not going to deliver them so we
|
||||||
* to deliver them so we won't have to worry about addresses that end up
|
* won't have to worry about deliverability. This may have to change when
|
||||||
* being nonsense after stripping. This may have to change when we pass
|
* we pass the socket to a real SMTP server and replay message envelope
|
||||||
* the socket to a real SMTP server and replay message envelope commands.
|
* commands.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Skip SP characters. */
|
/* Skip SP characters. */
|
||||||
@@ -448,7 +459,15 @@ static char *psc_extract_addr(VSTRING *result, const char *string)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
VSTRING_TERMINATE(result);
|
VSTRING_TERMINATE(result);
|
||||||
return (STR(result));
|
|
||||||
|
/*
|
||||||
|
* smtpd(8) compatibility: truncate deprecated route address form. This
|
||||||
|
* is primarily to simplify logfile analysis.
|
||||||
|
*/
|
||||||
|
addr = STR(result);
|
||||||
|
if (*addr == '@' && (colon = strchr(addr, ':')) != 0)
|
||||||
|
addr = colon + 1;
|
||||||
|
return (addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* psc_mail_cmd - record MAIL and respond */
|
/* psc_mail_cmd - record MAIL and respond */
|
||||||
@@ -478,6 +497,22 @@ static int psc_mail_cmd(PSC_STATE *state, char *args)
|
|||||||
return (PSC_SEND_REPLY(state, "250 2.1.0 Ok\r\n"));
|
return (PSC_SEND_REPLY(state, "250 2.1.0 Ok\r\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* psc_soften_reply - copy and soft-bounce a reply */
|
||||||
|
|
||||||
|
static char *psc_soften_reply(const char *reply)
|
||||||
|
{
|
||||||
|
static VSTRING *buf = 0;
|
||||||
|
|
||||||
|
if (buf == 0)
|
||||||
|
buf = vstring_alloc(100);
|
||||||
|
vstring_strcpy(buf, reply);
|
||||||
|
if (reply[0] == '5')
|
||||||
|
STR(buf)[0] = '4';
|
||||||
|
if (reply[4] == '5')
|
||||||
|
STR(buf)[4] = '4';
|
||||||
|
return (STR(buf));
|
||||||
|
}
|
||||||
|
|
||||||
/* psc_rcpt_cmd record RCPT and respond */
|
/* psc_rcpt_cmd record RCPT and respond */
|
||||||
|
|
||||||
static int psc_rcpt_cmd(PSC_STATE *state, char *args)
|
static int psc_rcpt_cmd(PSC_STATE *state, char *args)
|
||||||
@@ -501,7 +536,9 @@ static int psc_rcpt_cmd(PSC_STATE *state, char *args)
|
|||||||
msg_info("NOQUEUE: reject: RCPT from [%s]:%s: %.*s; "
|
msg_info("NOQUEUE: reject: RCPT from [%s]:%s: %.*s; "
|
||||||
"from=<%s>, to=<%s>, proto=%s, helo=<%s>",
|
"from=<%s>, to=<%s>, proto=%s, helo=<%s>",
|
||||||
PSC_CLIENT_ADDR_PORT(state),
|
PSC_CLIENT_ADDR_PORT(state),
|
||||||
(int) strlen(state->rcpt_reply) - 2, state->rcpt_reply,
|
(int) strlen(state->rcpt_reply) - 2,
|
||||||
|
var_soft_bounce == 0 ? state->rcpt_reply :
|
||||||
|
psc_soften_reply(state->rcpt_reply),
|
||||||
state->sender, addr, state->protocol,
|
state->sender, addr, state->protocol,
|
||||||
state->helo_name ? state->helo_name : "");
|
state->helo_name ? state->helo_name : "");
|
||||||
return (PSC_SEND_REPLY(state, state->rcpt_reply));
|
return (PSC_SEND_REPLY(state, state->rcpt_reply));
|
||||||
@@ -700,7 +737,7 @@ static void psc_smtpd_read_event(int event, char *context)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Note: on entry into this function the VSTREAM buffer is still empty,
|
* Note: on entry into this function the VSTREAM buffer may be non-empty,
|
||||||
* so we test the "no more input" condition at the bottom of the loops.
|
* so we test the "no more input" condition at the bottom of the loops.
|
||||||
*/
|
*/
|
||||||
for (;;) {
|
for (;;) {
|
||||||
@@ -825,7 +862,8 @@ static void psc_smtpd_read_event(int event, char *context)
|
|||||||
/*
|
/*
|
||||||
* Reset the command buffer write pointer and state machine in
|
* Reset the command buffer write pointer and state machine in
|
||||||
* preparation for the next command. For this to work as expected,
|
* preparation for the next command. For this to work as expected,
|
||||||
* VSTRING_RESET() must be non-destructive.
|
* VSTRING_RESET() must be non-destructive. We just can't ask for the
|
||||||
|
* VSTRING_LEN() and vstring_end() results.
|
||||||
*/
|
*/
|
||||||
state->read_state = PSC_SMTPD_CMD_ST_ANY;
|
state->read_state = PSC_SMTPD_CMD_ST_ANY;
|
||||||
VSTRING_RESET(state->cmd_buffer);
|
VSTRING_RESET(state->cmd_buffer);
|
||||||
@@ -837,7 +875,7 @@ static void psc_smtpd_read_event(int event, char *context)
|
|||||||
* session state structure. When this happens we must leave the SMTP
|
* session state structure. When this happens we must leave the SMTP
|
||||||
* engine to avoid a dangling pointer problem.
|
* engine to avoid a dangling pointer problem.
|
||||||
*/
|
*/
|
||||||
cmd_buffer_ptr = vstring_str(state->cmd_buffer);
|
cmd_buffer_ptr = STR(state->cmd_buffer);
|
||||||
if (msg_verbose)
|
if (msg_verbose)
|
||||||
msg_info("< [%s]:%s: %s", state->smtp_client_addr,
|
msg_info("< [%s]:%s: %s", state->smtp_client_addr,
|
||||||
state->smtp_client_port, cmd_buffer_ptr);
|
state->smtp_client_port, cmd_buffer_ptr);
|
||||||
|
Reference in New Issue
Block a user