HowtoForge Forums | HowtoForge - Linux Howtos and Tutorials

HowtoForge Forums | HowtoForge - Linux Howtos and Tutorials (http://www.howtoforge.com/forums/index.php)
-   Server Operation (http://www.howtoforge.com/forums/forumdisplay.php?f=5)
-   -   fail2ban is doing nothing? (http://www.howtoforge.com/forums/showthread.php?t=37944)

rlischer 4th August 2009 03:35

fail2ban is doing nothing?
 
I modified fail2ban config file as seen below. Restarted, service, and then I went to a remote PC and tried to hack in via ssh using bad root passwords and it let me try 100 time and never banned the IP I was coming in on. What did I do wrong? Do I need to set a path somewhere to my host.deny file or something. Thanks


Code:

# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
# $Revision: 617 $
#

# The DEFAULT allows a global definition of the options. They can be override
# in each jail afterwards.

[DEFAULT]

# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1

# "bantime" is the number of seconds that a host is banned.
bantime  = 600

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = 600

# "maxretry" is the number of failures before a host get banned.
maxretry = 3

# "backend" specifies the backend used to get files modification. Available
# options are "gamin", "polling" and "auto". This option can be overridden in
# each jail too (use "gamin" for a jail and "polling" for another).
#
# gamin:  requires Gamin (a file alteration monitor) to be installed. If Gamin
#          is not installed, Fail2ban will use polling.
# polling: uses a polling algorithm which does not require external libraries.
# auto:    will choose Gamin if available and polling otherwise.
backend = auto


# This jail corresponds to the standard configuration in Fail2ban 0.6.
# The mail-whois action send a notification e-mail with a whois request
# in the body.

[ssh-iptables]

enabled  = true
filter  = sshd
action  = iptables[name=SSH, port=ssh, protocol=tcp]
          sendmail-whois[name=SSH, dest=myemailaddress@gmail.com, sender=myemailaddress@anotherplace.com]
logpath  = /var/log/sshd.log
maxretry = 3

[proftpd-iptables]

enabled  = true
filter  = proftpd
action  = iptables[name=ProFTPD, port=ftp, protocol=tcp]
          sendmail-whois[name=ProFTPD, dest=myemailaddress@gmail.com, sender=myemailaddress@anotherplace.com]
logpath  = /var/log/proftpd/proftpd.log
maxretry = 3

# This jail forces the backend to "polling".

[sasl-iptables]

enabled  = true
filter  = sasl
backend  = polling
action  = iptables[name=sasl, port=smtp, protocol=tcp]
          sendmail-whois[name=sasl, dest=myemailaddress@gmail.com, sender=myemailaddress@anotherplace.com]
logpath  = /var/log/mail.log

# Here we use TCP-Wrappers instead of Netfilter/Iptables. "ignoreregex" is
# used to avoid banning the user "myuser".

[ssh-tcpwrapper]

enabled    = true
filter      = sshd
action      = hostsdeny
              sendmail-whois[name=SSH, dest=myemailaddress@gmail.com, sender=myemailaddress@anotherplace.com]
ignoreregex = for myuser from
logpath    = /var/log/sshd.log

# This jail demonstrates the use of wildcards in "logpath".
# Moreover, it is possible to give other files on a new line.

[apache-tcpwrapper]

enabled  = true
filter  = apache-auth
action  = hostsdeny
logpath  = /var/log/apache*/*error.log
          /home/www/myhomepage/error.log
maxretry = 3

# The hosts.deny path can be defined with the "file" argument if it is
# not in /etc.

[postfix-tcpwrapper]

enabled  = true
filter  = postfix
action  = hostsdeny[file=/not/a/standard/path/hosts.deny]
          sendmail[name=Postfix, dest=myemailaddress@gmail.com, sender=myemailaddress@anotherplace.com]
logpath  = /var/log/postfix.log
bantime  = 300

# Do not ban anybody. Just report information about the remote host.
# A notification is sent at most every 600 seconds (bantime).

[vsftpd-notification]

enabled  = true
filter  = vsftpd
action  = sendmail-whois[name=VSFTPD, dest=myemailaddress@gmail.com, sender=myemailaddress@anotherplace.com]
logpath  = /var/log/vsftpd.log
maxretry = 5
bantime  = 1800

# Same as above but with banning the IP address.

[vsftpd-iptables]

enabled  = true
filter  = vsftpd
action  = iptables[name=VSFTPD, port=ftp, protocol=tcp]
          sendmail-whois[name=VSFTPD, dest=myemailaddress@gmail.com, sender=myemailaddress@anotherplace.com]
logpath  = /var/log/vsftpd.log
maxretry = 5
bantime  = 1800

# Ban hosts which agent identifies spammer robots crawling the web
# for email addresses. The mail outputs are buffered.

[apache-badbots]

enabled  = true
filter  = apache-badbots
action  = iptables-multiport[name=BadBots, port="http,https"]
          sendmail-buffered[name=BadBots, lines=5, dest=myemailaddress@gmail.com, sender=myemailaddress@anotherplace.com]
logpath  = /var/www/*/logs/access_log
bantime  = 172800
maxretry = 1

# Use shorewall instead of iptables.

[apache-shorewall]

enabled  = true
filter  = apache-noscript
action  = shorewall
          sendmail[name=Postfix, dest=myemailaddress@gmail.com, sender=myemailaddress@anotherplace.com]
logpath  = /var/log/apache2/error_log

# This jail uses ipfw, the standard firewall on FreeBSD. The "ignoreip"
# option is overridden in this jail. Moreover, the action "mail-whois" defines
# the variable "name" which contains a comma using "". The characters '' are
# valid too.

[ssh-ipfw]

enabled  = true
filter  = sshd
action  = ipfw[localhost=192.168.0.1]
          sendmail-whois[name="SSH,IPFW", dest=myemailaddress@gmail.com, sender=myemailaddress@anotherplace.com]
logpath  = /var/log/auth.log
ignoreip = 168.192.0.1

# These jails block attacks against named (bind9). By default, logging is off
# with bind9 installation. You will need something like this:
#
# logging {
#    channel security_file {
#        file "/var/log/named/security.log" versions 3 size 30m;
#        severity dynamic;
#        print-time yes;
#    };
#    category security {
#        security_file;
#    };
# }
#
# in your named.conf to provide proper logging.
# This jail blocks UDP traffic for DNS requests.

[named-refused-udp]

enabled  = true
filter  = named-refused
action  = iptables-multiport[name=Named, port="domain,953", protocol=udp]
          sendmail-whois[name=Named, dest=myemailaddress@gmail.com, sender=myemailaddress@anotherplace.com]
logpath  = /var/log/named/security.log
ignoreip = 168.192.0.1

# This jail blocks TCP traffic for DNS requests.

[named-refused-tcp]

enabled  = true
filter  = named-refused
action  = iptables-multiport[name=Named, port="domain,953", protocol=tcp]
          sendmail-whois[name=Named, dest=myemailaddress@gmail.com, sender=myemailaddress@anotherplace.com]
logpath  = /var/log/named/security.log
ignoreip = 168.192.0.1


Here is the log. It never shows the actual ip, it just says <ip>. And it never did ban me.

Code:

The IP has just been banned by Fail2Ban after
attempts against .\n\n
Here are more information about :\n
`/usr/bin/whois `\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f
2009-08-03 21:02:17,921 fail2ban.actions.action: INFO Set actionStop = printf %b "Subject: [Fail2Ban] : stopped
From: Fail2Ban <>
To: \n
Hi,\n
The jail has been stopped.\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f
2009-08-03 21:02:17,923 fail2ban.actions.action: INFO Set actionStart = printf %b "Subject: [Fail2Ban] : started
From: Fail2Ban <>
To: \n
Hi,\n
The jail has been started successfully.\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f
2009-08-03 21:02:17,926 fail2ban.actions.action: INFO Set actionUnban =
2009-08-03 21:02:17,928 fail2ban.actions.action: INFO Set actionCheck =
2009-08-03 21:02:17,934 fail2ban.jail : INFO Using Gamin
2009-08-03 21:02:17,936 fail2ban.filter : INFO Created Filter
2009-08-03 21:02:17,936 fail2ban.filter : INFO Created FilterGamin
2009-08-03 21:02:17,939 fail2ban.filter : INFO Set maxRetry = 3
2009-08-03 21:02:17,942 fail2ban.filter : INFO Set findtime = 600
2009-08-03 21:02:17,944 fail2ban.actions: INFO Set banTime = 600
2009-08-03 21:02:17,950 fail2ban.actions.action: INFO Set actionBan = iptables -I fail2ban- 1 -s -j DROP
2009-08-03 21:02:17,952 fail2ban.actions.action: INFO Set actionStop = iptables -D INPUT -p -m multiport --dports -j fail2ban-
iptables -F fail2ban-
iptables -X fail2ban-
2009-08-03 21:02:17,954 fail2ban.actions.action: INFO Set actionStart = iptables -N fail2ban-
iptables -A fail2ban- -j RETURN
iptables -I INPUT -p -m multiport --dports -j fail2ban-
2009-08-03 21:02:17,957 fail2ban.actions.action: INFO Set actionUnban = iptables -D fail2ban- -s -j DROP
2009-08-03 21:02:17,959 fail2ban.actions.action: INFO Set actionCheck = iptables -n -L INPUT | grep -q fail2ban-
2009-08-03 21:02:17,967 fail2ban.actions.action: INFO Set actionBan = printf %b "Subject: [Fail2Ban] : banned
From: Fail2Ban <>
To: \n
Hi,\n
The IP has just been banned by Fail2Ban after
attempts against .\n\n
Here are more information about :\n
`/usr/bin/whois `\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f
2009-08-03 21:02:17,970 fail2ban.actions.action: INFO Set actionStop = printf %b "Subject: [Fail2Ban] : stopped
From: Fail2Ban <>
To: \n
Hi,\n
The jail has been stopped.\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f
2009-08-03 21:02:17,972 fail2ban.actions.action: INFO Set actionStart = printf %b "Subject: [Fail2Ban] : started
From: Fail2Ban <>
To: \n
Hi,\n
The jail has been started successfully.\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f
2009-08-03 21:02:17,975 fail2ban.actions.action: INFO Set actionUnban =
2009-08-03 21:02:17,977 fail2ban.actions.action: INFO Set actionCheck =
2009-08-03 21:02:17,983 fail2ban.jail : INFO Using Gamin
2009-08-03 21:02:17,985 fail2ban.filter : INFO Created Filter
2009-08-03 21:02:17,985 fail2ban.filter : INFO Created FilterGamin
2009-08-03 21:02:17,988 fail2ban.filter : INFO Set maxRetry = 5
2009-08-03 21:02:17,991 fail2ban.filter : INFO Set findtime = 600
2009-08-03 21:02:17,993 fail2ban.actions: INFO Set banTime = 1800
2009-08-03 21:02:18,008 fail2ban.actions.action: INFO Set actionBan = printf %b "Subject: [Fail2Ban] : banned
From: Fail2Ban <>
To: \n
Hi,\n
The IP has just been banned by Fail2Ban after
attempts against .\n\n
Here are more information about :\n
`/usr/bin/whois `\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f
2009-08-03 21:02:18,011 fail2ban.actions.action: INFO Set actionStop = printf %b "Subject: [Fail2Ban] : stopped
From: Fail2Ban <>
To: \n
Hi,\n
The jail has been stopped.\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f
2009-08-03 21:02:18,013 fail2ban.actions.action: INFO Set actionStart = printf %b "Subject: [Fail2Ban] : started
From: Fail2Ban <>
To: \n
Hi,\n
The jail has been started successfully.\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f
2009-08-03 21:02:18,016 fail2ban.actions.action: INFO Set actionUnban =
2009-08-03 21:02:18,018 fail2ban.actions.action: INFO Set actionCheck =
2009-08-03 21:02:18,025 fail2ban.jail : INFO Using Gamin
2009-08-03 21:02:18,026 fail2ban.filter : INFO Created Filter
2009-08-03 21:02:18,026 fail2ban.filter : INFO Created FilterGamin
2009-08-03 21:02:18,029 fail2ban.filter : INFO Set maxRetry = 3
2009-08-03 21:02:18,032 fail2ban.comm : WARNING Invalid command: ['set', 'ssh-tcpwrapper', 'ignoreregex', 'for myuser from']


gscott187 4th August 2009 12:39

fail2ban sshd
 
What flavour of Linux are you using?

The most obvious thing that springs to mind is the log file specified in jail.conf. Is it really /var/log/sshd.log where SSH access attempts are logged on your system? In CentOS for example, SSH log attempts are logged to: /var/log/secure.

rlischer 4th August 2009 12:47

Quote:

Originally Posted by gscott187 (Post 200173)
What flavour of Linux are you using?

The most obvious thing that springs to mind is the log file specified in jail.conf. Is it really /var/log/sshd.log where SSH access attempts are logged on your system? In CentOS for example, SSH log attempts are logged to: /var/log/secure.

I run centoOS 5.3. So do I need to edit a path in jail.conf ?

gscott187 4th August 2009 13:19

fail2ban SSH
 
In CentOS 5.3 edit the file /etc/fail2ban/jail.conf for the [ssh-iptables] entry such that the line beginning with logpath... is altered to that shown in red below.

[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=me@mysystem.com, sender=fail2ban@mysystem.com]
logpath = /var/log/secure
maxretry = 4


You can view /var/log/secure before you make these changes to verify that SSH attempts are logged here.

After editing jail.conf don't forget to restart fail2ban with the command:

# service fail2ban restart

If you get an OK when fail2ban starts (i.e. the process has started), test it again and see if you're blocked after maxretry attempts.

rlischer 4th August 2009 13:41

Quote:

Originally Posted by gscott187 (Post 200179)
In CentOS 5.3 edit the file /etc/fail2ban/jail.conf for the [ssh-iptables] entry such that the line beginning with logpath... is altered to that shown in red below.

[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=me@mysystem.com, sender=fail2ban@mysystem.com]
logpath = /var/log/secure
maxretry = 4


You can view /var/log/secure before you make these changes to verify that SSH attempts are logged here.

After editing jail.conf don't forget to restart fail2ban with the command:

# service fail2ban restart

If you get an OK when fail2ban starts (i.e. the process has started), test it again and see if you're blocked after maxretry attempts.

Thanks! I changed the config, restarted fail2ban. I did verify that /var/log/secure had information in it. I tried to hack in as root with bad passwords, but it keeps letting me try.

The log says I was banned, but it lies:
Code:

The IP has just been banned by Fail2Ban after
attempts against .\n\n
Here are more information about :\n
`/usr/bin/whois `\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f
2009-08-04 07:38:10,866 fail2ban.actions.action: INFO Set actionStop = printf %b "Subject: [Fail2Ban] : stopped
From: Fail2Ban <>
To: \n
Hi,\n
The jail has been stopped.\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f
2009-08-04 07:38:10,869 fail2ban.actions.action: INFO Set actionStart = printf %b "Subject: [Fail2Ban] : started
From: Fail2Ban <>
To: \n
Hi,\n
The jail has been started successfully.\n


gscott187 6th August 2009 10:38

fail2ban not working
 
If /var/log/secure contains the correct source IP address of the unauthorised login attempt, the next thing to try is running the command:

fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/sshd.conf

fail2ban will look at the /var/log/secure file for error conditions associated with ssh. Post the output so I can see what it says.

I'm assuming that the /etc/fail2ban/filter.d/sshd.conf file exists and has failregex entries similar to those below?


failregex = ^%(__prefix_line)s(?:error: PAM: )?Authentication failure for .* from <HOST>\s*$
^%(__prefix_line)sFailed [-/\w]+ for .* from <HOST>(?: port \d*)?(?: ssh\d*)?$
^%(__prefix_line)sROOT LOGIN REFUSED.* FROM <HOST>\s*$
^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$
^%(__prefix_line)sUser \S+ from <HOST> not allowed because not listed in AllowUsers$
^%(__prefix_line)sauthentication failure; logname=\S* uid=\S* euid=\S* tty=\S* ruser=\S* rhost=<HOST>(?:\s+user=.*)?\s*$
^%(__prefix_line)srefused connect from \S+ \(<HOST>\)\s*$
^%(__prefix_line)sAddress <HOST> .* POSSIBLE BREAK-IN ATTEMPT\s*$


Each line is a regular expression pattern that fail2ban tries to match in the /var/log/secure file. I would expect a failed ssh login to match at least one of the failregex lines above.

gscott187 6th August 2009 11:03

fail2ban not working
 
Something else that occurs to me is iptables. You must be actively using it as your firewall as fail2ban creates a temporary drop rule for the bad source address in /var/log/secure.

If you've done a CentOS 5.3/ISPConfig3 setup, by default the iptables firewall is off. In ISPConfig3 there is a Bastille version which I would recommend that you don't enable as I find it too restricting. Instead, I enable the CentOS version of iptables. The one that creates /etc/sysconfig/iptables rules.

rlischer 6th August 2009 13:44

I don't know if I have a firewall enabled at all. I do see that people are trying to hack in all day long and failing to get the root password correct.
Do you see something missing here? Thanks!!!!

Here is my sshd.conf

Code:

# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
# $Revision: 663 $
#

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf


[Definition]

_daemon = sshd

# 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>\S+)
# Values:  TEXT
#
failregex = ^%(__prefix_line)s(?:error: PAM: )?Authentication failure for .* from <HOST>\s*$
            ^%(__prefix_line)sFailed [-/\w]+ for .* from <HOST>(?: port \d*)?(?: ssh\d*)?$
            ^%(__prefix_line)sROOT LOGIN REFUSED.* FROM <HOST>\s*$
            ^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$
            ^%(__prefix_line)sUser \S+ from <HOST> not allowed because not listed in AllowUsers$
            ^%(__prefix_line)sauthentication failure; logname=\S* uid=\S* euid=\S* tty=\S* ruser=\S* rhost=<HOST>(?:\s+user=.*)?\s*$
            ^%(__prefix_line)srefused connect from \S+ \(<HOST>\)\s*$
            ^%(__prefix_line)sAddress <HOST> .* POSSIBLE BREAK-IN ATTEMPT\s*$

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

Here are the results of your test:

Code:


Date template hits:
104241 hit(s): Month Day Hour:Minute:Second
0 hit(s): Weekday Month Day Hour:Minute:Second Year
0 hit(s): Weekday Month Day Hour:Minute:Second
0 hit(s): Year/Month/Day Hour:Minute:Second
0 hit(s): Day/Month/Year:Hour:Minute:Second
0 hit(s): Year-Month-Day Hour:Minute:Second
0 hit(s): Day-Month-Year Hour:Minute:Second[.Millisecond]
0 hit(s): TAI64N
0 hit(s): Epoch

Success, the total number of match is 3657

However, look at the above section 'Running tests' which could contain important
information.


gscott187 6th August 2009 14:29

Fail2ban not working
 
To see if iptables is running type:

service iptables status


You'll get a reasonably long output message showing what's being filtered.

If it is not running, you'll need to start it for fail2ban to work. If you're not running iptables, presumably you have another firewall that is protecting your box from evil hackers?

rlischer 6th August 2009 14:39

Quote:

Originally Posted by gscott187 (Post 200389)
To see if iptables is running type:

service iptables status


You'll get a reasonably long output message showing what's being filtered.

If it is not running, you'll need to start it for fail2ban to work. If you're not running iptables, presumably you have another firewall that is protecting your box from evil hackers?

It said Firewall is stopped.

So start it? Can I make it stay started even after a reboot?


All times are GMT +2. The time now is 02:47.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2014, vBulletin Solutions, Inc.