Se você quiser configurar um servidor ftp seguro, eficiente e rápido, então você pode considerar instalar o vsftpd. É, provavelmente, o servidor FTP mais seguro e rápido para sistemas UNIX-like.

Por se pequeno para fins de velocidade e segurança, muitas configurações de FTP mais complicados são realizáveis com vsftpd. Por exemplo, é possível lidar com:

  • Configurações de IP virtuais
  • Os usuários virtuais
  • Operação independente ou inetd
  • Configuração poderosa por usuário
  • largura de banda
  • Per-source-IP configuração
  • Per-source-IP limites
  • IPv6
  • O suporte à criptografia SSL através da integração

Utilizando o passo a passo a seguir como guia para a sua configuração, você evita de se deparar com error como:

  • Error: The data connection could not be established: EHOSTUNREACH – No route to host
  • Error: Connection timed out
  • Error: Failed to retrieve directory listing

Instalando vsFTPd

  
sudo apt-get update  
sudo apt-get install vsftpd  

Configurando o vsFTPd

O servidor vai ser executado com privilégios mínimos de o usuário “nobody” e registro completo será ativado. Finalmente, vamos limitar clientes para os tempos de espera de ligação específicas e limitar os comandos que aceitará de todos os clientes FTP.

  
sudo vim /etc/vsftpd.conf  
  
#######################################################
###  vsftpd.conf   BEGIN
#######################################################
# manpage: http://vsftpd.beasts.org/vsftpd_conf.html
#
# Run in daemon mode
background=YES  
listen=YES  
#listen_address=111.111.111.111
#pasv_address=127.0.0.1
#
# The new highly restrictive seccomp filter sandbox
# If you see "OOPS: priv_sock_get_cmd" then disable seccomp
seccomp_sandbox=NO  
#
# User to run daemon as
#nopriv_user=_vsftpd
#ftp_username=_ftp
#
# Ftp ports
connect\_from\_port\_20=NO  
ftp\_data\_port=20  
listen_port=21  
pasv_enable=Yes  
pasv\_min\_port=7000  
pasv\_max\_port=7014  
pasv\_addr\_resolve=NO  
pasv_address=191.237.128.149  
pasv_promiscuous=NO  
port_enable=NO  
port_promiscuous=NO  
#
# SSL (force options for a SSL only server)
#ssl_enable=YES
#ssl_tlsv1=YES
#ssl_sslv2=NO
#ssl_sslv3=NO
#rsa_cert_file=/etc/ssl/private/vsftpd.pem
#allow_anon_ssl=YES
#force_anon_data_ssl=YES
#force_anon_logins_ssl=YES
#force_local_data_ssl=YES
#force_local_logins_ssl=YES
#
# Timeouts
connect_timeout=0  
data\_connection\_timeout=0  
idle\_session\_timeout=0  
#
# Information messages
#setproctitle_enable=YES
#banner_file=/etc/banner
dirmessage_enable=YES  
ftpd_banner=Teste ftp server  
#
# Access limits and controls
async\_abor\_enable=NO  
#cmds_allowed=ABOR,APPE,CWD,DELE,HELP,LIST,MDTM,MKD,NLST,PASS,PASV,PWD,QUIT,RETR,RMD,RNFR,RNTO,SIZE,STOR,TYPE,USER
#cmds_allowed=ABOR,CWD,DELE,LIST,MDTM,MKD,NLST,PASS,PASV,PWD,QUIT,RETR,RMD,RNFR,RNTO,SIZE,STOR,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST
delay\_successful\_login=1  
delete\_failed\_uploads=yes  
guest_enable=NO  
write_enable=YES  
max_clients=100  
max\_login\_fails=1  
max\_per\_ip=0  
pam\_service\_name=vsftpd  
allow\_writeable\_chroot=YES  
tcp_wrappers=NO  
hide_file={.*,*.mp3}  
deny_file={*.mp3}  
#
# Preferences
ascii\_upload\_enable=NO  
ascii\_download\_enable=NO  
hide_ids=YES  
ls\_recurse\_enable=NO  
use_localtime=NO  
#
# Allow anonymous FTP?
#anonymous_enable=YES
#anon_max_rate=0
#anon_mkdir_write_enable=NO
#anon_root=/disk01/ftp/
#anon_world_readable_only=YES
#anon_umask=0022
#anon_upload_enable=NO
#anon_other_write_enable=NO
#no_anon_password=NO
#
# Allow local user access?
local_enable=YES  
local\_max\_rate=0  
local_umask=0022  
chroot\_local\_user=YES  
check_shell=NO  
chmod_enable=NO  
secure\_chroot\_dir=/var/run/vsftpd/empty  
#userlist_enable=YES
userlist_deny=NO  
#userlist_file=/etc/vsftpd_users
#
# Logging
dual\_log\_enable=NO  
log\_ftp\_protocol=NO  
vsftpd\_log\_file=/var/log/vsftpd.log  
xferlog_enable=YES  
xferlog\_std\_format=NO  
xferlog_file=/var/log/xferlog  
#
# Passive

#
#######################################################
###  vsftpd.conf  END
#######################################################

Ativando o modo Passivo

Para isso nós reservar um intervalo de portas para usar em conexões FTP passivas. No exemplo abaixo, nós iremos utilizar o intervalo da porta 7000 até 7014. Normalmente é comum ser utilizado um range de portas bem maior, porém no quando você utiliza azure, existe uma limitação de 150 endpoints, por isso, vamos utilizar um range menor. Para ativar o modo passivo, será preciso editar o arquivo de configuração vsftpd.conf novamente:

  
sudo vi /etc/vsftpd.conf  

Adicionando as linhas abaixo:

  
pasv_enable=YES  
pasv\_min\_port=7000  
pasv\_max\_port=7014  
port_enable=YES  

Configurando o Firewall

Você vai precisar para ativar dois módulos do kernel para o iptables. Estes irão ligar o NAT (Network Address Translation) para FTP e rastreamento de conexão FTP. Como iptables / Netfilter é parte do kernel, precisamos usar modprobe para adicioná-los para a sessão atual, afinal você não vai querer reiniciar um servidor só por isso, e também fazer alterações em /etc/modules para que, caso seja necessário reiniciar o seu servidor mais tarde, os módulos sejam carregados durante a inicialização do mesmo.

Primeiro, nós deveremos utilizar o modprobe para usar esses dois módulos agora:

  
sudo modprobe ip_nat_ftp  
sudo modprobe ip_conntrack_ftp  

Em seguida, vamos modificar o arquivo de configuração /etc/modules assim os módulos deverão ser carregados na próxima reinicialização:

  
sudo vim /etc/modules  

Adicione as linhas:

  
ip\_nat\_ftp  
ip\_conntrack\_ftp  
  
sudo iptables -A INPUT -p tcp --destination-port 7000:7014 -j ACCEPT  

Adicionando usuários com acesso a pastas específicas

Pode ser necessário criar usuários com acesso a pastas específicas do seu servidor de FTP, para isso crie o usuário e atribua o home do mesmo para a pasta desejada.
Como meu servidor web está rodando nessa pasta estou adicionando o usuário para o grupo www-data

  
useradd -m usuarioEspecifico -s /usr/sbin/nologin -d /home/ftp/www/pasta/especifica/ -g www-data  

Garantindo permissão de escrita

Para garantir que o grupo possa escrever na pasta

  
sudo chmod go+rwx /home/ftp/www/pasta/especifica/  

Liberando as portas

Amazon EC2

Isto pode ser feito através do AWS Management Console (painel de controle web EC2 da Amazon), ou no seu próprio console:

ec2-authorize default -p 20-21
ec2-authorize default -p 7000-7014

Azure

É necessário adicionar as seguintes portas abertas no
EndPoint:
TCP 20-21
TCP 7000-7014

Reinicie o serviço vsftpd

Finalmente, você deve ter tudo que você precisa para se conectar via FTP no seu servidor:

  
sudo service vsftpd restart