Come installare ImunifyAV e integrarlo con ISPConfig in ambiente Ubuntu LTS

ImunifyAV è uno strumento per la ricerca di malware, disponibile gratuitamente nella versione base, per server Linux, viene utilizzato prevalentemente nell’ambito dei siti web ospitati nel server. Si integra con i principali pannelli di gestione dell’hosting:

  • cPanel
  • Plesk
  • DirectAdmin
  • ISPmanager

Può però essere installato ed utilizzato anche su server che non usano pannelli di gestione o che utilizzano pannelli non direttamente supportati come quelli elencati precedentemente.

Sul sito https://docs.imunifyav.com/ potete provare dettagliate istruzioni per l’installazione con i pannelli supportati o anche nella versione Stand-alone ovvero nel caso si usi un pannello non supportato o nessun pannello di gestione dell’hosting.

In questo tutorial vediamo come installare la versione Stand-alone integrandola (per quanto possibile) con il pannello open source ISPConfig.

ImunifyAV è composto da un servizio “imunify-antivirus” ed una interfaccia web per la gestione delle scansioni alla ricerca del malware, la verifica dei malware trovati. È anche possibile, sempre dall’interfaccia web, sottoscrivere un abbonamento alla versione ImunifyAV+ tramite la quale è poi possibile procedere anche alla rimozione guidata del malware rilevato.

Procediamo quindi all’installazione e l’integrazione in un server già operativo con Ubuntu 18.04LTS e ISPConfig.

Per prima cosa occorre creare uno spazio web che ospiterà l’interfaccia web di ImunifyAV: collegatevi quindi all’interfaccia web di ISPConfig e create un “Website” con un opportuno “host name”, configurate il DNS di conseguenza e verificate che il sito sia raggiungibile.

Sempre dall’interfaccia di ISPConfig prendete nota della “Document Root” del sito che avete creato (la trovate nel TAB “Domain” del “Website”) questa sarà del tipo:

Document Root:/var/www/clients/clientX/webYY

Questo significa che la cartella root del sito (quella che contiene i file HTML o PHP per intenderci) è:

/var/www/clients/clientX/webYY

I file in essa contenuti dovranno appartenere all’utente “webYY” che fa parte del gruppo “clientX”.

A questo punto dovete collegarvi in SSH al server e ottenere privilegi di “root”.

Create il file, e anche eventualmente le cartelle: /etc/sysconfig/ e /etc/sysconfig/imunify360 se non già esistenti (nei sistemi Ubuntu /etc/sysconfig/ deve essere creata in quanto è tipica dei sistemi CentOS).

vi /etc/sysconfig/imunify360/integration.conf

Nel file inserite le seguenti righe:

[paths]
ui_path = /var/www/clients/clientX/webYY/web
ui_path_owner = webYY:clientX

ui_path indica allo script di installazione dove installare i file per l’interfaccia web di ImunifyAV (ATTENZIONE: non deve avere un “/” finale), ui_path_owner indica allo stesso script quale utente e gruppo assegnare ai file copiati nella ui_path.

Al momento in cui questo tutorial è stato scritto lo script di installazione non esegue correttamente l’impostazione dell’utente e del gruppo quindi vi consiglio al temine dell’esecuzione dello script di verificare i file nella ui_path ed eventualmente procedere ad impostare i corretti user e group:

cd/var/www/clients/clientX/webYY/web
chown -R webYY:clientX *

Procediamo quindi all’esecuzione dello script di installazione, prima deve essere scaricato:

wget https://repo.imunify360.cloudlinux.com/defence360/imav-deploy.sh

Quindi deve essere reso eseguibile:

chmod +x imav-deploy.sh

Quindi va eseguito:

./imav-deploy.sh

ATTENZIONE: se durante l’esecuzione vengono visualizzati degli errori relativi alla creazione o allo spostamento di file o cartelle nella ui_path, aggiungete alla ui_path una sotto-cartella (ad esempio: /var/www/clients/clientX/webYY/web/iav), terminata l’installazione spostate il contenuto della sotto-cartella nella ui_path indicata precedentemente.

Una volta terminato lo script senza errori verificare la presenza dei file nella cartella del sito e provate ad accedere con il browser al sito precedentemente creato, dovrebbe apparire una richiesta di user e password:

Di default l’unico amministratore di questa interfaccia è l’utente “root”, in molti sistemi questo utente è disabilitato e comunque non ha una password nota. Per abilitare altri utenti come amministratori per l’interfaccia web di ImunifyAV dovete editare il file:

/etc/sysconfig/imunify360/auth.admin

Suggerisco di cancellare da questo file “root” e sostituirlo con lo stesso utente che utilizzate per collegarvi all’interfaccia di gestione di ISPConfig, a questo punto potrete utilizzare le stesse credenziali che già usate per il pannello IPSConfig anche per ImunifyAV.

Una volta collegati verrà visualizzata una pagina con gli utenti esistenti e le relative “Home directory”:

In mancanza però di integrazione con il pannello verranno visualizzati anche tutti gli altri utenti esistenti sul server e non solo quelli webYY a cui appartengono i siti e per i quali siamo interessati a fare le scansioni per ricercare eventuali malware.

Vediamo quindi come integrare i dati di ISPConfig con ImunifyAV.

Per prima cosa dobbiamo accedere alle informazioni del pannello ISPConfig ed in particolare agli utenti webYY e al relativo dominio, per fare ciò occorre interagire con il database MySQL “dbispconfig”.

Creiamo un utente read-only che possa accedere alla tabella “web_domain” del database “dbispconfig”, in questa tabella tra le altre informazioni troviamo gli utenti, i domini e le “Document root” dei vari “Website” definiti nel pannello.

Sempre da SSH eseguite il client mysql e date i seguenti comandi:

CREATE USER 'iav_ro'@'localhost' IDENTIFIED BY '1@V!r0';
GRANT SELECT, SHOW VIEW ON dbispconfig.web_domain TO 'iav_ro'@'localhost' IDENTIFIED BY '1@V!r0';
FLUSH PRIVILEGES;

È stato creato un utente “iav_ro” che ha esclusivamente privilegi read-only (può quindi solo leggere le informazioni ma non alterarle) sulla tabella “web_domain” del database “dbispconfig”.

Ora dobbiamo creare degli script PHP che estraggano le informazioni necessarie dal database del pannello ISPConfig e le forniscano a ImunifyAV in formato JSON.

Questo è documentato in: https://docs.imunifyav.com/stand_alone_mode/#integration-config-file ATTENZIONE: al momento in cui scrivo questo tutorial la documentazione non risulta però aggiornata come segnalato dal molto efficiente supporto di ImunifyAV, vedete quindi: https://docs.imunify360.com/stand_alone/#integration-config-file.

Per prima cosa occorre aggiungere al file:

vi /etc/sysconfig/imunify360/integration.conf

Le seguenti righe:

[integration_scripts]
admins = /var/www/clients/clientX/webYY/web/imunifyav-ispc-admins.php
users = /var/www/clients/clientX/webYY/web/imunifyav-ispc-users.php
domains = /var/www/clients/clientX/webYY/web/imunifyav-ispc-domains.php

Con gli script che andiamo a creare verranno forniti ad ImunifyAV informazioni sugli amministratori, gli utenti da visualizzare e i relativi domini.

Creiamo ora il primo script:

vi imunifyav-ispc-admins.php

Inserite il seguente codice, si suppone che l’utente amministratore sia “admin” con indirizzo mail “admin@mail.it”, modificate eventualmente lo script di conseguenza se l’utente da voi utilizzato fosse diverso:

#!/usr/bin/php
<?php


        $webadmins = array();
        $tmpwebadmins = array();
        $tmpwebadmins['name'] = "admin";
        $tmpwebadmins['unix_user'] = "admin";
        $tmpwebadmins['locale_code'] = "IT_it";
        $tmpwebadmins['email'] = "admin@mail.it";
        $tmpwebadmins['is_main'] = true;
        $webadmins[]= $tmpwebadmins;


        $fullwebadmins['data'] = $webadmins;
        $resultArray = array();
        $resultArray['result'] = 'ok';
        $fullwebadmins['metadata'] = $resultArray;

        echo json_encode($fullwebadmins);


?>

Lo script deve poi essere reso eseguibile e gli si deve assegnare l’utente e il gruppo del sito:

chmod +x imunifyav-ispc-admins.php

chown webYY:clientX  imunifyav-ispc-admins.php

Creiamo ora il secondo script:

vi imunifyav-ispc-users.php

Inserite il seguente codice:

#!/usr/bin/php
<?php
$db_server = "localhost";
$db_user = "iav_ro";
$db_pass = "1@V!r0";
$db_name = "dbispconfig";

$link = mysqli_connect($db_server, $db_user, $db_pass);
if (!$link) {
        die('Could not connect: ' . mysqli_error($link));
}

mysqli_select_db($link,$db_name);


        $query = "select system_user, domain from web_domain";
        $result=mysqli_query($link,$query) or trigger_error(mysqli_error($link,) . $query);

$webusers = array();

        while ($row = mysqli_fetch_assoc($result)) {
                if ($row['system_user'] != '') {
                        $tmpwebusers = array();
                        $userInfo = posix_getpwnam($row['system_user']);
                        $packageArray = array();
                        $packageArray['name'] = 'ispc';
                        $packageArray['owner'] = 'admin';
                        $tmpwebusers['id'] = $userInfo['uid'];
                        $tmpwebusers['username'] = $row['system_user'];
                        $tmpwebusers['owner'] = 'admin';
                        $tmpwebusers['domain'] = $row['domain'];
                        $tmpwebusers['package'] = $packageArray;
                        $tmpwebusers['email'] = null;
                        $tmpwebusers['locale_code'] = null;
                        $webusers[] = $tmpwebusers;
                }
        }

        mysqli_free_result($result);

        $fullwebusers['data'] = $webusers;
        $resultArray = array();
        $resultArray['result'] = 'ok';
        $fullwebusers['metadata'] = $resultArray;

        echo json_encode($fullwebusers);

mysqli_close($link);

?>

Lo script deve poi essere reso eseguibile e gli si deve assegnare l’utente e il gruppo del sito:

chmod +x imunifyav-ispc-users.php
chown webYY:clientX  imunifyav-ispc-users.php

Creiamo il terzo script:

vi imunifyav-ispc-domains.php

Inserite il seguente codice:

#!/usr/bin/php
<?php
$db_server = "localhost";
$db_user = "iav_ro";
$db_pass = "1@V!r0";
$db_name = "dbispconfig";

$link = mysqli_connect($db_server, $db_user, $db_pass);
if (!$link) {
        die('Could not connect: ' . mysqli_error($link));
}

mysqli_select_db($link,$db_name);


        $query = "select system_user,domain, document_root from web_domain";
        $result=mysqli_query($link,$query) or trigger_error(mysqli_error($link,) . $query);

$webdomains = array();

        while ($row = mysqli_fetch_assoc($result)) {
                if ($row['system_user'] != '') {
                        $tmpwebdomains = array();
                        $tmpwebdomains['document_root'] = $row['document_root'];
                        $tmpwebdomains['is_main'] = true;
                        $tmpwebdomains['owner'] = $row['system_user'];
                        $webdomains[$row['domain']] = $tmpwebdomains;
                }
        }
        mysqli_free_result($result);

        $fullwebdomains['data'] = $webdomains;
        $resultArray = array();
        $resultArray['result'] = 'ok';
        $fullwebdomains['metadata'] = $resultArray;

        echo json_encode($fullwebdomains);

mysqli_close($link);

?>

Lo script deve poi essere reso eseguibile e gli si deve assegnare l’utente e il gruppo del sito:

chmod +x imunifyav-ispc-users.php
chown webYY:clientX  imunifyav-ispc-users.php

Se tutto è stato eseguito correttamente ora nell’interfaccia web di ImunifyAV verranno visualizzati solo gli utenti webYY attivi e le relativa “Document root”. Al momento in cui scrivo questo tutorial i nomi dei domini associati non viene visualizzato anche se questo è previsto in una futura versione.

In caso di problemi verificate il log degli errori in:

/var/log/imunify360/error.log

Utilizzando IPSConfig purtroppo non c’è un legame evidente tra l’utente webXX, la “document root” /var/www/clients/clientX/webYY/web e il dominio associato, quest’ultimo è quello che viene utilizzato normalmente come riferimento quindi la mancanza di questa informazione non rende facile l’uso di ImunifyAV con ISPConfig in quanto in caso di malware rilevato non è subito evidente quale sia il sito interessato.

Nell’attesa della nuova versione (al momento non è noto quando sarò fatta questa implementazione) che mostrerà i nomi a dominio possiamo utilizzare uno script PHP per mostrare una semplice tabella che associa webYY al relativo dominio:

vi imunifyav-ispc-domainlist.php

Inserite il seguente codice:

<html lang="it-IT">
<head>
        <style>
                table {
                        border-collapse: collapse;
                        border: 0px solid black;
                        width: 95%;
                }

                th, td {
                        border: 1px solid black;
                        padding: 5px;
                        text-align: center;
                        font-size: 12px;
                        font-family: Tahoma, Verdana, Arial, Sans-serif;
                }

                tr:nth-child(odd) {background-color: #c0c0c0}
        </style>
</head>
<body>
<?php
$db_server = "localhost";
$db_user = "iav_ro";
$db_pass = "1@V!r0";
$db_name = "dbispconfig";

$link = mysqli_connect($db_server, $db_user, $db_pass);
if (!$link) {
        die('Could not connect: ' . mysqli_error($link));
}

mysqli_select_db($link,$db_name);

        $query = "select system_user, domain from web_domain";
        $result=mysqli_query($link,$query) or trigger_error(mysqli_error($link,) . $query);

echo "<TABLE BORDER=1 ALIGN=CENTER>";

echo "<TR>".chr(10);
echo "<TH>".chr(10)."User"."</TH>".chr(10);
echo "<TH>".chr(10)."Domain"."</TH>".chr(10);
echo "</TR>".chr(10);

        while ($row = mysqli_fetch_assoc($result)) {
                if ($row['system_user'] != '') {
                                        echo "<TR>".chr(10);
                    echo "<TD>".chr(10).$row['system_user'].chr(10);
                    echo "<TD>".chr(10).$row['domain'].chr(10);
                                        echo "</TR>".chr(10);
                }
        }

echo "</TABLE>".chr(10);
        mysqli_free_result($result);
($fullwebusers);

mysqli_close($link);

?>
</body>
</html>

Si deve assegnare l’utente e il gruppo del sito:

chown webYY:clientX  imunifyav-ispc-domainlist.php

Potete quindi visualizzare una semplice tabella con gli utenti webYY e i relativi domini, questo sarà di aiuto per capire a quale sito appartiene la “Document root” indicata da ImunifyAV.

https://URL-interfaccia-ImunifyAV/imunifyav-ispc-domainlist.php

Questo articolo è stato pubblicato il 3 Ottobre 2023, ed è stato aggiornato il 18 Giugno 2024.

Torna in alto