Autor: Antônio David | Publicado: 2013-02-15T15:39:00-08:00


     
Debian 6 – Servidor FTP com o&nbsp;ProFTPD.





Primeiro, vamos instalar o ProFTPD.


# apt-get install proftpd
# yum install proftpd

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

O&nbsp;standalone&nbsp;é 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

# DynMasqRefresh 28800


# 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


QuotaEngine off



Ratios off


# Delay engine reduces impact of the so-called Timing Attack described in
# http://security.lss.hr/index.php?page=details&amp;ID=LSS-2004-10-02
# It is on by default.

DelayEngine off



ControlsEngine        off
ControlsMaxClients    2
ControlsLog           /var/log/proftpd/controls.log
ControlsInterval      5
ControlsSocket        /var/run/proftpd/proftpd.sock



AdminControlsEngine off


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

# 
#   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
#   
#     
#       DenyAll
#     
#   
#
#   # Uncomment this if you're brave.
#   # 
#   #   # Umask 022 is a good standard umask to prevent new files and dirs
#   #   # (second parm) from being group and world writable.
#   #   Umask    022  022
#   #            
#   #            DenyAll
#   #            
#   #            
#   #            AllowAll
#   #            
#   # 
#
# 
&nbsp;
&nbsp;
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:



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.



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!