Debian 6 – Servidor FTP com o ProFTPD.

Publicado: 18/04/2011 em Geral, Linux

Olá Galera, Na ultima semana subi um servidor FTP e funcionou tão bem que não poderia deixar de postar aqui.

Então, vamos começar.

Instalando e configurando o ProFTPD no Debian 6 e outras distribuições.

Em particular não vou abordar acesso anônimo, meu foco aqui é usuário com acesso somente em sua pasta home e com autenticação.

Primeiro, vamos instalar o ProFTPD.

# apt-get install proftpd
# yum install proftpd

Durante a  instalação, quando for solicitado o modo do servidor, escolha standalone.

O standalone é mais seguro e mais rápido, enquanto o inetd faz com que ele fique ativo apenas quando acessado, economizando cerca de 400 KB de memória RAM que hoje em dia não é nada.

Após instalação, no Debian, edite o arquivo vi /etc/proftpd/proftpd.conf

Agora, segue meu arquivo (proftpd.conf) completo.

#
# /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file.
# To really apply changes reload proftpd after modifications.
# 

# 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
UseReverseDNS			off

ServerName			"NomeServidor"
ServerType			standalone
DeferWelcome			off	

MultilineRFC2228		on
DefaultServer			on
ShowSymlinks			on
AllowForeignAddress		on

TimeoutNoTransfer		1200
TimeoutStalled			300
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

# 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                  6500 6535

# 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		201.xx.39.xxx

# 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				proftpd
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

<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://security.lss.hr/index.php?page=details&ID=LSS-2004-10-02
# It is on by default.
<IfModule mod_delay.c>
DelayEngine off
</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.con

# A basic anonymous configuration, no upload directories.

# <Anonymous ~ftp>
#   User				ftp
#   Group				nogroup
#   # 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			20
#
#   # 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>

Comandos Importantes:

UseIPv6 off # Uma das primeiras coisas a se fazer, caso você não use o IpV6, é desabilitado, ele vem habilitado por padrão.

AllowForeignAddress on # Está linha é a responsável por autorizar as conexões externas. Se estamos usando um FTP, lógico que a intenção não é usa-lo interno, então essa linha deve estar presente no arquivo.

DefaultRoot ~ # Este comando é o responsável por restringir o usuário à sua pasta home e nada mais.

MaxInstances 30 # Determina quantas conexões simultâneas você terá no servidor. (Default é 30)

Port 21 # Porta padrão do protocolo FTP.

PassivePorts 6500 6535 # Portas que serão usadas para o tráfego dos dados.

MasqueradeAddress 201.XX.39.XXX # Essa opção deve ser usada quando utilizamos o FTP em modo passivo. Coloque seu IP de internet, também funciona com o serviço no-ip mas isso não será abordado aqui.

Include /etc/proftpd/tls.conf # Descomentei esta linha pois usei FTP Over TLS. Veremos mais adiante.

O mais importante é isso. o resto altere se necessário e de acordo com seu conhecimento, pesquisar também nunca é de mais😉 Salve o arquivo e reinicie o serviço /etc/init.d/proftpd restart

Geralmente temos um roteador, firewall na rede, então teremos que direcionar as portas definidas no “PassivePorts”, a porta 21 e também a 20. Alguns provedores bloqueia a porta 21, ato inútil pois podemos definir no roteador uma porta por exemplo, 2121 de entrada e redirecioná-la para a porta 21 interna. Se você definir a 2121 como entrada no roteador, faça o mesmo com a 2120 e redirecione para a 20 do servidor.

Criando Usuário

Para criar usuário vamos usar o seguinte comando.

1º Criar a pasta home

# mkdir /home/ftp/usuario1

2º Criar usuário.

# adduser –home /home/ftp/usuario1 –shell /bin/false –no-create-home usuario1

O comando –shell /bin/false desabilita o shell para esse usuário, impossibilitando o mesmo de logar via SSH

E também, como criamos a pasta home antes de criar o usuário, usamos o comando –no-create-home

Neste ponto, já é possível acessar o servidor.

Importante: O Acesso FTP será permitido somente Remoto devido ao comando AllowForeignAddress on – Deixe como off para efeito de teste se for necessário.

FTP Over TLS

É possível adicionar uma camada de segurança ao protocolo FTP ativando a encriptação via TLS

Instalando o OpenSSL: # apt-get install openssl

Crie o seguinte diretório: # mkdir /etc/proftpd/cert

Para criar o certificado, use o comando: # openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/cert/proftpd.cert.pem -keyout /etc/proftpd/cert/proftpd.key.pem

A opção “-days” especifica o tempo de validade do certificado, Nesse caso 365 Dias (1 ano). Responda as perguntas no momento da criação do certificado e ao termino, edite o arquivo /etc/proftpd/tls.conf Seu conteúdo padrão pode ser apagado e adicionado o Seguinte:

<IfModule mod_tls.c>

TLSEngine on TLSLog /var/log/proftpd/tls.log

TLSProtocol SSLv23

TLSOptions NoCertRequest

TLSRSACertificateFile /etc/proftpd/cert/proftpd.cert.pem

TLSRSACertificateKeyFile /etc/proftpd/cert/proftpd.key.pem

TLSVerifyClient off

TLSRequired on # Esse comando quando “on” Obriga que todas as conexões usem TLS em caso de “off” ela fica sendo opcional.

</IfModule>

Reinicie o serviço: # /etc/init.d/proftpd restart

Agora usando o File Zilla para testar. Configure um servidor como na imagem:

Altere na linha Encryption (Require Explicit FTP over TLS) Depois, basta conectar:

Tutorial foi bem rápido, mas atendeu a minha necessidade perfeitamente.

Galera, em caso de duvidas, perguntem!

Abraços!

comentários
  1. James disse:

    Renan,

    Muito obrigado pelas informações do seu site sobre o Proftdp, porém tenho uma duvida.

    Estou rodando um instalacao de testes do Debian 6.0 no Virtual box, com o ip 192.168.1.10
    e resto fiz como o seu exemplo, mas nao esta funcionando.
    A opcao “AllowForeignAddress off ” definida para testar no serivodor local como orientado.

    Nao tenho muita experiencia em Linux, por favor poderias me dar uma dica?

    Mostrou a tela com o certificado desconhecido e nao consegui logar…

    Estado: A conectar a 192.168.1.10:21 …
    Estado: conexão estabelecida, à espera da mensagem de boas-vindas …
    Resposta: 220 ProFTPD 1.3.4rc2 Server (NomeServidor) [192.168.1.10]
    Comando: AUTH TLS
    Resposta: 234 AUTH TLS successful
    Estado: A iniciar o TLS …
    Estado: A verificar o certificado …
    Comando: USER user_anonimo_ftp
    Estado: conexão TLS/SSL estabelecida.
    Resposta: 331 Password required for user_anonimo_ftp
    Comando: PASS ***
    Resposta: 530 Login incorrect.
    Erro: Erro crítico
    Erro: Não foi possível conectar ao servidor

    Muito obrigado pela atenção

    James

    • RenanPro disse:

      Olá James, No exemplo que fiz, não autorizei logon anonimo, e pelo log que vc mandou, vc está tentando logar como anonimo:
      Comando: USER user_anonimo_ftp
      Estado: conexão TLS/SSL estabelecida.
      Resposta: 331 Password required for user_anonimo_ftp
      Comando: PASS ***
      Resposta: 530 Login incorrect.

      Crie um usuário como mostra o tutorial e tente se logar com ele.
      Outra dica, quando vc está acessando o FTP na porta padrão (21) vc não precisa especifica-la, basta colocar o ftp://IP_DO_SERVIDOR_FTP

      Caso ainda tenha problemas retorne e iremos resolver.
      Abraços

  2. james disse:

    Boa noite Renan

    Grato pelo feedback.
    Eu tentei usar o usuaro1 sugerido no manual, mas nao consigo logar.

    Parece nao reconher o usuário “usuario1” …

    Log
    ===

    ———————————————————————-
    Resposta:220 ProFTPD 1.3.3a Server (Debian.Server) [192.168.1.17]
    Comando: AUTH TLS
    Resposta: 234 AUTH TLS successful
    Estado: A iniciar o TLS …
    Estado: A verificar o certificado …
    Comando: USER usuario1
    Estado: conexão TLS/SSL estabelecida.
    Resposta: 331 Password required for usuario1
    Comando: PASS ***
    Resposta: 530 Login incorrect.
    Erro: Erro crítico
    Erro: Não foi possível conectar ao servidor
    ———————————————————————-

  3. james disse:

    Olá Renan

    Esqueci de mencionar, usuário do sistema acessa o ftp mas consigo acessar com o usuário “usuario1” criado com os parametros acima.

    Grato

  4. Boa noite Renan, queria um ajuda….

    Cara instalei o proftpd em uma maquina virtual com debian 6.0, no meu roteador liberei o acesso externo para a porta 2121, e no arquivo de configuração do proftpd tb, na minha rede interna eu acesso normal o http://ftp…agora da rede externa ele acha o ftp normal…mais quando entro com o nome de usuario e a senha, ele da erro na pasta http://ftp…. realmente não sei o que acontece…

    eu não logo como anonimo….o que eu faço é criar uma pasta com o adduser e uma senha…. de fora da rede eu digito ftp://nomedousuario@200.xxx.xxx.xxx:2121 mais nada…cara…sempre o mesmo erro….

    se puder me dar uma ajuda…serei grato.

  5. Olá!

    Criei o servidor conforme orientado, mas o mesmo não consegue obter a lista de pastas.

    Eis o log da conexão:

    Estado: A conectar a XXX.XXX.36.32:21 …
    Estado: conexão estabelecida, à espera da mensagem de boas-vindas …
    Resposta: 220 ProFTPD 1.3.3a Server (Blastoise) [XXX.XXX.36.32]
    Comando: AUTH TLS
    Resposta: 234 AUTH TLS successful
    Estado: A iniciar o TLS …
    Estado: A verificar o certificado …
    Comando: USER mauricio
    Estado: conexão TLS/SSL estabelecida.
    Resposta: 331 Password required for mauricio
    Comando: PASS *********
    Resposta: 230 User mauricio logged in
    Comando: SYST
    Resposta: 215 UNIX Type: L8
    Comando: FEAT
    Resposta: 211-Features:
    Resposta: MDTM
    Resposta: MFMT
    Resposta: TVFS
    Resposta: AUTH TLS
    Resposta: UTF8
    Resposta: MFF modify;UNIX.group;UNIX.mode;
    Resposta: MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.mode*;UNIX.owner*;
    Resposta: PBSZ
    Resposta: PROT
    Resposta: SITE MKDIR
    Resposta: SITE RMDIR
    Resposta: SITE UTIME
    Resposta: SITE SYMLINK
    Resposta: REST STREAM
    Resposta: LANG pt-BR.UTF-8*
    Resposta: SIZE
    Resposta: 211 End
    Comando: OPTS UTF8 ON
    Resposta: 200 UTF8 set to on
    Comando: PBSZ 0
    Resposta: 200 PBSZ 0 successful
    Comando: PROT P
    Resposta: 200 Protection set to Private
    Estado: Ligado
    Estado: A obter a lista de pastas …
    Comando: PWD
    Resposta: 257 “/” is the current directory
    Comando: TYPE I
    Resposta: 200 Type set to I
    Comando: PASV
    Resposta: 227 Entering Passive Mode (200,131,36,32,25,105).
    Comando: MLSD
    Erro: A conexão excedeu o tempo de espera
    Erro: Falhou a obtenção da lista de pastas

    • RenanPro disse:

      Olá Mauricio, verifique se as portas passivas estão liberadas/redirecionadas no firewall/Roteador

      “Comando: PASV
      Resposta: 227 Entering Passive Mode (200,131,36,32,25,105).
      Comando: MLSD
      Erro: A conexão excedeu o tempo de espera
      Erro: Falhou a obtenção da lista de pastas”

      Abraços!

  6. calebe disse:

    nao consigo acesso pela internet, so por rede interna. pq ser’a ?

    • RenanPro disse:

      Olá Calebe, seria necessário rever suas configurações, verificar roteador/firewall e redirecionamento de portas, conforme diz no tutorial.

      Abraços!

  7. Marcus disse:

    Estou com o mesmo problema do James, o usuário do sistema consegue acessar o ftp mas nenhum outro usuário consegue acessar não importa como eu crie ele.

    Alguém pode ajudar?

  8. Ricardo disse:

    olá, muito bom o tutorial, mas chega em uma parte do ftp que ele para

    Comando: TYPE I
    Resposta: 200 Type set to I
    Comando: PASV
    Resposta: 227 Entering Passive Mode (186,202,139,57,242,79).
    Comando: MLSD

    já tentei desabilitar o firewall iptables … mas não deu em nada

  9. Karlos Bahia disse:

    Olá Renan, em primeiro lugar parabéns pelo tutorial, eu seguir todas as orientações,estou com uma duvida, PassivePorts 6500 6535, a pergunta e a seguinte:estes numeros citados acima é colado no Roteador ?

    um abraço karlos bahia

  10. Fernando disse:

    Tu citou a respeito do no-ip, tu poderia me indicar algum material, onde explicasse como vou criar o dominio no no-ip e que porta eu setaria la se é a 80 ou a do ftp msm?

  11. Leandro Cezar Marques disse:

    Muito bom o seu artigo. Estou com uma dúvida quanto à impedir que os usuários consigam fazer upload de arquivos, quero que eles façam somente download. Obrigado.

  12. Nuno Costa disse:

    Boas, como configurar o porftpd por webmin?
    Segui todos os seus paços depois quando tento acede-lo via browser da a seguinte mensagem
    problem occurred while loading the url ftp://…..

    Sou novo a usar o debian, mas gostaria de evoluir em linux

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s