21 aprile 2022 Roberto Puzzanghera 0 commenti
Solr
è un server di indicizzazione basato su Apache
Lucene. Dovecot
communica con esso attraverso delle query HTTP/XML
. Il server di indicizzazione consente di fare ricerche di testo in modo veloce nelle mail, compreso il corpo dei messaggi.
Solr
è un servlet java
che richiede jdk
v. 8 o successivo. E' necessario accertarsi che l'eseguibile java
sia nel path:
PATH=$PATH:/usr/lib64/java/bin/
Scaricare i binari di Solr
e installare
cd /usr/local/src wget https://www.apache.org/dyn/closer.lua/lucene/solr/8.11.1/solr-8.11.1.tgz?action=download -O solr-8.11.1.tgz
Estrarre l'installer dall'archivio e lanciarlo. L'installer funzioznaerà per la maggior parte delle distribuzioni Linux
basate esu systemd
.
tar xzf solr-8.11.1.tgz solr-8.11.1/bin/install_solr_service.sh --strip-components=2 sudo bash ./install_solr_service.sh solr-8.11.1.tgz
Il server verrà avviato da systemd
all'avvio della macchina.
Su Slackware
l'installer contenuto nell'archivio non funzionerà, perchè basato su systemd
. Usare allora la mia versione modificata install_solr_slackware.sh dello script di installazione:
wget https://notes.sagredo.eu/files/qmail/install_solr_slackware.sh ./install_solr_slackware.sh solr-8.11.1.tgz
Per usare Solr
con Dovecot
, è necessario configurarlo in modo specifico come segue. Creiamo innanzitutto l'utente che eseguirà il server:
sudo -u solr /opt/solr/bin/solr create -c dovecot
La locazione del server è /opt/solr, mentre i dati e i file di configurazione per Dovecot
sono nella cartella /var/solr/data/dovecot. I log sono in /var/solr/logs.
Rinominare il file di configurazione /opt/solr/bin/solr.in.sh:
mv /opt/solr/bin/solr.in.sh.orig /opt/solr/bin/solr.in.sh
Ho abilitato le seguenti opzioni. La prima consente la connessione dalla mia DMZ
:
SOLR_IP_WHITELIST=127.0.0.1, 10.0.0.0/24 SOLR_SECURITY_MANAGER_ENABLED=true
A questo punto la documentazione ufficiale di Dovecot
raccomanda di sostituire alcuni file di configurazione:
cd /var/solr/data/dovecot/conf rm -f schema.xml managed-schema solrconfig.xml wget https://raw.githubusercontent.com/dovecot/core/master/doc/solr-config-7.7.0.xml -O solrconfig.xml wget https://raw.githubusercontent.com/dovecot/core/master/doc/solr-schema-7.7.0.xml -O schema.xml chown solr:solr solrconfig.xml schema.xml
Il file managed-schema viene generato a partire da schema.xml.
Solr
viene eseguito dall'utente solr:solr
. Questo utente necessità che il limite del numero dei file aperti sia incrementato fino ad almeno 65000. Su Slackware
il limite di default è 1024. Per aumentarlo per l'utente solr
modificare il file /etc/security/limits.conf o creare un file solr.conf nella cartella limits.d con i seguenti contenuti:
solr soft nofile 65536 solr soft nproc 65536 solr hard nofile 65536 solr hard nproc 65536
Nel mio caso solr
vive in un container "unprivileged" LXC
, per cui i limiti devono essere impostati non solo all'interno del container come già spiegato, ma anche nell'host per l'utente proprietario del container. Inoltre, è necessario aggiungere questa opzione nel file di configurazione:
lxc.prlimit.nofile = 65536
Siamo pronti per (ri)avviare il server:
sudo systemctl stop solr sudo systemctl start solr sudo systemctl status solr
Gli utenti Slackware
trovano lo script di avvio in /etc/init.d (ricordarsi di modificare anche il proprio rc.local
)
/etc/init.d/solr start sleep 5 /etc/init.d/solr status
Dovecot
Abbiamo già compilato Dovecot
con il supporto per Solr
(--with-solr
al momento della compilazione).
Abilitare il plugin dal file 20-imap.conf:
mail_plugins = $mail_plugins fts fts_solr
e aggiungere le opzioni di configurazionee nel blocco plugin{...} del file
90-plugin.conf file:
plugin { fts = solr fts_solr = url=https://solr.mydomain.tld:8983/solr/dovecot/ ... }
Le impostazioni generali del server sono disponibile attraverso un pannello di controllo web, allo stesso infirizzo http che abbiamo settato nel plugin di Dovecot
. Questo è un esempio di configurazione di apache
. Ho settato un proxy giusto connettermi a una normale porta 443 anzichè alla 8983, che è quella dove Solr
è in ascolto.
<VirtualHost *:443> SSL stuff here ServerName solr.mydmain.tld ErrorLog ${LOGDIR}/solr_error.log LogLevel warn CustomLog ${LOGDIR}/solr_access.f2b.log combined SSLProxyEngine On ProxyRequests Off ProxyPass / http://solr.mydomain.tld:8983/ ProxyPassReverse / http://solr.mydomain.tld:8983/ </VirtualHost>
Quando si naviga su https://solr.mydomain.tld si noterà che il pannello di controllo è esposto a tutti e che lamenta la mancanza di policy di sicurezza, che ora andiamo a impostare.
Nella dashpord del pannello di controllo web, guardare qual è il valore della variabile di ambiente solr.home
nella propria distribuzione:
Portarsi in quella directory e installare un file security.json che definisca i plugins authentication, authorization ed eventualmente auditlogging:
cat > /var/solr/data/security.json << __EOF__ { "authentication":{ "blockUnknown": true, "class":"solr.BasicAuthPlugin", "credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="}, "realm":"My Solr users", "forwardCredentials": false }, "authorization":{ "class":"solr.RuleBasedAuthorizationPlugin", "permissions":[{"name":"security-edit", "role":"admin"}], "user-role":{"solr":"admin"} }} } __EOF__ chown solr:solr /var/solr/data/security.json chmod o-r /var/solr/data/security.json
Ora riavviare il server e provare a loggarsi. L'utente è 'solr', con password temporanea 'SolrRocks', che cambieremo al primo login.
La sezione security suggerisce di risolvere alcuni problemi con i permessi. Questo è il mio setup:
Ho lasciato disabilitato TLS
perchè la connessione tra il proxy di apache
e il server Solr
è via http
.
# telnet 0 143 Trying 0.0.0.0... Connected to 0. Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready. a login user@mydomain.tld password a OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NA MESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY PREVIEW=FUZZY PREVIEW STATUS=SIZE SAVEDATE LI TERAL+ NOTIFY SPECIAL-USE QUOTA] Logged in a select Inbox * FLAGS (\Answered \Flagged \Deleted \Seen \Draft NonJunk $MDNSent Junk $label3 $Forwarded) * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft NonJunk $MDNSent Junk $label3 $Forwarded \*)] Flags permitted. * 308 EXISTS * 0 RECENT * OK [UIDVALIDITY 1285590712] UIDs valid * OK [UIDNEXT 19895] Predicted next UID * OK [HIGHESTMODSEQ 31675] Highest a OK [READ-WRITE] Select completed (0.001 + 0.000 secs). a SEARCH text "Dovecot" * SEARCH 35 50 51 55 56 57 58 62 63 74 75 76 77 121 129 130 146 150 151 158 163 164 165 173 196 201 202 203 213 225 226 227 228 230 231 232 249 250 262 263 264 289 a OK Search completed (0.309 + 0.001 + 0.043 secs). a logout
Failed after apply roberto-netqmail-1.06.patch-2022.02.13
23 maggio 2022 19:45
Failed after apply roberto-netqmail-1.06.patch-2022.02.13
23 maggio 2022 18:52
qmail-smtpd: read failed (hang up before quit cmd)
23 maggio 2022 16:17
qmail-smtpd: read failed (hang up before quit cmd)
22 maggio 2022 17:32
Failed after apply roberto-netqmail-1.06.patch-2022.02.13
19 maggio 2022 21:33
Failed after apply roberto-netqmail-1.06.patch-2022.02.13
19 maggio 2022 21:23
Failed after apply roberto-netqmail-1.06.patch-2022.02.13
17 maggio 2022 20:32
Failed after apply roberto-netqmail-1.06.patch-2022.02.13
17 maggio 2022 19:57
Failed after apply roberto-netqmail-1.06.patch-2022.02.13
13 maggio 2022 16:35
Failed after apply roberto-netqmail-1.06.patch-2022.02.13
13 maggio 2022 16:30
Tags
apache clamav dkim dovecot ezmlm fail2ban ftp guide hacks lamp letsencrypt linux linux-vserver lxc mariadb mediawiki mozilla mysql openboard owncloud patches php proftpd qmail qmail-spp qmailadmin rbl roundcube rsync sieve simscan slackware solr spamassassin spf ssh ssl tcprules tex ucspi-tcp vpopmail vqadmin