qmailadmin

6 maggio 2020 Roberto Puzzanghera5 commenti

qmailAdmin è un software libero che fornisce un'interfaccia web per gestire sistemi qmail con domini virtuali basati su vpopmail. Fornisce amministrazione per la creazione/cancellazione di utenti, alias, forward, mailing list e autoesponder.

Patch combinata

  • qmailadmin-skin, una patch che ho avuto il tempo di creare durante il lockdown, che dota il pannello di controlla di una nuova interfaccia grafica con tecnologia Mobile Responsive. Ho modifica tutti i file che stanno nella cartella html e molti file .c, dal momento che molto codice html stava proprio all'interno dei file sorgenti. Ho anche aggiunto un foglio di stile nella cartella images e un paio di immagini png con il logo qmail. Non dovrebbe essere complicato aggiornare o modificare il template da ora in avanti.
  • Una patch che chiama la libreria cracklib al fine di controllare la robustezza della password scelta, giusto per evitare la creazione di account insicuri del tipo "test 123456".
  • Un'altra patch (suggeritami da Tony, che ringrazio), di cui non conosco l'autore, che consente di loggare i tentativi falliti di autenticazione. In questo modo sarà possibile bannare gli IP sospetti per mezzo di fail2ban. E' richiest la creazione del log file /var/log/qma-auth.log, che deve assegnare i privilegi di scrittura ad apache.
  • Una patch che restituisce la compatibilità con ezmlm-idx-7 (autore sconosciuto), per la quale ringrazio J.D. Trolinger che me l'ha segnalata.
  • Un fix all'account catchall di Luca Franceschini.
  • Una patch ad autorespond.c che corregge il modo erroneo con cui i file .qmail vengono creati.

Changelog

  • 2020.05.22
    - mod_user.html: removed the "required" attribute on password field, to allow modification with no password change

Ecco come si presenta il nuovo pannello di controllo:

Installazione di cracklib

Cracklib è una libreria di funzioni che fornisce il controllo del grado di complessità di una password per mezzo di una lista di parole note (dizionario da installare). cracklib confronta la password scelta cone le parole del dizionario e se esa è simile a una di queste restituisce un responso negativo.

Prima di installare qmailadmin dobbiamo installare cracklib e poi applicare la nostra patch. La patch migliora quella resa disponibile tempo fa da Inter7, che però agiva solo nella pagina di notifica dell'utente. Io ho fatto in modo qmailadmin facesse una chiamata a cracklib anche alla creazione dell'utente e nella pagina di cambio password..

Installazione del la libreria

E' molto probabile che esista un pacchetto cracklib fornito dalla propria distribuzione, magari con all'interno il dizionario già pronto, in tal caso si salti al prossimo paragrafo. In caso contrario installare cracklib alla solita maniera:

wget https://ftp.osuosl.org/pub/blfs/conglomeration/cracklib/cracklib-2.9.7.tar.bz2
tar xjf cracklib-2.9.7.tar.bz2
cd cracklib-2.9.7
./configure --with-default-dict=/usr/share/cracklib/pw_dict
make
make install

Installazione del dizionario

# Creare la cartella che ospiterà il dizionario (la stessa usata sopra nel comando configure)
mkdir /usr/share/cracklib
cd /usr/share/cracklib
# scaricare il dizionario (words list)
wget https://ftp.osuosl.org/pub/blfs/conglomeration/cracklib/cracklib-words-2.9.7.bz2
bunzip2 cracklib-words-2.9.7.bz2
# formattare e compilare il dizionario
cracklib-format cracklib-words-2.9.7 | cracklib-packer pw_dict

Controlliamo che il dizionario sia stato creato a partire dal file cracklibs-words:

ls
cracklib-words-2.9.7  pw_dict.hwm  pw_dict.pwd  pw_dict.pwi

Il database è costituito da quei tre file compilati pw_dict.*. E' sempre possibile arricchire il database aggiungendo righe con parole nuove e poi utilizzando i comandi cracklib-format/cracklib-packer come mostrato sopra.Prendiamo nota della posizione del database perchè la dovremo passare al configure di qmailadmin.

Test di cracklib

Facciamo ora qualche test per vedere anche come funziona cracklib:

# cracklib-check  
roberto 
roberto: it is based on a dictionary word 
123456 
123456: it is too simplistic/systematic 
roberto928 
roberto928: it is based on a dictionary word 
robe99 
robe99: it is based on a dictionary word 
99robe 
99robe: it is based on a dictionary word 
robe@99 
robe@99: it is based on a dictionary word
Qwerty123 
Qwerty123: it is based on a dictionary word 
Qwerty!123 
Qwerty!123: it is based on a dictionary word
Rob&02f 
Rob&02f: OK
Rob&rto 
Rob&rto: OK
^C

Per abilitare cracklib compilare qmailadmin come segue

--enable-cracklib=/usr/share/cracklib/pw_dict

Quando si installa la patch di cracklib da sola è necessario fornire i comandi aclocal/automake/autoconf per ricostruire il file configure. La mia patch combinata ha già un file configure ricostruito. Se si hanno problemi a compilare, perchè la propria versione di aclocal è datata, far precedere alla configurazione i comandi

aclocal
automake --install-missing
autoconf

Installazione

cd /usr/local/src
wget https://notes.sagredo.eu/files/qmail/tar/qmailadmin-1.2.16.tar.gz
wget https://notes.sagredo.eu/files/qmail/patches/qmailadmin/roberto-qmailadmin/roberto-qmailadmin-1.2.16_20200522.patch

touch /var/log/qma-auth.log
chgrp apache /var/log/qma-auth.log
chmod g+w /var/log/qma-auth.log

tar xzf qmailadmin-1.2.16.tar.gz
cd qmailadmin-1.2.16
patch -p1 < ../roberto-qmailadmin-1.2.16_20200522.patch
chown -R root.root .

./configure \
  --enable-htmldir=/usr/local/www/htdocs/qmail \
  --enable-cgibindir=/usr/local/www/htdocs/qmail/cgi-bin \
  --enable-cgipath=/cgi-bin/qmailadmin \
  --enable-imagedir=/usr/local/www/htdocs/qmail/qmailadmin/files \
  --enable-imageurl=/files \
  --enable-htmllibdir=/usr/local/www/htdocs/qmail/qmailadmin \
  --enable-qmaildir=/var/qmail \
  --enable-domain-autofill \
  --enable-vpopuser=vpopmail \
  --enable-vpopgroup=vchkpw \
  --enable-autoresponder-path=/usr/local/bin \
  --enable-ezmlmdir=/usr/local/bin/ezmlm \
  --enable-modify-quota \
  --disable-ezmlm-mysql \
  --disable-trivial-password  \
  --enable-cracklib=/usr/share/cracklib/pw_dict

make
make install-strip

Ciò installa qmailadmin in /usr/local/www/htdocs/qmail

Apache virtual host

<VirtualHost *:443>
        ServerName yourdomain.net
        DocumentRoot /usr/local/www/htdocs/qmail
        ScriptAlias /cgi-bin/ "/usr/local/www/htdocs/qmail/cgi-bin/"
        ErrorLog  "/usr/local/www/logs/qmailadmin_error.log"
        CustomLog "/usr/local/www/logs/qmailadmin_access.log" common
        <Directory "/usr/local/www/htdocs/qmail">
            AllowOverride None
            Require all granted
        </Directory>
        <Directory "/usr/local/www/htdocs/qmail/cgi-bin">
            AllowOverride None
            Options ExecCGI
            Require all granted
        </Directory>

        Alias /files/ "/usr/local/www/htdocs/qmail/qmailadmin/files/"
        <Directory "/usr/local/www/htdocs/qmail/qmailadmin/files">
            Require all granted
        </Directory>
</VirtualHost>

Navigare ora su https://yourdomain.net/cgi-bin/qmailadmin e loggarsi come postmaster.

Commenti

errore glibc qmailadmin

Ciao Roberto,

complimenti per la magnifica guida! :)

ti volevo segnalare un bel problema per quanto rigarda Qmailadmin

Nel tentativo di creare un forward, ricevo una pagina biancae l'operazione fallisce.

I log riportano questo:

*** glibc detected *** /usr/local/www/htdocs/qmail/cgi-bin/qmailadmin: double free or corruption (!prev): 0x000000000064f0a0 ***, referer: https://qmailadmin.mydomain.it/cgi-bin/qmailadmin/com/adddotqmail?user=postmaster&dom=adgs.eu&time=1347028682

ti č mai capitato?

Grazie,

Donato

Rispondi | Permalink

Ciao Donato, no, non mi e'

Ciao Donato, no, non mi e' mai capitato, ma proverei a ricompilare (non e' che hai fatto un downgrade delle glibc?)

Rispondi | Permalink

Ciao Roberto,Purtroppo no,

Ciao Roberto, Purtroppo no, non ho ho effettuato il downgrade. L'installazione é pulita. Il problema si verifica su slack 13.37 sia 32 che 64 bit... Cercando in giro Pare che la cosa potrebbe riguardare php o glibc ma nessuno sembra esserne venuto a capo. Il log che ho postato non ti dice nulla? Grazie, Donato.

Rispondi | Permalink

Il log mi dice poco, ma

Il log mi dice poco, ma essendoci di mezzo glibc proverei comunque a ricompilare qmailadmin. php non c'entra nulla con qmailadmin

Rispondi | Permalink

Forse ho risolto ricompilando

Forse ho risolto ricompilando come dicevi tu... ti terrņ aggiornato.

Grazie :)

Rispondi | Permalink