[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 defecto
Una 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