solução de ftp ativo-para-passivo

2

Eu tenho um cliente de ftp (aplicativo .NET que eu não tenho a fonte) que só faz o modo ativo que precisa enviar dados para um servidor ftp que só fala passivo.

Não há nada que eu possa fazer para modificar o software nos dois lados; mas tudo no meio é um jogo justo. (roteamento, software windows ou linux, truques de firewall, ...)

Existe algum tipo de software proxy ftp? Ou algum tipo de solução que eu poderia tentar?

    
por Joris 01.08.2010 / 21:16

1 resposta

2

Existe (ou, talvez, foi?) um daemon muito legal chamado SuSE Proxy Suite . Ele estava interceptando o tráfego FTP e permitia que um redirecionasse o ftp-client para algum servidor de back-end específico e, se minha memória me servir, ele também permitia conversões ativas < - > Eu usei o programa em um ambiente bastante pesado por anos sem problemas.

Infelizmente, meu antigo favorito ( link ) parece redirecionar-se para a página da Novell. Vários repositórios de pacotes (FreeBSD, Debian depois do quick googling) parecem ainda incluir o software, então você pode ter alguma esperança.

O FreshPorts parece ter uma boa descrição sobre o software:

link

EDIT: Mais uma coisa. Eu não tenho ideia se esse pequeno problema foi corrigido mais tarde (não foi em 2004 que usei essa coisa pela última vez), mas por padrão o proxy-suite está sendo executado como root, já que ele precisa se ligar a portas baixas. E estava rodando como Really Root, já que não tirava vantagem das capacidades do Linux.

Hoje deve ser possível definir os recursos do arquivo por meio do comando setcap como este:

sudo setcap 'cap_net_bind_service=+ep' /path/to/file

Mas se isso não funcionar (mesmo que os recursos existissem, o comando setcap não era muito comum quando eu fiz o patch do proxy-suite), aqui está outra solução alternativa.

Em 2004, escrevi um pequeno patch que descartava todos os recursos, exceto o CAP_NET_BIND_SERVICE logo após a inicialização, de modo que até mesmo possíveis falhas de segurança seriam menos perigosas. Você normalmente pode não precisar desse patch, mas se você tem essa doença chamada paranoia de segurança e sua transferência de arquivos ocorre entre alguns cantos escuros da Internet em vez de sua LAN confortável, o patch pode ser uma boa ideia.

Para ver se o ftp-proxy está sendo executado como privilégios de root completos, verifique se getpcaps retorna algo assim:

yourserver root# getpcaps 'pidof ftp-proxy'
Capabilities for '16982': =eip cap_setpcap-eip

Uma versão corrigida deve retornar assim:

yourserver root# getpcaps 'pidof ftp-proxy'
Capabilities for '9522': = cap_net_bind_service+ep

E finalmente, aqui está o patch que eu escrevi milhões de luas atrás, espero que ainda possa ser aplicado.

--- 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 <sys/capability.h>
@@ -748,0 +750,18 @@
+        /*
+        * If running as root, drop all the privileges except 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);
+        }
+
    
por 01.08.2010 / 21:25

Tags