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:
- 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.
- req – é um comando para gerenciamento de Solicitação de Assinatura de Certificado X.509 (CSR).
- x509 – significa gerenciamento de dados de certificados X.509.
- dias – define o número de dias durante os quais o certificado é válido.
- newkey – especifica o processador da chave do certificado.
- rsa:2048 – Processador de chave RSA, irá gerar uma chave privada de 2048 bits.
- keyout – define o arquivo de armazenamento de chaves.
- 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.