Progetto

Generale

Profilo

Configurazione di cluebringer per Postfix su wheezy

Cluebringer è il successore del precedente policyd e come questo consente di delegare una serie di possibili decisioni relative alle connessioni SMTP ad un demone di gestione delle policy di accesso. Questo è stato riscritto in Perl (e reso notevolmente più macchinoso da configurare) ma presenta una architettura modulare ed una nuova interfaccia di configurazione web. I vari moduli, oltre ad implementare il graylisting, permettono ad esempio di imporre limiti sulla quantità di posta inviata dal singolo utente, che possono risultare molto utili per arginare il caso, ormai abbastanza comune, in cui le credenziali per l'invio di posta autenticata vengono compromesse, ed un server si trova a spedire grandi quantità di posta elettronica per conto di un utente autenticato surrettiziamente.

Il programma è disponibile a partire da Wheezy, dove sostituisce il precedente postfix-policyd non più disponibile e lo si installa immediatamente direttamente dal pacchetto con:

apt-get install postfix-cluebringer-mysql postfix-cluebringer postfix-cluebringer-webui

Se non si usa Postgres è necessario installare il pacchetto aggiuntivo, come nell'esempio precedente, dato che di default viene installata la versione con il supporto per Postgres; alternativamente si può usare SQLite con il pacchetto postfix-cluebringer-sqlite3. Il programma viene eseguito come demone, ed è controllato dal file di configurazione /etc/cluebringer/cluebringer.conf, questo non viene installato di default e deve essere creato dal template /usr/share/doc/postfix-cluebringer/templates/cluebringer.conf inserendo le informazioni per l'accesso al database.

Il pacchetto, la cui qualità è putroppo molto scarsa come vedremo a breve, non installa più il database con dbconfig-common ed occorre fare a mano. Nella directory /usr/share/doc/postfix-cluebringer/database/ ci sono le istruzioni per creare le tabelle necessarie, ma quelle per MySQL sono platealmente sbagliate. In ogni caso occorrerà prima creare un database (che chiameremo con molta originalità cluebringer) con:

mysqladmin create cluebringer

ed un utente per la relativa gestione con eseguendo nella shell di MySQL l'istruzione:

grant all privileges on cluebringer.* to 'cluebringer'@'localhost' identified by 'passworlungaecomplicata';

a questo punto si potrà eseguire la creazione delle tabelle con:

zcat /usr/share/doc/postfix-cluebringer/database/policyd-db.mysql.gz \
  | sed -e 's/TYPE=InnoDB/ENGINE=InnoDB/' \
  | mysql cluebringer

(dove il sed è necessario per correggere l'errore del codice SQL, che altrimenti fallisce, bug #683275 tuttora non risolto).

Una volta creato con successo il database occorre passare alla configurazione del programma. La documentazione al riguardo è quantomeno confusa, si parla di guardare gli esempi ma l'unico file in /usr/share/doc/postfix-cluebringer/examples/ contiene una configurazione del database sbagliata che non indica username e password per l'accesso al database. In ogni caso si copi il template disponibile aggiustando coerentemente i permessi per evitare la leggibilità del file che conterrà la password di accesso al database:

cp /usr/share/doc/postfix-cluebringer/templates/cluebringer.conf /etc/cluebringer/cluebringer.conf
chmod 640 /etc/cluebringer/cluebringer.conf
chgrp cluebringer /etc/cluebringer/cluebringer.conf

Per inserire i dati necessari all'accesso al database si tratta di modificare le righe seguenti:

DSN=DBI:mysql:database=cluebringer;host=localhost

#DB_Type=_DBC_DBTYPE_
#DB_Host=_DBC_DBSERVER_
#DB_Port=_DBC_DBPORT_
#DB_Name=_DBC_DBNAME_
Username=cluebringer
Password=passworlungaecomplicata

Per poter utilizzare l'interfaccia web, che consente di gestire le politiche impostate sul database, viene fornito un esempio di configurazione di apache di relativa (praticamente nulla) utilità nel file /usr/share/doc/postfix-cluebringer-webui/examples/httpd/cluebringer-httpd.conf, che si può copiare sotto /etc/apache2/conf.d per rendere l'interfaccia accessibile solo da localhost sulla URL http://server/cluebringer. Per avere qualcosa di utilizzabile si consiglia di creare un opportuno accesso autenticato con:

htpasswd -c /etc/apache2/cluebringer-users cluebringer
chmod 640 /etc/apache2/cluebringer-users
chgrp www-data /etc/apache2/cluebringer-users

e si modifichi /etc/apache2/conf.d/cluebringer-httpd.conf con il seguente contenuto che forza l'autenticazione sotto SSL:

<Directory /usr/share/postfix-cluebringer-webui/webui>
    AuthType Basic
    AuthName "Cluebringer Web Interface" 
    AuthUserFile /etc/apache2/cluebringer-users
    Require user cluebringer
    SSLRequireSSL
    DirectoryIndex index.php
</Directory>

Oltre ad apache, occorre anche configurare opportunamente la applicazione web, tramite il file /etc/cluebringer/cluebringer-webui.conf che viene installato dal pacchetto. Anzitutto dato che questo viene installato leggibile al mondo, e dovrà contenere le password di accesso al database, occorre correggere i permessi con:

chmod 640 /etc/cluebringer/cluebringer-webui.conf
chgrp www-data /etc/cluebringer/cluebringer-webui.conf

poi occorrerà impostare le credenziali di accesso al database inserendo nel file (una sezione di codice PHP) un contenuto del tipo:

$DB_DSN="mysql:host=localhost;dbname=cluebringer";
$DB_USER="cluebringer";
$DB_PASS="passworlungaecomplicata";

Configurazione di Postfix

Di default il servizio viene posto in ascolto sulla porta 10031 su localhost e per poterlo utilizzare si deve configurare postfix per fargli utilizzare il servizio fornito da cluebringer questo si fa inserendo la richiesta di controllo all'interno della direttiva smtpd_recipient_restrictions, in particolare occorrerà richiedere l'uso servizio con l'aggiunta della direttiva check_policy_service.

Un esempio della direttiva che consente di ottenere il controllo del servizio tramite cluebringer è allora il seguente:

smtpd_recipient_restrictions = 
         reject_non_fqdn_sender,
         reject_non_fqdn_recipient,
         reject_unknown_recipient_domain,
         permit_mynetworks,
         permit_sasl_authenticated,
         reject_unauth_destination,
         reject_unauth_pipelining,
         reject_unknown_sender_domain,
         reject_non_fqdn_hostname,
         reject_invalid_hostname,
         reject_rbl_client zen.spamhaus.org,
         check_policy_service inet:127.0.0.1:10031,
         permit