terça-feira, 7 de dezembro de 2010

Como Montar Um Servidor Caseiro de FTP - Parte 1


O interesse crescente por troca de arquivos nos leva a abordar o assunto servidor de FTP.
Atualmente, com todas as restrições que o filesharing está tendo, com processos de gravadoras, distribuidoras e até provedores de internet cancelando o serviço, montar um servidor caseiro de FTP para trocar arquivos com os amigos é quase uma necessidade. A vantagem? É uma conexão não promíscua, e, terá alto grau de confiança, já que apenas peers conhecidos estarão conectados. Mas, primeiro, um pouco de teoria.

FTP(File Transfer Protocol)
File Transfer Protocol (FTP) é um protocolo de rede padrão usado para copiar um arquivo de um host para outro através de uma rede baseada no protocolo TCP / IP, tal como a Internet. FTP é construído sobre uma arquitetura cliente-servidor e utiliza conexões de dados e controle separadas entre o cliente e o servidor. A conexão de controle fica na porta 21 e a conexão de dados na porta 20, ambas no lado do servidor. No lado do cliente as coisas mudam um pouco.
Usuários FTP podem autenticar-se através de username e senha, mas podem logar-se anonimamente também, se o servidor estiver configurado para permitir isso.

FTP Passivo e Ativo
Existem dois modos de FTP: Ativo e Passivo. Segue uma explanação de como eles funcionam

FTP Ativo
No FTP em modo ativo, o cliente se conecta a partir de uma porta não privilegiada aleatória (N> 1023) para a porta de comando do servidor FTP, a porta 21. Então, o cliente começa a escutar a porta N +1 e envia o comando FTP PORT N +1 para o servidor FTP. O servidor irá então se conectar de volta para a porta de dados  especificada pelo cliente  a partir da porta de dados local, que é a porta 20.

Do ponto de vista do firewall do lado do servidor, para suportar o modo FTP ativo, os seguintes canais de comunicação precisam ser abertas:

  • porta 21 do servidor FTP a partir de qualquer lugar (o cliente inicia a conexão)
  • A porta 21 do servidor FTP para portas > 1023 (o servidor responde à porta de controle do cliente)
  • A porta do servidor FTP 20 a portas> 1023 (Server inicia conexão de dados para a porta de dados do cliente)
  • porta do servidor FTP a partir de 20 portas> 1023 (O cliente envia ACKs para a porta do servidor de dados)
No diagrama abaixo, segue o esquema de como se opera a conexão entre cliente e servidor de FTP no modo ativo

FTP Passivo
No modo passivo, o cliente também abre a conexão contatando a porta 21 do servidor, entretanto, ao invés de iniciar a conexão imediatamente, o servidor responde avisando que o cliente pode contatá-lo numa segunda porta, escolhida aleatóriamente (a 2024, por exemplo). O cliente inicia, então, uma nova conexão na porta especificada e o servidor responde
enviando os dados.
Esta porta fica reservada ao cliente durante o tempo que durar a transferência. Em teoria, isto seria um limite ao número de clientes que poderiam se conectar simultaneamente, mas, na prática, seriam necessárias mais de 64.000 conexões simultâneas ao mesmo servidor FTP
para esgotar as portas disponíveis.

Do ponto de vista do firewall do lado do servidor, para suportar o modo passivo FTP seguintes canais de comunicação precisam ser abertos:

  • porta 21 do servidor FTP a partir de qualquer lugar (o cliente inicia a conexão)
  • A porta 21 do servidor FTP para portas> 1023 (o servidor responde à porta de controle do cliente)
  • portas servidor FTP> 1023 a partir de qualquer lugar (o cliente inicia conexão de dados com a porta aleatória especificada pelo servidor)
  • portas servidor FTP> 1023 para portas remotas> 1023 (o servidor envia ACKs (e dados) para a porta de dados do cliente)
No diagrama abaixo, segue o esquema de como se opera a conexão entre cliente e servidor de FTP no modo ativo
Dessa forma, no modo passivo, quem determina quais portas serão usadas pelos dados a serem transferidos é o servidor, e não o cliente, como no modo ativo.

Desvantagens do Modo Ativo

O principal problema do modo ativo é que, como a requisição de portas é feita no cliente, torna-se problemático para o firewall/NAT/Router lidar com as requisições do cliente.
No modo passivo, uma vez que é o servidor que determina quais portas vai usar, fica mais fácil de configurar toda a estrutura de firewall/NAT/Router.

Servidor Caseiro de FTP - Considerações
Para implementarmos com sucesso um servidor caseiro de FTP precisamos levar em conta qual será a estrutura que vamos ter.
Nosso servidor vai estar localizado numa máquina, atrás de um modem/router, numa rede local interna e se comunicando com o mundo através desse modem/router.
Como os provedores de internet bloqueiam as portas baixas, < 1024, teremos que configurar um NAT no modem/router para que os computadores externos possam acessar a porta de controle do FTP (21) e as portas de dados.
O modo ativo é bom o bastante para redes locais, principalmente atrás de um firewall/router, pois a utilização de portas aleatórias pelo cliente não vai prejudicar a conexão.
Mas, para conexões através da internet, será necessário usar o modo passivo, muito mais configurável.
E é claro, vamos precisar também de um programa servidor de FTP, para podermos realizar as ações de transferência de arquivos.
Bem, depois dessa breve introdução, da teoria sobre o que é FTP, vamos abordar como montar o servidor e todas as configurações necessárias para seu bom funcionamento.

Continua na parte 2

Como Montar Um Servidor Caseiro de FTP - Parte 2

Continuado da parte 1

Vamos precisar de um programa servidor de FTP. Escolhi o ProFTPD por ser um robusto servidor de FTP no Linux. E, facilmente configurável.
Para agilizar o processo, resolvi usar um front end gráfico para o ProFTPD, o GADMIN-PROFTPD.

Os Passos para configurar o servidor FTP caseiro:
  1. Instalar o GADMIN-PROFTPD.
  2. Configurar o Modem/Router para fazer o NAT para o FTP
  3. Configurar o GADMIN-PROFTPD.
  4. Começar a trocar arquivos.

1a. Baixar o pacote Gadmin-ProftpD para a sua distro aqui
1b. Instalar o pacote dpkg -i ou rpm -i pacote (dependendo da sua distro. Ou se tiver nos repositórios, melhor ainda)

O GADMIN-PROFTPD instala o ProftpD automaticamente.

2a. Acessar o seu modem/router e configurar  Advanced Port Forwarding Rules.
2b. É necessário configurar as regras de nat do modem/router para que as requisições de FTP externas possam alcançar o servidor de FTP na rede interna.
2c. No exemplo da figura abaixo,  configurei como porta externa de FTP a 2121, já que os provedores de internet bloqueiam as portas baixas (menores que 1024).
2d. E, fiz com que as requisições para as portas de dados do servidor (65524-65534) cheguem o servidor de FTP. Essas portas de dados serão definidas no servidor de FTP ProftpD, no modo passivo, e, serão passadas para o cliente.
2e. Observar que o item descrito em vermelho é o endereço IP interno onde o servidor de FTP vai estar.


3a. Configurar o servidor ProftpD.
3b. Observe a figura abaixo, você deverá:
  • Informar o IP externo de seu modem/roteador (onde está indicado em vermelho external IP here)
  • Marque configure NAT routing: ON
  • Agora vem a configuração do intervalo das portas para o FTP passivo. Eu coloquei em 65524-65534
  • As outras opções podem ficar iguais as da figura.
  • Configure para modo binário de transferência de arquivos.

  • Agora, continue a configurar o ProftpD. 
  • Default home directory pode ser /var/ftp/click_here
  • Agora, item importante: Download speed e upload speed. Esses dois valores é que vão determinar a velocidade dos seus downloads/uploads. Recomendo deixar em 1/3 do valor da largura de banda nominal, para dar folga para outros tráfegos.
  • Allow resume of broken downloads and uploads marcar ON
  •  Agora, clicar na aba Users
  • Adicionar um usuário(ou mais de um, se você quiser trocar arquivos com mais de um amigo ao mesmo tempo)
  • Indique como shell: /bin/null, para que o usuário de FTP não possa dar comandos no seu sistema, apenas os comandos de FTP.
  • Crie uma senha para esse usuário de FTP.
  • Marque as permissões que esse usuário vai ter: eu marco: list, upload, download, append, make dir. E não deixo o usuário sair do seu diretório de FTP (no up dir)
  • Passe a senha para o seu amigo
  • Clique em Activate para startar o serviço
  • Clique na aba Transfers para monitorar as transferências.
Tanto os arquivos que você for receber quanto os arquivos que você for enviar, deverão estar na pasta /var/ftp/click_here

Lembre-se que as transmissões de FTP não são criptografadas. Assim, tanto senhas como logins podem ser interceptadas através da rede. Uma boa política é mudar os usuários e senhas de FTP a cada nova sessão, mudar a porta de controle no modem/router, e, só ativar o serviço de FTP quando for transferir seus arquivos(upload/download).

Boas transferências!

Para saber mais: http://slacksite.com/other/ftp.html