Partilhar: WhatsApp
aulify
UC UC00627 · T. Desenv. Software, T. Sist. Comp. Redes

Ficha 02 · HTTPS, segurança e performance

TLS, hardening, cache, disponibilidade
Versão · Aluno
Tempo · 45 minutos
Cotação · 100 pontos
Aluno(a)
Turma
Data
Objectivos da ficha

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.

  1. Só TLS 1.2 e 1.3 (desativar 1.0/1.1 e cifras fracas).
  2. Redirect total HTTP → HTTPS.
  3. HSTS (Strict-Transport-Security).
  4. Cipher suites modernas + OCSP stapling.
  5. 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.

  1. Firewall — só 80/443 (+ SSH para gestão).
  2. Atualizações do servidor e módulos em dia.
  3. Esconder versão (server_tokens off).
  4. Headers de segurança (CSP, X-Frame-Options, X-Content-Type-Options).
  5. Menor privilégio — processo como www-data, permissões corretas, sem 777.
  6. Desativar listagem de diretórios (autoindex off).
  7. 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.

  1. Base do sistema: apt update && upgrade; utilizador não-root com sudo; SSH só com chave; ufw (SSH + Nginx Full).
  2. Instalar stack (LEMP): nginx, php-fpm, mariadb-server; mysql_secure_installation.
  3. Conteúdo: colocar o site em /var/www/escola; dono/permissões corretos (www-data, sem 777).
  4. Server block: server_name escola.pt www.escola.pt, root /var/www/escola, bloco location ~ \.php$ para o PHP-FPM. nginx -t + reload.
  5. DNS: registo A de escola.pt (e www) → IP do servidor.
  6. HTTPS: certbot --nginx -d escola.pt -d www.escola.pt; confirmar redirect 80→443; renew --dry-run.
  7. Segurança: server_tokens off; headers (CSP, X-Frame-Options); autoindex off; Fail2ban; updates automáticos de segurança; logs.
  8. Performance: gzip/brotli, cache de estáticos, HTTP/2.
  9. Backups: conteúdo + BD (dump) + configs; testar restauro.
  10. Verificação: curl -I https://escola.pt (200, HTTPS), SSL Labs (A), navegação real, logs sem erros.