Eu tenho um VPS alugado com debian instalado. Recentemente instalei o proftpd para permitir acesso somente leitura a todos e acesso total para usuários específicos.
Configurei o proftpd (com TLS) de acordo com vários guias. Desbloqueei portas passivas (essas e a porta 21 via iptables) e configurei o login anônimo.
Quando eu faço login, está tudo bem - login rápido, navegação rápida pelos diretórios... o problema ocorre quando tento baixar um arquivo - winscp/filezilla/python, todos ficam presos no download de um arquivo e perdem a conexão (os arquivos são ~ 1kB, muito pequeno). Quando estou conectado via SFTP ao servidor, não tenho problemas e a toda velocidade.
Alguma ideia? Você precisa do meu proftpd.conf
arquivo?
Atualizar:
Vejo que preciso acrescentar algumas informações, graças ao primeiro comentário (sobre SCP):
- Gostaria de poder visualizar arquivos anonimamente, o melhor seria através do navegador da web, mas não é obrigatório.
- Preciso configurar um aplicativo que sincronize a pasta inteira do VPS com a pasta no meu disco rígido (pretendo fazer isso via python, mas shell/bash também é bom)
- Gostaria de poder fazer download/upload do catálogo inteiro ou apenas dos arquivos que foram alterados
- Preciso que isso seja possível sem programas de terceiros. Seja por meio de cmdline/bash ou de bibliotecas python oficiais. Precisa funcionar no Windows e no Fedora
Minha configuração do iptables:
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-ssh-ddos tcp -- anywhere anywhere multiport dports ssh
ACCEPT tcp -- anywhere anywhere tcp dpts:60000:65535
fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain fail2ban-ssh (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Chain fail2ban-ssh-ddos (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Desativei o TLS, conectei-me via conta de convidado, ativei o modo binário e iniciei o tcpdump na porta 21 (servidor ofc). Então fiz um 'get' em um único arquivo e depois de um tempo obtive "Conexão fechada por host remoto". Aqui está a entrada FTP:
ftp> get light.cfg
200 PORT command successful
150 Opening BINARY mode data connection for light.cfg (94 bytes)
Connection closed by remote host.
e aqui você pode ver get e connection_closed separados por uma nova linha:
15:12:15.836468 IP (tos 0x0, ttl 119, id 30359, offset 0, flags [DF], proto TCP (6), length 67)
83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [P.], cksum 0x5526 (correct), seq 139:166, ack 575, win 7618, length 27
15:12:15.836636 IP (tos 0x0, ttl 64, id 50952, offset 0, flags [DF], proto TCP (6), length 69)
vz31640.dahost.pl.ftp > 83-144-76-138.static.chello.pl.54225: Flags [P.], cksum 0x7049 (correct), seq 575:604, ack 166, win 115, length 29
15:12:15.856530 IP (tos 0x0, ttl 119, id 30360, offset 0, flags [DF], proto TCP (6), length 56)
83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [P.], cksum 0xd20f (correct), seq 166:182, ack 604, win 7589, length 16
15:12:15.868348 IP (tos 0x0, ttl 64, id 50953, offset 0, flags [DF], proto TCP (6), length 106)
vz31640.dahost.pl.ftp > 83-144-76-138.static.chello.pl.54225: Flags [P.], cksum 0xba9a (correct), seq 604:670, ack 182, win 115, length 66
15:12:15.934002 IP (tos 0x0, ttl 119, id 30365, offset 0, flags [DF], proto TCP (6), length 40)
83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [.], cksum 0x0ccc (correct), ack 670, win 7523, length 0
15:13:15.909873 IP (tos 0x0, ttl 119, id 30372, offset 0, flags [DF], proto TCP (6), length 40)
83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [F.], cksum 0x0ccb (correct), seq 182, ack 670, win 7523, length 0
15:13:15.910056 IP (tos 0x0, ttl 64, id 50954, offset 0, flags [DF], proto TCP (6), length 40)
vz31640.dahost.pl.ftp > 83-144-76-138.static.chello.pl.54225: Flags [F.], cksum 0x29ba (correct), seq 670, ack 183, win 115, length 0
15:13:15.922725 IP (tos 0x0, ttl 119, id 30373, offset 0, flags [DF], proto TCP (6), length 40)
83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [.], cksum 0x0cca (correct), ack 671, win 7523, length 0
Responder1
Por favor poste sua iptables
configuração. Observe que fazê-lo funcionar com FTP pode ser complicado, pois o FTP usa alocações dinâmicas de portas (no modo passivo, quando o cliente deseja fazer download ou upload de um arquivo, o servidor aloca uma porta dinâmica para o fluxo de transferência de dados e informa ao cliente e espera que o cliente se conecte a ele).
Isso significa:
- Se você quiser usar alguma abordagem "stateful" no Netfilter para detectar fluxo de dados FTP, você precisa ter um módulo de kernel especial carregado para decodificar fluxos FTP de controle;
- Isso não funcionará com TLS porque o kernel não será capaz de decodificar os referidos fluxos de controle FTP.
SCP (e SFTP) funcionam bem porque multiplexam controle e fluxos de dados em um único fluxo TCP.
Quanto à sincronização… Primeiro, esqueça, scp
pois este é um protocolo legado; use SFTP. Esseparece ser uma implementação Python SFTP de plataforma cruzada, então pode funcionar para você. A propósito, o Windows tem um bom suporte para software front-end SFTP (google para WinSCP).
E você também pode considerar outros meios de sincronização. Por exemplo, rsync
tem versões do Windows e é indiscutivelmente a melhor ferramenta de sincronização de sistema de arquivos que existe. Você também pode considerar o WebDAV ou até mesmo implementar algo RESTful.