Pesquisa de site

Como proteger um servidor FTP usando SSL/TLS para transferência segura de arquivos no CentOS 7


Pelo seu design original, o FTP (File Transfer Protocol) não é seguro, o que significa que não criptografa os dados transmitidos entre duas máquinas, juntamente com as credenciais do usuário. Isso representa uma enorme ameaça aos dados e também à segurança do servidor.

Neste tutorial, explicaremos como habilitar manualmente os serviços de criptografia de dados em um servidor FTP no CentOS/RHEL 7 e Fedora; passaremos por várias etapas para proteger serviços VSFTPD (Very Secure FTP Daemon) usando certificados SSL/TLS.

Pré-requisitos:

  1. Você deve ter instalado e configurado um servidor FTP no CentOS 7

Antes de começarmos, observe que todos os comandos neste tutorial serão executados como root, caso contrário, use o comando sudo para obter privilégios de root se você não estiver controlando o servidor usando a conta root.

Etapa 1. Gerando certificado SSL/TLS e chave privada

1. Precisamos começar criando um subdiretório em: /etc/ssl/ onde armazenaremos o certificado SSL/TLS e os arquivos de chave :

mkdir /etc/ssl/private

2. Em seguida, execute o comando abaixo para criar o certificado e a chave para vsftpd em um único arquivo, aqui está a explicação de cada flag utilizada.

  1. req – é um comando para gerenciamento de Solicitação de Assinatura de Certificado X.509 (CSR).
  2. x509 – significa gerenciamento de dados de certificados X.509.
  3. dias – define o número de dias durante os quais o certificado é válido.
  4. newkey – especifica o processador da chave do certificado.
  5. rsa:2048 – Processador de chave RSA, irá gerar uma chave privada de 2048 bits.
  6. keyout – define o arquivo de armazenamento de chaves.
  7. out – define o arquivo de armazenamento do certificado, observe que tanto o certificado quanto a chave são armazenados no mesmo arquivo: /etc/ssl/private/vsftpd.pem.
openssl req -x509 -nodes -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem -days 365 -newkey rsa:2048

O comando acima solicitará que você responda às perguntas abaixo, lembre-se de usar valores que se apliquem ao seu cenário.

Country Name (2 letter code) [XX]:IN
State or Province Name (full name) []:Lower Parel
Locality Name (eg, city) [Default City]:Mumbai
Organization Name (eg, company) [Default Company Ltd]:TecMint.com
Organizational Unit Name (eg, section) []:Linux and Open Source
Common Name (eg, your name or your server's hostname) []:tecmint
Email Address []:[email 

Etapa 2. Configurando VSFTPD para usar SSL/TLS

3. Antes de realizar qualquer configuração VSFTPD, vamos abrir as portas 990 e 40000-50000 para permitir conexões TLS e o intervalo de portas passivas para definir no arquivo de configuração VSFTPD respectivamente:

firewall-cmd --zone=public --permanent --add-port=990/tcp
firewall-cmd --zone=public --permanent --add-port=40000-50000/tcp
firewall-cmd --reload

4. Agora, abra o arquivo de configuração do VSFTPD e especifique os detalhes do SSL nele:

vi /etc/vsftpd/vsftpd.conf

Procure a opção ssl_enable e defina seu valor como YES para ativar o uso de SSL, além disso, como TSL é mais seguro que SSL, restringiremos o VSFTPD para empregar TLS em vez disso, usando a opção ssl_tlsv1_2:

ssl_enable=YES
ssl_tlsv1_2=YES
ssl_sslv2=NO
ssl_sslv3=NO

5. Em seguida, adicione as linhas abaixo para definir a localização do certificado SSL e do arquivo de chave:

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem

6. Em seguida, temos que impedir que usuários anônimos usem SSL e, em seguida, forçar todos os logins não anônimos a usar uma conexão SSL segura para transferência de dados e enviar a senha durante o login:

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

7. Além disso, podemos adicionar as opções abaixo para aumentar a segurança do servidor FTP. Quando a opção require_ssl_reuse estiver definida como YES, todas as conexões de dados SSL serão necessárias para exibir a reutilização de sessão SSL; provando que eles conhecem o mesmo segredo mestre que o canal de controle.

Portanto, temos que desligá-lo.

require_ssl_reuse=NO

Novamente, precisamos selecionar quais cifras SSL o VSFTPD permitirá para conexões SSL criptografadas com a opção ssl_ciphers. Isso pode limitar bastante os esforços dos invasores que tentam forçar uma cifra específica na qual provavelmente descobriram vulnerabilidades:

ssl_ciphers=HIGH

8. Agora, defina o intervalo de portas (porta mínima e máxima) das portas passivas.

pasv_min_port=40000
pasv_max_port=50000

9. Opcionalmente, permita a depuração SSL, o que significa que os diagnósticos de conexão openSSL são registrados no arquivo de log VSFTPD com a opção debug_ssl:

debug_ssl=YES

Salve todas as alterações e feche o arquivo. Então vamos reiniciar o serviço VSFTPD:

systemctl restart vsftpd

Etapa 3: Testando o servidor FTP com conexões SSL/TLS

10. Depois de fazer todas as configurações acima, teste se o VSFTPD está usando conexões SSL/TLS tentando usar o FTP na linha de comando da seguinte maneira:

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
530 Non-anonymous sessions must use encryption.
Login failed.
421 Service not available, remote server has closed connection
ftp>

Na captura de tela acima, podemos ver que há um erro informando que o VSFTPD só pode permitir que o usuário faça login em clientes que suportam serviços de criptografia.

A linha de comando não oferece serviços de criptografia, produzindo assim o erro. Portanto, para conectar-se com segurança ao servidor, precisamos de um cliente FTP que suporte conexões SSL/TLS, como o FileZilla.

Etapa 4: Instale o FileZilla para conectar-se com segurança a um servidor FTP

11. FileZilla é um cliente FTP multiplataforma moderno, popular e importante que suporta conexões SSL/TLS por padrão.

Para instalar o FileZilla no Linux, execute o comando abaixo:

--------- On CentOS/RHEL/Fedora --------- 
yum install epel-release filezilla

--------- On Debian/Ubuntu ---------
sudo apt-get install  filezilla   

12. Quando a instalação for concluída (ou então se você já a tiver instalada), abra-a e vá para Arquivo=>Gerenciador de Sites ou (pressione Ctrl+S ) para obter a interface do Site Manager abaixo.

Clique no botão Novo Site para adicionar novos detalhes de conexão site/host.

13. Em seguida, defina o nome do host/site, adicione o endereço IP, defina o protocolo a ser usado, a criptografia e o tipo de logon como na captura de tela abaixo (use valores que se aplicam ao seu cenário):

Host:  192.168.56.10
Protocol:  FTP – File Transfer Protocol
Encryption:  Require explicit FTP over   #recommended 
Logon Type: Ask for password	        #recommended 
User: username

14. Em seguida, clique em Conectar para inserir a senha novamente e, em seguida, verifique o certificado que está sendo usado para a conexão SSL/TLS e clique em OK uma vez more para se conectar ao servidor FTP:

Neste estágio, devemos ter logado com sucesso no servidor FTP através de uma conexão TLS, verifique a seção de status da conexão para obter mais informações na interface abaixo.

15. Por último, mas não menos importante, tente transferir arquivos da máquina local para o servidor FTP na pasta de arquivos, dê uma olhada na extremidade inferior da interface do FileZilla para visualizar relatórios sobre transferências de arquivos.

Isso é tudo! Tenha sempre em mente que o FTP não é seguro por padrão, a menos que o configuremos para usar conexões SSL/TLS como mostramos neste tutorial. Compartilhe suas idéias sobre este tutorial/tópico por meio do formulário de feedback abaixo.