mirror of https://github.com/fail2ban/fail2ban
Merge branch 'master' into master
commit
001c0898d6
|
@ -10,10 +10,13 @@ python:
|
||||||
# - 3.2
|
# - 3.2
|
||||||
- 3.3
|
- 3.3
|
||||||
- 3.4
|
- 3.4
|
||||||
- pypy3
|
# disabled since setuptools dropped support for Python 3.0 - 3.2
|
||||||
|
# - pypy3
|
||||||
|
- pypy3.3-5.2-alpha1
|
||||||
before_install:
|
before_install:
|
||||||
- if [[ $TRAVIS_PYTHON_VERSION == 2* || $TRAVIS_PYTHON_VERSION == 'pypy' ]]; then export F2B_PY_2=true && echo "Set F2B_PY_2"; fi
|
- echo "running under $TRAVIS_PYTHON_VERSION"
|
||||||
- if [[ $TRAVIS_PYTHON_VERSION == 3* || $TRAVIS_PYTHON_VERSION == 'pypy3' ]]; then export F2B_PY_3=true && echo "Set F2B_PY_3"; fi
|
- if [[ $TRAVIS_PYTHON_VERSION == 2* || $TRAVIS_PYTHON_VERSION == pypy* && $TRAVIS_PYTHON_VERSION != pypy3* ]]; then export F2B_PY_2=true && echo "Set F2B_PY_2"; fi
|
||||||
|
- if [[ $TRAVIS_PYTHON_VERSION == 3* || $TRAVIS_PYTHON_VERSION == pypy3* ]]; then export F2B_PY_3=true && echo "Set F2B_PY_3"; fi
|
||||||
- travis_retry sudo apt-get update -qq
|
- travis_retry sudo apt-get update -qq
|
||||||
# Set this so sudo executes the correct python binary
|
# Set this so sudo executes the correct python binary
|
||||||
# Anything not using sudo will already have the correct environment
|
# Anything not using sudo will already have the correct environment
|
||||||
|
|
35
ChangeLog
35
ChangeLog
|
@ -6,14 +6,33 @@
|
||||||
Fail2Ban: Changelog
|
Fail2Ban: Changelog
|
||||||
===================
|
===================
|
||||||
|
|
||||||
|
ver. 0.9.8 (2016/XX/XXX) - wanna-be-released
|
||||||
ver. 0.9.x (2016/??/??) - wanna-be-released
|
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
0.9.x line is no longer heavily developed. If you are interested in
|
0.9.x line is no longer heavily developed. If you are interested in
|
||||||
new features (e.g. IPv6 support), please consider 0.10 branch and its
|
new features (e.g. IPv6 support), please consider 0.10 branch and its
|
||||||
releases.
|
releases.
|
||||||
|
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
* Fix for systemd-backend: fail2ban hits the ulimit (out of file descriptors), see gh-991.
|
||||||
|
Partially back-ported from v.0.10.
|
||||||
|
* action.d/bsd-ipfw.conf
|
||||||
|
- Make the rule number, the action starts looking for a free slot to insert
|
||||||
|
the new rule, configurable (gh-1689)
|
||||||
|
* filter.d/apache-overflows.conf:
|
||||||
|
- Fixes resources greedy expression (see gh-1790);
|
||||||
|
- Rewritten without end-anchor ($), because of potential vulnerability on very long URLs.
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
### Enhancements
|
||||||
|
* filter.d/kerio.conf - filter extended with new rules (see gh-1455)
|
||||||
|
|
||||||
|
|
||||||
|
ver. 0.9.7 (2017/05/11) - awaiting-victory
|
||||||
|
-----------
|
||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
* Fixed a systemd-journal handling in fail2ban-regex (gh-1657)
|
* Fixed a systemd-journal handling in fail2ban-regex (gh-1657)
|
||||||
* filter.d/sshd.conf
|
* filter.d/sshd.conf
|
||||||
|
@ -22,9 +41,10 @@ releases.
|
||||||
(0.10th resp. IPv6 relevant only, amend for gh-1479)
|
(0.10th resp. IPv6 relevant only, amend for gh-1479)
|
||||||
* config/pathes-freebsd.conf
|
* config/pathes-freebsd.conf
|
||||||
- Fixed filenames for apache and nginx log files (gh-1667)
|
- Fixed filenames for apache and nginx log files (gh-1667)
|
||||||
* action.d/bsd-ipfw.conf
|
* filter.d/exim.conf
|
||||||
- Make the rule number, the action starts looking for a free slot to insert
|
- optional part `(...)` after host-name before `[IP]` (gh-1751)
|
||||||
the new rule, configurable (gh-1689)
|
- new reason "Unrouteable address" for "rejected RCPT" regex (gh-1762)
|
||||||
|
- match of complex time like `D=2m42s` in regex "no MAIL in SMTP connection" (gh-1766)
|
||||||
* filter.d/sshd.conf
|
* filter.d/sshd.conf
|
||||||
- new aggressive rules (gh-864):
|
- new aggressive rules (gh-864):
|
||||||
- Connection reset by peer (multi-line rule during authorization process)
|
- Connection reset by peer (multi-line rule during authorization process)
|
||||||
|
@ -36,8 +56,10 @@ releases.
|
||||||
and suffix (logged from several ssh versions), according to gh-1206;
|
and suffix (logged from several ssh versions), according to gh-1206;
|
||||||
* filter.d/suhosin.conf
|
* filter.d/suhosin.conf
|
||||||
- greedy catch-all before `<HOST>` fixed (potential vulnerability)
|
- greedy catch-all before `<HOST>` fixed (potential vulnerability)
|
||||||
|
* filter.d/cyrus-imap.conf
|
||||||
|
- accept entries without login-info resp. hostname before IP address (gh-1707)
|
||||||
* Filter tests extended with check of all config-regexp, that contains greedy catch-all
|
* Filter tests extended with check of all config-regexp, that contains greedy catch-all
|
||||||
before `<HOST>`, that is hard-anchored at end or precise sub expression after `<HOST>`
|
before `<HOST>`, that is hard-anchored at end or precise sub expression after `<HOST>`
|
||||||
|
|
||||||
### New Features
|
### New Features
|
||||||
* New Actions:
|
* New Actions:
|
||||||
|
@ -47,6 +69,7 @@ releases.
|
||||||
- filter.d/domino-smtp: IBM Domino SMTP task (gh-1603)
|
- filter.d/domino-smtp: IBM Domino SMTP task (gh-1603)
|
||||||
|
|
||||||
### Enhancements
|
### Enhancements
|
||||||
|
* Introduced new log-level `MSG` (as INFO-2, equivalent to 18)
|
||||||
|
|
||||||
|
|
||||||
ver. 0.9.6 (2016/12/10) - stretch-is-coming
|
ver. 0.9.6 (2016/12/10) - stretch-is-coming
|
||||||
|
|
5
MANIFEST
5
MANIFEST
|
@ -37,6 +37,7 @@ config/action.d/mail-whois-common.conf
|
||||||
config/action.d/mail-whois.conf
|
config/action.d/mail-whois.conf
|
||||||
config/action.d/mail-whois-lines.conf
|
config/action.d/mail-whois-lines.conf
|
||||||
config/action.d/mynetwatchman.conf
|
config/action.d/mynetwatchman.conf
|
||||||
|
config/action.d/netscaler.conf
|
||||||
config/action.d/nftables-allports.conf
|
config/action.d/nftables-allports.conf
|
||||||
config/action.d/nftables-common.conf
|
config/action.d/nftables-common.conf
|
||||||
config/action.d/nftables-multiport.conf
|
config/action.d/nftables-multiport.conf
|
||||||
|
@ -83,6 +84,7 @@ config/filter.d/courier-auth.conf
|
||||||
config/filter.d/courier-smtp.conf
|
config/filter.d/courier-smtp.conf
|
||||||
config/filter.d/cyrus-imap.conf
|
config/filter.d/cyrus-imap.conf
|
||||||
config/filter.d/directadmin.conf
|
config/filter.d/directadmin.conf
|
||||||
|
config/filter.d/domino-smtp.conf
|
||||||
config/filter.d/dovecot.conf
|
config/filter.d/dovecot.conf
|
||||||
config/filter.d/dropbear.conf
|
config/filter.d/dropbear.conf
|
||||||
config/filter.d/drupal-auth.conf
|
config/filter.d/drupal-auth.conf
|
||||||
|
@ -138,6 +140,7 @@ config/filter.d/sogo-auth.conf
|
||||||
config/filter.d/solid-pop3d.conf
|
config/filter.d/solid-pop3d.conf
|
||||||
config/filter.d/squid.conf
|
config/filter.d/squid.conf
|
||||||
config/filter.d/squirrelmail.conf
|
config/filter.d/squirrelmail.conf
|
||||||
|
config/filter.d/sshd-aggressive.conf
|
||||||
config/filter.d/sshd.conf
|
config/filter.d/sshd.conf
|
||||||
config/filter.d/sshd-ddos.conf
|
config/filter.d/sshd-ddos.conf
|
||||||
config/filter.d/stunnel.conf
|
config/filter.d/stunnel.conf
|
||||||
|
@ -278,6 +281,7 @@ fail2ban/tests/files/logs/courier-auth
|
||||||
fail2ban/tests/files/logs/courier-smtp
|
fail2ban/tests/files/logs/courier-smtp
|
||||||
fail2ban/tests/files/logs/cyrus-imap
|
fail2ban/tests/files/logs/cyrus-imap
|
||||||
fail2ban/tests/files/logs/directadmin
|
fail2ban/tests/files/logs/directadmin
|
||||||
|
fail2ban/tests/files/logs/domino-smtp
|
||||||
fail2ban/tests/files/logs/dovecot
|
fail2ban/tests/files/logs/dovecot
|
||||||
fail2ban/tests/files/logs/dropbear
|
fail2ban/tests/files/logs/dropbear
|
||||||
fail2ban/tests/files/logs/drupal-auth
|
fail2ban/tests/files/logs/drupal-auth
|
||||||
|
@ -330,6 +334,7 @@ fail2ban/tests/files/logs/solid-pop3d
|
||||||
fail2ban/tests/files/logs/squid
|
fail2ban/tests/files/logs/squid
|
||||||
fail2ban/tests/files/logs/squirrelmail
|
fail2ban/tests/files/logs/squirrelmail
|
||||||
fail2ban/tests/files/logs/sshd
|
fail2ban/tests/files/logs/sshd
|
||||||
|
fail2ban/tests/files/logs/sshd-aggressive
|
||||||
fail2ban/tests/files/logs/sshd-ddos
|
fail2ban/tests/files/logs/sshd-ddos
|
||||||
fail2ban/tests/files/logs/stunnel
|
fail2ban/tests/files/logs/stunnel
|
||||||
fail2ban/tests/files/logs/suhosin
|
fail2ban/tests/files/logs/suhosin
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
/ _|__ _(_) |_ ) |__ __ _ _ _
|
/ _|__ _(_) |_ ) |__ __ _ _ _
|
||||||
| _/ _` | | |/ /| '_ \/ _` | ' \
|
| _/ _` | | |/ /| '_ \/ _` | ' \
|
||||||
|_| \__,_|_|_/___|_.__/\__,_|_||_|
|
|_| \__,_|_|_/___|_.__/\__,_|_||_|
|
||||||
v0.9.6.dev0 2016/??/??
|
v0.9.7.dev0 2017/??/??
|
||||||
|
|
||||||
## Fail2Ban: ban hosts that cause multiple authentication errors
|
## Fail2Ban: ban hosts that cause multiple authentication errors
|
||||||
|
|
||||||
|
@ -39,8 +39,8 @@ Optional:
|
||||||
|
|
||||||
To install, just do:
|
To install, just do:
|
||||||
|
|
||||||
tar xvfj fail2ban-0.9.6.tar.bz2
|
tar xvfj fail2ban-0.9.7.tar.bz2
|
||||||
cd fail2ban-0.9.6
|
cd fail2ban-0.9.7
|
||||||
python setup.py install
|
python setup.py install
|
||||||
|
|
||||||
This will install Fail2Ban into the python library directory. The executable
|
This will install Fail2Ban into the python library directory. The executable
|
||||||
|
|
14
RELEASE
14
RELEASE
|
@ -53,7 +53,7 @@ Preparation
|
||||||
|
|
||||||
or an alternative for comparison with previous release
|
or an alternative for comparison with previous release
|
||||||
|
|
||||||
git diff 0.9.6 | grep -B2 'index 0000000..' | grep -B1 'new file mode' | sed -n -e '/^diff /s,.* b/,,gp' >> MANIFEST
|
git diff 0.9.7 | grep -B2 'index 0000000..' | grep -B1 'new file mode' | sed -n -e '/^diff /s,.* b/,,gp' >> MANIFEST
|
||||||
sort MANIFEST | uniq | sponge MANIFEST
|
sort MANIFEST | uniq | sponge MANIFEST
|
||||||
|
|
||||||
* Run::
|
* Run::
|
||||||
|
@ -66,24 +66,24 @@ Preparation
|
||||||
|
|
||||||
* Which indicates that testcases/files/logs/mysqld.log has been moved or is a directory::
|
* Which indicates that testcases/files/logs/mysqld.log has been moved or is a directory::
|
||||||
|
|
||||||
tar -C /tmp -jxf dist/fail2ban-0.9.6.tar.bz2
|
tar -C /tmp -jxf dist/fail2ban-0.9.7.tar.bz2
|
||||||
|
|
||||||
* clean up current directory::
|
* clean up current directory::
|
||||||
|
|
||||||
diff -rul --exclude \*.pyc . /tmp/fail2ban-0.9.6/
|
diff -rul --exclude \*.pyc . /tmp/fail2ban-0.9.7/
|
||||||
|
|
||||||
* Only differences should be files that you don't want distributed.
|
* Only differences should be files that you don't want distributed.
|
||||||
|
|
||||||
|
|
||||||
* Ensure the tests work from the tarball::
|
* Ensure the tests work from the tarball::
|
||||||
|
|
||||||
cd /tmp/fail2ban-0.9.6/ && bin/fail2ban-testcases
|
cd /tmp/fail2ban-0.9.7/ && bin/fail2ban-testcases
|
||||||
|
|
||||||
* Add/finalize the corresponding entry in the ChangeLog
|
* Add/finalize the corresponding entry in the ChangeLog
|
||||||
|
|
||||||
* To generate a list of committers use e.g.::
|
* To generate a list of committers use e.g.::
|
||||||
|
|
||||||
git shortlog -sn 0.9.6.. | sed -e 's,^[ 0-9\t]*,,g' | tr '\n' '\|' | sed -e 's:|:, :g'
|
git shortlog -sn 0.9.7.. | sed -e 's,^[ 0-9\t]*,,g' | tr '\n' '\|' | sed -e 's:|:, :g'
|
||||||
|
|
||||||
* Ensure the top of the ChangeLog has the right version and current date.
|
* Ensure the top of the ChangeLog has the right version and current date.
|
||||||
* Ensure the top entry of the ChangeLog has the right version and current date.
|
* Ensure the top entry of the ChangeLog has the right version and current date.
|
||||||
|
@ -106,7 +106,7 @@ Preparation
|
||||||
* Tag the release by using a signed (and annotated) tag. Cut/paste
|
* Tag the release by using a signed (and annotated) tag. Cut/paste
|
||||||
release ChangeLog entry as tag annotation::
|
release ChangeLog entry as tag annotation::
|
||||||
|
|
||||||
git tag -s 0.9.6
|
git tag -s 0.9.8
|
||||||
|
|
||||||
Pre Release
|
Pre Release
|
||||||
===========
|
===========
|
||||||
|
@ -190,7 +190,7 @@ Post Release
|
||||||
|
|
||||||
Add the following to the top of the ChangeLog::
|
Add the following to the top of the ChangeLog::
|
||||||
|
|
||||||
ver. 0.9.8 (2016/XX/XXX) - wanna-be-released
|
ver. 0.9.9 (2016/XX/XXX) - wanna-be-released
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
|
|
|
@ -8,11 +8,15 @@ before = apache-common.conf
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
failregex = ^%(_apache_error_client)s ((AH0013[456]: )?Invalid (method|URI) in request .*( - possible attempt to establish SSL connection on non-SSL port)?|(AH00565: )?request failed: URI too long \(longer than \d+\)|request failed: erroneous characters after protocol string: .*|AH00566: request failed: invalid characters in URI)(, referer: \S+)?$
|
failregex = ^%(_apache_error_client)s (?:(?:AH0013[456]: )?Invalid (method|URI) in request\b|(?:AH00565: )?request failed: URI too long \(longer than \d+\)|request failed: erroneous characters after protocol string:|(?:AH00566: )?request failed: invalid characters in URI\b)
|
||||||
|
|
||||||
ignoreregex =
|
ignoreregex =
|
||||||
|
|
||||||
# DEV Notes:
|
# DEV Notes:
|
||||||
|
#
|
||||||
|
# [sebres] Because this apache-log could contain very long URLs (and/or referrer),
|
||||||
|
# the parsing of it anchored way may be very vulnerable (at least as regards
|
||||||
|
# the system resources, see gh-1790). Thus rewritten without end-anchor ($).
|
||||||
#
|
#
|
||||||
# fgrep -r 'URI too long' httpd-2.*
|
# fgrep -r 'URI too long' httpd-2.*
|
||||||
# httpd-2.2.25/server/protocol.c: "request failed: URI too long (longer than %d)", r->server->limit_req_line);
|
# httpd-2.2.25/server/protocol.c: "request failed: URI too long (longer than %d)", r->server->limit_req_line);
|
||||||
|
|
|
@ -13,7 +13,7 @@ before = common.conf
|
||||||
|
|
||||||
_daemon = (?:cyrus/)?(?:imap(d|s)?|pop3(d|s)?)
|
_daemon = (?:cyrus/)?(?:imap(d|s)?|pop3(d|s)?)
|
||||||
|
|
||||||
failregex = ^%(__prefix_line)sbadlogin: \S+ ?\[<HOST>\] \S+ .*?\[?SASL\(-13\): (authentication failure|user not found): .*\]?$
|
failregex = ^%(__prefix_line)sbadlogin: [^\[]*\[<HOST>\] \S+ .*?\[?SASL\(-13\): (authentication failure|user not found): .*\]?$
|
||||||
|
|
||||||
ignoreregex =
|
ignoreregex =
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ before = common.conf
|
||||||
_daemon = (auth|dovecot(-auth)?|auth-worker)
|
_daemon = (auth|dovecot(-auth)?|auth-worker)
|
||||||
|
|
||||||
failregex = ^%(__prefix_line)s(?:%(__pam_auth)s(?:\(dovecot:auth\))?:)?\s+authentication failure; logname=\S* uid=\S* euid=\S* tty=dovecot ruser=\S* rhost=<HOST>(?:\s+user=\S*)?\s*$
|
failregex = ^%(__prefix_line)s(?:%(__pam_auth)s(?:\(dovecot:auth\))?:)?\s+authentication failure; logname=\S* uid=\S* euid=\S* tty=dovecot ruser=\S* rhost=<HOST>(?:\s+user=\S*)?\s*$
|
||||||
^%(__prefix_line)s(?:pop3|imap)-login: (?:Info: )?(?:Aborted login|Disconnected)(?::(?: [^ \(]+)+)? \((?:auth failed, \d+ attempts( in \d+ secs)?|tried to use (disabled|disallowed) \S+ auth)\):( user=<[^>]+>,)?( method=\S+,)? rip=<HOST>(?:, lip=\S+)?(?:, TLS(?: handshaking(?:: SSL_accept\(\) failed: error:[\dA-F]+:SSL routines:[TLS\d]+_GET_CLIENT_HELLO:unknown protocol)?)?(: Disconnected)?)?(, session=<\S+>)?\s*$
|
^%(__prefix_line)s(?:pop3|imap)-login: (?:Info: )?(?:Aborted login|Disconnected)(?::(?: [^ \(]+)+)? \((?:auth failed, \d+ attempts( in \d+ secs)?|tried to use (disabled|disallowed) \S+ auth)\):( user=<[^>]*>,)?( method=\S+,)? rip=<HOST>(?:, lip=\S+)?(?:, TLS(?: handshaking(?:: SSL_accept\(\) failed: error:[\dA-F]+:SSL routines:[TLS\d]+_GET_CLIENT_HELLO:unknown protocol)?)?(: Disconnected)?)?(, session=<\S+>)?\s*$
|
||||||
^%(__prefix_line)s(?:Info|dovecot: auth\(default\)|auth-worker\(\d+\)): pam\(\S+,<HOST>\): pam_authenticate\(\) failed: (User not known to the underlying authentication module: \d+ Time\(s\)|Authentication failure \(password mismatch\?\))\s*$
|
^%(__prefix_line)s(?:Info|dovecot: auth\(default\)|auth-worker\(\d+\)): pam\(\S+,<HOST>\): pam_authenticate\(\) failed: (User not known to the underlying authentication module: \d+ Time\(s\)|Authentication failure \(password mismatch\?\))\s*$
|
||||||
^%(__prefix_line)s(?:auth|auth-worker\(\d+\)): (?:pam|passwd-file)\(\S+,<HOST>\): unknown user\s*$
|
^%(__prefix_line)s(?:auth|auth-worker\(\d+\)): (?:pam|passwd-file)\(\S+,<HOST>\): unknown user\s*$
|
||||||
^%(__prefix_line)s(?:auth|auth-worker\(\d+\)): Info: ldap\(\S*,<HOST>,\S*\): invalid credentials\s*$
|
^%(__prefix_line)s(?:auth|auth-worker\(\d+\)): Info: ldap\(\S*,<HOST>,\S*\): invalid credentials\s*$
|
||||||
|
|
|
@ -9,7 +9,9 @@ after = exim-common.local
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
host_info = (?:H=([\w.-]+ )?(?:\(\S+\) )?)?\[<HOST>\](?::\d+)? (?:I=\[\S+\](:\d+)? )?(?:U=\S+ )?(?:P=e?smtp )?
|
host_info_pre = (?:H=([\w.-]+ )?(?:\(\S+\) )?)?
|
||||||
|
host_info_suf = (?::\d+)?(?: I=\[\S+\](:\d+)?)?(?: U=\S+)?(?: P=e?smtp)?(?: F=(?:<>|[^@]+@\S+))?\s
|
||||||
|
host_info = %(host_info_pre)s\[<HOST>\]%(host_info_suf)s
|
||||||
pid = (?: \[\d+\])?
|
pid = (?: \[\d+\])?
|
||||||
|
|
||||||
# DEV Notes:
|
# DEV Notes:
|
||||||
|
|
|
@ -14,13 +14,13 @@ before = exim-common.conf
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
failregex = ^%(pid)s %(host_info)ssender verify fail for <\S+>: (?:Unknown user|Unrouteable address|all relevant MX records point to non-existent hosts)\s*$
|
failregex = ^%(pid)s %(host_info)ssender verify fail for <\S+>: (?:Unknown user|Unrouteable address|all relevant MX records point to non-existent hosts)\s*$
|
||||||
^%(pid)s \w+ authenticator failed for (\S+ )?\(\S+\) \[<HOST>\](?::\d+)?(?: I=\[\S+\](:\d+)?)?: 535 Incorrect authentication data( \(set_id=.*\)|: \d+ Time\(s\))?\s*$
|
^%(pid)s \w+ authenticator failed for (?:[^\[\( ]* )?(?:\(\S*\) )?\[<HOST>\](?::\d+)?(?: I=\[\S+\](:\d+)?)?: 535 Incorrect authentication data( \(set_id=.*\)|: \d+ Time\(s\))?\s*$
|
||||||
^%(pid)s %(host_info)sF=(?:<>|[^@]+@\S+) rejected RCPT [^@]+@\S+: (?:relay not permitted|Sender verify failed|Unknown user)\s*$
|
^%(pid)s %(host_info)srejected RCPT [^@]+@\S+: (?:relay not permitted|Sender verify failed|Unknown user|Unrouteable address)\s*$
|
||||||
^%(pid)s SMTP protocol synchronization error \([^)]*\): rejected (?:connection from|"\S+") %(host_info)s(?:next )?input=".*"\s*$
|
^%(pid)s SMTP protocol synchronization error \([^)]*\): rejected (?:connection from|"\S+") %(host_info)s(?:next )?input=".*"\s*$
|
||||||
^%(pid)s SMTP call from \S+ %(host_info)sdropped: too many nonmail commands \(last was "\S+"\)\s*$
|
^%(pid)s SMTP call from \S+ %(host_info)sdropped: too many nonmail commands \(last was "\S+"\)\s*$
|
||||||
^%(pid)s SMTP protocol error in "AUTH \S*(?: \S*)?" %(host_info)sAUTH command used when not advertised\s*$
|
^%(pid)s SMTP protocol error in "AUTH \S*(?: \S*)?" %(host_info)sAUTH command used when not advertised\s*$
|
||||||
^%(pid)s no MAIL in SMTP connection from (?:\S* )?(?:\(\S*\) )?%(host_info)sD=\d+s(?: C=\S*)?\s*$
|
^%(pid)s no MAIL in SMTP connection from (?:[^\[\( ]* )?(?:\(\S*\) )?%(host_info)sD=\d\S+s(?: C=\S*)?\s*$
|
||||||
^%(pid)s \S+ SMTP connection from (?:\S* )?(?:\(\S*\) )?%(host_info)sclosed by DROP in ACL\s*$
|
^%(pid)s (?:[\w\-]+ )?SMTP connection from (?:[^\[\( ]* )?(?:\(\S*\) )?%(host_info)sclosed by DROP in ACL\s*$
|
||||||
|
|
||||||
ignoreregex =
|
ignoreregex =
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,14 @@
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
failregex = ^ SMTP Spam attack detected from <HOST>,
|
failregex = ^ SMTP Spam attack detected from <HOST>,
|
||||||
^ IP address <HOST> found in DNS blacklist \S+, mail from \S+ to \S+$
|
^ IP address <HOST> found in DNS blacklist
|
||||||
^ Relay attempt from IP address <HOST>
|
^ Relay attempt from IP address <HOST>
|
||||||
^ Attempt to deliver to unknown recipient \S+, from \S+, IP address <HOST>$
|
^ Attempt to deliver to unknown recipient \S+, from \S+, IP address <HOST>$
|
||||||
|
^ Failed SMTP login from <HOST>
|
||||||
|
^ SMTP: User \S+ doesn't exist. Attempt from IP address <HOST>
|
||||||
|
^ Client with IP address <HOST> has no reverse DNS entry, connection rejected before SMTP greeting$
|
||||||
|
^ Administration login into Web Administration from <HOST> failed: IP address not allowed$
|
||||||
|
^ Message from IP address <HOST>, sender \S+ rejected: sender domain does not exist$
|
||||||
|
|
||||||
ignoreregex =
|
ignoreregex =
|
||||||
|
|
||||||
|
@ -16,5 +21,6 @@ datepattern = ^\[%%d/%%b/%%Y %%H:%%M:%%S\]
|
||||||
# DEV NOTES:
|
# DEV NOTES:
|
||||||
#
|
#
|
||||||
# Author: A.P. Lawrence
|
# Author: A.P. Lawrence
|
||||||
|
# Updated by: M. Bischoff <https://github.com/herrbischoff>
|
||||||
#
|
#
|
||||||
# Based off: http://aplawrence.com/Kerio/fail2ban.html
|
# Based off: http://aplawrence.com/Kerio/fail2ban.html
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Fail2Ban filter for unsuccesfull MySQL authentication attempts
|
# Fail2Ban filter for unsuccesful MySQL authentication attempts
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# To log wrong MySQL access attempts add to /etc/my.cnf in [mysqld]:
|
# To log wrong MySQL access attempts add to /etc/my.cnf in [mysqld]:
|
||||||
|
|
|
@ -12,7 +12,7 @@ before = common.conf
|
||||||
|
|
||||||
_daemon = postfix(-\w+)?/smtpd
|
_daemon = postfix(-\w+)?/smtpd
|
||||||
|
|
||||||
failregex = ^%(__prefix_line)sNOQUEUE: reject: RCPT from \S+\[<HOST>\]: 454 4\.7\.1 Service unavailable; Client host \[\S+\] blocked using .* from=<\S*> to=<\S+> proto=ESMTP helo=<\S*>$
|
failregex = ^%(__prefix_line)sNOQUEUE: reject: RCPT from \S+\[<HOST>\]: [45]54 [45]\.7\.1 Service unavailable; Client host \[\S+\] blocked\b
|
||||||
|
|
||||||
ignoreregex =
|
ignoreregex =
|
||||||
|
|
||||||
|
|
|
@ -23,5 +23,8 @@ failregex = ^%(__prefix_line)s%(__hostname)s \(\S+\[<HOST>\]\)[: -]+ USER .*: no
|
||||||
|
|
||||||
ignoreregex =
|
ignoreregex =
|
||||||
|
|
||||||
|
[Init]
|
||||||
|
journalmatch = _SYSTEMD_UNIT=proftpd.service
|
||||||
|
|
||||||
# Author: Yaroslav Halchenko
|
# Author: Yaroslav Halchenko
|
||||||
# Daniel Black - hardening of regex
|
# Daniel Black - hardening of regex
|
||||||
|
|
|
@ -34,7 +34,9 @@ Below derived from:
|
||||||
https://mail.python.org/pipermail/tutor/2007-August/056243.html
|
https://mail.python.org/pipermail/tutor/2007-August/056243.html
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
logging.MSG = logging.INFO - 2
|
||||||
logging.NOTICE = logging.INFO + 5
|
logging.NOTICE = logging.INFO + 5
|
||||||
|
logging.addLevelName(logging.MSG, 'MSG')
|
||||||
logging.addLevelName(logging.NOTICE, 'NOTICE')
|
logging.addLevelName(logging.NOTICE, 'NOTICE')
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -820,7 +820,7 @@ class FileContainer:
|
||||||
## sys.stdout.flush()
|
## sys.stdout.flush()
|
||||||
# Compare hash and inode
|
# Compare hash and inode
|
||||||
if self.__hash != myHash or self.__ino != stats.st_ino:
|
if self.__hash != myHash or self.__ino != stats.st_ino:
|
||||||
logSys.info("Log rotation detected for %s" % self.__filename)
|
logSys.log(logging.MSG, "Log rotation detected for %s" % self.__filename)
|
||||||
self.__hash = myHash
|
self.__hash = myHash
|
||||||
self.__ino = stats.st_ino
|
self.__ino = stats.st_ino
|
||||||
self.__pos = 0
|
self.__pos = 0
|
||||||
|
|
|
@ -291,6 +291,13 @@ class FilterSystemd(JournalFilter): # pragma: systemd no cover
|
||||||
except FailManagerEmpty:
|
except FailManagerEmpty:
|
||||||
self.failManager.cleanup(MyTime.time())
|
self.failManager.cleanup(MyTime.time())
|
||||||
|
|
||||||
|
# close journal:
|
||||||
|
try:
|
||||||
|
if self.__journal:
|
||||||
|
self.__journal.close()
|
||||||
|
except Exception as e: # pragma: no cover
|
||||||
|
logSys.error("Close journal failed: %r", e,
|
||||||
|
exc_info=logSys.getEffectiveLevel()<=logging.DEBUG)
|
||||||
logSys.debug((self.jail is not None and self.jail.name
|
logSys.debug((self.jail is not None and self.jail.name
|
||||||
or "jailless") +" filter terminated")
|
or "jailless") +" filter terminated")
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -16,3 +16,6 @@ Dec 30 16:03:27 somehost imapd[2517]: badlogin: local-somehost[1.2.3.4] OTP [SAS
|
||||||
Jul 17 22:55:56 derry cyrus/imaps[7568]: badlogin: serafinat.xxxxxx [1.2.3.4] plain [SASL(-13): user not found: user: pressy@derry property: cmusaslsecretPLAIN not found in sasldb]
|
Jul 17 22:55:56 derry cyrus/imaps[7568]: badlogin: serafinat.xxxxxx [1.2.3.4] plain [SASL(-13): user not found: user: pressy@derry property: cmusaslsecretPLAIN not found in sasldb]
|
||||||
# failJSON: { "time": "2005-07-18T16:46:42", "match": true , "host": "1.2.3.4" }
|
# failJSON: { "time": "2005-07-18T16:46:42", "match": true , "host": "1.2.3.4" }
|
||||||
Jul 18 16:46:42 derry cyrus/imaps[27449]: badlogin: serafinat.xxxxxx [1.2.3.4] PLAIN [SASL(-13): user not found: Password verification failed]
|
Jul 18 16:46:42 derry cyrus/imaps[27449]: badlogin: serafinat.xxxxxx [1.2.3.4] PLAIN [SASL(-13): user not found: Password verification failed]
|
||||||
|
|
||||||
|
# failJSON: { "time": "2005-03-08T05:25:21", "match": true , "host": "192.0.2.4", "desc": "entry without loginname/hostname before IP" }
|
||||||
|
Mar 8 05:25:21 host imap[22130]: badlogin: [192.0.2.4] plain [SASL(-13): authentication failure: Password verification failed]
|
|
@ -60,10 +60,19 @@
|
||||||
2016-03-21 04:07:49 [25874] 1ahr79-0006jK-G9 SMTP connection from (voyeur.webair.com) [174.137.147.204]:44884 I=[172.89.0.6]:25 closed by DROP in ACL
|
2016-03-21 04:07:49 [25874] 1ahr79-0006jK-G9 SMTP connection from (voyeur.webair.com) [174.137.147.204]:44884 I=[172.89.0.6]:25 closed by DROP in ACL
|
||||||
# failJSON: { "time": "2016-03-21T04:33:13", "match": true , "host": "206.214.71.53" }
|
# failJSON: { "time": "2016-03-21T04:33:13", "match": true , "host": "206.214.71.53" }
|
||||||
2016-03-21 04:33:13 [26074] 1ahrVl-0006mY-79 SMTP connection from riveruse.com [206.214.71.53]:39865 I=[172.89.0.6]:25 closed by DROP in ACL
|
2016-03-21 04:33:13 [26074] 1ahrVl-0006mY-79 SMTP connection from riveruse.com [206.214.71.53]:39865 I=[172.89.0.6]:25 closed by DROP in ACL
|
||||||
|
# failJSON: { "time": "2016-03-21T04:33:14", "match": true , "host": "192.0.2.33", "desc": "short form without optional session-id" }
|
||||||
|
2016-03-21 04:33:14 SMTP connection from (some.domain) [192.0.2.33] closed by DROP in ACL
|
||||||
|
|
||||||
# failJSON: { "time": "2016-04-01T11:08:39", "match": true , "host": "192.0.2.1" }
|
# failJSON: { "time": "2016-04-01T11:08:39", "match": true , "host": "192.0.2.1" }
|
||||||
2016-04-01 11:08:39 [18643] no MAIL in SMTP connection from host.example.com (SERVER) [192.0.2.1]:1418 I=[172.89.0.6]:25 D=34s C=EHLO,AUTH
|
2016-04-01 11:08:39 [18643] no MAIL in SMTP connection from host.example.com (SERVER) [192.0.2.1]:1418 I=[172.89.0.6]:25 D=34s C=EHLO,AUTH
|
||||||
|
# failJSON: { "time": "2016-04-01T11:08:40", "match": true , "host": "192.0.2.2" }
|
||||||
|
2016-04-01 11:08:40 [18643] no MAIL in SMTP connection from host.example.com (SERVER) [192.0.2.2]:1418 I=[172.89.0.6]:25 D=2m42s C=QUIT
|
||||||
# failJSON: { "time": "2016-04-01T11:09:21", "match": true , "host": "192.0.2.1" }
|
# failJSON: { "time": "2016-04-01T11:09:21", "match": true , "host": "192.0.2.1" }
|
||||||
2016-04-01 11:09:21 [18648] SMTP protocol error in "AUTH LOGIN" H=host.example.com (SERVER) [192.0.2.1]:4692 I=[172.89.0.6]:25 AUTH command used when not advertised
|
2016-04-01 11:09:21 [18648] SMTP protocol error in "AUTH LOGIN" H=host.example.com (SERVER) [192.0.2.1]:4692 I=[172.89.0.6]:25 AUTH command used when not advertised
|
||||||
# failJSON: { "time": "2016-03-27T16:48:48", "match": true , "host": "192.0.2.1" }
|
# failJSON: { "time": "2016-03-27T16:48:48", "match": true , "host": "192.0.2.1" }
|
||||||
2016-03-27 16:48:48 [21478] 1akDqs-0005aQ-9b SMTP connection from host.example.com (SERVER) [192.0.2.1]:47714 I=[172.89.0.6]:25 closed by DROP in ACL
|
2016-03-27 16:48:48 [21478] 1akDqs-0005aQ-9b SMTP connection from host.example.com (SERVER) [192.0.2.1]:47714 I=[172.89.0.6]:25 closed by DROP in ACL
|
||||||
|
|
||||||
|
# failJSON: { "time": "2017-04-23T22:45:59", "match": true , "host": "192.0.2.2", "desc": "optional part (...)" }
|
||||||
|
2017-04-23 22:45:59 fixed_login authenticator failed for bad.host.example.com [192.0.2.2]:54412 I=[172.89.0.6]:587: 535 Incorrect authentication data (set_id=user@example.com)
|
||||||
|
# failJSON: { "time": "2017-05-01T07:42:42", "match": true , "host": "192.0.2.3", "desc": "rejected RCPT - Unrouteable address" }
|
||||||
|
2017-05-01 07:42:42 H=some.rev.dns.if.found (the.connector.reports.this.name) [192.0.2.3] F=<some.name@some.domain> rejected RCPT <some.invalid.name@a.domain>: Unrouteable address
|
||||||
|
|
|
@ -25,5 +25,20 @@
|
||||||
# failJSON: { "time": "2013-12-13T01:11:04", "match": true, "host": "218.85.253.185" }
|
# failJSON: { "time": "2013-12-13T01:11:04", "match": true, "host": "218.85.253.185" }
|
||||||
[13/Dec/2013 01:11:04] Attempt to deliver to unknown recipient <marge@aplawrence.com>, from <yu@rrd.com>, IP address 218.85.253.185
|
[13/Dec/2013 01:11:04] Attempt to deliver to unknown recipient <marge@aplawrence.com>, from <yu@rrd.com>, IP address 218.85.253.185
|
||||||
|
|
||||||
|
# failJSON: { "time": "2017-05-29T17:29:29", "match": true, "host": "185.140.108.56" }
|
||||||
|
[29/May/2017 17:29:29] IP address 185.140.108.56 found in DNS blacklist SpamCop, mail from <noreply-tjgqNffcgPfpbZtpDzasm@oakspaversusa.com> to <info@verinion.com> rejected
|
||||||
|
|
||||||
|
# failJSON: { "time": "2017-05-17T19:43:42", "match": true, "host": "185.140.108.26" }
|
||||||
|
[17/May/2017 19:43:42] SMTP: User printer@verinion.com doesn't exist. Attempt from IP address 185.140.108.26.
|
||||||
|
|
||||||
|
# failJSON: { "time": "2017-05-17T19:44:25", "match": true, "host": "184.171.168.211" }
|
||||||
|
[17/May/2017 19:44:25] Client with IP address 184.171.168.211 has no reverse DNS entry, connection rejected before SMTP greeting
|
||||||
|
|
||||||
|
# failJSON: { "time": "2017-05-17T19:45:27", "match": true, "host": "170.178.167.136" }
|
||||||
|
[17/May/2017 19:45:27] Administration login into Web Administration from 170.178.167.136 failed: IP address not allowed
|
||||||
|
|
||||||
|
# failJSON: { "time": "2017-05-17T22:14:57", "match": true, "host": "67.211.219.82" }
|
||||||
|
[17/May/2017 22:14:57] Message from IP address 67.211.219.82, sender <promo123@goodresponse.site> rejected: sender domain does not exist
|
||||||
|
|
||||||
|
# failJSON: { "time": "2017-05-18T07:25:15", "match": true, "host": "212.92.127.112" }
|
||||||
|
[18/May/2017 07:25:15] Failed SMTP login from 212.92.127.112 with SASL method CRAM-MD5.
|
||||||
|
|
|
@ -3,3 +3,6 @@ Dec 30 18:19:15 xxx postfix/smtpd[1574]: NOQUEUE: reject: RCPT from badguy.examp
|
||||||
|
|
||||||
# failJSON: { "time": "2004-12-30T18:19:15", "match": true , "host": "93.184.216.34" }
|
# failJSON: { "time": "2004-12-30T18:19:15", "match": true , "host": "93.184.216.34" }
|
||||||
Dec 30 18:19:15 xxx postfix-incoming/smtpd[1574]: NOQUEUE: reject: RCPT from badguy.example.com[93.184.216.34]: 454 4.7.1 Service unavailable; Client host [93.184.216.34] blocked using rbl.example.com; http://www.example.com/query?ip=93.184.216.34; from=<spammer@example.com> to=<goodguy@example.com> proto=ESMTP helo=<badguy.example.com>
|
Dec 30 18:19:15 xxx postfix-incoming/smtpd[1574]: NOQUEUE: reject: RCPT from badguy.example.com[93.184.216.34]: 454 4.7.1 Service unavailable; Client host [93.184.216.34] blocked using rbl.example.com; http://www.example.com/query?ip=93.184.216.34; from=<spammer@example.com> to=<goodguy@example.com> proto=ESMTP helo=<badguy.example.com>
|
||||||
|
|
||||||
|
# failJSON: { "time": "2005-02-07T12:25:45", "match": true , "host": "87.236.233.182" }
|
||||||
|
Feb 7 12:25:45 xxx12345 postfix/smtpd[13275]: NOQUEUE: reject: RCPT from unknown[87.236.233.182]: 554 5.7.1 Service unavailable; Client host [87.236.233.182] blocked using rbl.example.com; https://www.example.com/query/ip/87.236.233.182; from=<spammer@example.com> to=<goodguy@example.com> proto=SMTP helo=<WIN-5N8GBBS0R5I>
|
||||||
|
|
|
@ -95,7 +95,10 @@ def setUpMyTime():
|
||||||
# Set the time to a fixed, known value
|
# Set the time to a fixed, known value
|
||||||
# Sun Aug 14 12:00:00 CEST 2005
|
# Sun Aug 14 12:00:00 CEST 2005
|
||||||
# yoh: we need to adjust TZ to match the one used by Cyril so all the timestamps match
|
# yoh: we need to adjust TZ to match the one used by Cyril so all the timestamps match
|
||||||
os.environ['TZ'] = 'Europe/Zurich'
|
# This offset corresponds to Europe/Zurich timezone. Specifying it
|
||||||
|
# explicitly allows to avoid requiring tzdata package to be installed during
|
||||||
|
# testing. See https://bugs.debian.org/855920 for more information
|
||||||
|
os.environ['TZ'] = 'CET-01CEST-02,M3.5.0,M10.5.0'
|
||||||
time.tzset()
|
time.tzset()
|
||||||
MyTime.setTime(1124013600)
|
MyTime.setTime(1124013600)
|
||||||
|
|
||||||
|
|
|
@ -24,4 +24,4 @@ __author__ = "Cyril Jaquier, Yaroslav Halchenko, Steven Hiscocks, Daniel Black"
|
||||||
__copyright__ = "Copyright (c) 2004 Cyril Jaquier, 2005-2016 Yaroslav Halchenko, 2013-2014 Steven Hiscocks, Daniel Black"
|
__copyright__ = "Copyright (c) 2004 Cyril Jaquier, 2005-2016 Yaroslav Halchenko, 2013-2014 Steven Hiscocks, Daniel Black"
|
||||||
__license__ = "GPL-v2+"
|
__license__ = "GPL-v2+"
|
||||||
|
|
||||||
version = "0.9.6.dev0"
|
version = "0.9.7.dev0"
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4.
|
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4.
|
||||||
.TH FAIL2BAN-CLIENT "1" "December 2016" "fail2ban-client v0.9.6" "User Commands"
|
.TH FAIL2BAN-CLIENT "1" "May 2017" "fail2ban-client v0.9.7" "User Commands"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
fail2ban-client \- configure and control the server
|
fail2ban-client \- configure and control the server
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B fail2ban-client
|
.B fail2ban-client
|
||||||
[\fI\,OPTIONS\/\fR] \fI\,<COMMAND>\/\fR
|
[\fI\,OPTIONS\/\fR] \fI\,<COMMAND>\/\fR
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
Fail2Ban v0.9.6 reads log file that contains password failure report
|
Fail2Ban v0.9.7 reads log file that contains password failure report
|
||||||
and bans the corresponding IP addresses using firewall rules.
|
and bans the corresponding IP addresses using firewall rules.
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
.TP
|
.TP
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4.
|
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4.
|
||||||
.TH FAIL2BAN-REGEX "1" "December 2016" "fail2ban-regex 0.9.6" "User Commands"
|
.TH FAIL2BAN-REGEX "1" "May 2017" "fail2ban-regex 0.9.7" "User Commands"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
fail2ban-regex \- test Fail2ban "failregex" option
|
fail2ban-regex \- test Fail2ban "failregex" option
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4.
|
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4.
|
||||||
.TH FAIL2BAN-SERVER "1" "December 2016" "fail2ban-server v0.9.6" "User Commands"
|
.TH FAIL2BAN-SERVER "1" "May 2017" "fail2ban-server v0.9.7" "User Commands"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
fail2ban-server \- start the server
|
fail2ban-server \- start the server
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B fail2ban-server
|
.B fail2ban-server
|
||||||
[\fI\,OPTIONS\/\fR]
|
[\fI\,OPTIONS\/\fR]
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
Fail2Ban v0.9.6 reads log file that contains password failure report
|
Fail2Ban v0.9.7 reads log file that contains password failure report
|
||||||
and bans the corresponding IP addresses using firewall rules.
|
and bans the corresponding IP addresses using firewall rules.
|
||||||
.PP
|
.PP
|
||||||
Only use this command for debugging purpose. Start the server with
|
Only use this command for debugging purpose. Start the server with
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4.
|
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4.
|
||||||
.TH FAIL2BAN-TESTCASES "1" "December 2016" "fail2ban-testcases 0.9.6" "User Commands"
|
.TH FAIL2BAN-TESTCASES "1" "May 2017" "fail2ban-testcases 0.9.7" "User Commands"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
fail2ban-testcases \- run Fail2Ban unit-tests
|
fail2ban-testcases \- run Fail2Ban unit-tests
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
|
|
Loading…
Reference in New Issue