Criando um servidor FTP acessível fora da LAN com o Proftpd
Rápido tutorial sobre como criar um servidor FTP acessível fora da rede LAN. Permitindo assim, que qualquer usuário na Internet (com as devidas credenciais) acesse sua máquina para fazer download de arquivos.
Introdução
Artigo testado no Slackware 14.1 64-bits multilib.
A distribuição Slackware, numa instalação FULL, vem com o servidor FTP chamado Proftpd. Normalmente, este serviço já inicia junto com o sistema automaticamente.
Mas, se quiser checar a existência do mesmo, use:
# which ftp
Veja se está instalado, com:
# which proftpd
Qualquer coisa, instale-o com:
# slackpkg install propftpd
Quer saber se o servidor já está rodando?
# ps -ef|grep ftp
Se não estiver, basta executar:
# proftpd
Veja as configurações do Proftpd, cujo arquivo é /etc/proftpd.conf:
# more /etc/proftpd.conf | grep -v ^#
Utilize os comentários como guia e configure o arquivo para a forma que mais o agradar:
# vi /etc/proftpd.conf
Teoricamente é muito simples, não é mesmo? Mas, configurar esse servidor pode se tornar um processo trabalhoso, no caso dele não funcionar como esperado, e forçá-lo a realizar testes até descobrir a causa do erro.
Aqui, eu compartilho um exemplo de configuração, com pouquíssimas alterações em relação ao arquivo original padrão, mas que foi suficiente para que eu conseguisse ter um servidor FTP acessível tanto pela LAN como pela WAN, com usuários normais do sistema, e até mesmo com um usuário anônimo sem senha. Neste último caso o usuário fica restrito apenas ao seu diretório pessoal /home/ftp.
Perceba que o que está entre <Anonymous></Anonymous>, é a configuração que garante o acesso sem senha ao usuário anonymous ou ao usuário ftp, que é o seu apelido. Ele terá acesso apenas ao seu diretório /home/ftp.
Porém, neste caso, não basta essa configuração para habilitar o uso do usuário ftp, é necessário comentar tal usuário dentro do arquivo /etc/ftpusers. Todo usuário listado nesse arquivo, será impedido de logar. Então, não esqueça de fazer isso.
As últimas três linhas do arquivo de configuração, exibido acima, são referentes aos parâmetros para acesso ao servidor fora da LAN, ou seja, pela Internet. Para isso, eu fiz um cadastro grátis no site: ...e coloquei lá em Hosts/Redirects o meu nome de domínio associado ao meu IP externo, que pode ser obtido em sites como:
Assim, se obtém os dois primeiros parâmetros dessas últimas três linhas. Já para obter o parâmetro da última linha, o PassivePorts, eu copiei tal informação da documentação oficial do Proftpd, disponível em:
É uma página referente ao uso do Proftpd + NAT.
E, além disso, como você deve ter imaginado, eu adicionei o meu IP local nas configurações do meu roteador, em DMZ, para que o acesso externo fosse possível. Veja:
Obs.: eu não domino o assunto em questão, nem a ferramenta Proftpd, que aliás, eu só passei a conhecer recentemente. Mas eu acabei perdendo um tempinho realizando uns testes inúteis. Agora, compartilho minha experiência para, quem sabe, ajudar você a evitar o mesmo tipo de erro.
Foi o seguinte: eu tentei acessar o meu servidor FTP local usando meu IP externo, mas não conseguia. Eu só conseguia acessá-lo através do meu IP local. Pensei que isso era um erro de configuração do Proftpd e perdi tempo procurando soluções para isso. Caso isso aconteça como você, não se desespere ainda. Provavelmente, pelo que constatei, isso aconteceu apenas devido a falta de configuração do arquivo /etc/hosts, que não estava direcionando os endereços. A causa não era uma configuração errada do Proftpd.
Com base nisso, saiba que o teste real deve ser feito com uma máquina fora da LAN. Não basta usar IP externo com uma máquina conectada na LAN. Se não, você vai ficar achando que o servidor funciona apenas localmente, quando na verdade, ele está funcionando fora da LAN, na Internet também, sem você saber.
Por exemplo, então, eu desliguei o Wi-fi do meu celular e com isso, eu saí da LAN da minha residência. Ativei a Internet 3G e acessei o meu servidor FTP. Deu certo, veja:
Também, falei com o meu amigo slacker e ele acessou meu servidor FTP, pela Internet. Ele mora em outro estado e deu certo, tanto pela linha de comando, como pelo browser. Veja:
Se você quiser acessar o servidor pelo navegador, basta digitar na barra de endereços: ftp://seu.endereço.ip
Mas não esqueça que o IP deve ser local, se for acessar de uma máquina dentro da LAN, e o IP deve ser externo se for acessar de fora da LAN.
Se algum usuário com mais experiência souber como contornar melhor esse detalhe, por favor, comente. Pois eu acho que deveria ser possível uma máquina da LAN acessar o servidor das duas formas: localmente e externamente.
Se eu descobrir, atualizarei este artigo. Mas, o importante é que o servidor pode ser acessado localmente e externamente, de qualquer forma.
Você também pode usar o domínio criado no no-ip, ao invés do endereço IP: ftp://seu.domínio.net
Mas neste caso, só funcionará localmente se configurar corretamente o /etc/hosts.
Para acessar via linha de comando, basta:
ftp seu.endereço.ip
Aqui, é a mesma coisa. Se for fazer isso numa máquina da LAN, use o IP local. Se for fora da LAN, use o IP externo.
Se quiser acessar seu diretório pessoal, com seu usuário, pelo navegador, coloque na barra de endereços: ftp://seuusuario@seudomínio.ou.ip
Será pedido a senha e você poderá acessar seus diretórios pessoais:
Criei até um repositório de pacotes para Slackware, compatível com Slackpkg+, com acesso público, para testes:
O que encontrei muito nos fóruns, foram pessoas reclamando que conseguiam acessar o servidor pela rede local, mas não fora dela. E também, algumas pessoas dando respostas incompletas sobre esse problema.
Também encontrei pequenas pistas sobre a configuração e uso do Proftpd e tive que ir testando e juntando todas elas para poder criar este artigo.
Dentre os sites que visitei, entre outros, estão:
Abraço!
A distribuição Slackware, numa instalação FULL, vem com o servidor FTP chamado Proftpd. Normalmente, este serviço já inicia junto com o sistema automaticamente.
Mas, se quiser checar a existência do mesmo, use:
# which ftp
Veja se está instalado, com:
# which proftpd
Qualquer coisa, instale-o com:
# slackpkg install propftpd
Quer saber se o servidor já está rodando?
# ps -ef|grep ftp
Se não estiver, basta executar:
# proftpd
Veja as configurações do Proftpd, cujo arquivo é /etc/proftpd.conf:
# more /etc/proftpd.conf | grep -v ^#
Utilize os comentários como guia e configure o arquivo para a forma que mais o agradar:
# vi /etc/proftpd.conf
Teoricamente é muito simples, não é mesmo? Mas, configurar esse servidor pode se tornar um processo trabalhoso, no caso dele não funcionar como esperado, e forçá-lo a realizar testes até descobrir a causa do erro.
Aqui, eu compartilho um exemplo de configuração, com pouquíssimas alterações em relação ao arquivo original padrão, mas que foi suficiente para que eu conseguisse ter um servidor FTP acessível tanto pela LAN como pela WAN, com usuários normais do sistema, e até mesmo com um usuário anônimo sem senha. Neste último caso o usuário fica restrito apenas ao seu diretório pessoal /home/ftp.
# Início do arquivo ServerName "ProFTPD Default Installation" ServerType standalone DefaultServer on Port 21 Umask 022 MaxInstances 30 User nobody Group nogroup SystemLog /var/log/proftpd.log TransferLog /var/log/xferlog <Directory /*> AllowOverwrite on </Directory> <Anonymous ~ftp> RequireValidShell off User ftp Group ftp # We want clients to be able to login with "anonymous" as well as "ftp" UserAlias anonymous ftp # Limit the maximum number of anonymous logins MaxClients 5 # We want 'welcome.msg' displayed at login, and '.message' displayed # in each newly chdired directory. DisplayLogin welcome.msg DisplayChdir .message # Limit WRITE everywhere in the anonymous chroot <Limit WRITE> DenyAll </Limit> # An upload directory that allows storing files but not retrieving # or creating directories. </Anonymous> MasqueradeAddress seu.domínio.aqui MasqueradeAddress seu.ip.aqui PassivePorts 60000 65535 #fim
Perceba que o que está entre <Anonymous></Anonymous>, é a configuração que garante o acesso sem senha ao usuário anonymous ou ao usuário ftp, que é o seu apelido. Ele terá acesso apenas ao seu diretório /home/ftp.
Porém, neste caso, não basta essa configuração para habilitar o uso do usuário ftp, é necessário comentar tal usuário dentro do arquivo /etc/ftpusers. Todo usuário listado nesse arquivo, será impedido de logar. Então, não esqueça de fazer isso.
As últimas três linhas do arquivo de configuração, exibido acima, são referentes aos parâmetros para acesso ao servidor fora da LAN, ou seja, pela Internet. Para isso, eu fiz um cadastro grátis no site: ...e coloquei lá em Hosts/Redirects o meu nome de domínio associado ao meu IP externo, que pode ser obtido em sites como:
Assim, se obtém os dois primeiros parâmetros dessas últimas três linhas. Já para obter o parâmetro da última linha, o PassivePorts, eu copiei tal informação da documentação oficial do Proftpd, disponível em:
É uma página referente ao uso do Proftpd + NAT.
E, além disso, como você deve ter imaginado, eu adicionei o meu IP local nas configurações do meu roteador, em DMZ, para que o acesso externo fosse possível. Veja:
Obs.: eu não domino o assunto em questão, nem a ferramenta Proftpd, que aliás, eu só passei a conhecer recentemente. Mas eu acabei perdendo um tempinho realizando uns testes inúteis. Agora, compartilho minha experiência para, quem sabe, ajudar você a evitar o mesmo tipo de erro.
Foi o seguinte: eu tentei acessar o meu servidor FTP local usando meu IP externo, mas não conseguia. Eu só conseguia acessá-lo através do meu IP local. Pensei que isso era um erro de configuração do Proftpd e perdi tempo procurando soluções para isso. Caso isso aconteça como você, não se desespere ainda. Provavelmente, pelo que constatei, isso aconteceu apenas devido a falta de configuração do arquivo /etc/hosts, que não estava direcionando os endereços. A causa não era uma configuração errada do Proftpd.
Com base nisso, saiba que o teste real deve ser feito com uma máquina fora da LAN. Não basta usar IP externo com uma máquina conectada na LAN. Se não, você vai ficar achando que o servidor funciona apenas localmente, quando na verdade, ele está funcionando fora da LAN, na Internet também, sem você saber.
Por exemplo, então, eu desliguei o Wi-fi do meu celular e com isso, eu saí da LAN da minha residência. Ativei a Internet 3G e acessei o meu servidor FTP. Deu certo, veja:
Também, falei com o meu amigo slacker e ele acessou meu servidor FTP, pela Internet. Ele mora em outro estado e deu certo, tanto pela linha de comando, como pelo browser. Veja:
Se você quiser acessar o servidor pelo navegador, basta digitar na barra de endereços: ftp://seu.endereço.ip
Mas não esqueça que o IP deve ser local, se for acessar de uma máquina dentro da LAN, e o IP deve ser externo se for acessar de fora da LAN.
Se algum usuário com mais experiência souber como contornar melhor esse detalhe, por favor, comente. Pois eu acho que deveria ser possível uma máquina da LAN acessar o servidor das duas formas: localmente e externamente.
Se eu descobrir, atualizarei este artigo. Mas, o importante é que o servidor pode ser acessado localmente e externamente, de qualquer forma.
Você também pode usar o domínio criado no no-ip, ao invés do endereço IP: ftp://seu.domínio.net
Mas neste caso, só funcionará localmente se configurar corretamente o /etc/hosts.
Para acessar via linha de comando, basta:
ftp seu.endereço.ip
Aqui, é a mesma coisa. Se for fazer isso numa máquina da LAN, use o IP local. Se for fora da LAN, use o IP externo.
Se quiser acessar seu diretório pessoal, com seu usuário, pelo navegador, coloque na barra de endereços: ftp://seuusuario@seudomínio.ou.ip
Será pedido a senha e você poderá acessar seus diretórios pessoais:
Criei até um repositório de pacotes para Slackware, compatível com Slackpkg+, com acesso público, para testes:
Conclusão
Resolvi criar esse pequeno tutorial porque, incrivelmente, enquanto eu tentava realizar essa configuração, senti falta de um tutorial simples e direto, com o arquivo de configuração do Proftpd disponível e os passos para que o serviço se tornasse acessível fora da LAN.O que encontrei muito nos fóruns, foram pessoas reclamando que conseguiam acessar o servidor pela rede local, mas não fora dela. E também, algumas pessoas dando respostas incompletas sobre esse problema.
Também encontrei pequenas pistas sobre a configuração e uso do Proftpd e tive que ir testando e juntando todas elas para poder criar este artigo.
Dentre os sites que visitei, entre outros, estão:
- http://va.mu/3Y5H
- Configuring FTP in Slackware 12.0 « Planet Isa Linux
- ProFTPD mini-HOWTO - Firewalls, Routers, and NAT
- Stuck with Masquerading with ProFTPD Version 1.3.3e
- como liberar o acesso externo ao proftpd [Fórum - Suporte a Servidor] : CentOSBR
- servidor FTP (proftpd) funciona interno mas não externo - Resolvido
Abraço!
Estou tentando fazer isso funcionar atrás de um servidor squid3, mas não consigo acesso de fora pra dentro de jeito nenhum.
tem alguma dica?