Plugins per Roundcube

5 settembre 2017 Roberto Puzzanghera7 commenti

I plugin che ho abilitato sono (al momento):

  • password, già incluso nella cartella plugins
  • managesieve, che scrive gli script per filtrare le email in arrivo (rigetto, spostamento in una cartella specifica, etc.). Notare che per usare questo è necessario aver abilitato  Dovecot managesieve.
  • SpamAssassin-User-Prefs-SQL, che consente all'utente di caricare su database SQL le prefenze su come Spamassassin deve filtrare la sua posta, creando ad esempio una black list.
  • Markasjunk2, un plugin che consente di aggiungere con un click nel bottone "Marca come spam" l'indirizzo e-mail del mittente alla propria blacklist, o viceversa, o lanciare un comando come sa_learn.
  • rcguard.Questo plugin registra i tentativi di accesso falliti e presenta una verifica reCAPTCHA dopo un certo numero di accessi falliti.
  • Context Menu. Aggiunge un menu di dialogo alla lista dei messaggi, attivabile con il tasto destro, che comprende tra le altre cose la lista delle cartelle, la rubrica, il marcamento come letto/non letto, cancella, rispondi e inoltra. 
  • autologon. Esegue il login da una pagina esterna (CMS)
  • logout_redirect. Versione modificata per redirigere alla home page dopo il logout
  • newmail_notifier. può notificare le nuove mail in tre modi: focalizzando la finestra del browser e cambiandone l'icona, riproducendo un suono, oppure mostrando la notifica sul desktop (via webkitNotifications).
  • carddav. CardDav client. Può sincronizzare la rubrica con un server CardDav server come owncloud o SoGO.
  • enigma. Fornisce il supporto per la visualizzazione e l'invio di messaggi firmati e/o criptati in formato PGP (RFC 2440) e PGP/MIME (RFC 3156).

Per abilitare un plugin è necessario includerlo in $config['plugins'] all'interno di main.inc.php in questo modo

$config['plugins'] = array(
'password',
'sieverules',
'quickrules',
'sauserprefs',
'markasjunk2',
'rcguard',
'contextmenu',
'newmail_notifier'
 );

Password

E' ora possibile usare, oltre che il driver vpopmaild, anche il driver sql (grazie a John D. Trolinger).

Driver vpopmalid

 

# cd plugins/password
# cp -p config.inc.php.dist config.inc.php
# nano config.inc.php

$config['password_driver'] = 'vpopmaild';

// Determine whether current password is required to change password.
// Default: false.
$config['password_confirm_current'] = true;

// Require the new password to be a certain length.
// set to blank to allow passwords of any length
$config['password_minimum_length'] = 8;

// Require the new password to contain a letter and punctuation character
// Change to false to remove this check.
$config['password_require_nonalpha'] = true;

// vpopmaild Driver options
// -----------------------
// The host which changes the password
$config['password_vpopmaild_host'] = 'your-IP';

// TCP port used for vpopmaild connections
$config['password_vpopmaild_port'] = 89;

Driver sql

// We have MYSQL for our VPOPMAIL DATABASE so we use the sql driver
$config['password_driver'] = 'sql';

// SQL Driver options
// ------------------
// PEAR database DSN for performing the query. By default
// Roundcube DB settings are used.
// We have a VPOPMAIL DB  and the database and table name is vpopmail
$config['password_db_dsn'] =
'mysql://vpopmail:YOURPASSWORDGOESHERE@[mysql-IP]/vpopmail';

// The username and domainname are different columns JDT
$config['password_query'] = 'UPDATE vpopmail set
pw_passwd=ENCRYPT(%p,concat("$1$",right(md5(rand()),8 ),"$")),
  pw_clear_passwd=%p where pw_name=%l and pw_domain=%d';

// VPOPMAIL uses salted hash so md5 JDT
$config['password_crypt_hash'] = 'md5';

Roundcube's password plugin

Managesieve

cd /usr/local/www/htdocs/roundcube/plugins
cd managesieve
cp -p config.inc.php.dist config.inc.php

Modificare come segue il file di configurazione (ricordare che la porta del server dovecot-managesive è ora 4190, 2000 è obsoleta)

$config['managesieve_port'] = 4190;
$config['managesieve_host'] = 'your-server-IP';

E questo è ciò che dovresti vedere nel log di dovecot con un semplice filtro per redirect

Oct 22 00:03:13 lda(test@yourdomain.net): Info: sieve: msgid=<c3445037f979a8cb793df1f858b7a4f9@somedomain.com>: forwarded to <someone@somewhere.net>

Si ricordi che, per rendere operative le regole sieve, è necessartio settare il file .qmail almeno per l'utente o per l'intero dominio come espiegato prima nella pagina sieve su Dovecot, altrimenti la LDA sarà vpopmail invece di Dovecot e le sieve sieve rule saranno ignorate.

Roundcube's sieverules plugin

quickrules

Adds a button to the message list to allow the quick creation of rules in the SieveRules plugin. Infomration from selected emails is used to prefile the new rule form.

  • Versione: 2.0
  • Richiede: sieverules plugin

Questo plugin non è più mantenuto e non vi sono al momento pacchetti alternativi. Ne ho però modificato una vecchia versione che funziona ora anche con la skin attuale.

cd /path/to/roundcube/plugins
wget /files/qmail/tar/RC-plugins/quickrules.tar.gz
tar xzf quickrules.tar.gz
chown -R root.apache quickrules
chmod -R o-rx quickrules

SpamAssassin-User-Prefs-SQL

Scaricare e settare i privilegi:

cd /usr/local/www/htdocs/roundcube/plugins
GIT_SSL_NO_VERIFY=true git clone https://github.com/JohnDoh/Roundcube-Plugin-SpamAssassin-User-Prefs-SQL.git sauserprefs
cd sauserprefs
chown -R root.apache .
chmod -R o-rx .

Configurare la connessione mysql:

> cp -p config.inc.php.dist config.inc.php
> nano config.inc.php
$config['sauserprefs_db_dsnw'] = 'mysqli://spamassassin:[PASSWORD]@[mysql-IP]/spamassassin';

Se l'estensione 'mysqli' non è disponibile nel vostro php usare 'mysq' l nell'ultima stringa qui sopra.

Entrare nella scheda relativa al plugin dal menù "Impostazioni" e inserire un record  nella black list e/o nella white list:

Roundcube's sauserprefs plugin

Il test della funzionalità userprefs di spamassassin verrà spiegato più avanti. Per ora è sufficiente controllare che sia stato correttamente inserito/modificato il record nella tabella userprefs del DB spamassassin.

Markasjunk2

Con questo bel plugin, fatto per l'utente finale, è possibile aggiungere l'indirizzo e-mail del mittente alla propria blacklist, o lanciare un comando come sa_learn. E' sufficiente cliccare sul bottone "Segnala come Spam" per creare un nuovo record "Black_list from" nel database e spostare il messaggio nella cartella Spam, contrassegnandolo (volendo in automatico) come già letto. Per i messaggi che sono finiti erroneamente nello Spam, si può cliccare bottone "Non è spam" per creare un nuovo record "White_list from" nel database.

Scompattare e settare i privilegi come al solito:

cd /usr/local/www/htdocs/roundcube/plugins
GIT_SSL_NO_VERIFY=true git clone https://github.com/JohnDoh/Roundcube-Plugin-Mark-as-Junk-2.git markasjunk2
cd markasjunk2
chown -R root.apache .
chmod -R o-rx .

Per usare il plugin con il driver sa_blacklist:

> mv config.inc.php.dist config.inc.php
$config['markasjunk2_learning_driver'] = 'sa_blacklist';

Per settare altri drivers leggere il file README.

rcguard

Questo plugin registra gli accessi falliti e richiede agli utenti una verifica reCAPTCHA dopo un certo numero di tentativi. Ciò aumenta la protezione contro attacchi da parte di automi.

cd /usr/local/www/htdocs/roundcube/plugins
GIT_SSL_NO_VERIFY=true git clone https://github.com/dennylin93/rcguard.git rcguard
cd rcguard
chown -R root.apache .
chmod -R o-rx .
mv config.inc.php.dist config.inc.php

E' necessario ottenere una chiave da http://recaptcha.net/whyrecaptcha.html. Copiare la chiave nel file di configurazione:

> nano config.inc.php

// Public key for reCAPTCHA
$config['recaptcha_publickey'] = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

// Private key for reCAPTCHA
$config['recaptcha_privatekey'] = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

Creare ora latabella mysql dove salvare il registro degli accessi falliti. Gli IP sono cancellati dopo un po' di tempo.

> /usr/local/mysql/bin/mysql -u root -p
mysql> use roundcube;

CREATE TABLE `rcguard` (
  `ip` VARCHAR(40) NOT NULL,
  `first` DATETIME NOT NULL,
  `last` DATETIME NOT NULL,
  `hits` INT(10) NOT NULL,
  PRIMARY KEY (`ip`),
  INDEX `last_index` (`last`),
  INDEX `hits_index` (`hits`)
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;

quit;

E questo è tutto. La verifica captha sarà presentata dopo 5 tentativi falliti. Naturalmente si può variare questo parametro dl file di configurazione.

Context Menu

Aggiunge un menu di dialogo alla lista dei messaggi, attivabile con il tasto destro, che comprende tra le altre cose la lista delle cartelle, la rubrica, il marcamento come letto/non letto, cancella, rispondi e inoltra.

Info & scarica: https://github.com/JohnDoh/Roundcube-Plugin-Context-Menu/tree/release-1.0

Scarica il plugin:

cd /usr/local/www/htdocs/roundcube/plugins
GIT_SSL_NO_VERIFY=true git clone https://github.com/JohnDoh/Roundcube-Plugin-Context-Menu.git contextmenu
chown -R root.apache contextmenu
chmod -R o-rx contextmenu

Nessuna configurazione è richiesta.

autologon

Consente il login da un form esterno (CMS)

E' necessario adattare il plugin di default messo a disposizione a livello di esempio dallo stesso Thomas Bruederli:

<?php

/**
* Sample plugin to try out some hooks.
* This performs an automatic login if accessed from localhost
*
* @license GNU GPLv3+
* @author Thomas Bruederli
*/

class autologon extends rcube_plugin
{
  public $task = 'login';

  function init()
  {
    $this->add_hook('startup', array($this, 'startup'));
    $this->add_hook('authenticate', array($this, 'authenticate'));
  }

  function startup($args)
  {
    $rcmail = rcmail::get_instance();

    // change action to login
    if (empty($_SESSION['user_id']) && !empty($_POST['_autologin']) && $this->is_localhost())
    $args['action'] = 'login';
    return $args;
  }

  function authenticate($args)
  {
    if (!empty($_POST['_autologin']) && $this->is_localhost()) {
      $args['user'] = $_POST['_user'];
      $args['pass'] = $_POST['_pass'];
      $args['host'] = '[localhost | mail-server-IP]';
      $args['cookiecheck'] = false;
      $args['valid'] = true;
    }
    return $args;
  }

  function is_localhost()
  {
    return true;
    //    return $_SERVER['REMOTE_ADDR'] == '::1' || $_SERVER['REMOTE_ADDR'] == '127.0.0.1';
  }
}

Nella pagina html del proprio CMS si può usare un form come questo:

<form name="form" action="http://your.webmail.url/" method="post">
<input type="hidden" name="_action" value="login" />
<input type="hidden" name="_task" value="login" />
<input type="hidden" name="_autologin" value="1" />

<table>
<tr>
    <td>Utente</td>
    <td><input name="_user" id="rcmloginuser" autocomplete="off" value="" type="text" /></td>
</tr>
<tr>
    <td>Password</td>
    <td><input name="_pass" id="rcmloginpwd" autocomplete="off" type="password" /></td>
</tr>
<tr>
    <td colspan="2"><input type="submit" value="Login" /></td>
</tr>
</table>

</form>

logout_redirect

Se si è installato l'autologon plugin quest'altro può essere utile per redirigere gli utenti alla home page del proprio sito una volta fatto il logout.

cd /usr/local/www/htdocs/roundcube/plugins
wget http://notes.sagredo.eu/files/qmail/tar/RC-plugins/logout_redirect_rc0.5_v1.2-MN.tar.gz
tar xzf logout_redirect_rc0.5_v1.2-MN.tar.gz
cd logout_redirect
chown -R root.apache logout_redirect
chmod -R o-rx logout_redirect

Il plugin logout_redirect deve essere l'ultimo della lista dei plugin in main.inc.php altrimenti i successivi non vengono eseguiti.

Modificare in questo modo il file config.inc.php all'interno della cartella config del plugin stesso:

$config['logout_redirect_url'] = 'http://www.yoursite.net';

newmail_notifier

Supporta tre metodi di notifica:

  1. Basic - focalizza la finestra del browser e cambia la favicon
  2. Sound - riprodice un suono wav
  3. Desktop - mostra la notifica sul desktop (usando webkitNotifications, supportato da Chrome e Firefox con 'HTML5 Notifications' plugin)

Questo plugin è gia incluso nell'installazione di Roundcube. E' sufficiente abilitarlo rinominando il file config...

cd plugins/newmail_notifier
cp config.inc.php.dist config.inc.php

...e scegliendo il metodo di notifica desiderato:

// Enables basic notification
$config['newmail_notifier_basic'] = true;

// Enables sound notification
$config['newmail_notifier_sound'] = true;

// Enables desktop notification
$config['newmail_notifier_desktop'] = false;

CardDav

Questo è un plugin che può servire per sincronizzare la rubrica con un server CardDAV come ownCloud o SoGO.

Maggiori informazioni qui: http://www.benjamin-schieder.de/carddav.html

cd /usr/local/www/htdocs/roundcube/plugins
GIT_SSL_NO_VERIFY=true git clone https://github.com/blind-coder/rcmcarddav carddav
cd carddav 
chown root:root .

Installare le dipendenze tramite composer:

curl -sS https://getcomposer.org/installer | php
php composer.phar install

Ora è necessario installare le tabelle del datadase tramite il file opportuno salvato nella sottocartella dbmigrations/0000-dbinit/.

Dopodichè è possibile configurare la rubrica. Se si usa un server ownCloud, queste sono le impostazioni:

Per i mobile Android la migliore applicazione è CardDAV.

Risoluzione dei problemi

Se si incorre in un errore curl del genere quando si scaricano le dipendenze

All settings correct for using Composer

PHP Warning:  failed loading cafile stream: `/etc/ssl/certs/cacert.pem' in - on line 762
PHP Warning:  file_get_contents(): Failed to enable crypto in - on line 762
PHP Warning:  file_get_contents(https://getcomposer.org/versions): failed to open stream: operation failed in - on line 762
PHP Warning:  Invalid argument supplied for foreach() in - on line 508
None of the 0 stable version(s) of Composer matches your PHP version (5.6.21 / ID: 50621)

è necessario installare un certificato:

cd /etc/ssl/certs
wget --no-check-certificate http://curl.haxx.se/ca/cacert.pem

e dire a php dove è stato installato modificando il proprio php.ini

openssl.cafile=/etc/ssl/certs/cacert.pem

Enigma

  • maggiori informazioni qui
  • prerequisiti: gpg (gnupg and libgpg-error on Slackware systems)

Aggiornamento: dai miei test sembra che sia necessario aggiornare Crypt_GPG alla versione 1.6.2

Questo plugin fornisce il supporto per la visualizzazione e l'invio di messaggi firmati e/o criptati in formato PGP (RFC 2440) e PGP/MIME (RFC 3156).  Il plugin usa binari gpg sul server e memorizza tutte le chiavi (incluse quelle private degli utenti) sul server. Il criptaggio e il decriptaggio viene fatto lato server. Pertanto questo plugin è per gli utenti che ripongono fiducia nel server stesso.

Creaiamo il file di configurazione

cd /path/to/roundcube/plugins/enigma
cp -p config.inc.php.dist config.inc.php

Per default chiavi sono memorizzate nella directory enigma/home dir. Noi impostiamo questa directory in modo che non sia accessibile via web, assegnando ad apache i privilegi di scrittura in questa cartella

mkdir -p /path/to/roundcube-enigma-home
chown -R root:apache /path/to/roundcube-enigma-home
chmod -R g+w /path/to/roundcube-enigma-home

Modifichiamo ira la configurazione di apache al fine di assegnare i privilegi di accesso alla directory appena creata

Require all granted

Non dimentichiamo di riavviare apache a questo punto

apachectl restart

Ora è necessario modificare il file di configurazione di enigma per far si che venga puntata la home dir appena creata

$config['enigma_pgp_homedir'] = '/path/to/roundcube-enigma-home';

Il plugin enigma richiede che la libreria Crypt_GPG sia installata esattamente in /path/to/roundcube/plugins/enigma/lib/Crypt_GPG. Considerato il fatto che roundcube resetta la variabile di php include_path (che nel php.ini è settata a /path/to/php/lib), se si decide di installare questa libreria mediante l'uso di pear si otterrà un  "Server error". Per evitare questo scarichiamo e installiamo manualmente la libreria

cd /path/to/roundcube/plugins/enigma/lib
wget http://download.pear.php.net/package/Crypt_GPG-1.6.2.tgz
tar xzf Crypt_GPG-1.6.2.tgz
ln -s Crypt_GPG-1.6.2/Crypt
chown -R root:apache Crypt*

Il setup dei cerrtificati è semplice e intuitivo. Referirsi a questa pagina per vedere come fare.

Commenti

Errore cambio password vpopmail (5.4.32) roundcube (1.2.3)

Ciao Roberto ti scrivo per ringraziarti per l'ottimo lavoro e per chiederti se puoi aiutarmi in un problema su cambio password con roundcube (1.2.3) e vpopmail backend (5.4.32) in pratica se cerco di utilizzare dei caratteri speciali per generare la password Roundcube mi rilascia un errore "impossibile salvare la password" e non prosegue. 

Rispondi | Permalink

non saprei... leggendo

non saprei... leggendo velocemente il codice (non ho avuto molto tempo) ho visto che i caratteri debbono essere compresi nel set di caratteri definiti dal parametro password_charset, che per default è ISO-8859-1, ma immagino che i caratteri che stai usando non siano al di fuori di questo set...

Rispondi | Permalink

errore sieverules

Per prima cosa complimenti, ho trovato la soluzione ai miei dubbi grazie al tuo blog.

Ho un problema con sieverules, l'ho configurato come da tue indicazioni, ho portato le modifiche nei file 15-lda.conf, 20-managesieve.conf e 90-sieve.conf ma quando entro in roundcube, impostazioni, filtri dovecot mi restituisce l'errore

May 02 16:24:06 managesieve(1234@fabrizio.intra): Error: sieve-storage: userdb(1234@fabrizio.intra) didn't return a home directory or sieve script location
May 02 16:24:06 managesieve(1234@fabrizio.intra): Fatal: Failed to open Sieve storage.


Mi sai dire dove sbaglio?

La configurazione che uso postfix + dovecot + ldap su una centos 6.2

Rispondi | Permalink

uh.. non sono un esperto di

uh.. non sono un esperto di postfix.. ad ogni modo hai provato a vedere se il server sieve risponde?

# telnet localhost 4190

Rispondi | Permalink

Funziona, ok, mi

Funziona, ok, mi restituisce:

[root@newmail ~]# telnet localhost 4190
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
"IMPLEMENTATION" "Dovecot Pigeonhole"
"SIEVE" "fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date"
"NOTIFY" "mailto"
"SASL" "PLAIN LOGIN"
"STARTTLS"
"VERSION" "1.0"
OK "Dovecot IMAP Server ready."

Il problema credo che sia legato al plugin, lancio una tail -f /var/log/dovecot e quando clicco su "filtri" compare l'errore. Non ne vengo fuori.

Rispondi | Permalink

devi avere qualche problema

devi avere qualche problema con lo userdb che non riesce a passare la home dir dove salvare lo script.. ma qui non posso essere di aiuto.. le cartelle inbox, sent ecc vengono viste con la webmail?

Rispondi | Permalink

Risolto

Ciao Roberto, anche se a distanza di 6 mesi mi sembra corretto chiudere il cerchio, ho risolto in questo modo:

nella configurazione del dovecot.conf non gradisce

sieve_dir = ~/sieve
sieve=~/.dovecot.sieve

e ho specificato la path assoluta della maildir_location:

sieve_dir = /home/vmail/%d/%u/sieve
sieve = /home/vmail/%d/%u/sieve/.dovecot.sieve

Grazie per l'aiuto e per la guida Smile

Rispondi | Permalink