
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!
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
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
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
———————————————————————-
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
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.
Olá Clayton, verifique as permissões na pasta e revise suas configurações.
Poste o log do erro para ajudar.
Abraços!
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
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!
nao consigo acesso pela internet, so por rede interna. pq ser’a ?
Olá Calebe, seria necessário rever suas configurações, verificar roteador/firewall e redirecionamento de portas, conforme diz no tutorial.
Abraços!