# Waarp

Waarp est un ensemble de logiciels libres et gratuits écrits en Java dont le périmètre est la gestion des transferts de fichiers dans un contexte de production et sécurisé. Il fonctionne à la fois en tant que passerelle (passerelle active pour FTP, passive pour d'autres protocoles) et en mode client/serveur pour le protocole R66.

## Historique

Waarp est un projet issu initialement d'un besoin au sein du Ministère des finances de la France. Développé de manière indépendante des structures du ministère, ce logiciel (à l'origine nommé GoldenGate OpenR66) avait pour objectif de supporter plus de 100 000 transferts par jour dans le cadre d'une plateforme d'archivage du ministère. Sa première mise en production date de 2007. Il a ensuite été déployé au sein de la Gendarmerie Nationale en production en 2012 pour un autre projet d'archivage.
Initialement développé par Frédéric Brégier depuis 2006, il bénéficie d'un support via une société éponyme depuis 2012. Il reste toujours libre et gratuit.
Waarp a fait partie des logiciels recommandés par l'État français dans le cadre du Socle Interministériel de Logiciels Libres de la DISIC. Il est mentionné avec un statut "Fin de Vie" dans l'édition 2018 de ce document de référence.
Le développement du projet Waarp est porté sur Github et sa documentation s'y trouve également.

## Fonctionnalités

Waarp Gateway FTP (protocoles FTP et FTPS) et Waarp R66 partagent des fonctionnalités via l'approche modulaire de développement de Waarp (Common, Digest, Snmp...) : ils intègrent la sécurisation des échanges (SSL, traçabilité), le support SNMP V2 et V3 et des outils d'administration en mode Web HTTPS, ainsi que l'adaptation aux besoins métiers via l'usage de règles d'actions avant ou après transferts.
Waarp R66 possède des fonctionnalités additionnelles particulières pour des contextes de production sécurisés.
En matière de transferts, Waarp R66 assure la garantie de la délivrance et la reprise sur incidents. Les transferts, en mode synchrone ou asynchrone, en envoi comme en réception, sont réalisés sur la base de règles de transferts assurant le contrôle des droits entre partenaires. Le mode de déclenchement d'un transfert peut être via des démons (scrutateurs de répertoires), des appels via ligne de commande ou via les différentes interfaces de programmation (API Java, API Thrift, API REST HTTP(s)).
En matière de production, Waarp R66 propose des interfaces d'administration locale (HTTPS) ou centralisées (GUI). Il optimise les conditions d'usage du réseau (multiplexage, limitation de bande passante, proxification, keepalive, timeout...) ou d'autres ressources (calcul et mémoire). Il autorise la mise en haute disponibilité et le support de la scalabilité horizontale avec une capacité de plus de 2^64 transferts simultanés ou historisés.
En matière de sécurité, Waarp R66 permet la sécurisation des échanges via identification faible et forte des partenaires et la présence d'une liste noire, la détection de tentatives d'intrusions, le support d'une configuration en DMZ et le support de partenaires à accès restreints.
Pour l'adaptation aux besoins métiers, Waarp R66 supporte plusieurs types de tâches (avant ou après transferts) comme la gestion de fichiers (copie, effacement, tar/zip, transcodification de jeux de caractères...), la gestion de transferts (retransfert ou replanification) et l'exécution de tâches externes (script ou Java).
Waarp R66 supporte plusieurs types de bases de données via JDBC (PostgreSQL, Oracle, MySQL/MariaDb, H2 Database). Cette base, non obligatoire, apporte les fonctionnalités d'historisation et de capacité de reprise sur incident et peut être mutualisée entre différents clients et serveurs.

## Protocole R66

Le protocole R66 a été conçu pour permettre les fonctionnalités avancées d'un moniteur de transfert de fichiers dans un contexte de production sécurisée.
* Il est transactionnel : si un élément échoue, le transfert échoue
* Il se caractérise par un destinataire, un fichier et une règle de transfert régissant l'échange
* Il peut être chiffré (SSL)
* Il intègre différents niveaux d'authentification (identifiant/mot de passe, certificat RSA optionnel, contrôle IP optionnel)
* Il intègre un contrôle d'intégrité du transfert (par paquet ou de bout en bout)