Montaje de un Servidor Ciego con Debian Lenny (14.-Seguridad con Fail2ban)

La aplicación que vamos a usar para protegernos se llama Fail2Ban y se va a encargar de hacer de guardián las 24 horas del día bloqueando a todo aquel que tenga un numero de intentos fallidos de login en alguno de nuestros servicios. Vamos con su instalación. Ejecutamos una Terminal y nos logeamos como súper usuario root con el comando su, a continuación lo instalamos con

#apt-get install fail2ban

Ahora vamos a renombrar el fichero de configuración jail.conf por jail.confOLD ya que este mismo nos puede servir como referencia

#cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.confOLD

Como podemos ver en el interior de el archivo jail.confOLD, ya hay varias opciones editadas por defecto y solo están a la espera de ser editadas para ser activadas. A continuación os voy a exponer cual es mi configuración para que os sirva como ejemplo.

Creamos un nuevo jail.conf para asignarle nuestras propias regla

#nano /etc/fail2ban/jail.conf

Especificando un poco sobre el fichero de configuración:

ignoreip : IPs de nuestra área local que queremos que se haga la vista gorda en caso de equivocación.
bantime : Tiempo que el usuario que fallo el logeo se quedara sin poder acceder al servicio especificado en segundos.
maxretry : Numero de intentos de logeo.
backend : Permite de un modo o otro la escritura de ficheros log.
destemail : Dirección de correo donde nos enviara las alertas.
action : Forma en que iptables aplica sus reglas.
mail-whois-lines : Se especifica que queremos que nos envié al correo en caso de intrusión.

Esas lineas explican la configuración básica de el fichero, a continuación vamos a ver un ejemplo de las celdas que creamos para cada servicio:

[ssh] : Tomare ssh como ejemplo pero esta es una linea que da igual lo que pongamos, ya que no afecta a la configuración.
enable : Podemos introducir true para activarlo y false para desactivarlo.
port : Nombre del servicio relacionado con el puerto.
filter : Nombre del archivo .conf ubicado en el subdirectorio /etc/fail2ban/filter.d, este va relacionado con algún filtro ya creado.
logpath : Ruta donde se ubica el fichero log donde se almacena toda la información de el servicio en cuestión.
maxretry : Numero de intentos fallidos, aquí podemos especificar un carácter diferente para cada celda que creemos.
findtime : Si alguien prueba x intentos en este periodo de tiempo especificado en segundos se le considera ataque.

Yo voy a proteger a los servicios SSH, FTP, y al WWW que son los que ofrecen mi servidor hacia internet. A cada uno le voy a dar un retardo de 300 segundos que vienen a ser unos 5 minutos para que durante ese tiempo el usuario que quiera conectarse no le sea una molestia esta medida de seguridad. 5 minutos es suficiente para evitar el uso malintencionado de un ataque por fuerza bruta o también llamado diccionario de nombres.

Si nos fijamos en mi fichero de configuración veréis un ejemplo de como lo tengo yo montado

# Fail2Ban configuration file.

#

# This file was composed for Debian systems from the original one

# provided now under /usr/share/doc/fail2ban/examples/jail.conf

# for additional examples.

#

# To avoid merges during upgrades DO NOT MODIFY THIS FILE

# and rather provide your changes in /etc/fail2ban/jail.local

#

# Author: Yaroslav O. Halchenko <debian@onerussian.com>

#

# $Revision: 281 $

#

# 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

ignoreip = 127.0.0.1 192.168.0.0/24

bantime = 300

maxretry = 3

# “backend” specifies the backend used to get files modification. Available

# options are “gamin”, “polling” and “auto”.

# yoh: For some reason Debian shipped python-gamin didn’t work as expected

# This issue left ToDo, so polling is default backend for now

backend = polling

#

# Destination email address used solely for the interpolations in

# jail.{conf,local} configuration files.

destemail = root@localhost

#

# ACTIONS

#

# Default banning action (e.g. iptables, iptables-new,

# iptables-multiport, shorewall, etc) It is used to define

# action_* variables. Can be overriden globally or per

# section within jail.local file

banaction = iptables-multiport

# email action. Since 0.8.1 upstream fail2ban uses sendmail

# MTA for the mailing. Change mta configuration parameter to mail

# if you want to revert to conventional ‘mail’.

mta = sendmail

# Default protocol

protocol = tcp

#

# Action shortcuts. To be used to define action parameter

# The simplest action to take: ban only

action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]

# ban & send an e-mail with whois report to the destemail.

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]

# Choose default action. To change, just override value of ‘action’ with the

# interpolation to the chosen action shortcut (e.g. action_mw, action_mwl, etc) in jail.local

# globally (section [DEFAULT]) or per specific section

action = %(action_)s

#

# JAILS

#

# Next jails corresponds to the standard configuration in Fail2ban 0.6 which

# was shipped in Debian. Enable any defined here jail by including

#

# [SECTION_NAME]

# enabled = true

#

# in /etc/fail2ban/jail.local.

#

# Optionally you may override any other parameter (e.g. banaction,

# action, port, logpath, etc) in that section within jail.local

[ssh]

enabled = true

port = XXX

filter = sshd

logpath = /var/log/auth.log

maxretry = 3

findtime = 600

# Generic filter for pam. Has to be used with action which bans all ports

# such as iptables-allports, shorewall

[pam-generic]

enabled = false

# pam-generic filter can be customized to monitor specific subset of ‘tty’s

filter = pam-generic

# port actually must be irrelevant but lets leave it all for some possible uses

port = all

banaction = iptables-allports

port = anyport

logpath = /var/log/auth.log

maxretry = 6

findtime = 600

[xinetd-fail]

enabled = false

filter = xinetd-fail

port = all

banaction = iptables-multiport-log

logpath = /var/log/daemon.log

maxretry = 2

findtime = 600

[ssh-ddos]

enabled = false

port = ssh

filter = sshd-ddos

logpath = /var/log/auth.log

maxretry = 6

findtime = 600

#

# HTTP servers

#

[apache]

enabled = false

port = http,https

filter = apache-auth

logpath = /var/log/apache*/*error.log

maxretry = 3

findtime = 600

# default action is now multiport, so apache-multiport jail was left

# for compatibility with previous (<0.7.6-2) releases

[apache-multiport]

enabled = false

port = http,https

filter = apache-auth

logpath = /var/log/apache*/*error.log

maxretry = 6

findtime = 600

[apache-noscript]

enabled = false

port = http,https

filter = apache-noscript

logpath = /var/log/apache*/*error.log

maxretry = 3

findtime = 600

[apache-overflows]

enabled = false

port = http,https

filter = apache-overflows

logpath = /var/log/apache*/*error.log

maxretry = 2

findtime = 600

#

# FTP servers

#

[vsftpd]

enabled = false

port = ftp,ftp-data,ftps,ftps-data

filter = vsftpd

logpath = /var/log/vsftpd.log

# or overwrite it in jails.local to be

# logpath = /var/log/auth.log

# if you want to rely on PAM failed login attempts

# vsftpd’s failregex should match both of those formats

maxretry = 6

findtime = 600

[proftpd]

enabled = false

port = ftp,ftp-data,ftps,ftps-data , XXX

filter = proftpd

logpath = /var/log/proftpd/proftpd.log

maxretry = 3

findtime = 600

[wuftpd]

enabled = false

port = ftp,ftp-data,ftps,ftps-data

filter = wuftpd

logpath = /var/log/auth.log

maxretry = 6

findtime = 600

#

# Mail servers

#

[postfix]

enabled = false

port = smtp,ssmtp

filter = postfix

logpath = /var/log/mail.log

findtime = 600

[couriersmtp]

enabled = false

port = smtp,ssmtp

filter = couriersmtp

logpath = /var/log/mail.log

findtime = 600

#

# Mail servers authenticators: might be used for smtp,ftp,imap servers, so

# all relevant ports get banned

#

[courierauth]

enabled = false

port = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s

filter = courierlogin

logpath = /var/log/mail.log

findtime = 600

[sasl]

enabled = false

port = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s

filter = sasl

logpath = /var/log/mail.log

findtime = 600

# DNS Servers

# 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

# Word of Caution:

# Given filter can lead to DoS attack against your DNS server

# since there is no way to assure that UDP packets come from the

# real source IP

[named-refused-udp]

enabled = false

port = domain,953

protocol = udp

filter = named-refused

logpath = /var/log/named/security.log

findtime = 600

[named-refused-tcp]

enabled = false

port = domain,953

protocol = tcp

filter = named-refused

logpath = /var/log/named/security.log

findtime = 600

Como podéis ver en la configuración anterior se especifican reglas para cada servicio especificando el puerto, filtro, ruta donde se ubica el fichero log que genera el servicio y el máximo de intentos de logeo. Una vez editado este fichero de configuración salimos y guardamos. A continuación ejecutamos nuestro guardián con:

#fail2ban-client start

Si todo va bien veremos algo así:

2009-05-13 19:15:49,367 fail2ban.server : INFO Starting Fail2ban v0.8.3

2009-05-13 19:15:49,368 fail2ban.server : INFO Starting in daemon mode

Si lo configuramos correctamente solo veremos esta linea, si no veremos alguna linea tipo Warning. ( ATENCIÓN : Ella siempre nos especifica el problema que tenemos en el fichero fail.conf).

Si queréis ver que tal andamos de bloqueos podéis ver el fichero fail2ban.log que se ubica en la ruta /var/log donde se guardan todos los bloqueos, ips, fecha y hora de quien nos está atacando

0 Respuesta a “Montaje de un Servidor Ciego con Debian Lenny (14.-Seguridad con Fail2ban)”


  • Ningún Comentario

Añade un Comentario