[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.
- Descargamos el plugin y lo colocamos en el directorio
/ruta_a_roundcube/roundcube/plugins/fail2ban - 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 defectoUna vez hecho esto, ya deberíamos ver que se generan registros en var/log/roundcube/userlogins
- Ahora configuramos Fail2ban. Primero creando el filtro
vi /etc/fail2ban/filter.d/roundcube.conf
[Definition] failregex = FAILED|Failed login for .*. from
(in .*)?$ ignoreregex = - 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
<?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.';
}
}
}
?>
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



