Fail2ban y Roundcube

abril 10, 2016
1 Star2 Stars3 Stars4 Stars5 Stars (3 votos, promedio: 5,00 de 5)
Cargando…

[Edit]
(Me he dado cuenta de que roundcube, al menos en sus últimas versiones loguea los inicios de sesión:

program/include/rcmail.php:    public function log_login($user = null, $failed_login = false, $error_code = 0)

así que en realidad no nos haría falta el plugin fail2ban.)

Después de probar diferentes configuraciones que he ido encontrando en foros o en diferentes blogs no conseguía hacer funcionar a roundcube con fail2ban.. Finalmente lo logré así que os dejo aquí los pasos que hay que seguir para roundcube 1.1.3 y Fail2Ban v0.8.13.

  1. Descargamos el plugin y lo colocamos en el directorio /ruta_a_roundcube/roundcube/plugins/fail2ban
  2. <?php
    /**
     * RoundCube Fail2Ban Plugin
     *
     * @version 1.1
     * @author Matt Rude [m@mattrude.com]
     * @url http://mattrude.com/plugins/roundcube-fail2ban-plugin/
     * @license GPLv3
     */
    class fail2ban extends rcube_plugin
    {
      function init()
      {
        $this->add_hook('login_failed', array($this, 'log'));
      }
    
      function log($args)
      {
        $log_entry = '[roundcube] FAILED login for ' .$args['user']. ' from ' .getenv('REMOTE_ADDR');
        $log_config = rcmail::get_instance()->config->get('log_driver');
        $log_dir = rcmail::get_instance()->config->get('log_dir');
    
        if ($log_config == 'syslog'){
           syslog(LOG_WARNING, $log_entry);
        } elseif ($log_config == 'file'){
           error_log('['.date('d-M-Y H:i:s O')."]: ".$log_entry."\n", 3, $log_dir."/userlogins");
        } else {
           echo 'WARNING!! The RoundCube Fail2Ban Plugin was unable to retrieve the log driver from the config, please check your config file for log_driver.';
        }   
      }
    
    }
    
    ?>
    
  3. Activamos el plugin en la configuración de roundcube.
    vi ruta_a_roundcube/config/config.inc.php
    		$config['plugins'] = array('password');
    		$config['log_dir'] = '/var/log/roundcube';
    		$config['log_driver'] = 'file'; // es la opción por defecto
    	

    Una vez hecho esto, ya deberíamos ver que se generan registros en var/log/roundcube/userlogins

  4. Ahora configuramos Fail2ban. Primero creando el filtro
    vi /etc/fail2ban/filter.d/roundcube.conf
    [Definition]
    failregex = FAILED|Failed login for .*. from  (in .*)?$
    ignoreregex =
    	
  5. y luego el jail:
    vi /etc/fail2ban/jail.d/roundcube.conf
    		# Monitor roundcube server
    
    		[roundcube]
    		enabled  = true
    		port     = http,https
    		filter   = roundcube
    		action   = iptables-multiport[name=roundcube, port="http,https"]
    		logpath  = /var/log/roundcube/userlogins
    		

Hecho esto y reiniciado el servicio Fail2ban ya debería funcionar, comprobamos que el fitrlo regex funcione correctamente:

fail2ban-regex /var/log/roundcube/userlogins /etc/fail2ban/filter.d/roundcube.conf

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *