2013-10-30 13:02:59 +00:00
|
|
|
# Fail2Ban filter for selected Postfix SMTP rejections
|
2006-09-06 19:34:03 +00:00
|
|
|
#
|
|
|
|
#
|
|
|
|
|
2013-07-20 14:31:21 +00:00
|
|
|
[INCLUDES]
|
|
|
|
|
|
|
|
# Read common prefixes. If any customizations available -- read them from
|
|
|
|
# common.local
|
|
|
|
before = common.conf
|
|
|
|
|
2006-09-06 19:34:03 +00:00
|
|
|
[Definition]
|
|
|
|
|
2017-07-10 13:38:24 +00:00
|
|
|
_daemon = postfix(-\w+)?/\w+(?:/smtp[ds])?
|
|
|
|
_port = (?::\d+)?
|
2013-07-20 14:31:21 +00:00
|
|
|
|
2017-07-10 18:49:28 +00:00
|
|
|
prefregex = ^%(__prefix_line)s<mdpr-<mode>> <F-CONTENT>.+</F-CONTENT>$
|
2017-02-21 14:54:59 +00:00
|
|
|
|
2017-07-10 18:49:28 +00:00
|
|
|
mdpr-normal = (?:NOQUEUE: reject:|improper command pipelining after \S+)
|
2017-10-02 13:41:30 +00:00
|
|
|
mdre-normal=^RCPT from [^[]*\[<HOST>\]%(_port)s: 55[04] 5\.7\.1\s
|
|
|
|
^RCPT from [^[]*\[<HOST>\]%(_port)s: 45[04] 4\.7\.1 (?:Service unavailable\b|Client host rejected: cannot find your (reverse )?hostname\b)
|
|
|
|
^RCPT from [^[]*\[<HOST>\]%(_port)s: 450 4\.7\.1 (<[^>]*>)?: Helo command rejected: Host not found\b
|
|
|
|
^EHLO from [^[]*\[<HOST>\]%(_port)s: 504 5\.5\.2 (<[^>]*>)?: Helo command rejected: need fully-qualified hostname\b
|
|
|
|
^VRFY from [^[]*\[<HOST>\]%(_port)s: 550 5\.1\.1\s
|
|
|
|
^RCPT from [^[]*\[<HOST>\]%(_port)s: 450 4\.1\.8 (<[^>]*>)?: Sender address rejected: Domain not found\b
|
|
|
|
^from [^[]*\[<HOST>\]%(_port)s:?
|
2017-07-10 18:49:28 +00:00
|
|
|
|
|
|
|
mdpr-auth = warning:
|
2017-10-02 13:41:30 +00:00
|
|
|
mdre-auth = ^[^[]*\[<HOST>\]%(_port)s: SASL ((?i)LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed:(?! Connection lost to authentication server| Invalid authentication mechanism)
|
|
|
|
mdre-auth2= ^[^[]*\[<HOST>\]%(_port)s: SASL ((?i)LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed:(?! Connection lost to authentication server)
|
2017-07-10 18:49:28 +00:00
|
|
|
# todo: check/remove "Invalid authentication mechanism" from ignore list, if gh-1243 will get finished (see gh-1297).
|
|
|
|
|
|
|
|
# Mode "rbl" currently included in mode "normal", but if needed for jail "postfix-rbl" only:
|
|
|
|
mdpr-rbl = %(mdpr-normal)s
|
2017-10-02 13:41:30 +00:00
|
|
|
mdre-rbl = ^RCPT from [^[]*\[<HOST>\]%(_port)s: [45]54 [45]\.7\.1 Service unavailable; Client host \[\S+\] blocked\b
|
2017-07-10 18:49:28 +00:00
|
|
|
|
|
|
|
# Mode "rbl" currently included in mode "normal" (within 1st rule)
|
|
|
|
mdpr-more = %(mdpr-normal)s
|
|
|
|
mdre-more = %(mdre-normal)s
|
|
|
|
|
|
|
|
mdpr-ddos = lost connection after(?! DATA) [A-Z]+
|
2017-10-02 13:41:30 +00:00
|
|
|
mdre-ddos = ^from [^[]*\[<HOST>\]%(_port)s:?
|
2017-07-10 18:49:28 +00:00
|
|
|
|
|
|
|
mdpr-extra = (?:%(mdpr-auth)s|%(mdpr-normal)s)
|
|
|
|
mdre-extra = %(mdre-auth)s
|
|
|
|
%(mdre-normal)s
|
|
|
|
|
|
|
|
mdpr-aggressive = (?:%(mdpr-auth)s|%(mdpr-normal)s|%(mdpr-ddos)s)
|
|
|
|
mdre-aggressive = %(mdre-auth2)s
|
|
|
|
%(mdre-normal)s
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
failregex = <mdre-<mode>>
|
|
|
|
|
|
|
|
# Parameter "mode": more (default combines normal and rbl), auth, normal, rbl, ddos, extra or aggressive (combines all)
|
|
|
|
# Usage example (for jail.local):
|
|
|
|
# [postfix]
|
|
|
|
# mode = aggressive
|
|
|
|
# # or another jail (rewrite filter parameters of jail):
|
|
|
|
# [postfix-rbl]
|
|
|
|
# filter = postfix[mode=rbl]
|
|
|
|
#
|
|
|
|
mode = more
|
2006-11-12 14:52:36 +00:00
|
|
|
|
2006-11-15 18:44:28 +00:00
|
|
|
ignoreregex =
|
2013-05-09 23:15:07 +00:00
|
|
|
|
|
|
|
[Init]
|
|
|
|
|
|
|
|
journalmatch = _SYSTEMD_UNIT=postfix.service
|
2013-11-02 04:59:05 +00:00
|
|
|
|
2013-10-30 13:02:59 +00:00
|
|
|
# Author: Cyril Jaquier
|