Enter your email address:

Delivered by FeedBurner

fail2ban - Free of dictionary attacks


StumbleUpon Toolbar

Starting this year I posted about DenyHosts, which is a must have tool to avoid dictionary attacks to port 22 (ssh).

This kind of tools are really needed by sysadmins because the normal user refuse to make strong password, If the admin gives them a strong password, they will write it down, and then it stops being "strong", If the admin tells the normal users, they need to remember their passwords and not to write them down, they will come with weak passwords like their son's name, looking for new ways to secure the servers against dictionary attacks or brute force attacks, I have found this other tool that can do the job, I think this one is more flexible than DenyHosts, and also it works with Iptables.

Well lets start, telling the options of fail2ban and its features.

It works by parsing logs files and thus finding failure attempts to log into the system, via a lot of possible protocols, and then acting to block the IP of the offending machine for the time you may configure, and using a lot of ways to achieve that.

It can block using:

  • Iptables
  • shorewall
  • Denyhost

I will only talk here about Iptables which is the one I understand better.

fail2ban is actually two programs, a server and a client, while the server performs the actions of banning the IPs, the client is the one who reads the configurations files and parses the log files to instruct the server what to do.

Installing it

Debian / ubuntu

apt-get install fail2ban

Gentoo / Sabayon

emerge fail2ban

Configuring it

Once installed there is the need of configuring it before making it run.

Fail2ban has two main configuration files called
/etc/fail2ban/fail2ban.conf
/etc/fail2ban/jail.com

Usually you will only need to change jail.conf

Jail.conf is divided by sections

[default]
Where all default options should go, all of them could be overwritten by the options written under the individual jails on this file

The options are:

enabled
Defines whether or not a given section is enabled or nor, its possible values are:

  • false
  • true
filter
This is not used in the default section as it is used to tell fail2ban client what it is looking for in the logfile, its values could be among others:

  • sshd
  • proftpd
  • httpd

basically it is how the service is identified on the log file being parsed

action
This option tells fail2ban what action to take once a rule is broken, could be specified a default action in the default section, and overwritten on each jail section you may need to change the default value.
logpath
With this option we need to pass the file to be parsed, should be taken into account that different distribution has different log files for instance for ssh in:

  • Fedora -> /var/log/secure
  • CentOS -> /var/log/secure
  • Debian -> /var/log/auth
  • Ubuntu -> /var/log/auth
  • Sabayon -> /var/log/messages

If you put a wrong value here, it will not work and will give you no errors.

ignoreip
This option is used to set one or some IPs that should not be blocked, no matter how many times a users fail in login from those IPs, use this with care
maxretry
This option is used to set the limit of retries a user have before he gets blocked
bantime
This option is used to set the time (in seconds) an IP will be banned, maybe a good option could be 5 minutes so, 300 seconds, this will put bots away while also letting legitimate users to try again after the ban time ends
destmail
Use this option to set the email of the person who should receive alerts when an IP is banned
banaction
Use this option to instruct with action will be taking in order to ban an offending IP. ie:

  • iptables --- To use Iptables in order to ban the offending IP
  • iptables-new --- To ban only new connections
  • iptables-multiport --- To ban all ports from the offending IP
  • shorewall --- To use Shorewall instead of Iptables
Protocol
Set here the default protocol to ban, TCP or UDP

Lets put an example to secure ssh access.

Example of /etc/fail2ban/fail2ban.conf

[Definition]
loglevel = 3 # 1=Error, 2=Warn, 3=Info, 4=Debug
logtarget = /var/log/fail2ban.log
socket = /var/run/fail2ban.sock

Now lets go with the /etc/fail2ban/jail.conf

[DEFAULT]

ignoreip = 127.0.0.1
bantime  = 600
maxretry = 3
backend = polling
destemail = root@localhost
banaction = iptables-multiport
mta = sendmail
protocol = tcp
action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
              %(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s]
# ban & send an e-mail with whois report and relevant log lines
# to the destemail.
action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
               %(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s]
action = %(action_)s

# JAILS
[ssh]
enabled = true
port	= ssh,sftp
filter	= sshd
logpath  = /var/log/auth.log
maxretry = 6

[apache]
enabled = false
port	= http,https
filter	= apache-auth
logpath = /var/log/apache*/*access.log
maxretry = 6

With these files we will have ssh enabled and secured, you see also here the configuration for apache, but it is disable.

to turn the service on run:

/etc/init.d/fail2ban start

Trackback URL for this post:

http://www.go2linux.org/trackback/270
StumbleUpon Toolbar

 If you like this article, subscribe to our full rss

If this article was somehow useful for you, you can leave something in the tip's jar

Please post your question in our forum and use comments only to leave your comments about the article, thanks.

this has been really

this has been really usefull,

i thank you good sir

Mr.C

I was looking for this for

I was looking for this for ages, I was getting really frustrated (dictionary attacks suck). Thanks!

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options

Captcha
This question is for testing whether you are a human visitor and to prevent automated spam submissions.

This site is proudly hosted at Bluefur Hosting