mirror of https://github.com/fail2ban/fail2ban
Merge remote-tracking branch 'origin/master' into debian-release/experimental
commit
97e01985a8
|
@ -8,3 +8,4 @@ htmlcov
|
||||||
*.rej
|
*.rej
|
||||||
*.bak
|
*.bak
|
||||||
__pycache__
|
__pycache__
|
||||||
|
.vagrant/
|
||||||
|
|
|
@ -6,6 +6,7 @@ python:
|
||||||
- "2.7"
|
- "2.7"
|
||||||
- "3.2"
|
- "3.2"
|
||||||
- "3.3"
|
- "3.3"
|
||||||
|
- "3.4"
|
||||||
- "pypy"
|
- "pypy"
|
||||||
before_install:
|
before_install:
|
||||||
- if [[ $TRAVIS_PYTHON_VERSION == 2.7 ]]; then sudo apt-get update -qq; fi
|
- if [[ $TRAVIS_PYTHON_VERSION == 2.7 ]]; then sudo apt-get update -qq; fi
|
||||||
|
|
|
@ -0,0 +1,181 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
##########################################################################
|
||||||
|
# $Id: fail2ban 150 2013-06-18 22:19:38Z mtremaine $
|
||||||
|
##########################################################################
|
||||||
|
# $Log: fail2ban,v $
|
||||||
|
# Revision 1.5 2008/08/18 16:07:46 mike
|
||||||
|
# Patches from Paul Gear <paul at libertysys.com> -mgt
|
||||||
|
#
|
||||||
|
# Revision 1.4 2008/06/30 23:07:51 kirk
|
||||||
|
# fixed copyright holders for files where I know who they should be
|
||||||
|
#
|
||||||
|
# Revision 1.3 2008/03/24 23:31:26 kirk
|
||||||
|
# added copyright/license notice to each script
|
||||||
|
#
|
||||||
|
# Revision 1.2 2006/12/15 04:53:59 bjorn
|
||||||
|
# Additional filtering, by Willi Mann.
|
||||||
|
#
|
||||||
|
# Revision 1.1 2006/05/30 19:04:26 bjorn
|
||||||
|
# Added fail2ban service, written by Yaroslav Halchenko.
|
||||||
|
#
|
||||||
|
# Written by Yaroslav Halchenko <debian@onerussian.com> for fail2ban
|
||||||
|
#
|
||||||
|
##########################################################################
|
||||||
|
|
||||||
|
########################################################
|
||||||
|
## Copyright (c) 2008 Yaroslav Halchenko
|
||||||
|
## Covered under the included MIT/X-Consortium License:
|
||||||
|
## http://www.opensource.org/licenses/mit-license.php
|
||||||
|
## All modifications and contributions by other persons to
|
||||||
|
## this script are assumed to have been donated to the
|
||||||
|
## Logwatch project and thus assume the above copyright
|
||||||
|
## and licensing terms. If you want to make contributions
|
||||||
|
## under your own copyright or a different license this
|
||||||
|
## must be explicitly stated in the contribution an the
|
||||||
|
## Logwatch project reserves the right to not accept such
|
||||||
|
## contributions. If you have made significant
|
||||||
|
## contributions to this script and want to claim
|
||||||
|
## copyright please contact logwatch-devel@lists.sourceforge.net.
|
||||||
|
#########################################################
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Logwatch ':all';
|
||||||
|
|
||||||
|
my $Debug = $ENV{'LOGWATCH_DEBUG'} || 0;
|
||||||
|
my $Detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0;
|
||||||
|
my $IgnoreHost = $ENV{'sshd_ignore_host'} || "";
|
||||||
|
my $DebugCounter = 0;
|
||||||
|
my $ReInitializations = 0;
|
||||||
|
my @IptablesErrors = ();
|
||||||
|
my @ActionErrors = ();
|
||||||
|
my $NotValidIP = 0; # reported invalid IPs number
|
||||||
|
my @OtherList = ();
|
||||||
|
|
||||||
|
my %ServicesBans = ();
|
||||||
|
|
||||||
|
if ( $Debug >= 5 ) {
|
||||||
|
print STDERR "\n\nDEBUG: Inside Fail2Ban Filter \n\n";
|
||||||
|
$DebugCounter = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (defined(my $ThisLine = <STDIN>)) {
|
||||||
|
if ( $Debug >= 5 ) {
|
||||||
|
print STDERR "DEBUG($DebugCounter): $ThisLine";
|
||||||
|
$DebugCounter++;
|
||||||
|
}
|
||||||
|
chomp($ThisLine);
|
||||||
|
if ( ($ThisLine =~ /..,... DEBUG: /) or
|
||||||
|
($ThisLine =~ /..,... \S*\s*: DEBUG /) or # syntax of 0.7.? fail2ban
|
||||||
|
($ThisLine =~ /..,... INFO: (Fail2Ban v.* is running|Exiting|Enabled sections:)/) or
|
||||||
|
($ThisLine =~ /INFO\s+Log rotation detected for/) or
|
||||||
|
($ThisLine =~ /INFO\s+Jail.+(?:stopped|started|uses poller)/) or
|
||||||
|
($ThisLine =~ /INFO\s+Changed logging target to/) or
|
||||||
|
($ThisLine =~ /INFO\s+Creating new jail/) or
|
||||||
|
($ThisLine =~ /..,... \S+\s*: INFO\s+(Set |Socket|Exiting|Gamin|Created|Added|Using)/) or # syntax of 0.7.? fail2ban
|
||||||
|
($ThisLine =~ /..,... WARNING: Verbose level is /) or
|
||||||
|
($ThisLine =~ /..,... WARNING: Restoring firewall rules/)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if ( $Debug >= 6 ) {
|
||||||
|
print STDERR "DEBUG($DebugCounter): line ignored\n";
|
||||||
|
}
|
||||||
|
} elsif ( my ($Service,$Action,$Host) = ($ThisLine =~ m/WARNING:?\s\[?(.*?)[]:]?\s(Ban|Unban)[^\.]* (\S+)/)) {
|
||||||
|
if ( $Debug >= 6 ) {
|
||||||
|
print STDERR "DEBUG($DebugCounter): Found $Action for $Service from $Host\n";
|
||||||
|
}
|
||||||
|
$ServicesBans{$Service}{$Host}{$Action}++;
|
||||||
|
$ServicesBans{$Service}{"(all)"}{$Action}++;
|
||||||
|
} elsif ( my ($Service,$Host,$NumFailures) = ($ThisLine =~ m/INFO: (\S+): (.+) has (\d+) login failure\(s\). Banned./)) {
|
||||||
|
if ($Debug >= 4) {
|
||||||
|
print STDERR "DEBUG: Found host $Host trying to access $Service - failed $NumFailures times\n";
|
||||||
|
}
|
||||||
|
push @{$ServicesBans{$Service}{$Host}{'Failures'}}, $NumFailures;
|
||||||
|
} elsif ( my ($Service,$Host) = ($ThisLine =~ m/ ERROR:\s(.*):\s(\S+)\salready in ban list/)) {
|
||||||
|
$ServicesBans{$Service}{$Host}{'AlreadyInTheList'}++;
|
||||||
|
} elsif ( my ($Service,$Host) = ($ThisLine =~ m/WARNING\s*\[(.*)\]\s*(\S+)\s*already banned/)) {
|
||||||
|
$ServicesBans{$Service}{$Host}{'AlreadyInTheList'}++;
|
||||||
|
} elsif ( my ($Service,$Host) = ($ThisLine =~ m/ WARNING:\s(.*):\sReBan (\S+)/)) {
|
||||||
|
$ServicesBans{$Service}{$Host}{'ReBan'}++;
|
||||||
|
} elsif ($ThisLine =~ / ERROR:?\s*(Execution of command )?\'?iptables/) {
|
||||||
|
push @IptablesErrors, "$ThisLine\n";
|
||||||
|
} elsif ($ThisLine =~ /ERROR.*returned \d+$/) {
|
||||||
|
push @ActionErrors, "$ThisLine\n";
|
||||||
|
} elsif (($ThisLine =~ /..,... WARNING: \#\S+ reinitialization of firewalls/) or
|
||||||
|
($ThisLine =~ / ERROR\s*Invariant check failed. Trying to restore a sane environment/)) {
|
||||||
|
$ReInitializations++;
|
||||||
|
} elsif ($ThisLine =~ /..,... WARNING: is not a valid IP address/) {
|
||||||
|
# just ignore - this will be fixed within fail2ban and is harmless warning
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
# Report any unmatched entries...
|
||||||
|
push @OtherList, "$ThisLine\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
###########################################################
|
||||||
|
|
||||||
|
|
||||||
|
if (keys %ServicesBans) {
|
||||||
|
printf("\nBanned services with Fail2Ban: Bans:Unbans\n");
|
||||||
|
foreach my $service (sort {$a cmp $b} keys %ServicesBans) {
|
||||||
|
printf(" %-55s [%3d:%-3d]\n", "$service:",
|
||||||
|
$ServicesBans{$service}{'(all)'}{'Ban'},
|
||||||
|
$ServicesBans{$service}{'(all)'}{'Unban'});
|
||||||
|
delete $ServicesBans{$service}{'(all)'};
|
||||||
|
my $totalSort = TotalCountOrder(%{$ServicesBans{$service}}, \&SortIP);
|
||||||
|
if ($Detail >= 5) {
|
||||||
|
foreach my $ip (sort $totalSort keys %{$ServicesBans{$service}}) {
|
||||||
|
my $name = LookupIP($ip);
|
||||||
|
printf(" %-53s %3d:%-3d\n",
|
||||||
|
$name,
|
||||||
|
$ServicesBans{$service}{$ip}{'Ban'},
|
||||||
|
$ServicesBans{$service}{$ip}{'Unban'});
|
||||||
|
if (($Detail >= 10) and ($ServicesBans{$service}{$ip}{'Failures'}>0)) {
|
||||||
|
print " Failed ";
|
||||||
|
foreach my $fails (@{$ServicesBans{$service}{$ip}{'Failures'}}) {
|
||||||
|
print " $fails";
|
||||||
|
}
|
||||||
|
print " times";
|
||||||
|
printf("\n %d Duplicate Ban attempts", $ServicesBans{$service}{$ip}{'AlreadyInTheList'}) ;
|
||||||
|
printf("\n %d ReBans due to rules reinitilizations", $ServicesBans{$service}{$ip}{'ReBan'}) ;
|
||||||
|
print "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ($Detail>0) {
|
||||||
|
if ($#IptablesErrors > 0) {
|
||||||
|
printf("\n%d faulty iptables invocation(s)", $#IptablesErrors);
|
||||||
|
if ($Detail > 5) {
|
||||||
|
print ":\n";
|
||||||
|
print @IptablesErrors ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($#ActionErrors > 0) {
|
||||||
|
printf("\n%d error(s) returned from actions", $#ActionErrors);
|
||||||
|
if ($Detail > 5) {
|
||||||
|
print ":\n";
|
||||||
|
print @ActionErrors ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($ReInitializations > 0) {
|
||||||
|
printf("\n%d fail2ban rules reinitialization(s)", $ReInitializations);
|
||||||
|
}
|
||||||
|
if ($#OtherList >= 0) {
|
||||||
|
print "\n**Unmatched Entries**\n";
|
||||||
|
print @OtherList;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(0);
|
||||||
|
|
||||||
|
# vi: shiftwidth=3 tabstop=3 syntax=perl et
|
||||||
|
# Local Variables:
|
||||||
|
# mode: perl
|
||||||
|
# perl-indent-level: 3
|
||||||
|
# indent-tabs-mode: nil
|
||||||
|
# End:
|
|
@ -0,0 +1,17 @@
|
||||||
|
Guidelines on Fail2Ban contributions
|
||||||
|
====================================
|
||||||
|
|
||||||
|
### You found a severe security vulnerability in Fail2Ban?
|
||||||
|
email details to fail2ban-vulnerabilities at lists dot sourceforge dot net .
|
||||||
|
|
||||||
|
### You need some new features, you found bugs?
|
||||||
|
visit [Issues](https://github.com/fail2ban/fail2ban/issues)
|
||||||
|
and if your issue is not yet known -- file a bug report. See
|
||||||
|
[Fail2Ban wiki](http://www.fail2ban.org/wiki/index.php/HOWTO_Seek_Help)
|
||||||
|
on further instructions.
|
||||||
|
|
||||||
|
### You would like to troubleshoot or discuss?
|
||||||
|
join the [mailing list](https://lists.sourceforge.net/lists/listinfo/fail2ban-users)
|
||||||
|
|
||||||
|
### You would like to contribute (new filters/actions/code/documentation)?
|
||||||
|
send a [pull request](https://github.com/fail2ban/fail2ban/pulls)
|
56
ChangeLog
56
ChangeLog
|
@ -10,21 +10,73 @@ Fail2Ban (version 0.9.0.dev) 2014/xx/xx
|
||||||
ver. 0.9.1 (2014/xx/xx) - better, faster, stronger
|
ver. 0.9.1 (2014/xx/xx) - better, faster, stronger
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
- Refactoring (IMPORTANT -- Please review your setup and configuration):
|
||||||
|
* iptables-common.conf replaced iptables-blocktype.conf
|
||||||
|
(iptables-blocktype.local should still be read) and now also
|
||||||
|
provides defaults for the chain, port, protocol and name tags
|
||||||
|
|
||||||
- Fixes:
|
- Fixes:
|
||||||
|
* UTF-8 fixes in pure-ftp thanks to Johannes Weberhofer. Closes gh-806.
|
||||||
* systemd backend error on bad utf-8 in python3
|
* systemd backend error on bad utf-8 in python3
|
||||||
* badips.py action error when logging HTTP error raised with badips request
|
* badips.py action error when logging HTTP error raised with badips request
|
||||||
* fail2ban-regex failed to work in python3 due to space/tab mix
|
* fail2ban-regex failed to work in python3 due to space/tab mix
|
||||||
|
* recidive regex samples incorrect log level
|
||||||
* journalmatch for recidive incorrect PRIORITY
|
* journalmatch for recidive incorrect PRIORITY
|
||||||
* loglevel couldn't be changed in fail2ban.conf
|
* loglevel couldn't be changed in fail2ban.conf
|
||||||
* Handle case when no sqlite library is available for persistent database
|
* Handle case when no sqlite library is available for persistent database
|
||||||
|
* Only reban once per IP from database on fail2ban restart
|
||||||
|
* Nginx filter to support missing server_name. Closes gh-676
|
||||||
|
* fail2ban-regex assertion error caused by miscount missed lines with
|
||||||
|
multiline regex
|
||||||
|
* Fix actions failing to execute for Python 3.4.0. Workaround for
|
||||||
|
http://bugs.python.org/issue21207
|
||||||
|
* Database now returns persistent bans on restart (bantime < 0)
|
||||||
|
* Recursive action tags now fully processed. Fixes issue with bsd-ipfw
|
||||||
|
action
|
||||||
|
* Fixed TypeError with "ipfailures" and "ipjailfailures" action tags.
|
||||||
|
Thanks Serg G. Brester
|
||||||
|
* Correct times for non-timezone date times formats during DST
|
||||||
|
* Pass a copy of, not original, aInfo into actions to avoid side-effects
|
||||||
|
* Per-distribution paths to the exim's main log
|
||||||
|
* Ignored IPs are no longer banned when being restored from persistent
|
||||||
|
database
|
||||||
|
* Manually unbanned IPs are now removed from persistent database, such they
|
||||||
|
wont be banned again when Fail2Ban is restarted
|
||||||
|
* Pass "bantime" parameter to the actions in default jail's action
|
||||||
|
definition(s)
|
||||||
|
* filters.d/sieve.conf - fixed typo in _daemon. Thanks Jisoo Park
|
||||||
|
* cyrus-imap -- also catch also failed logins via secured (imaps/pop3s).
|
||||||
|
Regression was introduced while strengthening failregex in 0.8.11 (bd175f)
|
||||||
|
Debian bug #755173
|
||||||
|
* postfix-sasl - added journalmatch. Thanks Luc Maisonobe
|
||||||
|
* postfix* - match with a new daemon string (postfix/submission/smtpd).
|
||||||
|
Closes gh-804 . Thanks Paul Traina
|
||||||
|
* apache - added filter for AH01630 client denied by server configuration.
|
||||||
|
|
||||||
- New features:
|
- New features:
|
||||||
|
- New filters:
|
||||||
|
- monit Thanks Jason H Martin
|
||||||
|
- directadmin Thanks niorg
|
||||||
|
- apache-shellshock Thanks Eugene Hopkinson (SlowRiot)
|
||||||
|
- New actions:
|
||||||
|
- symbiosis-blacklist-allports for Bytemark symbiosis firewall
|
||||||
|
- fail2ban-client can fetch the running server version
|
||||||
|
- Added Cloudflare API action
|
||||||
|
|
||||||
- Enhancements
|
- Enhancements
|
||||||
* Fail2ban-regex - add print-all-matched option. Closes gh-652
|
* Fail2ban-regex - add print-all-matched option. Closes gh-652
|
||||||
|
* Suppress fail2ban-client warnings for non-critical config options
|
||||||
|
* Match non "Bye Bye" disconnect messages for sshd locked account regex
|
||||||
|
* courier-smtp filter:
|
||||||
|
- match lines with user names
|
||||||
|
- match lines containing "535 Authentication failed" attempts
|
||||||
|
* Add <chain> tag to iptables-ipsets
|
||||||
|
* Realign fail2ban log output with white space to improve readability. Does
|
||||||
|
not affect SYSLOG output
|
||||||
|
* Log unhandled exceptions
|
||||||
|
* cyrus-imap: catch "user not found" attempts
|
||||||
|
|
||||||
ver. 0.9.0 (2014/03/14 - beta
|
ver. 0.9.0 (2014/03/14) - beta
|
||||||
----------
|
----------
|
||||||
|
|
||||||
Carries all fixes, features and enhancements from 0.8.13 (unreleased) with
|
Carries all fixes, features and enhancements from 0.8.13 (unreleased) with
|
||||||
|
|
17
DEVELOP
17
DEVELOP
|
@ -1,4 +1,4 @@
|
||||||
__ _ _ ___ _
|
.. __ _ _ ___ _
|
||||||
/ _|__ _(_) |_ ) |__ __ _ _ _
|
/ _|__ _(_) |_ ) |__ __ _ _ _
|
||||||
| _/ _` | | |/ /| '_ \/ _` | ' \
|
| _/ _` | | |/ /| '_ \/ _` | ' \
|
||||||
|_| \__,_|_|_/___|_.__/\__,_|_||_|
|
|_| \__,_|_|_/___|_.__/\__,_|_||_|
|
||||||
|
@ -25,6 +25,7 @@ Pull Requests
|
||||||
=============
|
=============
|
||||||
|
|
||||||
When submitting pull requests on GitHub we ask you to:
|
When submitting pull requests on GitHub we ask you to:
|
||||||
|
|
||||||
* Clearly describe the problem you're solving;
|
* Clearly describe the problem you're solving;
|
||||||
* Don't introduce regressions that will make it hard for systems administrators
|
* Don't introduce regressions that will make it hard for systems administrators
|
||||||
to update;
|
to update;
|
||||||
|
@ -52,7 +53,7 @@ for more details.
|
||||||
|
|
||||||
Install the package python-coverage to visualise your test coverage. Run the
|
Install the package python-coverage to visualise your test coverage. Run the
|
||||||
following (note: on Debian-based systems, the script is called
|
following (note: on Debian-based systems, the script is called
|
||||||
`python-coverage`):
|
`python-coverage`)::
|
||||||
|
|
||||||
coverage run bin/fail2ban-testcases
|
coverage run bin/fail2ban-testcases
|
||||||
coverage html
|
coverage html
|
||||||
|
@ -62,11 +63,11 @@ exert over the code base. Full coverage is a good thing however it may not be
|
||||||
complete. Try to ensure tests cover as many independent paths through the
|
complete. Try to ensure tests cover as many independent paths through the
|
||||||
code.
|
code.
|
||||||
|
|
||||||
Manual Execution. To run in a development environment do:
|
Manual Execution. To run in a development environment do::
|
||||||
|
|
||||||
./fail2ban-client -c config/ -s /tmp/f2b.sock -i start
|
./fail2ban-client -c config/ -s /tmp/f2b.sock -i start
|
||||||
|
|
||||||
some quick commands:
|
some quick commands::
|
||||||
|
|
||||||
status
|
status
|
||||||
add test pyinotify
|
add test pyinotify
|
||||||
|
@ -130,10 +131,10 @@ Git
|
||||||
|
|
||||||
Use the following tags in your commit messages:
|
Use the following tags in your commit messages:
|
||||||
|
|
||||||
'BF:' for bug fixes
|
* 'BF:' for bug fixes
|
||||||
'DOC:' for documentation fixes
|
* 'DOC:' for documentation fixes
|
||||||
'ENH:' for enhancements
|
* 'ENH:' for enhancements
|
||||||
'TST:' for commits concerning tests only (thus not touching the main code-base)
|
* 'TST:' for commits concerning tests only (thus not touching the main code-base)
|
||||||
|
|
||||||
Multiple tags could be joined with +, e.g. "BF+TST:".
|
Multiple tags could be joined with +, e.g. "BF+TST:".
|
||||||
|
|
||||||
|
|
129
FILTERS
129
FILTERS
|
@ -1,4 +1,4 @@
|
||||||
__ _ _ ___ _
|
.. __ _ _ ___ _
|
||||||
/ _|__ _(_) |_ ) |__ __ _ _ _
|
/ _|__ _(_) |_ ) |__ __ _ _ _
|
||||||
| _/ _` | | |/ /| '_ \/ _` | ' \
|
| _/ _` | | |/ /| '_ \/ _` | ' \
|
||||||
|_| \__,_|_|_/___|_.__/\__,_|_||_|
|
|_| \__,_|_|_/___|_.__/\__,_|_||_|
|
||||||
|
@ -7,10 +7,8 @@
|
||||||
Developing Filters
|
Developing Filters
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
Filters
|
|
||||||
=======
|
|
||||||
|
|
||||||
Filters are tricky. They need to:
|
Filters are tricky. They need to:
|
||||||
|
|
||||||
* work with a variety of the versions of the software that generates the logs;
|
* work with a variety of the versions of the software that generates the logs;
|
||||||
* work with the range of logging configuration options available in the
|
* work with the range of logging configuration options available in the
|
||||||
software;
|
software;
|
||||||
|
@ -31,10 +29,11 @@ what you have done, what is the hurdle, and we'll attempt to help (PR
|
||||||
will be automagically updated with future commits you would push to
|
will be automagically updated with future commits you would push to
|
||||||
complete it).
|
complete it).
|
||||||
|
|
||||||
Filter test cases
|
Filter Test Cases
|
||||||
-----------------
|
=================
|
||||||
|
|
||||||
Purpose:
|
Purpose
|
||||||
|
-------
|
||||||
|
|
||||||
Start by finding the log messages that the application generates related to
|
Start by finding the log messages that the application generates related to
|
||||||
some form of authentication failure. If you are adding to an existing filter
|
some form of authentication failure. If you are adding to an existing filter
|
||||||
|
@ -49,7 +48,8 @@ and exim-spam at log messages related to spam.
|
||||||
Even if it is a new filter you may consider separating the log messages into
|
Even if it is a new filter you may consider separating the log messages into
|
||||||
different filters based on purpose.
|
different filters based on purpose.
|
||||||
|
|
||||||
Cause:
|
Cause
|
||||||
|
-----
|
||||||
|
|
||||||
Are some of the log lines a result of the same action? For example, is a PAM
|
Are some of the log lines a result of the same action? For example, is a PAM
|
||||||
failure log message, followed by an application specific failure message the
|
failure log message, followed by an application specific failure message the
|
||||||
|
@ -65,7 +65,8 @@ the log message be occurring due to the first step towards the application
|
||||||
asking for authentication? Could the log messages occur often? If some of
|
asking for authentication? Could the log messages occur often? If some of
|
||||||
these are true make a note of this in the jail.conf example that you provide.
|
these are true make a note of this in the jail.conf example that you provide.
|
||||||
|
|
||||||
Samples:
|
Samples
|
||||||
|
-------
|
||||||
|
|
||||||
It is important to include log file samples so any future change in the regular
|
It is important to include log file samples so any future change in the regular
|
||||||
expression will still work with the log lines you have identified.
|
expression will still work with the log lines you have identified.
|
||||||
|
@ -93,10 +94,11 @@ If the mechanism to create the log message isn't obvious provide a
|
||||||
configuration and/or sample scripts testcases/files/config/{filtername} and
|
configuration and/or sample scripts testcases/files/config/{filtername} and
|
||||||
reference these in the comments above the log line.
|
reference these in the comments above the log line.
|
||||||
|
|
||||||
FailJSON metadata:
|
FailJSON metadata
|
||||||
|
-----------------
|
||||||
|
|
||||||
A failJSON metadata is a comment immediately above the log message. It will
|
A failJSON metadata is a comment immediately above the log message. It will
|
||||||
look like:
|
look like::
|
||||||
|
|
||||||
# failJSON: { "time": "2013-06-10T10:10:59", "match": true , "host": "93.184.216.119" }
|
# failJSON: { "time": "2013-06-10T10:10:59", "match": true , "host": "93.184.216.119" }
|
||||||
|
|
||||||
|
@ -104,7 +106,7 @@ Time should match the time of the log message. It is in a specific format of
|
||||||
Year-Month-Day'T'Hour:minute:Second. If your log message does not include a
|
Year-Month-Day'T'Hour:minute:Second. If your log message does not include a
|
||||||
year, like the example below, the year should be listed as 2005, if before Sun
|
year, like the example below, the year should be listed as 2005, if before Sun
|
||||||
Aug 14 10am UTC, and 2004 if afterwards. Here is an example failJSON
|
Aug 14 10am UTC, and 2004 if afterwards. Here is an example failJSON
|
||||||
line preceding a sample log line:
|
line preceding a sample log line::
|
||||||
|
|
||||||
# failJSON: { "time": "2005-03-24T15:25:51", "match": true , "host": "198.51.100.87" }
|
# failJSON: { "time": "2005-03-24T15:25:51", "match": true , "host": "198.51.100.87" }
|
||||||
Mar 24 15:25:51 buffalo1 dropbear[4092]: bad password attempt for 'root' from 198.51.100.87:5543
|
Mar 24 15:25:51 buffalo1 dropbear[4092]: bad password attempt for 'root' from 198.51.100.87:5543
|
||||||
|
@ -116,23 +118,24 @@ attacks) and any log lines to be excluded (see "Cause" section above), set
|
||||||
"match": false in the failJSON and describe the reason in the comment above.
|
"match": false in the failJSON and describe the reason in the comment above.
|
||||||
|
|
||||||
After developing regexes, the following command will test all failJSON metadata
|
After developing regexes, the following command will test all failJSON metadata
|
||||||
against the log lines in all sample log files
|
against the log lines in all sample log files::
|
||||||
|
|
||||||
./fail2ban-testcases testSampleRegex
|
./fail2ban-testcases testSampleRegex
|
||||||
|
|
||||||
Developing Filter Regular Expressions
|
Developing Filter Regular Expressions
|
||||||
-------------------------------------
|
=====================================
|
||||||
|
|
||||||
Date/Time:
|
Date/Time
|
||||||
|
---------
|
||||||
|
|
||||||
At the moment, Fail2Ban depends on log lines to have time stamps. That is why
|
At the moment, Fail2Ban depends on log lines to have time stamps. That is why
|
||||||
before starting to develop failregex, check if your log line format known to
|
before starting to develop failregex, check if your log line format known to
|
||||||
Fail2Ban. Copy the time component from the log line and append an IP address to
|
Fail2Ban. Copy the time component from the log line and append an IP address to
|
||||||
test with following command:
|
test with following command::
|
||||||
|
|
||||||
./fail2ban-regex "2013-09-19 02:46:12 1.2.3.4" "<HOST>"
|
./fail2ban-regex "2013-09-19 02:46:12 1.2.3.4" "<HOST>"
|
||||||
|
|
||||||
Output of such command should contain something like:
|
Output of such command should contain something like::
|
||||||
|
|
||||||
Date template hits:
|
Date template hits:
|
||||||
|- [# of hits] date format
|
|- [# of hits] date format
|
||||||
|
@ -144,10 +147,11 @@ to server/datedetector.py. Ensure that a new template is added in the order
|
||||||
that more specific matches occur first and that there is no confusion between a
|
that more specific matches occur first and that there is no confusion between a
|
||||||
Day and a Month.
|
Day and a Month.
|
||||||
|
|
||||||
Filter file:
|
Filter file
|
||||||
|
-----------
|
||||||
|
|
||||||
The filter is specified in a config/filter.d/{filtername}.conf file. Filter file
|
The filter is specified in a config/filter.d/{filtername}.conf file. Filter file
|
||||||
can have sections INCLUDES (optional) and Definition as follows:
|
can have sections INCLUDES (optional) and Definition as follows::
|
||||||
|
|
||||||
[INCLUDES]
|
[INCLUDES]
|
||||||
|
|
||||||
|
@ -166,7 +170,8 @@ can be added to make failregex's more readable and maintainable to be used
|
||||||
through string Interpolations (see http://docs.python.org/2.7/library/configparser.html)
|
through string Interpolations (see http://docs.python.org/2.7/library/configparser.html)
|
||||||
|
|
||||||
|
|
||||||
General rules:
|
General rules
|
||||||
|
-------------
|
||||||
|
|
||||||
Use "before" if you need to include a common set of rules, like syslog or if
|
Use "before" if you need to include a common set of rules, like syslog or if
|
||||||
there is a common set of regexes for multiple filters.
|
there is a common set of regexes for multiple filters.
|
||||||
|
@ -178,10 +183,11 @@ Try to avoid using ignoreregex mainly for performance reasons. The case when you
|
||||||
would use it is if in trying to avoid using it, you end up with an unreadable
|
would use it is if in trying to avoid using it, you end up with an unreadable
|
||||||
failregex.
|
failregex.
|
||||||
|
|
||||||
Syslog:
|
Syslog
|
||||||
|
------
|
||||||
|
|
||||||
If your application logs to syslog you can take advantage of log line prefix
|
If your application logs to syslog you can take advantage of log line prefix
|
||||||
definitions present in common.conf. So as a base use:
|
definitions present in common.conf. So as a base use::
|
||||||
|
|
||||||
[INCLUDES]
|
[INCLUDES]
|
||||||
|
|
||||||
|
@ -197,14 +203,15 @@ In this example common.conf defines __prefix_line which also contains the
|
||||||
_daemon name (in syslog terms the service) you have just specified. _daemon
|
_daemon name (in syslog terms the service) you have just specified. _daemon
|
||||||
can also be a regex.
|
can also be a regex.
|
||||||
|
|
||||||
For example, to capture following line _daemon should be set to "dovecot"
|
For example, to capture following line _daemon should be set to "dovecot"::
|
||||||
|
|
||||||
Dec 12 11:19:11 dunnart dovecot: pop3-login: Aborted login (tried to use disabled plaintext auth): rip=190.210.136.21, lip=113.212.99.193
|
Dec 12 11:19:11 dunnart dovecot: pop3-login: Aborted login (tried to use disabled plaintext auth): rip=190.210.136.21, lip=113.212.99.193
|
||||||
|
|
||||||
and then ^%(__prefix_line)s would match "Dec 12 11:19:11 dunnart dovecot:
|
and then ``^%(__prefix_line)s`` would match "Dec 12 11:19:11 dunnart dovecot:
|
||||||
". Note it matches the trailing space(s) as well.
|
". Note it matches the trailing space(s) as well.
|
||||||
|
|
||||||
Substitutions (AKA string interpolations):
|
Substitutions (AKA string interpolations)
|
||||||
|
-----------------------------------------
|
||||||
|
|
||||||
We have used string interpolations in above examples. They are useful for
|
We have used string interpolations in above examples. They are useful for
|
||||||
making the regexes more readable, reuse generic patterns in multiple failregex
|
making the regexes more readable, reuse generic patterns in multiple failregex
|
||||||
|
@ -213,7 +220,8 @@ to the user. General principle is that value of a _name variable replaces
|
||||||
occurrences of %(_name)s within the same section or anywhere in the config file
|
occurrences of %(_name)s within the same section or anywhere in the config file
|
||||||
if defined in [DEFAULT] section.
|
if defined in [DEFAULT] section.
|
||||||
|
|
||||||
Regular Expressions:
|
Regular Expressions
|
||||||
|
-------------------
|
||||||
|
|
||||||
Regular expressions (failregex, ignoreregex) assume that the date/time has been
|
Regular expressions (failregex, ignoreregex) assume that the date/time has been
|
||||||
removed from the log line (this is just how fail2ban works internally ATM).
|
removed from the log line (this is just how fail2ban works internally ATM).
|
||||||
|
@ -236,29 +244,33 @@ If you have only a basic knowledge of regular repressions we advise to read
|
||||||
http://docs.python.org/2/library/re.html first. It doesn't take long and would
|
http://docs.python.org/2/library/re.html first. It doesn't take long and would
|
||||||
remind you e.g. which characters you need to escape and which you don't.
|
remind you e.g. which characters you need to escape and which you don't.
|
||||||
|
|
||||||
Developing/testing a regex:
|
Developing/testing a regex
|
||||||
|
--------------------------
|
||||||
|
|
||||||
You can develop a regex in a file or using command line depending on your
|
You can develop a regex in a file or using command line depending on your
|
||||||
preference. You can also use samples you have already created in the test cases
|
preference. You can also use samples you have already created in the test cases
|
||||||
or test them one at a time.
|
or test them one at a time.
|
||||||
|
|
||||||
The general tool for testing Fail2Ban regexes is fail2ban-regex. To see how to
|
The general tool for testing Fail2Ban regexes is fail2ban-regex. To see how to
|
||||||
use it run:
|
use it run::
|
||||||
|
|
||||||
./fail2ban-regex --help
|
./fail2ban-regex --help
|
||||||
|
|
||||||
Take note of -l heavydebug / -l debug and -v as they might be very useful.
|
Take note of -l heavydebug / -l debug and -v as they might be very useful.
|
||||||
|
|
||||||
TIP: Take a look at the source code of the application you are developing
|
.. TIP::
|
||||||
|
Take a look at the source code of the application you are developing
|
||||||
failregex for. You may see optional or extra log messages, or parts there
|
failregex for. You may see optional or extra log messages, or parts there
|
||||||
of, that need to form part of your regex. It may also reveal how some
|
of, that need to form part of your regex. It may also reveal how some
|
||||||
parts are constrained and different formats depending on configuration or
|
parts are constrained and different formats depending on configuration or
|
||||||
less common usages.
|
less common usages.
|
||||||
|
|
||||||
TIP: For looking through source code - http://sourcecodebrowser.com/ . It has
|
.. TIP::
|
||||||
|
For looking through source code - http://sourcecodebrowser.com/ . It has
|
||||||
call graphs and can browse different versions.
|
call graphs and can browse different versions.
|
||||||
|
|
||||||
TIP: Some applications log spaces at the end. If you are not sure add \s*$ as
|
.. TIP::
|
||||||
|
Some applications log spaces at the end. If you are not sure add \s*$ as
|
||||||
the end part of the regex.
|
the end part of the regex.
|
||||||
|
|
||||||
If your regex is not matching, http://www.debuggex.com/?flavor=python can help
|
If your regex is not matching, http://www.debuggex.com/?flavor=python can help
|
||||||
|
@ -277,13 +289,15 @@ When you have fixed the regex put it back into your filter file.
|
||||||
Please spread the good word about Debuggex - Serge Toarca is kindly continuing
|
Please spread the good word about Debuggex - Serge Toarca is kindly continuing
|
||||||
its free availability to Open Source developers.
|
its free availability to Open Source developers.
|
||||||
|
|
||||||
Finishing up:
|
Finishing up
|
||||||
|
------------
|
||||||
|
|
||||||
If you've added a new filter, add a new entry in config/jail.conf. The theory
|
If you've added a new filter, add a new entry in config/jail.conf. The theory
|
||||||
here is that a user will create a jail.local with [filtername]\nenable=true to
|
here is that a user will create a jail.local with [filtername]\nenable=true to
|
||||||
enable your jail.
|
enable your jail.
|
||||||
|
|
||||||
So more specifically in the [filter] section in jail.conf:
|
So more specifically in the [filter] section in jail.conf:
|
||||||
|
|
||||||
* ensure that you have "enabled = false" (users will enable as needed);
|
* ensure that you have "enabled = false" (users will enable as needed);
|
||||||
* use "filter =" set to your filter name;
|
* use "filter =" set to your filter name;
|
||||||
* use a typical action to disable ports associated with the application;
|
* use a typical action to disable ports associated with the application;
|
||||||
|
@ -295,7 +309,7 @@ Submit github pull request (See "Pull Requests" above) for
|
||||||
github.com/fail2ban/fail2ban containing your great work.
|
github.com/fail2ban/fail2ban containing your great work.
|
||||||
|
|
||||||
Filter Security
|
Filter Security
|
||||||
---------------
|
===============
|
||||||
|
|
||||||
Poor filter regular expressions are susceptible to DoS attacks.
|
Poor filter regular expressions are susceptible to DoS attacks.
|
||||||
|
|
||||||
|
@ -321,33 +335,33 @@ Examples of poor filters
|
||||||
|
|
||||||
1. Too restrictive
|
1. Too restrictive
|
||||||
|
|
||||||
We find a log message:
|
We find a log message::
|
||||||
|
|
||||||
Apr-07-13 07:08:36 Invalid command fial2ban from 1.2.3.4
|
Apr-07-13 07:08:36 Invalid command fial2ban from 1.2.3.4
|
||||||
|
|
||||||
We make a failregex
|
We make a failregex::
|
||||||
|
|
||||||
^Invalid command \S+ from <HOST>
|
^Invalid command \S+ from <HOST>
|
||||||
|
|
||||||
Now think evil. The user does the command 'blah from 1.2.3.44'
|
Now think evil. The user does the command 'blah from 1.2.3.44'
|
||||||
|
|
||||||
The program diligently logs:
|
The program diligently logs::
|
||||||
|
|
||||||
Apr-07-13 07:08:36 Invalid command blah from 1.2.3.44 from 1.2.3.4
|
Apr-07-13 07:08:36 Invalid command blah from 1.2.3.44 from 1.2.3.4
|
||||||
|
|
||||||
And fail2ban matches 1.2.3.44 as the IP that it ban. A DoS attack was successful.
|
And fail2ban matches 1.2.3.44 as the IP that it ban. A DoS attack was successful.
|
||||||
|
|
||||||
The fix here is that the command can be anything so .* is appropriate.
|
The fix here is that the command can be anything so .* is appropriate::
|
||||||
|
|
||||||
^Invalid command .* from <HOST>
|
^Invalid command .* from <HOST>
|
||||||
|
|
||||||
Here the .* will match until the end of the string. Then realise it has more to
|
Here the .* will match until the end of the string. Then realise it has more to
|
||||||
match, i.e. "from <HOST>" and go back until it find this. Then it will ban
|
match, i.e. "from <HOST>" and go back until it find this. Then it will ban
|
||||||
1.2.3.4 correctly. Since the <HOST> is always at the end, end the regex with a $.
|
1.2.3.4 correctly. Since the <HOST> is always at the end, end the regex with a $::
|
||||||
|
|
||||||
^Invalid command .* from <HOST>$
|
^Invalid command .* from <HOST>$
|
||||||
|
|
||||||
Note if we'd just had the expression:
|
Note if we'd just had the expression::
|
||||||
|
|
||||||
^Invalid command \S+ from <HOST>$
|
^Invalid command \S+ from <HOST>$
|
||||||
|
|
||||||
|
@ -359,16 +373,16 @@ banned.
|
||||||
From the Apache vulnerability CVE-2013-2178
|
From the Apache vulnerability CVE-2013-2178
|
||||||
( original ref: https://vndh.net/note:fail2ban-089-denial-service ).
|
( original ref: https://vndh.net/note:fail2ban-089-denial-service ).
|
||||||
|
|
||||||
An example bad regex for Apache:
|
An example bad regex for Apache::
|
||||||
|
|
||||||
failregex = [[]client <HOST>[]] user .* not found
|
failregex = [[]client <HOST>[]] user .* not found
|
||||||
|
|
||||||
Since the user can do a get request on:
|
Since the user can do a get request on::
|
||||||
|
|
||||||
GET /[client%20192.168.0.1]%20user%20root%20not%20found HTTP/1.0
|
GET /[client%20192.168.0.1]%20user%20root%20not%20found HTTP/1.0
|
||||||
Host: remote.site
|
Host: remote.site
|
||||||
|
|
||||||
Now the log line will be:
|
Now the log line will be::
|
||||||
|
|
||||||
[Sat Jun 01 02:17:42 2013] [error] [client 192.168.33.1] File does not exist: /srv/http/site/[client 192.168.0.1] user root not found
|
[Sat Jun 01 02:17:42 2013] [error] [client 192.168.33.1] File does not exist: /srv/http/site/[client 192.168.0.1] user root not found
|
||||||
|
|
||||||
|
@ -379,27 +393,27 @@ regex and blocks 192.168.33.1 as a denial of service from the HTTP requester.
|
||||||
|
|
||||||
From: https://github.com/fail2ban/fail2ban/pull/426
|
From: https://github.com/fail2ban/fail2ban/pull/426
|
||||||
|
|
||||||
An example ssh log (simplified)
|
An example ssh log (simplified)::
|
||||||
|
|
||||||
Sep 29 17:15:02 spaceman sshd[12946]: Failed password for user from 127.0.0.1 port 20000 ssh1: ruser remoteuser
|
Sep 29 17:15:02 spaceman sshd[12946]: Failed password for user from 127.0.0.1 port 20000 ssh1: ruser remoteuser
|
||||||
|
|
||||||
As we assume username can include anything including spaces its prudent to put
|
As we assume username can include anything including spaces its prudent to put
|
||||||
.* here. The remote user can also exist as anything so lets not make assumptions again.
|
.* here. The remote user can also exist as anything so lets not make assumptions again::
|
||||||
|
|
||||||
failregex = ^%(__prefix_line)sFailed \S+ for .* from <HOST>( port \d*)?( ssh\d+)?(: ruser .*)?$
|
failregex = ^%(__prefix_line)sFailed \S+ for .* from <HOST>( port \d*)?( ssh\d+)?(: ruser .*)?$
|
||||||
|
|
||||||
So this works. The problem is if the .* after remote user is injected by the
|
So this works. The problem is if the .* after remote user is injected by the
|
||||||
user to be 'from 1.2.3.4'. The resultant log line is.
|
user to be 'from 1.2.3.4'. The resultant log line is::
|
||||||
|
|
||||||
Sep 29 17:15:02 spaceman sshd[12946]: Failed password for user from 127.0.0.1 port 20000 ssh1: ruser from 1.2.3.4
|
Sep 29 17:15:02 spaceman sshd[12946]: Failed password for user from 127.0.0.1 port 20000 ssh1: ruser from 1.2.3.4
|
||||||
|
|
||||||
Testing with:
|
Testing with::
|
||||||
|
|
||||||
fail2ban-regex -v 'Sep 29 17:15:02 Failed password for user from 127.0.0.1 port 20000 ssh1: ruser from 1.2.3.4' '^ Failed \S+ for .* from <HOST>( port \d*)?( ssh\d+)?(: ruser .*)?$'
|
fail2ban-regex -v 'Sep 29 17:15:02 Failed password for user from 127.0.0.1 port 20000 ssh1: ruser from 1.2.3.4' '^ Failed \S+ for .* from <HOST>( port \d*)?( ssh\d+)?(: ruser .*)?$'
|
||||||
|
|
||||||
TIP: I've removed the bit that matches __prefix_line from the regex and log.
|
.. TIP:: I've removed the bit that matches __prefix_line from the regex and log.
|
||||||
|
|
||||||
Shows:
|
Shows::
|
||||||
|
|
||||||
1) [1] ^ Failed \S+ for .* from <HOST>( port \d*)?( ssh\d+)?(: ruser .*)?$
|
1) [1] ^ Failed \S+ for .* from <HOST>( port \d*)?( ssh\d+)?(: ruser .*)?$
|
||||||
1.2.3.4 Sun Sep 29 17:15:02 2013
|
1.2.3.4 Sun Sep 29 17:15:02 2013
|
||||||
|
@ -412,14 +426,14 @@ The result was that 1.2.3.4 was matched, injected by the user, and the wrong IP
|
||||||
was banned.
|
was banned.
|
||||||
|
|
||||||
The solution here is to make the first .* non-greedy with .*?. Here it matches
|
The solution here is to make the first .* non-greedy with .*?. Here it matches
|
||||||
as little as required and the fail2ban-regex tool shows the output:
|
as little as required and the fail2ban-regex tool shows the output::
|
||||||
|
|
||||||
fail2ban-regex -v 'Sep 29 17:15:02 Failed password for user from 127.0.0.1 port 20000 ssh1: ruser from 1.2.3.4' '^ Failed \S+ for .*? from <HOST>( port \d*)?( ssh\d+)?(: ruser .*)?$'
|
fail2ban-regex -v 'Sep 29 17:15:02 Failed password for user from 127.0.0.1 port 20000 ssh1: ruser from 1.2.3.4' '^ Failed \S+ for .*? from <HOST>( port \d*)?( ssh\d+)?(: ruser .*)?$'
|
||||||
|
|
||||||
1) [1] ^ Failed \S+ for .*? from <HOST>( port \d*)?( ssh\d+)?(: ruser .*)?$
|
1) [1] ^ Failed \S+ for .*? from <HOST>( port \d*)?( ssh\d+)?(: ruser .*)?$
|
||||||
127.0.0.1 Sun Sep 29 17:15:02 2013
|
127.0.0.1 Sun Sep 29 17:15:02 2013
|
||||||
|
|
||||||
So the general case here is a log line that contains:
|
So the general case here is a log line that contains::
|
||||||
|
|
||||||
(fixed_data_1)<HOST>(fixed_data_2)(user_injectable_data)
|
(fixed_data_1)<HOST>(fixed_data_2)(user_injectable_data)
|
||||||
|
|
||||||
|
@ -427,20 +441,21 @@ Where the regex that matches fixed_data_1 is gready and matches the entire
|
||||||
string, before moving backwards and user_injectable_data can match the entire
|
string, before moving backwards and user_injectable_data can match the entire
|
||||||
string.
|
string.
|
||||||
|
|
||||||
Another case:
|
Another case
|
||||||
|
------------
|
||||||
|
|
||||||
ref: https://www.debuggex.com/r/CtAbeKMa2sDBEfA2/0
|
ref: https://www.debuggex.com/r/CtAbeKMa2sDBEfA2/0
|
||||||
|
|
||||||
A webserver logs the following without URL escaping:
|
A webserver logs the following without URL escaping::
|
||||||
|
|
||||||
[error] 2865#0: *66647 user "xyz" was not found in "/file", client: 1.2.3.1, server: www.host.com, request: "GET ", client: 3.2.1.1, server: fake.com, request: "GET exploited HTTP/3.3", host: "injected.host", host: "www.myhost.com"
|
[error] 2865#0: *66647 user "xyz" was not found in "/file", client: 1.2.3.1, server: www.host.com, request: "GET ", client: 3.2.1.1, server: fake.com, request: "GET exploited HTTP/3.3", host: "injected.host", host: "www.myhost.com"
|
||||||
|
|
||||||
regex:
|
regex::
|
||||||
|
|
||||||
failregex = ^ \[error\] \d+#\d+: \*\d+ user "\S+":? (?:password mismatch|was not found in ".*"), client: <HOST>, server: \S+, request: "\S+ .+ HTTP/\d+\.\d+", host: "\S+"
|
failregex = ^ \[error\] \d+#\d+: \*\d+ user "\S+":? (?:password mismatch|was not found in ".*"), client: <HOST>, server: \S+, request: "\S+ .+ HTTP/\d+\.\d+", host: "\S+"
|
||||||
|
|
||||||
The .* matches to the end of the string. Finds that it can't continue to match
|
The .* matches to the end of the string. Finds that it can't continue to match
|
||||||
", client ... so it moves from the back and find that the user injected web URL:
|
", client ... so it moves from the back and find that the user injected web URL::
|
||||||
|
|
||||||
", client: 3.2.1.1, server: fake.com, request: "GET exploited HTTP/3.3", host: "injected.host
|
", client: 3.2.1.1, server: fake.com, request: "GET exploited HTTP/3.3", host: "injected.host
|
||||||
|
|
||||||
|
@ -453,14 +468,14 @@ beyond <HOST>.
|
||||||
4. Application generates two identical log messages with different meanings
|
4. Application generates two identical log messages with different meanings
|
||||||
|
|
||||||
If the application generates the following two messages under different
|
If the application generates the following two messages under different
|
||||||
circumstances:
|
circumstances::
|
||||||
|
|
||||||
client <IP>: authentication failed
|
client <IP>: authentication failed
|
||||||
client <USER>: authentication failed
|
client <USER>: authentication failed
|
||||||
|
|
||||||
|
|
||||||
Then it's obvious that a regex of "^client <HOST>: authentication
|
Then it's obvious that a regex of ``^client <HOST>: authentication
|
||||||
failed$" will still cause problems if the user can trigger the second
|
failed$`` will still cause problems if the user can trigger the second
|
||||||
log message with a <USER> of 123.1.1.1.
|
log message with a <USER> of 123.1.1.1.
|
||||||
|
|
||||||
Here there's nothing to do except request/change the application so it logs
|
Here there's nothing to do except request/change the application so it logs
|
||||||
|
|
2
MANIFEST
2
MANIFEST
|
@ -258,7 +258,7 @@ config/action.d/dummy.conf
|
||||||
config/action.d/firewallcmd-new.conf
|
config/action.d/firewallcmd-new.conf
|
||||||
config/action.d/firewallcmd-ipset.conf
|
config/action.d/firewallcmd-ipset.conf
|
||||||
config/action.d/iptables-ipset-proto6-allports.conf
|
config/action.d/iptables-ipset-proto6-allports.conf
|
||||||
config/action.d/iptables-blocktype.conf
|
config/action.d/iptables-common.conf
|
||||||
config/action.d/iptables-ipset-proto4.conf
|
config/action.d/iptables-ipset-proto4.conf
|
||||||
config/action.d/iptables-ipset-proto6.conf
|
config/action.d/iptables-ipset-proto6.conf
|
||||||
config/action.d/iptables-xt_recent-echo.conf
|
config/action.d/iptables-xt_recent-echo.conf
|
||||||
|
|
|
@ -6,20 +6,20 @@ By Roy Sigurd Karlsbakk <roy@karlsbakk.net>
|
||||||
|
|
||||||
ABOUT
|
ABOUT
|
||||||
|
|
||||||
This readme is meant for those wanting to install fail2ban on Solaris 10,
|
This README is meant for those wanting to install fail2ban on Solaris 10,
|
||||||
OpenSolaris, OpenIndiana etc. To some degree it may as well be useful for
|
OpenSolaris, OpenIndiana etc. To some degree it may as well be useful for
|
||||||
users of older Solaris versions and Nexenta, but don't rely on it.
|
users of older Solaris versions and Nexenta, but don't rely on it.
|
||||||
|
|
||||||
READ ME FIRST
|
READ ME FIRST
|
||||||
|
|
||||||
If I use the term Solaris, I am talking about any Solaris dialect, that is, the
|
If I use the term Solaris, I am talking about any Solaris dialect, that is, the
|
||||||
official Sun/Oracle ones or derivates. If I describe an OS as
|
official Sun/Oracle ones or derivatives. If I describe an OS as
|
||||||
"OpenSolaris-based", it means it's either OpenSolaris, OpenIndiana or one of the
|
"OpenSolaris-based", it means it's either OpenSolaris, OpenIndiana or one of the
|
||||||
other, but /not/ the Nexenta family, since this only uses the OpenSolaris/
|
other, but /not/ the Nexenta family, since this only uses the OpenSolaris/
|
||||||
IllumOS kernel and not the userland. If I say Solaris 10, I mean Solaris 10 and
|
IllumOS kernel and not the userland. If I say Solaris 10, I mean Solaris 10 and
|
||||||
perhaps, if you're lucky and have some good gods on your side, it may also apply
|
perhaps, if you're lucky and have some good gods on your side, it may also apply
|
||||||
to Solaris 9 or even 8 and hopefully in the new Solaris 11 whenever that may be
|
to Solaris 9 or even 8 and hopefully in the new Solaris 11 whenever that may be
|
||||||
released. Quoted lines of code, settings et cetera are indented with two spaces.
|
released. Quoted lines of code, settings etc. are indented with two spaces.
|
||||||
This does _not_ mean you should use that indentation, especially in config files
|
This does _not_ mean you should use that indentation, especially in config files
|
||||||
where they can be harmful. Optional settings are prefixed with OPT: while
|
where they can be harmful. Optional settings are prefixed with OPT: while
|
||||||
required settings are prefixed with REQ:. If no prefix is found, regard it as a
|
required settings are prefixed with REQ:. If no prefix is found, regard it as a
|
||||||
|
|
20
README.md
20
README.md
|
@ -68,24 +68,12 @@ Code status:
|
||||||
Contact:
|
Contact:
|
||||||
--------
|
--------
|
||||||
|
|
||||||
### You found a severe security vulnerability in Fail2Ban?
|
### Bugs, feature requests, discussions?
|
||||||
email details to fail2ban-vulnerabilities at lists dot sourceforge dot net .
|
See [CONTRIBUTING.md](https://github.com/fail2ban/fail2ban/blob/master/CONTRIBUTING.md)
|
||||||
|
|
||||||
### You need some new features, you found bugs?
|
|
||||||
visit [Issues](https://github.com/fail2ban/fail2ban/issues)
|
|
||||||
and if your issue is not yet known -- file a bug report. See
|
|
||||||
[Fail2Ban wiki](http://www.fail2ban.org/wiki/index.php/HOWTO_Seek_Help)
|
|
||||||
on further instructions.
|
|
||||||
|
|
||||||
### You would like to troubleshoot or discuss?
|
|
||||||
join the [mailing list](https://lists.sourceforge.net/lists/listinfo/fail2ban-users)
|
|
||||||
|
|
||||||
### You would like to contribute (new filters/actions/code/documentation)?
|
|
||||||
send a pull request
|
|
||||||
|
|
||||||
### You just appreciate this program:
|
### You just appreciate this program:
|
||||||
send kudos to the original author ([Cyril Jaquier](mailto: Cyril Jaquier <cyril.jaquier@fail2ban.org>)
|
send kudos to the original author ([Cyril Jaquier](mailto: Cyril Jaquier <cyril.jaquier@fail2ban.org>))
|
||||||
or better to the [mailing list](https://lists.sourceforge.net/lists/listinfo/fail2ban-users)
|
or *better* to the [mailing list](https://lists.sourceforge.net/lists/listinfo/fail2ban-users)
|
||||||
since Fail2Ban is "community-driven" for years now.
|
since Fail2Ban is "community-driven" for years now.
|
||||||
|
|
||||||
Thanks:
|
Thanks:
|
||||||
|
|
139
RELEASE
139
RELEASE
|
@ -1,4 +1,4 @@
|
||||||
__ _ _ ___ _
|
.. __ _ _ ___ _
|
||||||
/ _|__ _(_) |_ ) |__ __ _ _ _
|
/ _|__ _(_) |_ ) |__ __ _ _ _
|
||||||
| _/ _` | | |/ /| '_ \/ _` | ' \
|
| _/ _` | | |/ /| '_ \/ _` | ' \
|
||||||
|_| \__,_|_|_/___|_.__/\__,_|_||_|
|
|_| \__,_|_|_/___|_.__/\__,_|_||_|
|
||||||
|
@ -7,7 +7,10 @@
|
||||||
How to do a release for Fail2Ban
|
How to do a release for Fail2Ban
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
# Check distribution patches and see if they can be included
|
Preparation
|
||||||
|
===========
|
||||||
|
|
||||||
|
* Check distribution patches and see if they can be included
|
||||||
|
|
||||||
* https://apps.fedoraproject.org/packages/fail2ban/sources
|
* https://apps.fedoraproject.org/packages/fail2ban/sources
|
||||||
* http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/net-analyzer/fail2ban/
|
* http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/net-analyzer/fail2ban/
|
||||||
|
@ -16,7 +19,8 @@ How to do a release for Fail2Ban
|
||||||
* http://sophie.zarb.org/sources/fail2ban (Mageia)
|
* http://sophie.zarb.org/sources/fail2ban (Mageia)
|
||||||
* https://trac.macports.org/browser/trunk/dports/security/fail2ban
|
* https://trac.macports.org/browser/trunk/dports/security/fail2ban
|
||||||
|
|
||||||
# Check distribution outstanding bugs
|
|
||||||
|
* Check distribution outstanding bugs
|
||||||
|
|
||||||
* https://github.com/fail2ban/fail2ban/issues?sort=updated&state=open
|
* https://github.com/fail2ban/fail2ban/issues?sort=updated&state=open
|
||||||
* http://bugs.debian.org/cgi-bin/pkgreport.cgi?dist=unstable;package=fail2ban
|
* http://bugs.debian.org/cgi-bin/pkgreport.cgi?dist=unstable;package=fail2ban
|
||||||
|
@ -29,132 +33,153 @@ How to do a release for Fail2Ban
|
||||||
* https://bugs.mageia.org/buglist.cgi?quicksearch=fail2ban
|
* https://bugs.mageia.org/buglist.cgi?quicksearch=fail2ban
|
||||||
* https://build.opensuse.org/package/requests/openSUSE:Factory/fail2ban
|
* https://build.opensuse.org/package/requests/openSUSE:Factory/fail2ban
|
||||||
|
|
||||||
# Make sure the tests pass
|
|
||||||
|
* Make sure the tests pass::
|
||||||
|
|
||||||
./fail2ban-testcases-all
|
./fail2ban-testcases-all
|
||||||
|
|
||||||
# Ensure the version is correct
|
* Ensure the version is correct in:
|
||||||
|
|
||||||
in:
|
|
||||||
* ./fail2ban/version.py
|
* ./fail2ban/version.py
|
||||||
* top of ChangeLog
|
* top of ChangeLog
|
||||||
* README.md
|
* README.md
|
||||||
|
|
||||||
# Ensure the MANIFEST is complete
|
|
||||||
|
|
||||||
Run:
|
* Ensure the MANIFEST is complete
|
||||||
|
|
||||||
|
* Run::
|
||||||
|
|
||||||
python setup.py sdist
|
python setup.py sdist
|
||||||
|
|
||||||
Look for errors like:
|
* Look for errors like::
|
||||||
|
|
||||||
'testcases/files/logs/mysqld.log' not a regular file -- skipping
|
'testcases/files/logs/mysqld.log' not a regular file -- skipping
|
||||||
|
|
||||||
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.0.tar.bz2
|
tar -C /tmp -jxf dist/fail2ban-0.9.0.tar.bz2
|
||||||
|
|
||||||
# clean up current direcory
|
* clean up current direcory::
|
||||||
|
|
||||||
diff -rul --exclude \*.pyc . /tmp/fail2ban-0.9.0/
|
diff -rul --exclude \*.pyc . /tmp/fail2ban-0.9.0/
|
||||||
|
|
||||||
# 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.0/ && export PYTHONPATH=`pwd` && bin/fail2ban-testcases
|
cd /tmp/fail2ban-0.9.0/ && export PYTHONPATH=`pwd` && 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.8.12.. | sed -e 's,^[ 0-9\t]*,,g' | tr '\n' '\|' | sed -e 's:|:, :g'
|
git shortlog -sn 0.8.12.. | 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.
|
* Update man pages::
|
||||||
|
|
||||||
# Update man pages
|
|
||||||
|
|
||||||
(cd man ; ./generate-man )
|
(cd man ; ./generate-man )
|
||||||
git commit -m 'DOC/ENH: update man pages for release' man/*
|
git commit -m 'DOC/ENH: update man pages for release' man/*
|
||||||
|
|
||||||
# Cleanout TODO file with the finished stuff
|
* Cleanout TODO file with the finished stuff
|
||||||
|
|
||||||
# Prepare source and rpm binary distributions
|
* Prepare source and rpm binary distributions::
|
||||||
|
|
||||||
python setup.py sdist
|
python setup.py sdist
|
||||||
|
|
||||||
|
* Broken for now: python setup.py bdist_rpm
|
||||||
|
* Broken for now: python setup.py upload
|
||||||
|
|
||||||
Broken for now: python setup.py bdist_rpm
|
|
||||||
Broken for now: python setup.py upload
|
|
||||||
|
|
||||||
# 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.1
|
git tag -s 0.9.1
|
||||||
|
|
||||||
# Prerelease (option)
|
Pre Release
|
||||||
|
===========
|
||||||
|
|
||||||
# Provide a release sample to distributors
|
* Provide a release sample to distributors
|
||||||
|
|
||||||
* Arch Linux:
|
* Arch Linux:
|
||||||
https://www.archlinux.org/packages/community/any/fail2ban/
|
|
||||||
|
* https://www.archlinux.org/packages/community/any/fail2ban/
|
||||||
|
|
||||||
* Debian: Yaroslav Halchenko <debian@onerussian.com>
|
* Debian: Yaroslav Halchenko <debian@onerussian.com>
|
||||||
http://packages.qa.debian.org/f/fail2ban.html
|
|
||||||
|
* http://packages.qa.debian.org/f/fail2ban.html
|
||||||
|
|
||||||
* FreeBSD: Christoph Theis theis@gmx.at>, Nick Hilliard <nick@foobar.org>
|
* FreeBSD: Christoph Theis theis@gmx.at>, Nick Hilliard <nick@foobar.org>
|
||||||
http://svnweb.freebsd.org/ports/head/security/py-fail2ban/Makefile?view=markup
|
|
||||||
http://www.freebsd.org/cgi/query-pr-summary.cgi?text=fail2ban
|
* http://svnweb.freebsd.org/ports/head/security/py-fail2ban/Makefile?view=markup
|
||||||
|
* http://www.freebsd.org/cgi/query-pr-summary.cgi?text=fail2ban
|
||||||
|
|
||||||
* Fedora: Axel Thimm <Axel.Thimm@atrpms.net>
|
* Fedora: Axel Thimm <Axel.Thimm@atrpms.net>
|
||||||
https://apps.fedoraproject.org/packages/fail2ban
|
|
||||||
http://pkgs.fedoraproject.org/cgit/fail2ban.git
|
* https://apps.fedoraproject.org/packages/fail2ban
|
||||||
https://admin.fedoraproject.org/pkgdb/acls/bugs/fail2ban
|
* http://pkgs.fedoraproject.org/cgit/fail2ban.git
|
||||||
|
* https://admin.fedoraproject.org/pkgdb/acls/bugs/fail2ban
|
||||||
|
|
||||||
* Gentoo: netmon@gentoo.org
|
* Gentoo: netmon@gentoo.org
|
||||||
http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/net-analyzer/fail2ban/metadata.xml?view=markup
|
|
||||||
https://bugs.gentoo.org/buglist.cgi?quicksearch=fail2ban
|
* http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/net-analyzer/fail2ban/metadata.xml?view=markup
|
||||||
|
* https://bugs.gentoo.org/buglist.cgi?quicksearch=fail2ban
|
||||||
|
|
||||||
* openSUSE: Stephan Kulow <coolo@suse.com>
|
* openSUSE: Stephan Kulow <coolo@suse.com>
|
||||||
https://build.opensuse.org/package/show/openSUSE:Factory/fail2ban
|
|
||||||
|
* https://build.opensuse.org/package/show/openSUSE:Factory/fail2ban
|
||||||
|
|
||||||
* Mac Ports: @Malbrouck on github (gh-49)
|
* Mac Ports: @Malbrouck on github (gh-49)
|
||||||
https://trac.macports.org/browser/trunk/dports/security/fail2ban/Portfile
|
|
||||||
|
* https://trac.macports.org/browser/trunk/dports/security/fail2ban/Portfile
|
||||||
|
|
||||||
* Mageia:
|
* Mageia:
|
||||||
https://bugs.mageia.org/buglist.cgi?quicksearch=fail2ban
|
|
||||||
|
|
||||||
An potentially to the fail2ban-users email list.
|
* https://bugs.mageia.org/buglist.cgi?quicksearch=fail2ban
|
||||||
|
|
||||||
# Wait for feedback from distributors
|
* An potentially to the fail2ban-users email list.
|
||||||
|
|
||||||
# Prepare a release notice https://github.com/fail2ban/fail2ban/releases/new
|
|
||||||
|
|
||||||
Upload the source/binaries from the dist directory and tag the release using the URL
|
* Wait for feedback from distributors
|
||||||
|
|
||||||
# Upload source/binaries to sourceforge http://sourceforge.net/projects/fail2ban/
|
* Prepare a release notice https://github.com/fail2ban/fail2ban/releases/new
|
||||||
|
|
||||||
|
* Upload the source/binaries from the dist directory and tag the release using the URL
|
||||||
|
|
||||||
|
* Upload source/binaries to sourceforge http://sourceforge.net/projects/fail2ban/
|
||||||
|
|
||||||
|
* Run the following and update the wiki with output::
|
||||||
|
|
||||||
# Run the following and update the wiki with output:
|
|
||||||
python -c 'import fail2ban.protocol; fail2ban.protocol.printWiki()'
|
python -c 'import fail2ban.protocol; fail2ban.protocol.printWiki()'
|
||||||
|
|
||||||
page: http://www.fail2ban.org/wiki/index.php/Commands
|
* page: http://www.fail2ban.org/wiki/index.php/Commands
|
||||||
|
|
||||||
|
|
||||||
* Update:
|
* Update:
|
||||||
http://www.fail2ban.org/wiki/index.php?title=Template:Fail2ban_Versions&action=edit
|
|
||||||
|
|
||||||
http://www.fail2ban.org/wiki/index.php?title=Template:Fail2ban_News&action=edit
|
* http://www.fail2ban.org/wiki/index.php?title=Template:Fail2ban_Versions&action=edit
|
||||||
move old bits to:
|
|
||||||
http://www.fail2ban.org/wiki/index.php?title=Template:Fail2ban_OldNews&action=edit
|
|
||||||
|
|
||||||
http://www.fail2ban.org/wiki/index.php/ChangeLog
|
* http://www.fail2ban.org/wiki/index.php?title=Template:Fail2ban_News&action=edit
|
||||||
http://www.fail2ban.org/wiki/index.php/Requirements (Check requirement)
|
* move old bits to http://www.fail2ban.org/wiki/index.php?title=Template:Fail2ban_OldNews&action=edit
|
||||||
http://www.fail2ban.org/wiki/index.php/Features
|
|
||||||
|
* http://www.fail2ban.org/wiki/index.php/ChangeLog
|
||||||
|
* http://www.fail2ban.org/wiki/index.php/Requirements (Check requirement)
|
||||||
|
* http://www.fail2ban.org/wiki/index.php/Features
|
||||||
|
|
||||||
* See if any filters are upgraded:
|
* See if any filters are upgraded:
|
||||||
http://www.fail2ban.org/wiki/index.php/Special:AllPages
|
http://www.fail2ban.org/wiki/index.php/Special:AllPages
|
||||||
|
|
||||||
# Email users and development list of release
|
* Email users and development list of release
|
||||||
|
|
||||||
# notify distributors
|
* notify distributors
|
||||||
|
|
||||||
Post Release
|
Post Release
|
||||||
============
|
============
|
||||||
|
|
||||||
Add the following to the top of the ChangeLog
|
Add the following to the top of the ChangeLog::
|
||||||
|
|
||||||
ver. 0.9.1 (2014/XX/XXX) - wanna-be-released
|
ver. 0.9.1 (2014/XX/XXX) - wanna-be-released
|
||||||
-----------
|
-----------
|
||||||
|
@ -168,5 +193,5 @@ ver. 0.9.1 (2014/XX/XXX) - wanna-be-released
|
||||||
Alter the git shortlog command in the previous section to refer to the just
|
Alter the git shortlog command in the previous section to refer to the just
|
||||||
released version.
|
released version.
|
||||||
|
|
||||||
and adjust common/version.py to carry .dev suffix to signal
|
and adjust fail2ban/version.py to carry .dev suffix to signal
|
||||||
a version under development.
|
a version under development.
|
||||||
|
|
17
THANKS
17
THANKS
|
@ -34,6 +34,7 @@ David Nutter
|
||||||
Derek Atkins
|
Derek Atkins
|
||||||
Eric Gerbier
|
Eric Gerbier
|
||||||
Enrico Labedzki
|
Enrico Labedzki
|
||||||
|
Eugene Hopkinson (SlowRiot)
|
||||||
ftoppi
|
ftoppi
|
||||||
François Boulogne
|
François Boulogne
|
||||||
Frédéric
|
Frédéric
|
||||||
|
@ -44,10 +45,14 @@ Hank Leininger
|
||||||
Hanno 'Rince' Wagner
|
Hanno 'Rince' Wagner
|
||||||
Helmut Grohne
|
Helmut Grohne
|
||||||
Iain Lea
|
Iain Lea
|
||||||
|
Ioan Indreias
|
||||||
Ivo Truxa
|
Ivo Truxa
|
||||||
John Thoe
|
John Thoe
|
||||||
Jacques Lav!gnotte
|
Jacques Lav!gnotte
|
||||||
Ioan Indreias
|
Johannes Weberhofer
|
||||||
|
Jason H Martin
|
||||||
|
Jisoo Park
|
||||||
|
Joel M Snyder
|
||||||
Jonathan Kamens
|
Jonathan Kamens
|
||||||
Jonathan Lanning
|
Jonathan Lanning
|
||||||
Jonathan Underwood
|
Jonathan Underwood
|
||||||
|
@ -60,6 +65,7 @@ kjohnsonecl
|
||||||
kojiro
|
kojiro
|
||||||
Lars Kneschke
|
Lars Kneschke
|
||||||
Lee Clemens
|
Lee Clemens
|
||||||
|
leftyfb (Mike Rushton)
|
||||||
Manuel Arostegui Ramirez
|
Manuel Arostegui Ramirez
|
||||||
Marcel Dopita
|
Marcel Dopita
|
||||||
Mark Edgington
|
Mark Edgington
|
||||||
|
@ -75,8 +81,11 @@ Michael Hanselmann
|
||||||
Mika (mkl)
|
Mika (mkl)
|
||||||
Nick Munger
|
Nick Munger
|
||||||
onorua
|
onorua
|
||||||
|
Paul Marrapese
|
||||||
|
Paul Traina
|
||||||
Noel Butler
|
Noel Butler
|
||||||
Patrick Börjesson
|
Patrick Börjesson
|
||||||
|
Pressy
|
||||||
Raphaël Marichez
|
Raphaël Marichez
|
||||||
RealRancor
|
RealRancor
|
||||||
René Berber
|
René Berber
|
||||||
|
@ -84,7 +93,10 @@ Robert Edeker
|
||||||
Rolf Fokkens
|
Rolf Fokkens
|
||||||
Roman Gelfand
|
Roman Gelfand
|
||||||
Russell Odom
|
Russell Odom
|
||||||
|
SATO Kentaro
|
||||||
|
Sean DuBois
|
||||||
Sebastian Arcus
|
Sebastian Arcus
|
||||||
|
Serg G. Brester
|
||||||
Sireyessire
|
Sireyessire
|
||||||
silviogarbes
|
silviogarbes
|
||||||
Stefan Tatschner
|
Stefan Tatschner
|
||||||
|
@ -100,8 +112,9 @@ Vaclav Misek
|
||||||
Vincent Deffontaines
|
Vincent Deffontaines
|
||||||
Yaroslav Halchenko
|
Yaroslav Halchenko
|
||||||
Winston Smith
|
Winston Smith
|
||||||
ykimon
|
|
||||||
Yehuda Katz
|
Yehuda Katz
|
||||||
|
ykimon
|
||||||
|
Yung-Chin Oei
|
||||||
Zbigniew Jędrzejewski-Szmek
|
Zbigniew Jędrzejewski-Szmek
|
||||||
zugeschmiert
|
zugeschmiert
|
||||||
Zurd
|
Zurd
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
Vagrant.configure("2") do |config|
|
||||||
|
|
||||||
|
config.vm.define "secure" do |secure|
|
||||||
|
secure.vm.box = "ubuntu/trusty64"
|
||||||
|
secure.vm.hostname = "secure.dev.fail2ban.org"
|
||||||
|
secure.vm.network "private_network", ip: "192.168.200.100"
|
||||||
|
|
||||||
|
# secure.vm.synced_folder 'salt/roots', '/srv/salt'
|
||||||
|
|
||||||
|
# secure.vm.provision :salt do |salt|
|
||||||
|
# salt.minion_config = 'salt/minion'
|
||||||
|
# salt.run_highstate = true
|
||||||
|
# salt.verbose = true
|
||||||
|
# end
|
||||||
|
end
|
||||||
|
|
||||||
|
config.vm.define "attacker" do |attacker|
|
||||||
|
attacker.vm.box = "ubuntu/trusty64"
|
||||||
|
attacker.vm.hostname = "attacker.dev.fail2ban.org"
|
||||||
|
attacker.vm.network "private_network", ip: "192.168.200.150"
|
||||||
|
|
||||||
|
# attacker.vm.synced_folder 'salt/roots', '/srv/salt'
|
||||||
|
|
||||||
|
# attacker.vm.provision :salt do |salt|
|
||||||
|
# salt.minion_config = 'salt/minion'
|
||||||
|
# salt.run_highstate = true
|
||||||
|
# salt.verbose = true
|
||||||
|
# end
|
||||||
|
end
|
||||||
|
end
|
|
@ -30,9 +30,10 @@ from fail2ban.protocol import printFormatted
|
||||||
from fail2ban.client.csocket import CSocket
|
from fail2ban.client.csocket import CSocket
|
||||||
from fail2ban.client.configurator import Configurator
|
from fail2ban.client.configurator import Configurator
|
||||||
from fail2ban.client.beautifier import Beautifier
|
from fail2ban.client.beautifier import Beautifier
|
||||||
|
from fail2ban.helpers import getLogger
|
||||||
|
|
||||||
# Gets the instance of the logger.
|
# Gets the instance of the logger.
|
||||||
logSys = logging.getLogger("fail2ban.client")
|
logSys = getLogger("fail2ban")
|
||||||
|
|
||||||
##
|
##
|
||||||
#
|
#
|
||||||
|
@ -51,6 +52,7 @@ class Fail2banClient:
|
||||||
self.__conf["conf"] = "/etc/fail2ban"
|
self.__conf["conf"] = "/etc/fail2ban"
|
||||||
self.__conf["dump"] = False
|
self.__conf["dump"] = False
|
||||||
self.__conf["force"] = False
|
self.__conf["force"] = False
|
||||||
|
self.__conf["background"] = True
|
||||||
self.__conf["verbose"] = 1
|
self.__conf["verbose"] = 1
|
||||||
self.__conf["interactive"] = False
|
self.__conf["interactive"] = False
|
||||||
self.__conf["socket"] = None
|
self.__conf["socket"] = None
|
||||||
|
@ -83,6 +85,8 @@ class Fail2banClient:
|
||||||
print " -v increase verbosity"
|
print " -v increase verbosity"
|
||||||
print " -q decrease verbosity"
|
print " -q decrease verbosity"
|
||||||
print " -x force execution of the server (remove socket file)"
|
print " -x force execution of the server (remove socket file)"
|
||||||
|
print " -b start server in background (default)"
|
||||||
|
print " -f start server in foreground (note that the client forks once itself)"
|
||||||
print " -h, --help display this help message"
|
print " -h, --help display this help message"
|
||||||
print " -V, --version print the version"
|
print " -V, --version print the version"
|
||||||
print
|
print
|
||||||
|
@ -125,6 +129,10 @@ class Fail2banClient:
|
||||||
self.__conf["force"] = True
|
self.__conf["force"] = True
|
||||||
elif opt[0] == "-i":
|
elif opt[0] == "-i":
|
||||||
self.__conf["interactive"] = True
|
self.__conf["interactive"] = True
|
||||||
|
elif opt[0] == "-b":
|
||||||
|
self.__conf["background"] = True
|
||||||
|
elif opt[0] == "-f":
|
||||||
|
self.__conf["background"] = False
|
||||||
elif opt[0] in ["-h", "--help"]:
|
elif opt[0] in ["-h", "--help"]:
|
||||||
self.dispUsage()
|
self.dispUsage()
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
@ -194,7 +202,8 @@ class Fail2banClient:
|
||||||
# Start the server
|
# Start the server
|
||||||
self.__startServerAsync(self.__conf["socket"],
|
self.__startServerAsync(self.__conf["socket"],
|
||||||
self.__conf["pidfile"],
|
self.__conf["pidfile"],
|
||||||
self.__conf["force"])
|
self.__conf["force"],
|
||||||
|
self.__conf["background"])
|
||||||
try:
|
try:
|
||||||
# Wait for the server to start
|
# Wait for the server to start
|
||||||
self.__waitOnServer()
|
self.__waitOnServer()
|
||||||
|
@ -242,14 +251,12 @@ class Fail2banClient:
|
||||||
#
|
#
|
||||||
# Start the Fail2ban server in daemon mode.
|
# Start the Fail2ban server in daemon mode.
|
||||||
|
|
||||||
def __startServerAsync(self, socket, pidfile, force = False):
|
def __startServerAsync(self, socket, pidfile, force = False, background = True):
|
||||||
# Forks the current process.
|
# Forks the current process.
|
||||||
pid = os.fork()
|
pid = os.fork()
|
||||||
if pid == 0:
|
if pid == 0:
|
||||||
args = list()
|
args = list()
|
||||||
args.append(self.SERVER)
|
args.append(self.SERVER)
|
||||||
# Start in background mode.
|
|
||||||
args.append("-b")
|
|
||||||
# Set the socket path.
|
# Set the socket path.
|
||||||
args.append("-s")
|
args.append("-s")
|
||||||
args.append(socket)
|
args.append(socket)
|
||||||
|
@ -259,6 +266,12 @@ class Fail2banClient:
|
||||||
# Force the execution if needed.
|
# Force the execution if needed.
|
||||||
if force:
|
if force:
|
||||||
args.append("-x")
|
args.append("-x")
|
||||||
|
# Start in foreground mode if requested.
|
||||||
|
if background:
|
||||||
|
args.append("-b")
|
||||||
|
else:
|
||||||
|
args.append("-f")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Use the current directory.
|
# Use the current directory.
|
||||||
exe = os.path.abspath(os.path.join(sys.path[0], self.SERVER))
|
exe = os.path.abspath(os.path.join(sys.path[0], self.SERVER))
|
||||||
|
@ -312,7 +325,7 @@ class Fail2banClient:
|
||||||
|
|
||||||
# Reads the command line options.
|
# Reads the command line options.
|
||||||
try:
|
try:
|
||||||
cmdOpts = 'hc:s:p:xdviqV'
|
cmdOpts = 'hc:s:p:xfbdviqV'
|
||||||
cmdLongOpts = ['help', 'version']
|
cmdLongOpts = ['help', 'version']
|
||||||
optList, args = getopt.getopt(self.__argv[1:], cmdOpts, cmdLongOpts)
|
optList, args = getopt.getopt(self.__argv[1:], cmdOpts, cmdLongOpts)
|
||||||
except getopt.GetoptError:
|
except getopt.GetoptError:
|
||||||
|
|
|
@ -25,11 +25,11 @@ This tools can test regular expressions for "fail2ban".
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__author__ = "Cyril Jaquier, Yaroslav Halchenko"
|
__author__ = "Fail2Ban Developers"
|
||||||
__copyright__ = "Copyright (c) 2004-2008 Cyril Jaquier, 2012-2013 Yaroslav Halchenko"
|
__copyright__ = "Copyright (c) 2004-2008 Cyril Jaquier, 2012-2014 Yaroslav Halchenko"
|
||||||
__license__ = "GPL"
|
__license__ = "GPL"
|
||||||
|
|
||||||
import getopt, sys, time, logging, os, locale, shlex, urllib
|
import getopt, sys, time, logging, os, locale, shlex, time, urllib
|
||||||
from optparse import OptionParser, Option
|
from optparse import OptionParser, Option
|
||||||
|
|
||||||
from ConfigParser import NoOptionError, NoSectionError, MissingSectionHeaderError
|
from ConfigParser import NoOptionError, NoSectionError, MissingSectionHeaderError
|
||||||
|
@ -45,9 +45,9 @@ from fail2ban.client.filterreader import FilterReader
|
||||||
from fail2ban.server.filter import Filter
|
from fail2ban.server.filter import Filter
|
||||||
from fail2ban.server.failregex import RegexException
|
from fail2ban.server.failregex import RegexException
|
||||||
|
|
||||||
from fail2ban.tests.utils import FormatterWithTraceBack
|
from fail2ban.helpers import FormatterWithTraceBack, getLogger
|
||||||
# Gets the instance of the logger.
|
# Gets the instance of the logger.
|
||||||
logSys = logging.getLogger("fail2ban")
|
logSys = getLogger("fail2ban")
|
||||||
|
|
||||||
def debuggexURL(sample, regex):
|
def debuggexURL(sample, regex):
|
||||||
q = urllib.urlencode({ 're': regex.replace('<HOST>', '(?&.ipv4)'),
|
q = urllib.urlencode({ 're': regex.replace('<HOST>', '(?&.ipv4)'),
|
||||||
|
@ -223,6 +223,7 @@ class Fail2banRegex(object):
|
||||||
self._filter = Filter(None)
|
self._filter = Filter(None)
|
||||||
self._ignoreregex = list()
|
self._ignoreregex = list()
|
||||||
self._failregex = list()
|
self._failregex = list()
|
||||||
|
self._time_elapsed = None
|
||||||
self._line_stats = LineStats()
|
self._line_stats = LineStats()
|
||||||
|
|
||||||
if opts.maxlines:
|
if opts.maxlines:
|
||||||
|
@ -344,10 +345,11 @@ class Fail2banRegex(object):
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
self._line_stats.matched += 1
|
self._line_stats.matched += 1
|
||||||
|
self._line_stats.missed -= 1
|
||||||
return line, ret
|
return line, ret
|
||||||
|
|
||||||
def process(self, test_lines):
|
def process(self, test_lines):
|
||||||
|
t0 = time.time()
|
||||||
for line_no, line in enumerate(test_lines):
|
for line_no, line in enumerate(test_lines):
|
||||||
if isinstance(line, tuple):
|
if isinstance(line, tuple):
|
||||||
line_datetimestripped, ret = fail2banRegex.testRegex(
|
line_datetimestripped, ret = fail2banRegex.testRegex(
|
||||||
|
@ -382,6 +384,7 @@ class Fail2banRegex(object):
|
||||||
|
|
||||||
if line_no % 10 == 0 and self._filter.dateDetector is not None:
|
if line_no % 10 == 0 and self._filter.dateDetector is not None:
|
||||||
self._filter.dateDetector.sortTemplate()
|
self._filter.dateDetector.sortTemplate()
|
||||||
|
self._time_elapsed = time.time() - t0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -455,7 +458,10 @@ class Fail2banRegex(object):
|
||||||
template.hits, template.name))
|
template.hits, template.name))
|
||||||
pprint_list(out, "[# of hits] date format")
|
pprint_list(out, "[# of hits] date format")
|
||||||
|
|
||||||
print "\nLines: %s" % self._line_stats
|
print "\nLines: %s" % self._line_stats,
|
||||||
|
if self._time_elapsed is not None:
|
||||||
|
print "[processed in %.2f sec]" % self._time_elapsed,
|
||||||
|
print
|
||||||
|
|
||||||
if self._print_all_matched:
|
if self._print_all_matched:
|
||||||
self.printLines('matched')
|
self.printLines('matched')
|
||||||
|
|
|
@ -22,13 +22,14 @@ __author__ = "Cyril Jaquier"
|
||||||
__copyright__ = "Copyright (c) 2004 Cyril Jaquier"
|
__copyright__ = "Copyright (c) 2004 Cyril Jaquier"
|
||||||
__license__ = "GPL"
|
__license__ = "GPL"
|
||||||
|
|
||||||
import getopt, sys, logging, os
|
import getopt, sys, os
|
||||||
|
|
||||||
from fail2ban.version import version
|
from fail2ban.version import version
|
||||||
from fail2ban.server.server import Server
|
from fail2ban.server.server import Server
|
||||||
|
from fail2ban.helpers import getLogger
|
||||||
|
|
||||||
# Gets the instance of the logger.
|
# Gets the instance of the logger.
|
||||||
logSys = logging.getLogger("fail2ban")
|
logSys = getLogger("fail2ban")
|
||||||
|
|
||||||
##
|
##
|
||||||
# \mainpage Fail2Ban
|
# \mainpage Fail2Ban
|
||||||
|
|
|
@ -24,8 +24,8 @@ __author__ = "Cyril Jaquier"
|
||||||
__copyright__ = "Copyright (c) 2004 Cyril Jaquier, 2012- Yaroslav Halchenko"
|
__copyright__ = "Copyright (c) 2004 Cyril Jaquier, 2012- Yaroslav Halchenko"
|
||||||
__license__ = "GPL"
|
__license__ = "GPL"
|
||||||
|
|
||||||
|
import logging
|
||||||
import unittest, logging, sys, time, os
|
import unittest, sys, time, os
|
||||||
|
|
||||||
# Check if local fail2ban module exists, and use if it exists by
|
# Check if local fail2ban module exists, and use if it exists by
|
||||||
# modifying the path. This is such that tests can be used in dev
|
# modifying the path. This is such that tests can be used in dev
|
||||||
|
@ -34,7 +34,8 @@ if os.path.exists("fail2ban/__init__.py"):
|
||||||
sys.path.insert(0, ".")
|
sys.path.insert(0, ".")
|
||||||
from fail2ban.version import version
|
from fail2ban.version import version
|
||||||
|
|
||||||
from fail2ban.tests.utils import FormatterWithTraceBack, gatherTests
|
from fail2ban.tests.utils import gatherTests
|
||||||
|
from fail2ban.helpers import FormatterWithTraceBack, getLogger
|
||||||
from fail2ban.server.mytime import MyTime
|
from fail2ban.server.mytime import MyTime
|
||||||
|
|
||||||
from optparse import OptionParser, Option
|
from optparse import OptionParser, Option
|
||||||
|
@ -69,7 +70,7 @@ parser = get_opt_parser()
|
||||||
#
|
#
|
||||||
# Logging
|
# Logging
|
||||||
#
|
#
|
||||||
logSys = logging.getLogger("fail2ban")
|
logSys = getLogger("fail2ban")
|
||||||
|
|
||||||
# Numerical level of verbosity corresponding to a log "level"
|
# Numerical level of verbosity corresponding to a log "level"
|
||||||
verbosity = {'heavydebug': 4,
|
verbosity = {'heavydebug': 4,
|
||||||
|
|
|
@ -36,7 +36,7 @@ from fail2ban.server.actions import ActionBase
|
||||||
from fail2ban.version import version as f2bVersion
|
from fail2ban.version import version as f2bVersion
|
||||||
|
|
||||||
class BadIPsAction(ActionBase):
|
class BadIPsAction(ActionBase):
|
||||||
"""Fail2Ban action which resports bans to badips.com, and also
|
"""Fail2Ban action which reports bans to badips.com, and also
|
||||||
blacklist bad IPs listed on badips.com by using another action's
|
blacklist bad IPs listed on badips.com by using another action's
|
||||||
ban method.
|
ban method.
|
||||||
|
|
||||||
|
@ -161,7 +161,7 @@ class BadIPsAction(ActionBase):
|
||||||
"/".join([self._badips, "get", "list", category, str(score)]),
|
"/".join([self._badips, "get", "list", category, str(score)]),
|
||||||
urlencode({'age': age})])
|
urlencode({'age': age})])
|
||||||
if key:
|
if key:
|
||||||
url = "&".join([url, urlencode({"key", key})])
|
url = "&".join([url, urlencode({'key': key})])
|
||||||
response = urlopen(self._Request(url))
|
response = urlopen(self._Request(url))
|
||||||
except HTTPError as response:
|
except HTTPError as response:
|
||||||
messages = json.loads(response.read().decode('utf-8'))
|
messages = json.loads(response.read().decode('utf-8'))
|
||||||
|
@ -258,7 +258,7 @@ class BadIPsAction(ActionBase):
|
||||||
self._logSys.error(
|
self._logSys.error(
|
||||||
"Error banning IP %s for jail '%s' with action '%s': %s",
|
"Error banning IP %s for jail '%s' with action '%s': %s",
|
||||||
ip, self._jail.name, self.banaction, e,
|
ip, self._jail.name, self.banaction, e,
|
||||||
exc_info=self._logSys.getEffectiveLevel<=logging.DEBUG)
|
exc_info=self._logSys.getEffectiveLevel()<=logging.DEBUG)
|
||||||
else:
|
else:
|
||||||
self._bannedips.add(ip)
|
self._bannedips.add(ip)
|
||||||
self._logSys.info(
|
self._logSys.info(
|
||||||
|
@ -279,7 +279,7 @@ class BadIPsAction(ActionBase):
|
||||||
self._logSys.info(
|
self._logSys.info(
|
||||||
"Error unbanning IP %s for jail '%s' with action '%s': %s",
|
"Error unbanning IP %s for jail '%s' with action '%s': %s",
|
||||||
ip, self._jail.name, self.banaction, e,
|
ip, self._jail.name, self.banaction, e,
|
||||||
exc_info=self._logSys.getEffectiveLevel<=logging.DEBUG)
|
exc_info=self._logSys.getEffectiveLevel()<=logging.DEBUG)
|
||||||
else:
|
else:
|
||||||
self._logSys.info(
|
self._logSys.info(
|
||||||
"Unbanned IP %s for jail '%s' with action '%s'",
|
"Unbanned IP %s for jail '%s' with action '%s'",
|
||||||
|
@ -346,7 +346,7 @@ class BadIPsAction(ActionBase):
|
||||||
try:
|
try:
|
||||||
url = "/".join([self._badips, "add", self.category, aInfo['ip']])
|
url = "/".join([self._badips, "add", self.category, aInfo['ip']])
|
||||||
if self.key:
|
if self.key:
|
||||||
url = "?".join([url, urlencode({"key", self.key})])
|
url = "?".join([url, urlencode({'key': self.key})])
|
||||||
response = urlopen(self._Request(url))
|
response = urlopen(self._Request(url))
|
||||||
except HTTPError as response:
|
except HTTPError as response:
|
||||||
messages = json.loads(response.read().decode('utf-8'))
|
messages = json.loads(response.read().decode('utf-8'))
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
#
|
||||||
|
# Author: Mike Rushton
|
||||||
|
#
|
||||||
|
# Referenced from from http://www.normyee.net/blog/2012/02/02/adding-cloudflare-support-to-fail2ban by NORM YEE
|
||||||
|
#
|
||||||
|
# To get your Cloudflare API key: https://www.cloudflare.com/my-account
|
||||||
|
#
|
||||||
|
|
||||||
|
[Definition]
|
||||||
|
|
||||||
|
# Option: actionstart
|
||||||
|
# Notes.: command executed once at the start of Fail2Ban.
|
||||||
|
# Values: CMD
|
||||||
|
#
|
||||||
|
actionstart =
|
||||||
|
|
||||||
|
# Option: actionstop
|
||||||
|
# Notes.: command executed once at the end of Fail2Ban
|
||||||
|
# Values: CMD
|
||||||
|
#
|
||||||
|
actionstop =
|
||||||
|
|
||||||
|
# Option: actioncheck
|
||||||
|
# Notes.: command executed once before each actionban command
|
||||||
|
# Values: CMD
|
||||||
|
#
|
||||||
|
actioncheck =
|
||||||
|
|
||||||
|
# Option: actionban
|
||||||
|
# Notes.: command executed when banning an IP. Take care that the
|
||||||
|
# command is executed with Fail2Ban user rights.
|
||||||
|
# Tags: <ip> IP address
|
||||||
|
# <failures> number of failures
|
||||||
|
# <time> unix timestamp of the ban time
|
||||||
|
# Values: CMD
|
||||||
|
#
|
||||||
|
actionban = curl https://www.cloudflare.com/api_json.html -d 'a=ban' -d 'tkn=<cftoken>' -d 'email=<cfuser>' -d 'key=<ip>'
|
||||||
|
# Option: actionunban
|
||||||
|
# Notes.: command executed when unbanning an IP. Take care that the
|
||||||
|
# command is executed with Fail2Ban user rights.
|
||||||
|
# Tags: <ip> IP address
|
||||||
|
# <failures> number of failures
|
||||||
|
# <time> unix timestamp of the ban time
|
||||||
|
# Values: CMD
|
||||||
|
#
|
||||||
|
actionunban = curl https://www.cloudflare.com/api_json.html -d 'a=nul' -d 'tkn=<cftoken>' -d 'email=<cfuser>' -d 'key=<ip>'
|
||||||
|
|
||||||
|
|
||||||
|
[Init]
|
||||||
|
|
||||||
|
# Default Cloudflare API token
|
||||||
|
cftoken =
|
||||||
|
|
||||||
|
# Default Cloudflare username
|
||||||
|
cfuser =
|
|
@ -5,7 +5,7 @@
|
||||||
# offending IP address.
|
# offending IP address.
|
||||||
# This uses the https://abusix.com/contactdb.html to lookup abuse contacts.
|
# This uses the https://abusix.com/contactdb.html to lookup abuse contacts.
|
||||||
#
|
#
|
||||||
# DEPENDANCIES:
|
# DEPENDENCIES:
|
||||||
# This requires the dig command from bind-utils
|
# This requires the dig command from bind-utils
|
||||||
#
|
#
|
||||||
# You should provide the <logpath> in the jail config - lines from the log
|
# You should provide the <logpath> in the jail config - lines from the log
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
[INCLUDES]
|
[INCLUDES]
|
||||||
|
|
||||||
before = iptables-blocktype.conf
|
before = iptables-common.conf
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
|
@ -31,22 +31,6 @@ actionunban = ipset del fail2ban-<name> <ip> -exist
|
||||||
|
|
||||||
[Init]
|
[Init]
|
||||||
|
|
||||||
# Default name of the chain
|
|
||||||
#
|
|
||||||
name = default
|
|
||||||
|
|
||||||
# Option: port
|
|
||||||
# Notes.: specifies port to monitor
|
|
||||||
# Values: [ NUM | STRING ]
|
|
||||||
#
|
|
||||||
port = ssh
|
|
||||||
|
|
||||||
# Option: protocol
|
|
||||||
# Notes.: internally used by config reader for interpolations.
|
|
||||||
# Values: [ tcp | udp | icmp | all ]
|
|
||||||
#
|
|
||||||
protocol = tcp
|
|
||||||
|
|
||||||
# Option: chain
|
# Option: chain
|
||||||
# Notes specifies the iptables chain to which the fail2ban rules should be
|
# Notes specifies the iptables chain to which the fail2ban rules should be
|
||||||
# added
|
# added
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
[INCLUDES]
|
[INCLUDES]
|
||||||
|
|
||||||
before = iptables-blocktype.conf
|
before = iptables-common.conf
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
|
@ -24,22 +24,6 @@ actionunban = firewall-cmd --direct --remove-rule ipv4 filter f2b-<name> 0 -s <i
|
||||||
|
|
||||||
[Init]
|
[Init]
|
||||||
|
|
||||||
# Default name of the chain
|
|
||||||
#
|
|
||||||
name = default
|
|
||||||
|
|
||||||
# Option: port
|
|
||||||
# Notes.: specifies port to monitor
|
|
||||||
# Values: [ NUM | STRING ]
|
|
||||||
#
|
|
||||||
port = ssh
|
|
||||||
|
|
||||||
# Option: protocol
|
|
||||||
# Notes.: internally used by config reader for interpolations.
|
|
||||||
# Values: [ tcp | udp | icmp | all ]
|
|
||||||
#
|
|
||||||
protocol = tcp
|
|
||||||
|
|
||||||
# Option: chain
|
# Option: chain
|
||||||
# Notes specifies the iptables chain to which the fail2ban rules should be
|
# Notes specifies the iptables chain to which the fail2ban rules should be
|
||||||
# added
|
# added
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
[INCLUDES]
|
[INCLUDES]
|
||||||
|
|
||||||
before = iptables-blocktype.conf
|
before = iptables-common.conf
|
||||||
|
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
@ -53,18 +53,3 @@ actionunban = iptables -D f2b-<name> -s <ip> -j <blocktype>
|
||||||
|
|
||||||
[Init]
|
[Init]
|
||||||
|
|
||||||
# Default name of the chain
|
|
||||||
#
|
|
||||||
name = default
|
|
||||||
|
|
||||||
# Option: protocol
|
|
||||||
# Notes.: internally used by config reader for interpolations.
|
|
||||||
# Values: [ tcp | udp | icmp | all ] Default: tcp
|
|
||||||
#
|
|
||||||
protocol = tcp
|
|
||||||
|
|
||||||
# Option: chain
|
|
||||||
# Notes specifies the iptables chain to which the fail2ban rules should be
|
|
||||||
# added
|
|
||||||
# Values: STRING Default: INPUT
|
|
||||||
chain = INPUT
|
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
# Fail2Ban configuration file
|
|
||||||
#
|
|
||||||
# Author: Daniel Black
|
|
||||||
#
|
|
||||||
# This is a included configuration file and includes the defination for the blocktype
|
|
||||||
# used in all iptables based actions by default.
|
|
||||||
#
|
|
||||||
# The user can override the default in iptables-blocktype.local
|
|
||||||
|
|
||||||
[INCLUDES]
|
|
||||||
|
|
||||||
after = iptables-blocktype.local
|
|
||||||
|
|
||||||
[Init]
|
|
||||||
|
|
||||||
# Option: blocktype
|
|
||||||
# Note: This is what the action does with rules. This can be any jump target
|
|
||||||
# as per the iptables man page (section 8). Common values are DROP
|
|
||||||
# REJECT, REJECT --reject-with icmp-port-unreachable
|
|
||||||
# Values: STRING
|
|
||||||
blocktype = REJECT --reject-with icmp-port-unreachable
|
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
# Fail2Ban configuration file
|
||||||
|
#
|
||||||
|
# Author: Daniel Black
|
||||||
|
#
|
||||||
|
# This is a included configuration file and includes the definitions for the iptables
|
||||||
|
# used in all iptables based actions by default.
|
||||||
|
#
|
||||||
|
# The user can override the defaults in iptables-common.local
|
||||||
|
|
||||||
|
[INCLUDES]
|
||||||
|
|
||||||
|
after = iptables-blocktype.local
|
||||||
|
iptables-common.local
|
||||||
|
# iptables-blocktype.local is obsolete
|
||||||
|
|
||||||
|
[Init]
|
||||||
|
|
||||||
|
# Option: chain
|
||||||
|
# Notes specifies the iptables chain to which the Fail2Ban rules should be
|
||||||
|
# added
|
||||||
|
# Values: STRING Default: INPUT
|
||||||
|
chain = INPUT
|
||||||
|
|
||||||
|
# Default name of the chain
|
||||||
|
#
|
||||||
|
name = default
|
||||||
|
|
||||||
|
# Option: port
|
||||||
|
# Notes.: specifies port to monitor
|
||||||
|
# Values: [ NUM | STRING ] Default:
|
||||||
|
#
|
||||||
|
port = ssh
|
||||||
|
|
||||||
|
# Option: protocol
|
||||||
|
# Notes.: internally used by config reader for interpolations.
|
||||||
|
# Values: [ tcp | udp | icmp | all ] Default: tcp
|
||||||
|
#
|
||||||
|
protocol = tcp
|
||||||
|
|
||||||
|
# Option: blocktype
|
||||||
|
# Note: This is what the action does with rules. This can be any jump target
|
||||||
|
# as per the iptables man page (section 8). Common values are DROP
|
||||||
|
# REJECT, REJECT --reject-with icmp-port-unreachable
|
||||||
|
# Values: STRING
|
||||||
|
blocktype = REJECT --reject-with icmp-port-unreachable
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
[INCLUDES]
|
[INCLUDES]
|
||||||
|
|
||||||
before = iptables-blocktype.conf
|
before = iptables-common.conf
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
|
@ -28,13 +28,13 @@ before = iptables-blocktype.conf
|
||||||
# Values: CMD
|
# Values: CMD
|
||||||
#
|
#
|
||||||
actionstart = ipset --create f2b-<name> iphash
|
actionstart = ipset --create f2b-<name> iphash
|
||||||
iptables -I INPUT -p <protocol> -m multiport --dports <port> -m set --match-set f2b-<name> src -j <blocktype>
|
iptables -I <chain> -p <protocol> -m multiport --dports <port> -m set --match-set f2b-<name> src -j <blocktype>
|
||||||
|
|
||||||
# Option: actionstop
|
# Option: actionstop
|
||||||
# Notes.: command executed once at the end of Fail2Ban
|
# Notes.: command executed once at the end of Fail2Ban
|
||||||
# Values: CMD
|
# Values: CMD
|
||||||
#
|
#
|
||||||
actionstop = iptables -D INPUT -p <protocol> -m multiport --dports <port> -m set --match-set f2b-<name> src -j <blocktype>
|
actionstop = iptables -D <chain> -p <protocol> -m multiport --dports <port> -m set --match-set f2b-<name> src -j <blocktype>
|
||||||
ipset --flush f2b-<name>
|
ipset --flush f2b-<name>
|
||||||
ipset --destroy f2b-<name>
|
ipset --destroy f2b-<name>
|
||||||
|
|
||||||
|
@ -56,18 +56,3 @@ actionunban = ipset --test f2b-<name> <ip> && ipset --del f2b-<name> <ip>
|
||||||
|
|
||||||
[Init]
|
[Init]
|
||||||
|
|
||||||
# Default name of the ipset
|
|
||||||
#
|
|
||||||
name = default
|
|
||||||
|
|
||||||
# Option: port
|
|
||||||
# Notes.: specifies port to monitor
|
|
||||||
# Values: [ NUM | STRING ] Default: ssh
|
|
||||||
#
|
|
||||||
port = ssh
|
|
||||||
|
|
||||||
# Option: protocol
|
|
||||||
# Notes.: internally used by config reader for interpolations.
|
|
||||||
# Values: [ tcp | udp | icmp | all ] Default: tcp
|
|
||||||
#
|
|
||||||
protocol = tcp
|
|
||||||
|
|
|
@ -15,8 +15,7 @@
|
||||||
|
|
||||||
[INCLUDES]
|
[INCLUDES]
|
||||||
|
|
||||||
before = iptables-blocktype.conf
|
before = iptables-common.conf
|
||||||
|
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
|
@ -25,13 +24,13 @@ before = iptables-blocktype.conf
|
||||||
# Values: CMD
|
# Values: CMD
|
||||||
#
|
#
|
||||||
actionstart = ipset create f2b-<name> hash:ip timeout <bantime>
|
actionstart = ipset create f2b-<name> hash:ip timeout <bantime>
|
||||||
iptables -I INPUT -m set --match-set f2b-<name> src -j <blocktype>
|
iptables -I <chain> -m set --match-set f2b-<name> src -j <blocktype>
|
||||||
|
|
||||||
# Option: actionstop
|
# Option: actionstop
|
||||||
# Notes.: command executed once at the end of Fail2Ban
|
# Notes.: command executed once at the end of Fail2Ban
|
||||||
# Values: CMD
|
# Values: CMD
|
||||||
#
|
#
|
||||||
actionstop = iptables -D INPUT -m set --match-set f2b-<name> src -j <blocktype>
|
actionstop = iptables -D <chain> -m set --match-set f2b-<name> src -j <blocktype>
|
||||||
ipset flush f2b-<name>
|
ipset flush f2b-<name>
|
||||||
ipset destroy f2b-<name>
|
ipset destroy f2b-<name>
|
||||||
|
|
||||||
|
@ -53,12 +52,8 @@ actionunban = ipset del f2b-<name> <ip> -exist
|
||||||
|
|
||||||
[Init]
|
[Init]
|
||||||
|
|
||||||
# Default name of the ipset
|
|
||||||
#
|
|
||||||
name = default
|
|
||||||
|
|
||||||
# Option: bantime
|
# Option: bantime
|
||||||
# Notes: specifies the bantime in seconds (handled internally rather than by fail2ban)
|
# Notes: specifies the bantime in seconds (handled internally rather than by fail2ban)
|
||||||
# Values: [ NUM ] Default: 600
|
# Values: [ NUM ] Default: 600
|
||||||
|
#
|
||||||
bantime = 600
|
bantime = 600
|
||||||
|
|
|
@ -15,8 +15,7 @@
|
||||||
|
|
||||||
[INCLUDES]
|
[INCLUDES]
|
||||||
|
|
||||||
before = iptables-blocktype.conf
|
before = iptables-common.conf
|
||||||
|
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
|
@ -25,13 +24,13 @@ before = iptables-blocktype.conf
|
||||||
# Values: CMD
|
# Values: CMD
|
||||||
#
|
#
|
||||||
actionstart = ipset create f2b-<name> hash:ip timeout <bantime>
|
actionstart = ipset create f2b-<name> hash:ip timeout <bantime>
|
||||||
iptables -I INPUT -p <protocol> -m multiport --dports <port> -m set --match-set f2b-<name> src -j <blocktype>
|
iptables -I <chain> -p <protocol> -m multiport --dports <port> -m set --match-set f2b-<name> src -j <blocktype>
|
||||||
|
|
||||||
# Option: actionstop
|
# Option: actionstop
|
||||||
# Notes.: command executed once at the end of Fail2Ban
|
# Notes.: command executed once at the end of Fail2Ban
|
||||||
# Values: CMD
|
# Values: CMD
|
||||||
#
|
#
|
||||||
actionstop = iptables -D INPUT -p <protocol> -m multiport --dports <port> -m set --match-set f2b-<name> src -j <blocktype>
|
actionstop = iptables -D <chain> -p <protocol> -m multiport --dports <port> -m set --match-set f2b-<name> src -j <blocktype>
|
||||||
ipset flush f2b-<name>
|
ipset flush f2b-<name>
|
||||||
ipset destroy f2b-<name>
|
ipset destroy f2b-<name>
|
||||||
|
|
||||||
|
@ -53,24 +52,8 @@ actionunban = ipset del f2b-<name> <ip> -exist
|
||||||
|
|
||||||
[Init]
|
[Init]
|
||||||
|
|
||||||
# Default name of the ipset
|
|
||||||
#
|
|
||||||
name = default
|
|
||||||
|
|
||||||
# Option: port
|
|
||||||
# Notes.: specifies port to monitor
|
|
||||||
# Values: [ NUM | STRING ] Default: ssh
|
|
||||||
#
|
|
||||||
port = ssh
|
|
||||||
|
|
||||||
# Option: protocol
|
|
||||||
# Notes.: internally used by config reader for interpolations.
|
|
||||||
# Values: [ tcp | udp | icmp | all ] Default: tcp
|
|
||||||
#
|
|
||||||
protocol = tcp
|
|
||||||
|
|
||||||
# Option: bantime
|
# Option: bantime
|
||||||
# Notes: specifies the bantime in seconds (handled internally rather than by fail2ban)
|
# Notes: specifies the bantime in seconds (handled internally rather than by fail2ban)
|
||||||
# Values: [ NUM ] Default: 600
|
# Values: [ NUM ] Default: 600
|
||||||
|
#
|
||||||
bantime = 600
|
bantime = 600
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
[INCLUDES]
|
[INCLUDES]
|
||||||
|
|
||||||
before = iptables-blocktype.conf
|
before = iptables-common.conf
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
|
@ -60,24 +60,3 @@ actionunban = iptables -D f2b-<name> -s <ip> -j f2b-<name>-log
|
||||||
|
|
||||||
[Init]
|
[Init]
|
||||||
|
|
||||||
# Default name of the chain
|
|
||||||
#
|
|
||||||
name = default
|
|
||||||
|
|
||||||
# Option: port
|
|
||||||
# Notes.: specifies port to monitor
|
|
||||||
# Values: [ NUM | STRING ] Default:
|
|
||||||
#
|
|
||||||
port = ssh
|
|
||||||
|
|
||||||
# Option: protocol
|
|
||||||
# Notes.: internally used by config reader for interpolations.
|
|
||||||
# Values: [ tcp | udp | icmp | all ] Default: tcp
|
|
||||||
#
|
|
||||||
protocol = tcp
|
|
||||||
|
|
||||||
# Option: chain
|
|
||||||
# Notes specifies the iptables chain to which the fail2ban rules should be
|
|
||||||
# added
|
|
||||||
# Values: STRING Default: INPUT
|
|
||||||
chain = INPUT
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
[INCLUDES]
|
[INCLUDES]
|
||||||
|
|
||||||
before = iptables-blocktype.conf
|
before = iptables-common.conf
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
|
@ -50,24 +50,3 @@ actionunban = iptables -D f2b-<name> -s <ip> -j <blocktype>
|
||||||
|
|
||||||
[Init]
|
[Init]
|
||||||
|
|
||||||
# Default name of the chain
|
|
||||||
#
|
|
||||||
name = default
|
|
||||||
|
|
||||||
# Option: port
|
|
||||||
# Notes.: specifies port to monitor
|
|
||||||
# Values: [ NUM | STRING ] Default:
|
|
||||||
#
|
|
||||||
port = ssh
|
|
||||||
|
|
||||||
# Option: protocol
|
|
||||||
# Notes.: internally used by config reader for interpolations.
|
|
||||||
# Values: [ tcp | udp | icmp | all ] Default: tcp
|
|
||||||
#
|
|
||||||
protocol = tcp
|
|
||||||
|
|
||||||
# Option: chain
|
|
||||||
# Notes specifies the iptables chain to which the fail2ban rules should be
|
|
||||||
# added
|
|
||||||
# Values: STRING Default: INPUT
|
|
||||||
chain = INPUT
|
|
||||||
|
|
|
@ -8,8 +8,7 @@
|
||||||
|
|
||||||
[INCLUDES]
|
[INCLUDES]
|
||||||
|
|
||||||
before = iptables-blocktype.conf
|
before = iptables-common.conf
|
||||||
|
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
|
@ -53,24 +52,3 @@ actionunban = iptables -D f2b-<name> -s <ip> -j <blocktype>
|
||||||
|
|
||||||
[Init]
|
[Init]
|
||||||
|
|
||||||
# Default name of the chain
|
|
||||||
#
|
|
||||||
name = default
|
|
||||||
|
|
||||||
# Option: port
|
|
||||||
# Notes.: specifies port to monitor
|
|
||||||
# Values: [ NUM | STRING ] Default:
|
|
||||||
#
|
|
||||||
port = ssh
|
|
||||||
|
|
||||||
# Option: protocol
|
|
||||||
# Notes.: internally used by config reader for interpolations.
|
|
||||||
# Values: [ tcp | udp | icmp | all ] Default: tcp
|
|
||||||
#
|
|
||||||
protocol = tcp
|
|
||||||
|
|
||||||
# Option: chain
|
|
||||||
# Notes specifies the iptables chain to which the fail2ban rules should be
|
|
||||||
# added
|
|
||||||
# Values: STRING Default: INPUT
|
|
||||||
chain = INPUT
|
|
||||||
|
|
|
@ -6,8 +6,7 @@
|
||||||
|
|
||||||
[INCLUDES]
|
[INCLUDES]
|
||||||
|
|
||||||
before = iptables-blocktype.conf
|
before = iptables-common.conf
|
||||||
|
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
|
@ -33,14 +32,14 @@ before = iptables-blocktype.conf
|
||||||
# own rules. The 3600 second timeout is independent and acts as a
|
# own rules. The 3600 second timeout is independent and acts as a
|
||||||
# safeguard in case the fail2ban process dies unexpectedly. The
|
# safeguard in case the fail2ban process dies unexpectedly. The
|
||||||
# shorter of the two timeouts actually matters.
|
# shorter of the two timeouts actually matters.
|
||||||
actionstart = if [ `id -u` -eq 0 ];then iptables -I INPUT -m recent --update --seconds 3600 --name f2b-<name> -j <blocktype>;fi
|
actionstart = if [ `id -u` -eq 0 ];then iptables -I <chain> -m recent --update --seconds 3600 --name f2b-<name> -j <blocktype>;fi
|
||||||
|
|
||||||
# Option: actionstop
|
# Option: actionstop
|
||||||
# Notes.: command executed once at the end of Fail2Ban
|
# Notes.: command executed once at the end of Fail2Ban
|
||||||
# Values: CMD
|
# Values: CMD
|
||||||
#
|
#
|
||||||
actionstop = echo / > /proc/net/xt_recent/f2b-<name>
|
actionstop = echo / > /proc/net/xt_recent/f2b-<name>
|
||||||
if [ `id -u` -eq 0 ];then iptables -D INPUT -m recent --update --seconds 3600 --name f2b-<name> -j <blocktype>;fi
|
if [ `id -u` -eq 0 ];then iptables -D <chain> -m recent --update --seconds 3600 --name f2b-<name> -j <blocktype>;fi
|
||||||
|
|
||||||
# Option: actioncheck
|
# Option: actioncheck
|
||||||
# Notes.: command executed once before each actionban command
|
# Notes.: command executed once before each actionban command
|
||||||
|
@ -66,12 +65,3 @@ actionunban = echo -<ip> > /proc/net/xt_recent/f2b-<name>
|
||||||
|
|
||||||
[Init]
|
[Init]
|
||||||
|
|
||||||
# Default name of the chain
|
|
||||||
#
|
|
||||||
name = default
|
|
||||||
|
|
||||||
# Option: protocol
|
|
||||||
# Notes.: internally used by config reader for interpolations.
|
|
||||||
# Values: [ tcp | udp | icmp | all ] Default: tcp
|
|
||||||
#
|
|
||||||
protocol = tcp
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
[INCLUDES]
|
[INCLUDES]
|
||||||
|
|
||||||
before = iptables-blocktype.conf
|
before = iptables-common.conf
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
|
@ -50,24 +50,3 @@ actionunban = iptables -D f2b-<name> -s <ip> -j <blocktype>
|
||||||
|
|
||||||
[Init]
|
[Init]
|
||||||
|
|
||||||
# Default name of the chain
|
|
||||||
#
|
|
||||||
name = default
|
|
||||||
|
|
||||||
# Option: port
|
|
||||||
# Notes.: specifies port to monitor
|
|
||||||
# Values: [ NUM | STRING ] Default:
|
|
||||||
#
|
|
||||||
port = ssh
|
|
||||||
|
|
||||||
# Option: protocol
|
|
||||||
# Notes.: internally used by config reader for interpolations.
|
|
||||||
# Values: [ tcp | udp | icmp | all ] Default: tcp
|
|
||||||
#
|
|
||||||
protocol = tcp
|
|
||||||
|
|
||||||
# Option: chain
|
|
||||||
# Notes specifies the iptables chain to which the fail2ban rules should be
|
|
||||||
# added
|
|
||||||
# Values: STRING Default: INPUT
|
|
||||||
chain = INPUT
|
|
||||||
|
|
|
@ -9,7 +9,9 @@
|
||||||
# connections. So if the attempter goes on trying using the same connection
|
# connections. So if the attempter goes on trying using the same connection
|
||||||
# he could even log in. In order to get the same behavior of the iptable
|
# he could even log in. In order to get the same behavior of the iptable
|
||||||
# action (so that the ban is immediate) the /etc/shorewall/shorewall.conf
|
# action (so that the ban is immediate) the /etc/shorewall/shorewall.conf
|
||||||
# file should me modified with "BLACKLISTNEWONLY=No".
|
# file should me modified with "BLACKLISTNEWONLY=No". Note that as of
|
||||||
|
# Shorewall 4.5.13 BLACKLISTNEWONLY is deprecated; however the equivalent
|
||||||
|
# of BLACKLISTNEWONLY=No can now be achieved by setting BLACKLIST="ALL".
|
||||||
#
|
#
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
|
@ -45,7 +45,7 @@ messages['ban'] = {}
|
||||||
messages['ban']['head'] = \
|
messages['ban']['head'] = \
|
||||||
"""Hi,
|
"""Hi,
|
||||||
|
|
||||||
The IP %(ip)s has just been banned for %(bantime)s seconds
|
The IP %(ip)s has just been banned for %(bantime)i seconds
|
||||||
by Fail2Ban after %(failures)i attempts against %(jailname)s.
|
by Fail2Ban after %(failures)i attempts against %(jailname)s.
|
||||||
"""
|
"""
|
||||||
messages['ban']['tail'] = \
|
messages['ban']['tail'] = \
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
# Fail2Ban configuration file for Bytemark Symbiosis firewall
|
||||||
|
#
|
||||||
|
# Author: Yaroslav Halchenko
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
[Definition]
|
||||||
|
|
||||||
|
# Option: actionstart
|
||||||
|
# Notes.: command executed once at the start of Fail2Ban.
|
||||||
|
# Values: CMD
|
||||||
|
#
|
||||||
|
actionstart =
|
||||||
|
|
||||||
|
# Option: actionstop
|
||||||
|
# Notes.: command executed once at the end of Fail2Ban
|
||||||
|
# Values: CMD
|
||||||
|
#
|
||||||
|
actionstop =
|
||||||
|
|
||||||
|
# Option: actioncheck
|
||||||
|
# Notes.: command executed once before each actionban command
|
||||||
|
# Values: CMD
|
||||||
|
#
|
||||||
|
actioncheck = iptables -n -L <chain>
|
||||||
|
|
||||||
|
# Option: actionban
|
||||||
|
# Notes.: command executed when banning an IP.
|
||||||
|
# Values: CMD
|
||||||
|
#
|
||||||
|
actionban = echo 'all' >| /etc/symbiosis/firewall/blacklist.d/<ip>.auto
|
||||||
|
iptables -I <chain> 1 -s <ip> -j <blocktype>
|
||||||
|
|
||||||
|
# Option: actionunban
|
||||||
|
# Notes.: command executed when unbanning an IP.
|
||||||
|
# Values: CMD
|
||||||
|
#
|
||||||
|
actionunban = rm -f /etc/symbiosis/firewall/blacklist.d/<ip>.auto
|
||||||
|
iptables -D <chain> -s <ip> -j <blocktype> || :
|
||||||
|
|
||||||
|
[Init]
|
||||||
|
|
||||||
|
# Option: chain
|
||||||
|
# Notes specifies the iptables chain to which the fail2ban rules should be
|
||||||
|
# added to. blacklist is a chain initiated by symbiosis firewall.
|
||||||
|
# Values: STRING Default: blacklist
|
||||||
|
chain = blacklist
|
||||||
|
|
||||||
|
# Option: blocktype
|
||||||
|
# Note: This is to match default symbiosis firewall type for blacklisted IPs
|
||||||
|
# Values: STRING
|
||||||
|
blocktype = DROP
|
|
@ -1,9 +1,9 @@
|
||||||
# Fail2Ban action configuration file for ufw
|
# Fail2Ban action configuration file for ufw
|
||||||
#
|
#
|
||||||
# You are required to run "ufw enable" before this will have an effect.
|
# You are required to run "ufw enable" before this will have any effect.
|
||||||
#
|
#
|
||||||
# The insert position should be approprate to block the required traffic.
|
# The insert position should be appropriate to block the required traffic.
|
||||||
# A number after an allow rule to the application won't be much use.
|
# A number after an allow rule to the application won't be of much use.
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ actionunban = [ -n "<application>" ] && app="app <application>" ; ufw delete <bl
|
||||||
|
|
||||||
[Init]
|
[Init]
|
||||||
# Option: insertpos
|
# Option: insertpos
|
||||||
# Notes.: The postition number in the firewall list to insert the block rule
|
# Notes.: The position number in the firewall list to insert the block rule
|
||||||
insertpos = 1
|
insertpos = 1
|
||||||
|
|
||||||
# Option: blocktype
|
# Option: blocktype
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
# password incorrectly.
|
# password incorrectly.
|
||||||
# * For filters that have a low likelihood of receiving human errors
|
# * For filters that have a low likelihood of receiving human errors
|
||||||
#
|
#
|
||||||
# DEPENDANCIES:
|
# DEPENDENCIES:
|
||||||
#
|
#
|
||||||
# This requires the dig command from bind-utils
|
# This requires the dig command from bind-utils
|
||||||
#
|
#
|
||||||
|
|
|
@ -52,7 +52,7 @@ pidfile = /var/run/fail2ban/fail2ban.pid
|
||||||
# Options: dbfile
|
# Options: dbfile
|
||||||
# Notes.: Set the file for the fail2ban persistent data to be stored.
|
# Notes.: Set the file for the fail2ban persistent data to be stored.
|
||||||
# A value of ":memory:" means database is only stored in memory
|
# A value of ":memory:" means database is only stored in memory
|
||||||
# and data is lost once fail2ban is stops.
|
# and data is lost when fail2ban is stopped.
|
||||||
# A value of "None" disables the database.
|
# A value of "None" disables the database.
|
||||||
# Values: [ None :memory: FILE ] Default: /var/lib/fail2ban/fail2ban.sqlite3
|
# Values: [ None :memory: FILE ] Default: /var/lib/fail2ban/fail2ban.sqlite3
|
||||||
dbfile = /var/lib/fail2ban/fail2ban.sqlite3
|
dbfile = /var/lib/fail2ban/fail2ban.sqlite3
|
||||||
|
|
|
@ -10,7 +10,7 @@ before = apache-common.conf
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
|
|
||||||
failregex = ^%(_apache_error_client)s (AH01797: )?client denied by server configuration: (uri )?\S*(, referer: \S+)?\s*$
|
failregex = ^%(_apache_error_client)s (AH(01797|01630): )?client denied by server configuration: (uri )?\S*(, referer: \S+)?\s*$
|
||||||
^%(_apache_error_client)s (AH01617: )?user .*? authentication failure for "\S*": Password Mismatch(, referer: \S+)?$
|
^%(_apache_error_client)s (AH01617: )?user .*? authentication failure for "\S*": Password Mismatch(, referer: \S+)?$
|
||||||
^%(_apache_error_client)s (AH01618: )?user .*? not found(: )?\S*(, referer: \S+)?\s*$
|
^%(_apache_error_client)s (AH01618: )?user .*? not found(: )?\S*(, referer: \S+)?\s*$
|
||||||
^%(_apache_error_client)s (AH01614: )?client used wrong authentication scheme: \S*(, referer: \S+)?\s*$
|
^%(_apache_error_client)s (AH01614: )?client used wrong authentication scheme: \S*(, referer: \S+)?\s*$
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
# Fail2Ban filter to block web requests containing custom headers attempting to exploit the shellshock bug
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
[INCLUDES]
|
||||||
|
|
||||||
|
# overwrite with apache-common.local if _apache_error_client is incorrect.
|
||||||
|
before = apache-common.conf
|
||||||
|
|
||||||
|
[Definition]
|
||||||
|
|
||||||
|
failregex = ^%(_apache_error_client)s (AH01215: )?/bin/(ba)?sh: warning: HTTP_.*?: ignoring function definition attempt(, referer: \S+)?\s*$
|
||||||
|
^%(_apache_error_client)s (AH01215: )?/bin/(ba)?sh: error importing function definition for `HTTP_.*?'(, referer: \S+)?\s*$
|
||||||
|
|
||||||
|
ignoreregex =
|
||||||
|
|
||||||
|
|
||||||
|
# DEV Notes:
|
||||||
|
#
|
||||||
|
# https://wiki.apache.org/httpd/ListOfErrors for apache error IDs
|
||||||
|
#
|
||||||
|
# example log lines:
|
||||||
|
# [Thu Sep 25 09:27:18.813902 2014] [cgi:error] [pid 16860] [client 89.207.132.76:59635] AH01215: /bin/bash: warning: HTTP_TEST: ignoring function definition attempt
|
||||||
|
# [Thu Sep 25 09:29:56.141832 2014] [cgi:error] [pid 16864] [client 162.247.73.206:41273] AH01215: /bin/bash: error importing function definition for `HTTP_TEST'
|
||||||
|
#
|
||||||
|
# Author: Eugene Hopkinson (riot@riot.so)
|
|
@ -12,7 +12,8 @@ before = common.conf
|
||||||
|
|
||||||
_daemon = courieresmtpd
|
_daemon = courieresmtpd
|
||||||
|
|
||||||
failregex = ^%(__prefix_line)serror,relay=<HOST>,.*: 550 User unknown\.$
|
failregex = ^%(__prefix_line)serror,relay=<HOST>,.*: 550 User (<.*> )?unknown\.?$
|
||||||
|
^%(__prefix_line)serror,relay=<HOST>,msg="535 Authentication failed\.",cmd:( AUTH \S+)?( [0-9a-zA-Z\+/=]+)?$
|
||||||
|
|
||||||
ignoreregex =
|
ignoreregex =
|
||||||
|
|
||||||
|
|
|
@ -11,9 +11,9 @@ before = common.conf
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
_daemon = (?:cyrus/)?(?:imapd?|pop3d?)
|
_daemon = (?:cyrus/)?(?:imap(d|s)?|pop3(d|s)?)
|
||||||
|
|
||||||
failregex = ^%(__prefix_line)sbadlogin: \S+ ?\[<HOST>\] \S+ .*?\[?SASL\(-13\): authentication failure: .*\]?$
|
failregex = ^%(__prefix_line)sbadlogin: \S+ ?\[<HOST>\] \S+ .*?\[?SASL\(-13\): (authentication failure|user not found): .*\]?$
|
||||||
|
|
||||||
ignoreregex =
|
ignoreregex =
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Fail2Ban configuration file for Directadmin
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
[INCLUDES]
|
||||||
|
|
||||||
|
before = common.conf
|
||||||
|
|
||||||
|
[Definition]
|
||||||
|
|
||||||
|
failregex = ^: \'<HOST>\' \d{1,3} failed login attempt(s)?. \s*
|
||||||
|
|
||||||
|
ignoreregex =
|
||||||
|
|
||||||
|
[Init]
|
||||||
|
datepattern = ^%%Y:%%m:%%d-%%H:%%M:%%S
|
||||||
|
|
||||||
|
#
|
||||||
|
# Requires Directadmin v1.45.3 or higher. http://www.directadmin.com/features.php?id=1590
|
||||||
|
#
|
||||||
|
# Author: Cyril Roos
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Fail2Ban filter for monit.conf, looks for failed access attempts
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
[Definition]
|
||||||
|
|
||||||
|
failregex = ^\[[A-Z]+\s+\]\s*error\s*:\s*Warning:\s+Client '<HOST>' supplied unknown user '\w+' accessing monit httpd$
|
||||||
|
^\[[A-Z]+\s+\]\s*error\s*:\s*Warning:\s+Client '<HOST>' supplied wrong password for user '\w+' accessing monit httpd$
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
|
|
||||||
failregex = ^ \[error\] \d+#\d+: \*\d+ user "\S+":? (password mismatch|was not found in ".*"), client: <HOST>, server: \S+, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"\s*$
|
failregex = ^ \[error\] \d+#\d+: \*\d+ user "\S+":? (password mismatch|was not found in ".*"), client: <HOST>, server: \S*, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"(, referrer: "\S+")?\s*$
|
||||||
|
|
||||||
ignoreregex =
|
ignoreregex =
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
# Fail2Ban configuration file
|
||||||
|
# for Oracle IMS with XML logging
|
||||||
|
#
|
||||||
|
# Author: Joel Snyder/jms@opus1.com/2014-June-01
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
[INCLUDES]
|
||||||
|
|
||||||
|
# Read common prefixes.
|
||||||
|
# If any customizations available -- read them from
|
||||||
|
# common.local
|
||||||
|
before = common.conf
|
||||||
|
|
||||||
|
|
||||||
|
[Definition]
|
||||||
|
|
||||||
|
# Option: failregex
|
||||||
|
# Notes.: regex to match the password failures messages
|
||||||
|
# in the logfile. The host must be matched by a
|
||||||
|
# group named "host". The tag "<HOST>" can
|
||||||
|
# be used for standard IP/hostname matching and is
|
||||||
|
# only an alias for
|
||||||
|
# (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)
|
||||||
|
# Values: TEXT
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# CONFIGURATION REQUIREMENTS FOR ORACLE IMS v6 and ABOVE:
|
||||||
|
#
|
||||||
|
# In OPTION.DAT you must have LOG_FORMAT=4 and
|
||||||
|
# bit 5 of LOG_CONNECTION must be set.
|
||||||
|
#
|
||||||
|
# Many of these sub-fields are optional and can be turned on and off
|
||||||
|
# by the system manager. We need the "tr" field
|
||||||
|
# (transport information (present if bit 5 of LOG_CONNECTION is
|
||||||
|
# set and transport information is available)).
|
||||||
|
# "di" should be there by default if you have LOG_FORMAT=4.
|
||||||
|
# Do not use "mi" as this is not included by default.
|
||||||
|
#
|
||||||
|
# Typical line IF YOU ARE USING TAGGING ! ! ! is:
|
||||||
|
# <co ts="2014-06-02T09:45:50.29" pi="123f.3f8.4397"
|
||||||
|
# sc="tcp_local" dr="+" ac="U"
|
||||||
|
# tr="TCP|192.245.12.223|25|151.1.71.144|59762" ap="SMTP"
|
||||||
|
# mi="Bad password"
|
||||||
|
# us="01ko8hqnoif09qx0np@imap.opus1.com"
|
||||||
|
# di="535 5.7.8 Bad username or password (Authentication failed)."/>
|
||||||
|
# Format is generally documented in the PORT_ACCESS mapping
|
||||||
|
# at http://docs.oracle.com/cd/E19563-01/819-4428/bgaur/index.html
|
||||||
|
#
|
||||||
|
# All that would be on one line.
|
||||||
|
# Note that you MUST have LOG_FORMAT=4 for this to work!
|
||||||
|
#
|
||||||
|
|
||||||
|
failregex = ^.*tr="[A-Z]+\|[0-9.]+\|\d+\|<HOST>\|\d+" ap="[^"]*" mi="Bad password" us="[^"]*" di="535 5.7.8 Bad username or password( \(Authentication failed\))?\."/>$
|
||||||
|
|
||||||
|
# Option: ignoreregex
|
||||||
|
# Notes.: regex to ignore. If this regex matches, the line is ignored.
|
||||||
|
# Values: TEXT
|
||||||
|
#
|
||||||
|
ignoreregex =
|
|
@ -7,8 +7,15 @@ before = common.conf
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
_daemon = postfix/smtpd
|
_daemon = postfix/(submission/)?smtp(d|s)
|
||||||
|
|
||||||
failregex = ^%(__prefix_line)swarning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*={0,2})?\s*$
|
failregex = ^%(__prefix_line)swarning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*={0,2})?\s*$
|
||||||
|
|
||||||
|
ignoreregex =
|
||||||
|
|
||||||
|
[Init]
|
||||||
|
|
||||||
|
journalmatch = _SYSTEMD_UNIT=postfix.service
|
||||||
|
|
||||||
|
|
||||||
# Author: Yaroslav Halchenko
|
# Author: Yaroslav Halchenko
|
||||||
|
|
|
@ -10,7 +10,7 @@ before = common.conf
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
_daemon = postfix/smtpd
|
_daemon = postfix/(submission/)?smtp(d|s)
|
||||||
|
|
||||||
failregex = ^%(__prefix_line)sNOQUEUE: reject: RCPT from \S+\[<HOST>\]: 554 5\.7\.1 .*$
|
failregex = ^%(__prefix_line)sNOQUEUE: reject: RCPT from \S+\[<HOST>\]: 554 5\.7\.1 .*$
|
||||||
^%(__prefix_line)sNOQUEUE: reject: RCPT from \S+\[<HOST>\]: 450 4\.7\.1 : Helo command rejected: Host not found; from=<> to=<> proto=ESMTP helo= *$
|
^%(__prefix_line)sNOQUEUE: reject: RCPT from \S+\[<HOST>\]: 450 4\.7\.1 : Helo command rejected: Host not found; from=<> to=<> proto=ESMTP helo= *$
|
||||||
|
|
|
@ -15,7 +15,7 @@ before = common.conf
|
||||||
_daemon = pure-ftpd
|
_daemon = pure-ftpd
|
||||||
|
|
||||||
# Error message specified in multiple languages
|
# Error message specified in multiple languages
|
||||||
__errmsg = (?:<EFBFBD>ϥΪ<EFBFBD>\[.*\]<5D><><EFBFBD>ҥ<EFBFBD><D2A5><EFBFBD>|ʹ<><CAB9><EFBFBD><EFBFBD>\[.*\]<5D><>֤ʧ<D6A4><CAA7>|\[.*\] kullan<61>c<EFBFBD>s<EFBFBD> i<>in giri<72> hatal<61>|<7C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> \[.*\]|Godkjennelse mislyktes for \[.*\]|Beh<65>righetskontroll misslyckas f<>r anv<6E>ndare \[.*\]|Autentifikacia uzivatela zlyhala \[.*\]|Autentificare esuata pentru utilizatorul \[.*\]|Autentica<63><61>o falhou para usu<73>rio \[.*\]|Autentyfikacja nie powiod<6F>a si<73> dla u<>ytkownika \[.*\]|Autorisatie faalde voor gebruiker \[.*\]|\[.*\] <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>|Autenticazione falita per l'utente \[.*\]|Azonos<6F>t<EFBFBD>s sikertelen \[.*\] felhaszn<7A>l<EFBFBD>nak|\[.*\] c'est un batard, il connait pas son code|Erreur d'authentification pour l'utilisateur \[.*\]|Autentificaci<63>n fallida para el usuario \[.*\]|Authentication failed for user \[.*\]|Authentifizierung fehlgeschlagen f<>r Benutzer \[.*\].|Godkendelse mislykkedes for \[.*\]|Autentifikace u<>ivatele selhala \[.*\])
|
__errmsg = (?:Godkendelse mislykkedes for \[.*\]|Authentifizierung fehlgeschlagen für Benutzer \[.*\].|Authentication failed for user \[.*\]|Autentificación fallida para el usuario \[.*\]|\[.*\] c'est un batard, il connait pas son code|Erreur d'authentification pour l'utilisateur \[.*\]|Azonosítás sikertelen \[.*\] felhasználónak|Autenticazione falita per l'utente \[.*\]|Autorisatie faalde voor gebruiker \[.*\]|Godkjennelse mislyktes for \[.*\]|\[.*\] kullanýcýsý için giriþ hatalý|Autenticação falhou para usuário \[.*\]|Autentificare esuata pentru utilizatorul \[.*\]|Autentifikace uživatele selhala \[.*\]|Autentyfikacja nie powiodła się dla użytkownika \[.*\]|Autentifikacia uzivatela zlyhala \[.*\]|Behörighetskontroll misslyckas för användare \[.*\]|Авторизация не удалась пользователю \[.*\]|\[.*\] 嶸盪 檣隸 褒ぬ|妏蚚氪\[.*\]桄痐囮啖|使用者\[.*\]驗證失敗)
|
||||||
|
|
||||||
failregex = ^%(__prefix_line)s\(.+?@<HOST>\) \[WARNING\] %(__errmsg)s\s*$
|
failregex = ^%(__prefix_line)s\(.+?@<HOST>\) \[WARNING\] %(__errmsg)s\s*$
|
||||||
|
|
||||||
|
@ -24,7 +24,13 @@ ignoreregex =
|
||||||
# Author: Cyril Jaquier
|
# Author: Cyril Jaquier
|
||||||
# Modified: Yaroslav Halchenko for pure-ftpd
|
# Modified: Yaroslav Halchenko for pure-ftpd
|
||||||
# Documentation thanks to Blake on http://www.fail2ban.org/wiki/index.php?title=Fail2ban:Community_Portal
|
# Documentation thanks to Blake on http://www.fail2ban.org/wiki/index.php?title=Fail2ban:Community_Portal
|
||||||
|
# UTF-8 editing and mechanism thanks to Johannes Weberhofer
|
||||||
#
|
#
|
||||||
# Only logs to syslog though facility can be changed configuration file/command line
|
# Only logs to syslog though facility can be changed configuration file/command line
|
||||||
#
|
#
|
||||||
# fgrep -r MSG_AUTH_FAILED_LOG pure-ftpd-1.0.36/src
|
# To get messages in the right encoding:
|
||||||
|
# grep MSG_AUTH_FAILED_LOG pure-ftpd-1.0.36/src/messages_[defhint]* | grep -Po '".?"' | recode latin1..utf-8 | tr -d '"' > messages
|
||||||
|
# grep MSG_AUTH_FAILED_LOG pure-ftpd-1.0.36/src/messages_[pr][to] | grep -Po '".?"' | recode latin1..utf-8 | tr -d '"' >> messages
|
||||||
|
# grep MSG_AUTH_FAILED_LOG pure-ftpd-1.0.36/src/messages_[cps][slkv] | grep -Po '".?"' | recode latin2..utf-8 | tr -d '"' >> messages
|
||||||
|
# grep MSG_AUTH_FAILED_LOG pure-ftpd-1.0.36/src/messages_ru | grep -Po '".?"' | recode KOI8-R..utf-8 | tr -d '"' >> messages
|
||||||
|
# grep MSG_AUTH_FAILED_LOG pure-ftpd-1.0.36/src/messages_[kz] | grep -Po '".*?"' | tr -d '"' | recode big5..utf-8 >> messages
|
||||||
|
|
|
@ -21,13 +21,13 @@ before = common.conf
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
_daemon = fail2ban\.server\.actions
|
_daemon = fail2ban\.actions\s*
|
||||||
|
|
||||||
# The name of the jail that this filter is used for. In jail.conf, name the
|
# The name of the jail that this filter is used for. In jail.conf, name the
|
||||||
# jail using this filter 'recidive', or change this line!
|
# jail using this filter 'recidive', or change this line!
|
||||||
_jailname = recidive
|
_jailname = recidive
|
||||||
|
|
||||||
failregex = ^(%(__prefix_line)s| %(_daemon)s%(__pid_re)s?:\s+)WARNING\s+\[(?!%(_jailname)s\])(?:.*)\]\s+Ban\s+<HOST>\s*$
|
failregex = ^(%(__prefix_line)s| %(_daemon)s%(__pid_re)s?:\s+)NOTICE\s+\[(?!%(_jailname)s\])(?:.*)\]\s+Ban\s+<HOST>\s*$
|
||||||
|
|
||||||
[Init]
|
[Init]
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ before = common.conf
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
|
|
||||||
_deamon = (?:cyrus/)?(?:tim)?sieved?
|
_daemon = (?:cyrus/)?(?:tim)?sieved?
|
||||||
|
|
||||||
failregex = ^%(__prefix_line)sbadlogin: \S+ ?\[<HOST>\] \S+ authentication failure$
|
failregex = ^%(__prefix_line)sbadlogin: \S+ ?\[<HOST>\] \S+ authentication failure$
|
||||||
|
|
||||||
|
|
|
@ -30,9 +30,9 @@ failregex = ^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|erro
|
||||||
^%(__prefix_line)sReceived disconnect from <HOST>: 3: \S+: Auth fail$
|
^%(__prefix_line)sReceived disconnect from <HOST>: 3: \S+: Auth fail$
|
||||||
^%(__prefix_line)sUser .+ from <HOST> not allowed because a group is listed in DenyGroups\s*$
|
^%(__prefix_line)sUser .+ from <HOST> not allowed because a group is listed in DenyGroups\s*$
|
||||||
^%(__prefix_line)sUser .+ from <HOST> not allowed because none of user's groups are listed in AllowGroups\s*$
|
^%(__prefix_line)sUser .+ from <HOST> not allowed because none of user's groups are listed in AllowGroups\s*$
|
||||||
^(?P<__prefix>%(__prefix_line)s)User .+ not allowed because account is locked<SKIPLINES>(?P=__prefix)(?:error: )?Received disconnect from <HOST>: 11: Bye Bye \[preauth\]$
|
^(?P<__prefix>%(__prefix_line)s)User .+ not allowed because account is locked<SKIPLINES>(?P=__prefix)(?:error: )?Received disconnect from <HOST>: 11: .+ \[preauth\]$
|
||||||
^(?P<__prefix>%(__prefix_line)s)Disconnecting: Too many authentication failures for .+? \[preauth\]<SKIPLINES>(?P=__prefix)(?:error: )?Connection closed by <HOST> \[preauth\]$
|
^(?P<__prefix>%(__prefix_line)s)Disconnecting: Too many authentication failures for .+? \[preauth\]<SKIPLINES>(?P=__prefix)(?:error: )?Connection closed by <HOST> \[preauth\]$
|
||||||
^(?P<__prefix>%(__prefix_line)s)Connection from <HOST> port \d+<SKIPLINES>(?P=__prefix)Disconnecting: Too many authentication failures for .+? \[preauth\]$
|
^(?P<__prefix>%(__prefix_line)s)Connection from <HOST> port \d+(?: on \S+ port \d+)?<SKIPLINES>(?P=__prefix)Disconnecting: Too many authentication failures for .+? \[preauth\]$
|
||||||
|
|
||||||
ignoreregex =
|
ignoreregex =
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#
|
#
|
||||||
# YOU SHOULD NOT MODIFY THIS FILE.
|
# YOU SHOULD NOT MODIFY THIS FILE.
|
||||||
#
|
#
|
||||||
# It will probably be overwitten or improved in a distribution update.
|
# It will probably be overwritten or improved in a distribution update.
|
||||||
#
|
#
|
||||||
# Provide customizations in a jail.local file or a jail.d/customisation.local.
|
# Provide customizations in a jail.local file or a jail.d/customisation.local.
|
||||||
# For example to change the default bantime for all jails and to enable the
|
# For example to change the default bantime for all jails and to enable the
|
||||||
|
@ -151,22 +151,22 @@ port = 0:65535
|
||||||
banaction = iptables-multiport
|
banaction = iptables-multiport
|
||||||
|
|
||||||
# The simplest action to take: ban only
|
# The simplest action to take: ban only
|
||||||
action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
|
action_ = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
|
||||||
|
|
||||||
# ban & send an e-mail with whois report to the destemail.
|
# ban & send an e-mail with whois report to the destemail.
|
||||||
action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
|
action_mw = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
|
||||||
%(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]
|
%(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]
|
||||||
|
|
||||||
# ban & send an e-mail with whois report and relevant log lines
|
# ban & send an e-mail with whois report and relevant log lines
|
||||||
# to the destemail.
|
# to the destemail.
|
||||||
action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
|
action_mwl = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
|
||||||
%(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]
|
%(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]
|
||||||
|
|
||||||
# See the IMPORTANT note in action.d/xarf-login-attack for when to use this action
|
# See the IMPORTANT note in action.d/xarf-login-attack for when to use this action
|
||||||
#
|
#
|
||||||
# ban & send a xarf e-mail to abuse contact of IP address and include relevant log lines
|
# ban & send a xarf e-mail to abuse contact of IP address and include relevant log lines
|
||||||
# to the destemail.
|
# to the destemail.
|
||||||
action_xarf = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
|
action_xarf = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
|
||||||
xarf-login-attack[service=%(__name__)s, sender="%(sender)s", logpath=%(logpath)s, port="%(port)s"]
|
xarf-login-attack[service=%(__name__)s, sender="%(sender)s", logpath=%(logpath)s, port="%(port)s"]
|
||||||
|
|
||||||
|
|
||||||
|
@ -283,6 +283,11 @@ port = http,https
|
||||||
logpath = %(apache_error_log)s
|
logpath = %(apache_error_log)s
|
||||||
maxretry = 2
|
maxretry = 2
|
||||||
|
|
||||||
|
[apache-shellshock]
|
||||||
|
|
||||||
|
port = http,https
|
||||||
|
logpath = $(apache_error_log)s
|
||||||
|
maxretry = 1
|
||||||
|
|
||||||
[nginx-http-auth]
|
[nginx-http-auth]
|
||||||
|
|
||||||
|
@ -366,11 +371,17 @@ maxretry = 5
|
||||||
port = http,https
|
port = http,https
|
||||||
logpath = /var/log/tomcat*/catalina.out
|
logpath = /var/log/tomcat*/catalina.out
|
||||||
|
|
||||||
|
[monit]
|
||||||
|
#Ban clients brute-forcing the monit gui login
|
||||||
|
filter = monit
|
||||||
|
port = 2812
|
||||||
|
logpath = /var/log/monit
|
||||||
|
|
||||||
|
|
||||||
[webmin-auth]
|
[webmin-auth]
|
||||||
|
|
||||||
port = 10000
|
port = 10000
|
||||||
logpath = /var/log/auth.log
|
logpath = %(syslog_authpriv)s
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -423,7 +434,7 @@ maxretry = 6
|
||||||
|
|
||||||
[vsftpd]
|
[vsftpd]
|
||||||
# or overwrite it in jails.local to be
|
# or overwrite it in jails.local to be
|
||||||
# logpath = /var/log/auth.log
|
# logpath = %(syslog_authpriv)s
|
||||||
# if you want to rely on PAM failed login attempts
|
# if you want to rely on PAM failed login attempts
|
||||||
# vsftpd's failregex should match both of those formats
|
# vsftpd's failregex should match both of those formats
|
||||||
port = ftp,ftp-data,ftps,ftps-data
|
port = ftp,ftp-data,ftps,ftps-data
|
||||||
|
@ -495,13 +506,13 @@ logpath = %(solidpop3d_log)s
|
||||||
[exim]
|
[exim]
|
||||||
|
|
||||||
port = smtp,465,submission
|
port = smtp,465,submission
|
||||||
logpath = /var/log/exim/mainlog
|
logpath = %(exim_main_log)s
|
||||||
|
|
||||||
|
|
||||||
[exim-spam]
|
[exim-spam]
|
||||||
|
|
||||||
port = smtp,465,submission
|
port = smtp,465,submission
|
||||||
logpath = /var/log/exim/mainlog
|
logpath = %(exim_main_log)s
|
||||||
|
|
||||||
|
|
||||||
[kerio]
|
[kerio]
|
||||||
|
@ -533,7 +544,7 @@ logpath = %(postfix_log)s
|
||||||
[perdition]
|
[perdition]
|
||||||
|
|
||||||
port = imap3,imaps,pop3,pop3s
|
port = imap3,imaps,pop3,pop3s
|
||||||
logpath = /var/log/maillog
|
logpath = %(syslog_mail)s
|
||||||
|
|
||||||
|
|
||||||
[squirrelmail]
|
[squirrelmail]
|
||||||
|
@ -657,13 +668,13 @@ maxretry = 5
|
||||||
[pam-generic]
|
[pam-generic]
|
||||||
# pam-generic filter can be customized to monitor specific subset of 'tty's
|
# pam-generic filter can be customized to monitor specific subset of 'tty's
|
||||||
banaction = iptables-allports
|
banaction = iptables-allports
|
||||||
logpath = /var/log/auth.log
|
logpath = %(syslog_authpriv)s
|
||||||
|
|
||||||
|
|
||||||
[xinetd-fail]
|
[xinetd-fail]
|
||||||
|
|
||||||
banaction = iptables-multiport-log
|
banaction = iptables-multiport-log
|
||||||
logpath = /var/log/daemon.log
|
logpath = %(syslog_daemon)s
|
||||||
maxretry = 2
|
maxretry = 2
|
||||||
|
|
||||||
|
|
||||||
|
@ -693,5 +704,18 @@ action = %(banaction)s[name=%(__name__)s-tcp, port="%(tcpport)s", protocol="tcp
|
||||||
[nagios]
|
[nagios]
|
||||||
|
|
||||||
enabled = false
|
enabled = false
|
||||||
logpath = /var/log/messages ; nrpe.cfg may define a different log_facility
|
logpath = %(syslog_daemon)s ; nrpe.cfg may define a different log_facility
|
||||||
maxretry = 1
|
maxretry = 1
|
||||||
|
|
||||||
|
|
||||||
|
[oracleims]
|
||||||
|
# see "oracleims" filter file for configuration requirement for Oracle IMS v6 and above
|
||||||
|
enabled = false
|
||||||
|
logpath = /opt/sun/comms/messaging64/log/mail.log_current
|
||||||
|
maxretry = 6
|
||||||
|
banaction = iptables-allports
|
||||||
|
|
||||||
|
[directadmin]
|
||||||
|
enabled = false
|
||||||
|
logpath = /var/log/directadmin/login.log
|
||||||
|
port = 2222
|
||||||
|
|
|
@ -7,16 +7,22 @@ after = paths-overrides.local
|
||||||
|
|
||||||
[DEFAULT]
|
[DEFAULT]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sshd_log = %(syslog_authpriv)s
|
sshd_log = %(syslog_authpriv)s
|
||||||
|
|
||||||
dropbear_log = %(syslog_authpriv)s
|
dropbear_log = %(syslog_authpriv)s
|
||||||
|
|
||||||
|
# There is no sensible generic defaults for syslog log targets, thus
|
||||||
|
# leaving them empty here so that no errors while parsing/interpolating configs
|
||||||
|
syslog_daemon =
|
||||||
|
syslog_ftp =
|
||||||
|
syslog_local0 =
|
||||||
|
syslog_mail_warn =
|
||||||
|
syslog_user =
|
||||||
|
|
||||||
# from /etc/audit/auditd.conf
|
# from /etc/audit/auditd.conf
|
||||||
auditd_log = /var/log/audit/audit.log
|
auditd_log = /var/log/audit/audit.log
|
||||||
|
|
||||||
|
exim_main_log = /var/log/exim/mainlog
|
||||||
|
|
||||||
nginx_error_log = /var/log/nginx/error.log
|
nginx_error_log = /var/log/nginx/error.log
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ apache_error_log = /var/log/apache2/*error.log
|
||||||
|
|
||||||
apache_access_log = /var/log/apache2/*access.log
|
apache_access_log = /var/log/apache2/*access.log
|
||||||
|
|
||||||
|
exim_main_log = /var/log/exim4/mainlog
|
||||||
|
|
||||||
# was in debian squeezy but not in wheezy
|
# was in debian squeezy but not in wheezy
|
||||||
# /etc/proftpd/proftpd.conf (SystemLog)
|
# /etc/proftpd/proftpd.conf (SystemLog)
|
||||||
|
|
|
@ -32,4 +32,6 @@ apache_access_log = /var/log/httpd/*access_log
|
||||||
# proftpd_log = /var/log/proftpd/auth.log
|
# proftpd_log = /var/log/proftpd/auth.log
|
||||||
# Tested and it worked out in /var/log/messages so assuming syslog_ftp for now.
|
# Tested and it worked out in /var/log/messages so assuming syslog_ftp for now.
|
||||||
|
|
||||||
|
exim_main_log = /var/log/exim/main.log
|
||||||
|
|
||||||
mysql_log = /var/lib/mysql/mysqld.log
|
mysql_log = /var/lib/mysql/mysqld.log
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
[INCLUDES]
|
[INCLUDES]
|
||||||
|
|
||||||
before = common-paths.conf
|
before = paths-common.conf
|
||||||
|
|
||||||
after = paths-overrides.local
|
after = paths-overrides.local
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
[INCLUDES]
|
[INCLUDES]
|
||||||
|
|
||||||
before = common-paths.conf
|
before = paths-common.conf
|
||||||
|
|
||||||
after = paths-overrides.local
|
after = paths-overrides.local
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,177 @@
|
||||||
|
# Makefile for Sphinx documentation
|
||||||
|
#
|
||||||
|
|
||||||
|
# You can set these variables from the command line.
|
||||||
|
SPHINXOPTS =
|
||||||
|
SPHINXBUILD = sphinx-build2
|
||||||
|
PAPER =
|
||||||
|
BUILDDIR = ""build
|
||||||
|
|
||||||
|
# User-friendly check for sphinx-build2
|
||||||
|
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
|
||||||
|
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Internal variables.
|
||||||
|
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||||
|
PAPEROPT_letter = -D latex_paper_size=letter
|
||||||
|
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||||
|
# the i18n builder cannot share the environment and doctrees with the others
|
||||||
|
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||||
|
|
||||||
|
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
|
||||||
|
|
||||||
|
help:
|
||||||
|
@echo "Please use \`make <target>' where <target> is one of"
|
||||||
|
@echo " html to make standalone HTML files"
|
||||||
|
@echo " dirhtml to make HTML files named index.html in directories"
|
||||||
|
@echo " singlehtml to make a single large HTML file"
|
||||||
|
@echo " pickle to make pickle files"
|
||||||
|
@echo " json to make JSON files"
|
||||||
|
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||||
|
@echo " qthelp to make HTML files and a qthelp project"
|
||||||
|
@echo " devhelp to make HTML files and a Devhelp project"
|
||||||
|
@echo " epub to make an epub"
|
||||||
|
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||||
|
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||||
|
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
|
||||||
|
@echo " text to make text files"
|
||||||
|
@echo " man to make manual pages"
|
||||||
|
@echo " texinfo to make Texinfo files"
|
||||||
|
@echo " info to make Texinfo files and run them through makeinfo"
|
||||||
|
@echo " gettext to make PO message catalogs"
|
||||||
|
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||||
|
@echo " xml to make Docutils-native XML files"
|
||||||
|
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
|
||||||
|
@echo " linkcheck to check all external links for integrity"
|
||||||
|
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf $(BUILDDIR)/*
|
||||||
|
|
||||||
|
html:
|
||||||
|
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||||
|
|
||||||
|
dirhtml:
|
||||||
|
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||||
|
|
||||||
|
singlehtml:
|
||||||
|
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||||
|
|
||||||
|
pickle:
|
||||||
|
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can process the pickle files."
|
||||||
|
|
||||||
|
json:
|
||||||
|
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can process the JSON files."
|
||||||
|
|
||||||
|
htmlhelp:
|
||||||
|
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||||
|
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||||
|
|
||||||
|
qthelp:
|
||||||
|
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||||
|
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||||
|
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Fail2Ban.qhcp"
|
||||||
|
@echo "To view the help file:"
|
||||||
|
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Fail2Ban.qhc"
|
||||||
|
|
||||||
|
devhelp:
|
||||||
|
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished."
|
||||||
|
@echo "To view the help file:"
|
||||||
|
@echo "# mkdir -p $$HOME/.local/share/devhelp/Fail2Ban"
|
||||||
|
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Fail2Ban"
|
||||||
|
@echo "# devhelp"
|
||||||
|
|
||||||
|
epub:
|
||||||
|
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||||
|
|
||||||
|
latex:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||||
|
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||||
|
"(use \`make latexpdf' here to do that automatically)."
|
||||||
|
|
||||||
|
latexpdf:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo "Running LaTeX files through pdflatex..."
|
||||||
|
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
||||||
|
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||||
|
|
||||||
|
latexpdfja:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo "Running LaTeX files through platex and dvipdfmx..."
|
||||||
|
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
|
||||||
|
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||||
|
|
||||||
|
text:
|
||||||
|
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||||
|
|
||||||
|
man:
|
||||||
|
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||||
|
|
||||||
|
texinfo:
|
||||||
|
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
||||||
|
@echo "Run \`make' in that directory to run these through makeinfo" \
|
||||||
|
"(use \`make info' here to do that automatically)."
|
||||||
|
|
||||||
|
info:
|
||||||
|
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||||
|
@echo "Running Texinfo files through makeinfo..."
|
||||||
|
make -C $(BUILDDIR)/texinfo info
|
||||||
|
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
||||||
|
|
||||||
|
gettext:
|
||||||
|
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
||||||
|
|
||||||
|
changes:
|
||||||
|
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||||
|
@echo
|
||||||
|
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||||
|
|
||||||
|
linkcheck:
|
||||||
|
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||||
|
@echo
|
||||||
|
@echo "Link check complete; look for any errors in the above output " \
|
||||||
|
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||||
|
|
||||||
|
doctest:
|
||||||
|
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||||
|
@echo "Testing of doctests in the sources finished, look at the " \
|
||||||
|
"results in $(BUILDDIR)/doctest/output.txt."
|
||||||
|
|
||||||
|
xml:
|
||||||
|
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
|
||||||
|
|
||||||
|
pseudoxml:
|
||||||
|
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
|
|
@ -0,0 +1,260 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
sys.path.insert(0, ".")
|
||||||
|
sys.path.insert(0, "..")
|
||||||
|
|
||||||
|
# If extensions (or modules to document with autodoc) are in another directory,
|
||||||
|
# add these directories to sys.path here. If the directory is relative to the
|
||||||
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||||
|
#sys.path.insert(0, os.path.abspath('.'))
|
||||||
|
|
||||||
|
# -- General configuration ------------------------------------------------
|
||||||
|
|
||||||
|
# If your documentation needs a minimal Sphinx version, state it here.
|
||||||
|
#needs_sphinx = '1.0'
|
||||||
|
|
||||||
|
# Add any Sphinx extension module names here, as strings. They can be
|
||||||
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
|
# ones.
|
||||||
|
extensions = [
|
||||||
|
'sphinx.ext.autodoc',
|
||||||
|
'sphinx.ext.autosummary',
|
||||||
|
'numpydoc',
|
||||||
|
]
|
||||||
|
|
||||||
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
|
templates_path = ['templates']
|
||||||
|
|
||||||
|
# The suffix of source filenames.
|
||||||
|
source_suffix = '.rst'
|
||||||
|
|
||||||
|
# The encoding of source files.
|
||||||
|
#source_encoding = 'utf-8-sig'
|
||||||
|
|
||||||
|
# The master toctree document.
|
||||||
|
master_doc = 'index'
|
||||||
|
|
||||||
|
# General information about the project.
|
||||||
|
project = u'Fail2Ban'
|
||||||
|
copyright = u'2014'
|
||||||
|
|
||||||
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
|
# |version| and |release|, also used in various other places throughout the
|
||||||
|
# built documents.
|
||||||
|
#
|
||||||
|
|
||||||
|
from fail2ban.version import version as fail2ban_version
|
||||||
|
from distutils.version import LooseVersion
|
||||||
|
|
||||||
|
fail2ban_loose_version = LooseVersion(fail2ban_version)
|
||||||
|
|
||||||
|
# The short X.Y version.
|
||||||
|
version = ".".join(str(_) for _ in fail2ban_loose_version.version[:2])
|
||||||
|
# The full version, including alpha/beta/rc tags.
|
||||||
|
release = fail2ban_version
|
||||||
|
|
||||||
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
|
# for a list of supported languages.
|
||||||
|
#language = None
|
||||||
|
|
||||||
|
# There are two options for replacing |today|: either, you set today to some
|
||||||
|
# non-false value, then it is used:
|
||||||
|
#today = ''
|
||||||
|
# Else, today_fmt is used as the format for a strftime call.
|
||||||
|
#today_fmt = '%B %d, %Y'
|
||||||
|
|
||||||
|
# List of patterns, relative to source directory, that match files and
|
||||||
|
# directories to ignore when looking for source files.
|
||||||
|
exclude_patterns = ['build']
|
||||||
|
|
||||||
|
# The reST default role (used for this markup: `text`) to use for all
|
||||||
|
# documents.
|
||||||
|
#default_role = None
|
||||||
|
|
||||||
|
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||||
|
#add_function_parentheses = True
|
||||||
|
|
||||||
|
# If true, the current module name will be prepended to all description
|
||||||
|
# unit titles (such as .. function::).
|
||||||
|
#add_module_names = True
|
||||||
|
|
||||||
|
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||||
|
# output. They are ignored by default.
|
||||||
|
#show_authors = False
|
||||||
|
|
||||||
|
# The name of the Pygments (syntax highlighting) style to use.
|
||||||
|
pygments_style = 'sphinx'
|
||||||
|
|
||||||
|
# A list of ignored prefixes for module index sorting.
|
||||||
|
#modindex_common_prefix = []
|
||||||
|
|
||||||
|
# If true, keep warnings as "system message" paragraphs in the built documents.
|
||||||
|
#keep_warnings = False
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for HTML output ----------------------------------------------
|
||||||
|
|
||||||
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||||
|
# a list of builtin themes.
|
||||||
|
html_theme = 'default'
|
||||||
|
|
||||||
|
# Theme options are theme-specific and customize the look and feel of a theme
|
||||||
|
# further. For a list of options available for each theme, see the
|
||||||
|
# documentation.
|
||||||
|
#html_theme_options = {}
|
||||||
|
|
||||||
|
# Add any paths that contain custom themes here, relative to this directory.
|
||||||
|
#html_theme_path = []
|
||||||
|
|
||||||
|
# The name for this set of Sphinx documents. If None, it defaults to
|
||||||
|
# "<project> v<release> documentation".
|
||||||
|
#html_title = None
|
||||||
|
|
||||||
|
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||||
|
#html_short_title = None
|
||||||
|
|
||||||
|
# The name of an image file (relative to this directory) to place at the top
|
||||||
|
# of the sidebar.
|
||||||
|
#html_logo = None
|
||||||
|
|
||||||
|
# The name of an image file (within the static path) to use as favicon of the
|
||||||
|
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||||
|
# pixels large.
|
||||||
|
#html_favicon = None
|
||||||
|
|
||||||
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
|
html_static_path = ['static']
|
||||||
|
|
||||||
|
# Add any extra paths that contain custom files (such as robots.txt or
|
||||||
|
# .htaccess) here, relative to this directory. These files are copied
|
||||||
|
# directly to the root of the documentation.
|
||||||
|
#html_extra_path = []
|
||||||
|
|
||||||
|
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||||
|
# using the given strftime format.
|
||||||
|
#html_last_updated_fmt = '%b %d, %Y'
|
||||||
|
|
||||||
|
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||||
|
# typographically correct entities.
|
||||||
|
#html_use_smartypants = True
|
||||||
|
|
||||||
|
# Custom sidebar templates, maps document names to template names.
|
||||||
|
#html_sidebars = {}
|
||||||
|
|
||||||
|
# Additional templates that should be rendered to pages, maps page names to
|
||||||
|
# template names.
|
||||||
|
#html_additional_pages = {}
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
#html_domain_indices = True
|
||||||
|
|
||||||
|
# If false, no index is generated.
|
||||||
|
#html_use_index = True
|
||||||
|
|
||||||
|
# If true, the index is split into individual pages for each letter.
|
||||||
|
#html_split_index = False
|
||||||
|
|
||||||
|
# If true, links to the reST sources are added to the pages.
|
||||||
|
#html_show_sourcelink = True
|
||||||
|
|
||||||
|
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||||
|
#html_show_sphinx = True
|
||||||
|
|
||||||
|
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||||
|
#html_show_copyright = True
|
||||||
|
|
||||||
|
# If true, an OpenSearch description file will be output, and all pages will
|
||||||
|
# contain a <link> tag referring to it. The value of this option must be the
|
||||||
|
# base URL from which the finished HTML is served.
|
||||||
|
#html_use_opensearch = ''
|
||||||
|
|
||||||
|
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||||
|
#html_file_suffix = None
|
||||||
|
|
||||||
|
# Output file base name for HTML help builder.
|
||||||
|
htmlhelp_basename = 'Fail2Bandoc'
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for LaTeX output ---------------------------------------------
|
||||||
|
|
||||||
|
latex_elements = {
|
||||||
|
# The paper size ('letterpaper' or 'a4paper').
|
||||||
|
#'papersize': 'letterpaper',
|
||||||
|
|
||||||
|
# The font size ('10pt', '11pt' or '12pt').
|
||||||
|
#'pointsize': '10pt',
|
||||||
|
|
||||||
|
# Additional stuff for the LaTeX preamble.
|
||||||
|
#'preamble': '',
|
||||||
|
}
|
||||||
|
|
||||||
|
# Grouping the document tree into LaTeX files. List of tuples
|
||||||
|
# (source start file, target name, title,
|
||||||
|
# author, documentclass [howto, manual, or own class]).
|
||||||
|
latex_documents = [
|
||||||
|
('index', 'Fail2Ban.tex', u'Fail2Ban Developers\' Documentation',
|
||||||
|
u'', 'manual'),
|
||||||
|
]
|
||||||
|
|
||||||
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
|
# the title page.
|
||||||
|
#latex_logo = None
|
||||||
|
|
||||||
|
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||||
|
# not chapters.
|
||||||
|
#latex_use_parts = False
|
||||||
|
|
||||||
|
# If true, show page references after internal links.
|
||||||
|
#latex_show_pagerefs = False
|
||||||
|
|
||||||
|
# If true, show URL addresses after external links.
|
||||||
|
#latex_show_urls = False
|
||||||
|
|
||||||
|
# Documents to append as an appendix to all manuals.
|
||||||
|
#latex_appendices = []
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
#latex_domain_indices = True
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for manual page output ---------------------------------------
|
||||||
|
|
||||||
|
# One entry per manual page. List of tuples
|
||||||
|
# (source start file, name, description, authors, manual section).
|
||||||
|
man_pages = [
|
||||||
|
('index', 'fail2ban', u'Fail2Ban Developers\' Documentation',
|
||||||
|
[u''], 1)
|
||||||
|
]
|
||||||
|
|
||||||
|
# If true, show URL addresses after external links.
|
||||||
|
#man_show_urls = False
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for Texinfo output -------------------------------------------
|
||||||
|
|
||||||
|
# Grouping the document tree into Texinfo files. List of tuples
|
||||||
|
# (source start file, target name, title, author,
|
||||||
|
# dir menu entry, description, category)
|
||||||
|
texinfo_documents = [
|
||||||
|
('index', 'Fail2Ban', u'Fail2Ban Developers\' Documentation',
|
||||||
|
u'', 'Fail2Ban', 'One line description of project.',
|
||||||
|
'Miscellaneous'),
|
||||||
|
]
|
||||||
|
|
||||||
|
# Documents to append as an appendix to all manuals.
|
||||||
|
#texinfo_appendices = []
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
#texinfo_domain_indices = True
|
||||||
|
|
||||||
|
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||||
|
#texinfo_show_urls = 'footnote'
|
||||||
|
|
||||||
|
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
||||||
|
#texinfo_no_detailmenu = False
|
||||||
|
autodoc_default_flags = ['members', 'inherited-members', 'undoc-members', 'show-inheritance']
|
|
@ -0,0 +1 @@
|
||||||
|
.. include:: ../DEVELOP
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.client.actionreader module
|
||||||
|
===================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.client.actionreader
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.client.beautifier module
|
||||||
|
=================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.client.beautifier
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.client.configparserinc module
|
||||||
|
======================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.client.configparserinc
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.client.configreader module
|
||||||
|
===================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.client.configreader
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.client.configurator module
|
||||||
|
===================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.client.configurator
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.client.csocket module
|
||||||
|
==============================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.client.csocket
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.client.fail2banreader module
|
||||||
|
=====================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.client.fail2banreader
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.client.filterreader module
|
||||||
|
===================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.client.filterreader
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.client.jailreader module
|
||||||
|
=================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.client.jailreader
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.client.jailsreader module
|
||||||
|
==================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.client.jailsreader
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,15 @@
|
||||||
|
fail2ban.client package
|
||||||
|
=======================
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
|
||||||
|
fail2ban.client.actionreader
|
||||||
|
fail2ban.client.beautifier
|
||||||
|
fail2ban.client.configparserinc
|
||||||
|
fail2ban.client.configreader
|
||||||
|
fail2ban.client.configurator
|
||||||
|
fail2ban.client.csocket
|
||||||
|
fail2ban.client.fail2banreader
|
||||||
|
fail2ban.client.filterreader
|
||||||
|
fail2ban.client.jailreader
|
||||||
|
fail2ban.client.jailsreader
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.exceptions module
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.exceptions
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.helpers module
|
||||||
|
=======================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.helpers
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.protocol module
|
||||||
|
========================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.protocol
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,12 @@
|
||||||
|
fail2ban package
|
||||||
|
================
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
|
||||||
|
fail2ban.client
|
||||||
|
fail2ban.server
|
||||||
|
|
||||||
|
fail2ban.exceptions
|
||||||
|
fail2ban.helpers
|
||||||
|
fail2ban.protocol
|
||||||
|
fail2ban.version
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.action module
|
||||||
|
=============================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.action
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.actions module
|
||||||
|
==============================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.actions
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.asyncserver module
|
||||||
|
==================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.asyncserver
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.banmanager module
|
||||||
|
=================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.banmanager
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.database module
|
||||||
|
===============================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.database
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.datedetector module
|
||||||
|
===================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.datedetector
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.datetemplate module
|
||||||
|
===================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.datetemplate
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.faildata module
|
||||||
|
===============================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.faildata
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.failmanager module
|
||||||
|
==================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.failmanager
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.failregex module
|
||||||
|
================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.failregex
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.filter module
|
||||||
|
=============================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.filter
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.filtergamin module
|
||||||
|
==================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.filtergamin
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.filterpoll module
|
||||||
|
=================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.filterpoll
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.filterpyinotify module
|
||||||
|
======================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.filterpyinotify
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.filtersystemd module
|
||||||
|
====================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.filtersystemd
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.jail module
|
||||||
|
===========================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.jail
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.jails module
|
||||||
|
============================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.jails
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.jailthread module
|
||||||
|
=================================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.jailthread
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.mytime module
|
||||||
|
=============================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.mytime
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,28 @@
|
||||||
|
fail2ban.server package
|
||||||
|
=======================
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
|
||||||
|
fail2ban.server.action
|
||||||
|
fail2ban.server.actions
|
||||||
|
fail2ban.server.asyncserver
|
||||||
|
fail2ban.server.banmanager
|
||||||
|
fail2ban.server.database
|
||||||
|
fail2ban.server.datedetector
|
||||||
|
fail2ban.server.datetemplate
|
||||||
|
fail2ban.server.faildata
|
||||||
|
fail2ban.server.failmanager
|
||||||
|
fail2ban.server.failregex
|
||||||
|
fail2ban.server.filter
|
||||||
|
fail2ban.server.filtergamin
|
||||||
|
fail2ban.server.filterpoll
|
||||||
|
fail2ban.server.filterpyinotify
|
||||||
|
fail2ban.server.filtersystemd
|
||||||
|
fail2ban.server.jail
|
||||||
|
fail2ban.server.jails
|
||||||
|
fail2ban.server.jailthread
|
||||||
|
fail2ban.server.mytime
|
||||||
|
fail2ban.server.server
|
||||||
|
fail2ban.server.strptime
|
||||||
|
fail2ban.server.ticket
|
||||||
|
fail2ban.server.transmitter
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.server module
|
||||||
|
=============================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.server
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.strptime module
|
||||||
|
===============================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.strptime
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
|
@ -0,0 +1,7 @@
|
||||||
|
fail2ban.server.ticket module
|
||||||
|
=============================
|
||||||
|
|
||||||
|
.. automodule:: fail2ban.server.ticket
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue