ingest-external-antivirus¶
Dans cette section, nous expliquons comment utiliser et configurer le script d’antivirus pour le service ingest-external.
Configuration pour ingest-external : ingest-external.conf
Dans ce fichier de configuration, nous précisons le nom du script antivirus utilisé, et le timeout pour le scan. Le script utilisé actuellement est scan-clamav.sh utilisant l’antivirus ClamAV.
antiVirusScriptName : scan-clamav.sh
timeoutScanDelay : 60000
Script d’antivirus scan-clamav.sh
Le script permettant de lancer d’un scan d’un fichier envoyé avec l’antivirus ClamAV et retourner le résulat :
- -1: Analyse non effectuée
0: Analyse OK - no virus 1: Virus trouvé et corrigé 2: Virus trouvé mais non corrigé 3: Analyse NOK
Ce fichier est mis dans le répertoire vitam/conf avec le droit d’exécution.
Lancer le script en Java et intégration
JavaExecuteScript.java (se trouve dans ingest-external-common) permettant de lancer le script de clamav en Java en prenant des paramètres d’entrées : le script utilisé, le chemin du fichier à scanner et le temps limité d’un scan Pour l’intégration dans ingest-external, ce script est appelé dans l’implémentation des APIs de ingest-externe. la section suivant montre comment on appelle le script depuis ingest-external en Code.
antiVirusResult = JavaExecuteScript.executeCommand(antiVirusScriptName, filePath, timeoutScanDelay);
.......
switch (antiVirusResult) {
case STATUS_ANTIVIRUS_OK:
LOGGER.info(IngestExternalOutcomeMessage.OK_VIRUS.toString());
// nothing to do, default already set to ok
break;
case STATUS_ANTIVIRUS_WARNING:
case STATUS_ANTIVIRUS_KO:
LOGGER.error(IngestExternalOutcomeMessage.KO_VIRUS.toString());
antivirusParameters.setStatus(StatusCode.KO);
antivirusParameters.putParameterValue(LogbookParameterName.outcomeDetail,
messageLogbookEngineHelper.getOutcomeDetail(SANITY_CHECK_SIP, StatusCode.KO));
antivirusParameters.putParameterValue(LogbookParameterName.outcomeDetailMessage,
messageLogbookEngineHelper.getLabelOp(SANITY_CHECK_SIP, StatusCode.KO));
isFileInfected = true;
break;
case STATUS_ANTIVIRUS_NOT_PERFORMED:
case STATUS_ANTIVIRUS_NOT_PERFORMED_2:
LOGGER.error(IngestExternalOutcomeMessage.FATAL_VIRUS.toString());
antivirusParameters.setStatus(StatusCode.FATAL);
antivirusParameters.putParameterValue(LogbookParameterName.outcomeDetail,
messageLogbookEngineHelper.getOutcomeDetail(SANITY_CHECK_SIP, StatusCode.FATAL));
antivirusParameters.putParameterValue(LogbookParameterName.outcomeDetailMessage,
messageLogbookEngineHelper.getLabelOp(SANITY_CHECK_SIP, StatusCode.FATAL));
isFileInfected = true;
break;
}
}
.....................................................................................................