Proteger servidores Debian/Ubuntu contra o ataque Logjam
O que é o Logjam (uma linha)
Logjam é uma vulnerabilidade no intercâmbio de chaves Diffie-Hellman que permite a um atacante forçar chaves fracas quando servidores ou clientes usam parâmetros DH compartilhados ou curtos (p.ex. 512 bits).
Escopo e objetivo
Este tutorial descreve passos práticos para mitigar Logjam em servidores Debian e Ubuntu (compatível com instalações ISPConfig 3). As instruções exigem acesso root no shell.
Importante: não substitua a necessidade de atualizações de segurança. Se possível, aplique pacotes oficiais mais recentes antes de mudanças manuais.
1. Gerar um grupo DH único
O primeiro passo é criar um arquivo dhparams.pem exclusivo com 2048 bits e permissões restritas.
Se a pasta /etc/ssl/private não existir, crie-a e ajuste permissões:
mkdir -p /etc/ssl/private
chmod 710 /etc/ssl/private
Gere o arquivo DH e proteja-o:
cd /etc/ssl/private
openssl dhparam -out dhparams.pem 2048
chmod 600 dhparams.pem
Nota: 2048 bits é o mínimo recomendado hoje. Se precisar de maior segurança e tempo de geração aceitável, use 3072 ou 4096 bits (mais lento para gerar).
2. Apache
- Atualize a suite de cifras em /etc/apache2/mods-available/ssl.conf:
nano /etc/apache2/mods-available/ssl.conf
Altere/adicione estas linhas (SSLCipherSuite deve permanecer em uma única linha sem quebras):
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on
- Definir parâmetros DH (apenas em Apache >= 2.4.8 e OpenSSL >= 1.0.2)
Verifique a versão do Apache:
apache2 -v
E a versão do OpenSSL:
openssl version
Se ambas suportarem SSLOpenSSLConfCmd, adicione em /etc/apache2/mods-available/ssl.conf:
SSLOpenSSLConfCmd DHParameters "/etc/ssl/private/dhparams.pem"
Reinicie o Apache:
service apache2 restart
Se suas versões forem antigas (p.ex. Apache 2.2.x ou OpenSSL 1.0.1), pelo menos aplique a SSLCipherSuite — ela já melhora muita proteção mesmo sem o DHParameters.
3. Nginx
Edite /etc/nginx/nginx.conf e dentro do bloco http { … } adicione ou substitua:
nano /etc/nginx/nginx.conf
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/private/dhparams.pem;
Reinicie o Nginx:
service nginx restart
4. Postfix
Ajuste a configuração TLS e aponte para o arquivo DH:
postconf -e "smtpd_tls_mandatory_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDC3-SHA, KRB5-DE5, CBC3-SHA"
postconf -e "smtpd_tls_dh1024_param_file = /etc/ssl/private/dhparams.pem"
Reinicie:
service postfix restart
Nota: o parâmetro smtpd_tls_dh1024_param_file é usado por algumas versões; consulte a documentação do seu pacote Postfix para nomes de parâmetros em versões mais novas.
5. Dovecot
Edite /etc/dovecot/dovecot.conf:
nano /etc/dovecot/dovecot.conf
Adicione a lista de cifras após a linha ssl_protocols:
ssl_cipher_list=ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
Verifique a versão do Dovecot:
dovecot --version
- Se >= 2.2.6, adicione:
ssl_prefer_server_ciphers = yes
- Se >= 2.2.7, também adicione:
ssl_dh_parameters_length = 2048
Reinicie:
service dovecot restart
6. Pure-FTPd
Pure-FTPd em Debian/Ubuntu pode não suportar a opção -J no wrapper por padrão. Proceda assim:
Edite o wrapper:
nano /usr/sbin/pure-ftpd-wrapper
Procure a linha:
'TLS' => ['-Y %d', \&parse_number_1],
Adicione logo depois:
'TLSCipherSuite' => ['-J %s', \&parse_string],
Crie/edite o arquivo de configuração de cifras:
nano /etc/pure-ftpd/conf/TLSCipherSuite
Cole a lista de cifras (substitua qualquer conteúdo existente):
ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
Reinicie o serviço:
service pure-ftpd-mysql restart
7. Testes e verificação após mudanças
- Verifique os logs dos serviços ao reiniciar: /var/log/apache2/error.log, /var/log/nginx/error.log, /var/log/mail.log, /var/log/auth.log.
- Teste TLS/HTTPS com ferramentas externas (p.ex. SSL Labs) e com openssl s_client:
openssl s_client -connect your.server:443 -cipher 'ALL' -tls1_2
- Verifique que o dhparams.pem está sendo usado (p.ex. via SSLOpenSSLConfCmd em Apache ou ssl_dhparam em Nginx).
8. Quando a mitigação pode falhar / limitações
- Clientes antigos podem não suportar as cifras modernas; desabilitar RC4/SSLv3 pode impedir conexões de navegadores muito antigos.
- Em sistemas com OpenSSL ou pacotes de servidor antigos, algumas diretivas (p.ex. SSLOpenSSLConfCmd) não estarão disponíveis; atualize ou use compensações.
- Se aplicativos internos geram parâmetros DH próprios ou usam bibliotecas embutidas, será preciso ajustar cada aplicação.
9. Alternativas e abordagens complementares
- Atualizar para versões suportadas de OpenSSL e servidores (melhor solução de longo prazo).
- Usar ECDHE (curvas elípticas) preferencialmente — geralmente mais seguras e com melhor desempenho que DHE.
- Migrar serviços críticos para TLS modernos (TLS 1.2/1.3) sempre que possível.
10. Mini-metodologia para aplicar em produção (passos recomendados)
- Fazer backup das configurações atuais.
- Gerar dhparams.pem em um horário de baixa carga.
- Aplicar mudanças localmente em um servidor de teste.
- Verificar logs e testar compatibilidade de clientes.
- Implementar em produção por fases (frontend -> mail -> ftp).
- Monitorar métricas e erros nas 48 horas seguintes.
11. Lista de verificação por função
Administrador de sistemas:
- Gerar dhparams.pem e ajustar permissões.
- Atualizar arquivos de configuração e reiniciar serviços.
- Verificar logs e falhas.
DevOps/Equipe de deploy:
- Testar em staging e automatizar rollout (config management).
- Garantir rollback rápido (backup configs e scripts de reversão).
Suporte/Operações:
- Notificar usuários sobre possíveis incompatibilidades com clientes antigos.
- Preparar instruções de troubleshooting (ex.: flush de cache de load balancer).
12. Critérios de verificação (aceitação)
- O servidor aceita conexões TLS modernas (pelo menos TLS 1.2) sem cifras fracas.
- dhparams.pem é carregado pelo serviço (quando suportado).
- Nenhuma regressão crítica para clientes prioritários identificada.
13. Fato rápido
- Recomendação prática: gere dhparams.pem com 2048 bits e mantenha o arquivo em /etc/ssl/private com permissão 600.
14. Comandos úteis de rollback rápido
- Restaurar arquivo de configuração do backup e reiniciar serviço, por exemplo:
cp /etc/apache2/mods-available/ssl.conf.bak /etc/apache2/mods-available/ssl.conf
service apache2 restart
15. Links úteis
Resumo
- Gere um dhparams.pem único e seguro.
- Atualize as listas de cifras em Apache, Nginx, Postfix, Dovecot e Pure-FTPd.
- Teste versões de servidores e OpenSSL antes de ativar opções dependentes de versão.
- Aplique mudanças em staging e monitore depois do rollout.
Materiais semelhantes

Instalar Linux em Chromebook: guia prático

Monitoramento de discos com smartmontools
Proteger servidores Debian/Ubuntu contra Logjam

Dark Sky — previsões hiperlocais de chuva

SSH seguro no CentOS 7 com WiKID 2FA
