Il y a (ou peut-être y avait-il?) un très beau démon appelé SuSE Proxy Suite. Il interceptait le trafic FTP et permettait de rediriger un client FTP vers un serveur backend spécifique et, si ma mémoire est bonne, il permettait également les conversions actives<->passives. J'ai utilisé le programme dans un environnement assez lourd pendant des années sans problème.
Malheureusement, mon ancien signet (http://proxy-suite.suse.de) semble se rediriger vers la page de Novell. Plusieurs référentiels de paquets (FreeBSD, Debian après une recherche rapide sur Google) semblent encore inclure le logiciel, donc vous pouvez avoir un espoir.
FreshPorts semble avoir une bonne description du logiciel :
http://www.freshports.org/net/proxy-suite/
EDIT: Une autre chose. Je ne sais pas si ce petit problème a été corrigé plus tard (ce n'était pas le cas en 2004 quand j'ai utilisé ce truc pour la dernière fois), mais par défaut, proxy-suite s'exécute en tant que root car il doit se lier à des ports bas. Et il s'exécutait en tant que Really Root, car il ne tirait pas parti des capabilities de Linux.
Aujourd'hui, il devrait être possible de définir les capacités du fichier via la commande setcap comme ceci :
sudo setcap 'cap_net_bind_service=+ep' /chemin/vers/fichier
Mais si cela ne fonctionne pas (même si les capacités existaient, la commande setcap n'était pas très courante lorsque j'ai patché proxy-suite), voici une autre solution de contournement.
En 2004 environ, j'ai écrit un petit correctif qui abandonnait toutes les capacités sauf CAP_NET_BIND_SERVICE juste après le démarrage, donc même certains trous de sécurité potentiels seraient moins dangereux. Vous n'aurez probablement pas besoin de ce correctif, mais si vous souffrez de cette maladie appelée paranoïa de sécurité et que vos transferts de fichiers se font entre des coins sombres d'Internet au lieu de votre confortable LAN de bureau, le correctif pourrait être une bonne idée.
Pour voir si ftp-proxy s'exécute avec des privilèges complets de root, vérifiez si getpcaps renvoie quelque chose comme ceci :
yourserver root# getpcaps `pidof ftp-proxy`
Capabilities for `16982': =eip cap_setpcap-eip
Une version patchée devrait renvoyer quelque chose comme cela :
yourserver root# getpcaps `pidof ftp-proxy`
Capabilities for `9522': = cap_net_bind_service+ep
Et enfin, voici le correctif que j'ai écrit il y a des millions de lunes, j'espère qu'il peut toujours être appliqué.
--- common/com-misc.c.orig 2006-11-20 13:54:59.000000000 +0200
+++ common/com-misc.c 2006-11-20 14:40:47.000000000 +0200
@@ -36,0 +37 @@
+#include
@@ -748,0 +750,18 @@
+ /*
+ * Si l'exécution est en tant que root, abandonnez toutes les privilèges sauf CAP_NET_BIND
+ */
+ if (geteuid() == 0) {
+ cap_t caps = cap_init();
+ static cap_value_t capv[] = {CAP_NET_BIND_SERVICE};
+ const int numcaps = sizeof(capv) / sizeof(capv[0]);
+ if (caps == NULL)
+ syslog_error("cap_init() failed; errno = %d", errno);
+ if (cap_set_flag(caps, CAP_PERMITTED, numcaps, capv, CAP_SET) < 0)
+ syslog_error("Could not set permitted capabilities;
errno = %d", errno);
+ if (cap_set_flag(caps, CAP_EFFECTIVE, numcaps, capv, CAP_SET) < 0)
+ syslog_error("Could not set effective capabilities;
errno = %d", errno);
+ if (cap_set_proc(caps) < 0)
+ syslog_error("Could not apply capability set; errno =
%d", errno);
+ cap_free(caps);
+ }
+