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.

[ Hits: 21.075 ]

Por: Xerxes em 23/07/2014


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.

  # 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:
Linux: Criando um servidor FTP acessível fora da LAN com o Proftpd   Linux: Criando um servidor FTP acessível fora da LAN com o Proftpd

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:
Abraço!

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Do Ubuntu ao Arch

O que fazer após instalar Linux Mint 15 (sim, há o que fazer!)

Teoria das Formas e o Aumento da Usabilidade

Aprendendo Inglês em casa usando o Android

Conhecendo o Slpkg (gerenciador de pacotes para Slackware)

Leitura recomendada

Nagios - Configuração no Ubuntu

Conexão dial-up no Gnome usando o network-admin

Melhorando o tempo de boot do Fedora e outras distribuições

NFS sem segredos

Instalação do Dspace no CentOS

  
Comentários
[1] Comentário enviado por DumbaF em 08/05/2015 - 15:12h


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?

[2] Comentário enviado por xerxeslins em 08/05/2015 - 16:36h


[1] Comentário enviado por DumbaF em 08/05/2015 - 15:12h


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?


Olá!

Não sei o que pode ser. Depois vou tentar instalar de novo (troquei de distro. Agora estou com Debian) e então eu digo se deu certo ou não e poderei ajudar você melhor.

[3] Comentário enviado por xerxeslins em 08/05/2015 - 18:30h


[1] Comentário enviado por DumbaF em 08/05/2015 - 15:12h


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?


Olá, vc criou conta no noip.com?

Instalei aqui no Debian e está funcionando. Acessando ftp de fora da LAN pelo nome da máquina e domínio.

[4] Comentário enviado por Bartels em 03/10/2018 - 14:04h

Boa tarde xerxeslins, excelente topico, todavia estou tendo problemas no acesso externo.... poderia me dar um help ???
O servidor FTP está legal na lan
estou usando ubuntu server 16.4 LTS
deixei o ip do servidor como dms no roteador

abaixo a configuração do /etc/proftpd.conf

#
# /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file.
# To really apply changes, reload proftpd after modifications, if
# it runs in daemon mode. It is not required in inetd/xinetd mode.
#

# Includes DSO modules
Include /etc/proftpd/modules.conf

# Set off to disable IPv6 support which is annoying on IPv4 only boxes.
UseIPv6 off
# If set on you can experience a longer connection delay in many cases.
IdentLookups off

ServerName "server"
ServerType standalone
DeferWelcome off

MultilineRFC2228 on
DefaultServer on
ShowSymlinks on

TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200

DisplayLogin welcome.msg
DisplayChdir .message true
ListOptions "-l"

DenyFilter \*.*/

# Use this to jail all users in their homes
DefaultRoot ~

# Users require a valid shell listed in /etc/shells to login.
# Use this directive to release that constrain.
# RequireValidShell off

# Port 21 is the standard FTP port.
Port 21
Umask 022

# In some cases you have to specify passive ports range to by-pass
# firewall limitations. Ephemeral ports can be used for that, but
# feel free to use a more narrow range.
PassivePorts 6000 60005

# If your host was NATted, this option is useful in order to
# allow passive tranfers to work. You have to use your public
# address and opening the passive ports used on your firewall as well.
# MasqueradeAddress 1.2.3.4

# This is useful for masquerading address with dynamic IPs:
# refresh any configured MasqueradeAddress directives every 8 hours
<IfModule mod_dynmasq.c>
# DynMasqRefresh 28800
</IfModule>

# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances 30

# Set the user and group that the server normally runs at.
User nobody
Group nogroup

# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
Umask 022 022
# Normally, we want files to be overwriteable.
AllowOverwrite on

# Uncomment this if you are using NIS or LDAP via NSS to retrieve passwords:
# PersistentPasswd off

# This is required to use both PAM-based authentication and local passwords
# AuthOrder mod_auth_pam.c* mod_auth_unix.c

# Be warned: use of this directive impacts CPU average load!
# Uncomment this if you like to see progress and transfer rate with ftpwho
# in downloads. That is not needed for uploads rates.
#
# UseSendFile off

TransferLog /var/log/proftpd/xferlog
SystemLog /var/log/proftpd/proftpd.log

# Logging onto /var/log/lastlog is enabled but set to off by default
#UseLastlog on

# In order to keep log file dates consistent after chroot, use timezone info
# from /etc/localtime. If this is not set, and proftpd is configured to
# chroot (e.g. DefaultRoot or <Anonymous>), it will use the non-daylight
# savings timezone regardless of whether DST is in effect.
#SetEnv TZ :/etc/localtime

<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>

<IfModule mod_ratio.c>
Ratios off
</IfModule>


# Delay engine reduces impact of the so-called Timing Attack described in
# http://www.securityfocus.com/bid/11430/discuss
# It is on by default.
<IfModule mod_delay.c>
DelayEngine on
</IfModule>

<IfModule mod_ctrls.c>
ControlsEngine off
ControlsMaxClients 2
ControlsLog /var/log/proftpd/controls.log
ControlsInterval 5
ControlsSocket /var/run/proftpd/proftpd.sock
</IfModule>

<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>

#
# Alternative authentication frameworks
#
#Include /etc/proftpd/ldap.conf
#Include /etc/proftpd/sql.conf

#
# This is used for FTPS connections
#
#Include /etc/proftpd/tls.conf

#
# Useful to keep VirtualHost/VirtualRoot directives separated
#
#Include /etc/proftpd/virtuals.conf

# A basic anonymous configuration, no upload directories.

# <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
# # Cosmetic changes, all files belongs to ftp user
# DirFakeUser on ftp
# DirFakeGroup on ftp
#
# RequireValidShell off
#
# # Limit the maximum number of anonymous logins
MaxClients 3
#
# # 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
# <Directory *>
<Limit WRITE>
DenyAll
</Limit>
# </Directory>
#
# # Uncomment this if you're brave.
# # <Directory incoming>
# # # Umask 022 is a good standard umask to prevent new files and dirs
# # # (second parm) from being group and world writable.
# # Umask 022 022
# # <Limit READ WRITE>
# # DenyAll
# # </Limit>
# # <Limit STOR>
# # AllowAll
# # </Limit>
# # </Directory>
#
# </Anonymous>
MaqueradeAddress bartels1.ddns.com.br
MasqueradeAddress 192.168.1.22
PassivePorts 6000 65535
# Include other custom configuration files
Include /etc/proftpd/conf.d/

RootLogin off
RequireValidShell off
<Limit LOGIN>
DenyGroup !userftp
</Limit>
<IfModule mod_facts.c>
FactsAdvertise off
</IfModule>

[5] Comentário enviado por xerxeslins em 03/10/2018 - 14:55h

Você criou conta no noip?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts