From ea9a671e880c602a7f5cc718649de183582aba24 Mon Sep 17 00:00:00 2001 From: Cyril Jaquier Date: Fri, 1 Jul 2005 09:30:52 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create branch 'FAIL2BAN-0_5'. git-svn-id: https://fail2ban.svn.sourceforge.net/svnroot/fail2ban/branches/FAIL2BAN-0_5@114 a942ae1a-1317-0410-a47c-b1dcaea8d605 --- CHANGELOG | 71 +++++ MANIFEST | 21 ++ README | 145 +++++++++ TODO | 15 + config/fail2ban.conf.default | 143 +++++++++ config/gentoo-confd | 23 ++ config/gentoo-initd | 50 ++++ config/redhat-initd | 78 +++++ confreader/__init__.py | 25 ++ confreader/configreader.py | 80 +++++ fail2ban.py | 551 +++++++++++++++++++++++++++++++++++ firewall/firewall.py | 98 +++++++ firewall/ipfw.py | 72 +++++ firewall/ipfwadm.py | 48 +++ firewall/iptables.py | 48 +++ log-test/apache | 102 +++++++ log-test/current | 5 + log-test/test | 432 +++++++++++++++++++++++++++ logreader/logreader.py | 189 ++++++++++++ setup.cfg | 5 + setup.py | 42 +++ utils/__init__.py | 25 ++ utils/dns.py | 73 +++++ version.py | 27 ++ 24 files changed, 2368 insertions(+) create mode 100644 CHANGELOG create mode 100644 MANIFEST create mode 100644 README create mode 100644 TODO create mode 100644 config/fail2ban.conf.default create mode 100644 config/gentoo-confd create mode 100755 config/gentoo-initd create mode 100644 config/redhat-initd create mode 100644 confreader/__init__.py create mode 100644 confreader/configreader.py create mode 100755 fail2ban.py create mode 100644 firewall/firewall.py create mode 100644 firewall/ipfw.py create mode 100644 firewall/ipfwadm.py create mode 100644 firewall/iptables.py create mode 100644 log-test/apache create mode 100644 log-test/current create mode 100644 log-test/test create mode 100644 logreader/logreader.py create mode 100644 setup.cfg create mode 100755 setup.py create mode 100644 utils/__init__.py create mode 100644 utils/dns.py create mode 100644 version.py diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 00000000..a05b6cbd --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,71 @@ + __ _ _ ___ _ + / _|__ _(_) |_ ) |__ __ _ _ _ + | _/ _` | | |/ /| '_ \/ _` | ' \ + |_| \__,_|_|_/___|_.__/\__,_|_||_| + +============================================================= +Fail2Ban (version 0.?.?) ??/??/2005 +============================================================= + +ver. 0.?.? (??/??/2005) - ??? +---------- +- Added an initd script for RedHat/Fedora. Thanks to Andrey + G. Grozin + +ver. 0.4.1 (06/30/2005) - stable +---------- +- Fixed textToDNS method which generated wrong matches for + "rhost=12-xyz...". Thanks to Tom Pike +- fail2ban.conf modified for readability. Thanks to Iain Lea +- Added an initd script for Gentoo +- Changed default PID lock file location from /tmp to + /var/run + +ver. 0.4.0 (04/24/2005) - stable +---------- +- Fixed textToDNS which did not recognize strings like + "12-345-67-890.abcd.mnopqr.xyz" + +ver. 0.3.1 (03/31/2005) - beta +---------- +- Corrected level of messages +- Added DNS lookup support +- Improved parsing speed. Only parse the new log messages +- Added a second verbose level (-vv) + +ver. 0.3.0 (02/24/2005) - beta +---------- +- Re-writting of parts of the code in order to handle several + log files with different rules +- Removed sshd.py because it is no more needed +- Fixed a bug when exiting with IP in the ban list +- Added PID lock file +- Improved some parts of the code +- Added ipfw-start-rule option (thanks to Robert Edeker) +- Added -k option which kills a currently running Fail2Ban + +ver. 0.1.2 (11/21/2004) - beta +---------- +- Add ipfw and ipfwadm support. The rules are taken from + BlockIt. Thanks to Robert Edeker +- Add -e option which allows to set the interface. Thanks to + Robert Edeker who reminded me this +- Small code cleaning + +ver. 0.1.1 (10/23/2004) - beta +---------- +- Add SIGTERM handler in order to exit nicely when in daemon + mode +- Add -r option which allows to set the maximum number of + login failures +- Remove the Metalog class as the log file are not so syslog + daemon specific +- Rewrite log reader to be service centered. Sshd support + added. Match "Failed password" and "Illegal user" +- Add /etc/fail2ban.conf configuration support +- Code documentation + + +ver. 0.1.0 (10/12/2004) - alpha +---------- +- Initial release diff --git a/MANIFEST b/MANIFEST new file mode 100644 index 00000000..330728f8 --- /dev/null +++ b/MANIFEST @@ -0,0 +1,21 @@ +README +CHANGELOG +TODO +setup.cfg +setup.py +version.py +fail2ban.py +firewall/__init__.py +firewall/firewall.py +firewall/iptables.py +firewall/ipfw.py +firewall/ipfwadm.py +logreader/__init__.py +logreader/logreader.py +confreader/__init__.py +confreader/configreader.py +utils/__init__.py +utils/dns.py +config/fail2ban.conf.default +config/gentoo-initd +config/gentoo-confd diff --git a/README b/README new file mode 100644 index 00000000..7882c60d --- /dev/null +++ b/README @@ -0,0 +1,145 @@ + __ _ _ ___ _ + / _|__ _(_) |_ ) |__ __ _ _ _ + | _/ _` | | |/ /| '_ \/ _` | ' \ + |_| \__,_|_|_/___|_.__/\__,_|_||_| + +============================================================= +Fail2Ban (version 0.4.1) 06/30/2005 +============================================================= + +Fail2Ban scans log files like /var/log/pwdfail and bans IP +that makes too many password failures. It updates firewall +rules to reject the IP address. Currently iptables, ipfw and +ipfwadm are supported. Fail2Ban can read multiple log files +such as sshd or Apache web server ones. It needs log4py. + +This is my first Python program. Moreover, English is not my +mother tongue... + + +More details: +------------- + +Fail2Ban is rather simple. I have a home server connected to +the Internet which runs apache, samba, sshd, ... I see in my +logs that people are trying to log into my box using "manual" +brute force or scripts. They try 10, 20 and sometimes more +user/password (without success anyway). In order to +discourage these script kiddies, I wanted that sshd refuse +login from a specific ip after 3 password failures. After +some Google searches, I found that sshd was not able of that. +So I search for a script or program that do it. I found +nothing :-( So I decide to write mine and to learn Python :-) + +For each sections defined in the configuration file, Fail2Ban +tries to find lines which match the failregex. Then it +retrieves the message time using timeregex and timepattern. +It finally gets the ip and if it has already done 3 or more +password failures in the last banTime, the ip is banned for +banTime using a firewall rule. After banTime, the rule is +deleted. Notice that if no "plain" ip is available, Fail2Ban +try to do DNS lookup in order to found one or several ip's to +ban. + +Sections can be freely added so it is possible to monitor +several daemons at the same time. + +Runs on my server and does its job rather well :-) The idea +is to make fail2ban usable with daemons and services that +require a login (sshd, telnetd, ...). It should also support +others firewalls than iptables. + + +Installation: +------------- + +Require: python-2.3 (http://www.python.org) + log4py-1.1 (http://sourceforge.net/projects/log4py) + +To install, just do: + +> tar xvfj fail2ban-0.4.1.tar.bz2 +> cd fail2ban-0.4.1 +> python setup.py install + +This will install Fail2Ban into /usr/lib/fail2ban. The +fail2ban.py executable is placed into /usr/bin. + +For Gentoo users, an ebuild is available on the website. + +Fail2Ban should now be correctly installed. Just type: + +> fail2ban.py -h + +to see if everything is alright. You can configure fail2ban +with a config file. Copy config/fail2ban.conf.default to +/etc/fail2ban.conf. + +Gentoo users can use the initd script available in config/. +Copy gentoo-initd to /etc/init.d/fail2ban and gentoo-confd +to /etc/conf.d/fail2ban. You can start fail2ban and add it +to your default runlevel: + +> /etc/init.d/fail2ban start +> rc-update add fail2ban default + +Configuration: +-------------- + +You can configure fail2ban using the file /etc/fail2ban.conf +or using command line options. Command line options override +the value stored in fail2ban.conf. Here are the command line +options: + + -b start fail2ban in background + -d start fail2ban in debug mode + -e ban IP on the INTF interface + -c read configuration file FILE + -p create PID lock in FILE + -h display this help message + -i IP(s) to ignore + -k kill a currently running Fail2Ban instance + -l log message in FILE + -r allow a max of VALUE password failure + -t