Configurei um servidor Node/Express HTTPS/SSL usando LetsEncrypt para os certificados, rodando na porta 3000. Funciona e posso acessá-lo via www.example.com:3000
. Mas eu realmente quero poder acessá-lo diretamente do www.example.com
.
Consegui fazer isso funcionar (veja meu código abaixo) criando minha própria configuração do nginx e executando o sudo systemctl restart nginx
.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _; // *
location / {
allow all; // *
}
}
server {
server_name www.example.com;
listen [::]:443 ssl;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass https://127.0.0.1:3000;
allow all; // *
}
}
Adaptei o segundo servidor de um servidor gerado automaticamente pelo Certbot ao configurar meu certificado.
Eu sou um toal newb para arquivos de configuração nginx. Alguém pode aconselhar sobre a segurança da minha implementação? Estou faltando alguma coisa? Estou me perguntando em particular sobre as linhas às quais acrescentei // *
. Desde já, obrigado.
Verifique se você está usando a versão mais recente do
nginx
.Revise as cifras SSL com as quais você habilitou
nginx
- para evitar ataques de downgrade, você deseja desabilitar alguns desatualizados.Você realmente precisa dele acessível na porta de texto simples 80 e 443? Se você não tiver uma necessidade específica de HTTP não criptografado, eu removeria o primeiro bloco completamente e faria do segundo bloco seu arquivo
default server
.Qualquer coisa em portas HTTP/HTTPS públicas conhecidas receberá verificações regulares de bots de muitos países à procura de vulnerabilidades CVE recentes.
Você deve considerar não hospedar seu aplicativo na raiz da URL, mas proxy reverso para um caminho e em algo como
https://yourdomain.example.com/codeword
"codeword
" é algo único e não conectado a nada remotamente relacionado a aplicativos genéricos ou específicos de computador/Internet ou conceitos de administração. Por exemplo,https://yourdomain.example.com/admin
ouhttps://yourdomain.example.com/app
provavelmente será atingido por varreduras, mashttps://yourdomain.example.com/kittens
provavelmente não seria.Você pode considerar aprender sobre
ngx_http_geoip_module
e permitir apenas os países esperados .A autenticação básica HTTP também pode ser usada para impedir que qualquer pessoa faça com que qualquer código de aplicativo da Web seja executado em seu servidor sem poder informar ao nginx o nome de usuário/senha de autenticação básica.