Debian 6 – Servidor FTP com o ProFTPD


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.

[]´s

Tags:

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

%d blogueiros gostam disto: