qmailadmin

7 settembre 2024 by Roberto Puzzanghera 5 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.

Come si può vedere, per praticità ho spostato i rogenti di qmailadmin nel mio spazio github. Ciononostante, tutte le informazioni su qmailadmin continueranno a essere pubblicate qui, e questa pagina rimane il posto ove chiedere eventulmente supporto.

Questa versione di qmailadmin mette insieme la versione originale 1.2.16 di Inter7 con le seguenti patch (vecchia patch combinata del 28 agosto 2023):

  • qmailadmin-skin, una patch che ho avuto il tempo di creare durante il lockdown, che dota il pannello di controllo di una nuova interfaccia grafica con tecnologia Mobile Responsive. Ho modificato 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.
  • Supporto a qmail-autoresponder (grazie a Nathanaël Semhoun)

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.

Una nota per gli utemti Debian: il pacchetto cracklib ha libpam-cracklib come dipendenza. Ora,libpam-cracklib andrebbe a sostituire libpam-modules, che è una libreria di sistema che non andrebbe assolutamente toccata senza una buona ragione e solo sapendo cosa si sta facendo. Pertanto suggerisco di installare cracklib dai sorgenti su /usr/local come spiegato sotto. Ho testato questa soluzione alcune volte e ho visto che non nuocea libpam.

Dunque la procedura per installare cracklib dai sorgenti è la solita:

CRACKLIB_VER=2.10.3
wget https://github.com/cracklib/cracklib/releases/download/v${CRACKLIB_VER}/cracklib-${CRACKLIB_VER}.tar.bz2
tar xjf cracklib-${CRACKLIB_VER}.tar.bz2
cd cracklib-${CRACKLIB_VER}
./configure --with-default-dict=/usr/share/cracklib/pw_dict
make
make install
ldconfig

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 wget https://github.com/cracklib/cracklib/releases/download/v${CRACKLIB_VER}/cracklib-words-${CRACKLIB_VER}.bz2
bunzip2 cracklib-words-${CRACKLIB_VER}.bz2
# formattare e compilare il dizionario
cracklib-format cracklib-words-${CRACKLIB_VER} | cracklib-packer pw_dict

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

ls
cracklib-words-${CRACKLIB_VER}  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  
dfdfdfdf 
dfdfdfdf: it does not contain enough DIFFERENT characters
​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

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

cd /usr/local/src
wget https://github.com/sagredo-dev/qmailadmin/archive/refs/tags/v${QMA_VERSION}.tar.gz
tar xzf v${QMA_VERSION}.tar.gz
cd qmailadmin-${QMA_VERSION}
chown -R root:root .

QMAILROOT=/var/www/qmail
./configure \
  --enable-htmldir=${QMAILROOT} \
  --enable-cgibindir=${QMAILROOT}/cgi-bin \
  --enable-cgipath=/cgi-bin/qmailadmin \
  --enable-imagedir=${QMAILROOT}/qmailadmin/files \
  --enable-imageurl=/qmailadmin/files \
  --enable-htmllibdir=${QMAILROOT}/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 \
  --disable-catchall \
  --enable-cracklib=/usr/share/cracklib/pw_dict

make
make install-strip

Abbiamo installato qmailadmin in /var/www/qmail

Apache virtual host

Define QMAILROOT /var/www/qmail
Define LOGDIR    /var/log/apache2

<VirtualHost *:443>
#       Include /path/to/sslstuff.conf
        ServerName mydomain.tld
        DocumentRoot ${QMAILROOT}
        ScriptAlias /cgi-bin/ ${QMAILROOT}/cgi-bin/
        ErrorLog  ${LOGDIR}/qmailadmin_error.log
        CustomLog ${LOGDIR}/qmailadmin_access.log common
        <Directory ${QMAILROOT}>
            Require all granted
            AllowOverride None
        </Directory>
        <Directory ${QMAILROOT}/cgi-bin>
            AllowOverride None
            Options ExecCGI
            Require all granted
        </Directory>
</VirtualHost>

Navigare ora su https://mydomain.tld/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 |

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 |

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 |

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 |

Forse ho risolto ricompilando

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

Grazie :)

Rispondi |

Ultimi commenti
Vedi anche...
Articoli recenti

RSS feeds