Ficha 02 · HTTPS, segurança e performance
- Implementar HTTPS
- Aplicar hardening
- Otimizar
- Garantir disponibilidade
Parte I · HTTPS
Exercício 1 · Let's Encrypt (15 pts)
a) Comandos para instalar o Certbot e obter certificado para escola.pt + www.escola.pt com Nginx. (8 pts)
b) Validade do certificado e como se renova? (4 pts)
c) Pré-requisito de DNS/rede para funcionar? (3 pts)
a)
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d escola.pt -d www.escola.pt
b) Validade 90 dias; renovação automática (timer do systemd). Testar: sudo certbot renew --dry-run.
c) O domínio tem de ter registo DNS (A/AAAA) a apontar para o IP do servidor e as portas 80/443 acessíveis da Internet (Let's Encrypt valida o domínio por HTTP).
Exercício 2 · Boas práticas TLS (10 pts)
Lista 4 boas práticas de configuração TLS.
- Só TLS 1.2 e 1.3 (desativar 1.0/1.1 e cifras fracas).
- Redirect total HTTP → HTTPS.
- HSTS (
Strict-Transport-Security). - Cipher suites modernas + OCSP stapling.
- Validar em SSL Labs (alvo A/A+).
(4 quaisquer.)
Parte II · Hardening
Exercício 3 · Medidas (15 pts)
Lista 5 medidas de hardening de um servidor web exposto à Internet.
- Firewall — só 80/443 (+ SSH para gestão).
- Atualizações do servidor e módulos em dia.
- Esconder versão (
server_tokens off). - Headers de segurança (CSP, X-Frame-Options, X-Content-Type-Options).
- Menor privilégio — processo como
www-data, permissões corretas, sem 777. - Desativar listagem de diretórios (
autoindex off). - Rate limiting / Fail2ban contra brute-force; logs revistos.
(5 quaisquer.)
Exercício 4 · Headers (10 pts)
Indica o header de segurança adequado:
a) Impedir que o site seja carregado dentro de um <iframe> de outro site. ___
b) Controlar de onde podem vir scripts (mitiga XSS). ___
c) Forçar o browser a usar sempre HTTPS. ___
a) X-Frame-Options: SAMEORIGIN (ou CSP frame-ancestors).
b) Content-Security-Policy (ex.: script-src 'self').
c) Strict-Transport-Security (HSTS).
Parte III · Performance
Exercício 5 · Otimização (15 pts)
Para cada objetivo, indica a técnica no servidor web:
a) Reduzir o tamanho de HTML/CSS/JS transferido. ___
b) Evitar que o browser volte a pedir imagens não alteradas. ___
c) Reduzir latência com multiplexing de pedidos. ___
d) Distribuir estáticos perto do utilizador. ___
a) Compressão gzip/brotli.
b) Cache com cabeçalho expires/Cache-Control para estáticos.
c) HTTP/2 (ou HTTP/3).
d) CDN.
Exercício 6 · Load balancing (10 pts)
Escreve um bloco upstream Nginx com 2 backends e o proxy_pass que os usa.
upstream app {
server 10.0.0.11:8000;
server 10.0.0.12:8000;
}
server {
listen 80;
server_name app.escola.pt;
location / {
proxy_pass http://app;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
O Nginx distribui pedidos pelos backends (por defeito round-robin), tolerando a falha de um deles.
Parte IV · Cenário
Exercício 7 · Pôr um site no ar (25 pts)
Vais publicar o site da escola (escola.pt) num servidor Ubuntu novo (app PHP + MySQL). Descreve o processo de ponta a ponta, de servidor vazio a site em HTTPS, com segurança.
- Base do sistema:
apt update && upgrade; utilizador não-root com sudo; SSH só com chave;ufw(SSH + Nginx Full). - Instalar stack (LEMP):
nginx,php-fpm,mariadb-server;mysql_secure_installation. - Conteúdo: colocar o site em
/var/www/escola; dono/permissões corretos (www-data, sem 777). - Server block:
server_name escola.pt www.escola.pt,root /var/www/escola, blocolocation ~ \.php$para o PHP-FPM.nginx -t+reload. - DNS: registo A de
escola.pt(e www) → IP do servidor. - HTTPS:
certbot --nginx -d escola.pt -d www.escola.pt; confirmar redirect 80→443;renew --dry-run. - Segurança:
server_tokens off; headers (CSP, X-Frame-Options);autoindex off; Fail2ban; updates automáticos de segurança; logs. - Performance: gzip/brotli, cache de estáticos, HTTP/2.
- Backups: conteúdo + BD (dump) + configs; testar restauro.
- Verificação:
curl -I https://escola.pt(200, HTTPS), SSL Labs (A), navegação real, logs sem erros.