Skip to content

Latest commit

 

History

History
372 lines (285 loc) · 11.2 KB

File metadata and controls

372 lines (285 loc) · 11.2 KB

JurisMonitor — O Que Fazer Depois

Guia para servidor no Windows (computador pessoal)

Situação atual: sistema rodando em desenvolvimento no seu PC Windows. Este guia cobre exatamente o que falta para usar com segurança no dia a dia. Siga as fases em ordem — a Fase 1 é obrigatória antes de qualquer uso real.


FASE 1 — Fazer HOJE (antes de cadastrar dados reais)

Leva ~20 minutos. Sem isso o sistema não está seguro.


[x] 1.1 — Gerar uma SECRET_KEY forte

Abra o terminal do projeto e rode:

cd C:\Users\Vitor\Documents\Pessoal\JurisMonitor
.\venv\Scripts\python.exe -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"

Copie o resultado e cole no .env:

SECRET_KEY=resultado_copiado_aqui

[x] 1.2 — Gerar uma JWT_SIGNING_KEY (diferente da SECRET_KEY)

.\venv\Scripts\python.exe -c "import secrets; print(secrets.token_urlsafe(50))"

Adicione no .env:

JWT_SIGNING_KEY=resultado_copiado_aqui

[x] 1.3 — Definir uma URL do admin diferente de /admin/

No .env, adicione:

ADMIN_URL=escolha-algo-nao-obvio-aqui

Exemplo: ADMIN_URL=gestao-jm-2024 — use algo que só você saiba. Depois o painel estará em http://localhost:8000/gestao-jm-2024/


[x] 1.4 — Trocar a senha do PostgreSQL

Atualmente está postgres (senha padrão). Abra o PowerShell e rode:

$env:PGPASSWORD = "postgres"
& "C:\Program Files\PostgreSQL\15\bin\psql.exe" -U postgres -c "ALTER USER postgres PASSWORD 'NovaS3nhaForte#2024';"

Atualize o .env:

DB_PASSWORD=NovaS3nhaForte#2024

Use uma senha com letras maiúsculas, minúsculas, números e símbolos.


[ ] 1.5 — Desligar o DEBUG no .env de produção

Quando for usar com dados reais, mude no .env:

DEBUG=False
ALLOWED_HOSTS=localhost,127.0.0.1,SEU_IP_LOCAL

Para descobrir seu IP local:

(Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias "Ethernet*","Wi-Fi*" | Select-Object -First 1).IPAddress

[ ] 1.6 — Configurar 2FA no painel admin

Depois de iniciar o sistema com iniciar.bat:

  1. Acesse http://localhost:8000/ADMIN_URL_QUE_VOCE_ESCOLHEU/
  2. Faça login com o superusuário
  3. Vá em OTP TOTP → TOTP devices → Adicionar
  4. Escaneie o QR Code com o Google Authenticator (ou Microsoft Authenticator) no celular
  5. Digite o código de 6 dígitos para confirmar
  6. Pronto — a partir de agora o login no admin exigirá o código do celular

Atenção: faça isso antes de desligar o DEBUG. Se perder o acesso ao 2FA, use o shell para desativar temporariamente:

.\venv\Scripts\python.exe manage.py shell -c "from django_otp.plugins.otp_totp.models import TOTPDevice; TOTPDevice.objects.all().delete()"

FASE 2 — Esta semana (segurança no Windows)

Protege o Windows e o sistema contra acesso não autorizado.


[ ] 2.1 — Configurar senha no Redis

Redis no Windows normalmente roda sem senha. Se estiver na rede local, adicione senha:

  1. Localize o arquivo de configuração (geralmente): C:\Program Files\Redis\redis.windows-service.conf ou C:\ProgramData\Redis\redis.conf

  2. Abra com o Bloco de Notas como Administrador e adicione/edite:

    requirepass SuaSenhaRedis#2024
    
  3. Reinicie o serviço Redis:

    Restart-Service Redis
  4. Atualize o .env:

    REDIS_URL=redis://:SuaSenhaRedis#2024@localhost:6379/0
    

[ ] 2.2 — Configurar o Firewall do Windows

Permita acesso ao sistema apenas de quem deve ter acesso:

Bloquear acesso externo à porta 8000 (Django) — só rede local:

# Abra o PowerShell como Administrador
New-NetFirewallRule -DisplayName "JurisMonitor - So Rede Local" `
  -Direction Inbound -Protocol TCP -LocalPort 8000 `
  -RemoteAddress LocalSubnet -Action Allow

New-NetFirewallRule -DisplayName "JurisMonitor - Bloquear Internet" `
  -Direction Inbound -Protocol TCP -LocalPort 8000 `
  -RemoteAddress Internet -Action Block

Bloquear acesso externo ao PostgreSQL (porta 5432):

New-NetFirewallRule -DisplayName "PostgreSQL - Bloquear Externo" `
  -Direction Inbound -Protocol TCP -LocalPort 5432 `
  -RemoteAddress Internet -Action Block

Bloquear acesso externo ao Redis (porta 6379):

New-NetFirewallRule -DisplayName "Redis - Bloquear Externo" `
  -Direction Inbound -Protocol TCP -LocalPort 6379 `
  -RemoteAddress Internet -Action Block

[ ] 2.3 — Fazer o sistema iniciar automaticamente com o Windows

Para o servidor ligar sozinho quando o computador reiniciar:

  1. Pressione Win + R, digite taskschd.msc, Enter
  2. Clique em Criar Tarefa Básica
  3. Nome: JurisMonitor Autostart
  4. Gatilho: Quando o computador iniciar
  5. Ação: Iniciar um programa
    • Programa: C:\Users\Vitor\Documents\Pessoal\JurisMonitor\iniciar.bat
  6. Marque: Executar independente do usuário estar conectado
  7. Marque: Executar com privilégios mais altos (necessário para abrir janela)

[ ] 2.4 — Configurar backups automáticos do banco de dados

  1. Crie a pasta de backup:

    New-Item -ItemType Directory -Force "C:\Backups\JurisMonitor"
  2. Crie o script de backup em C:\Backups\backup_jurismonitor.ps1:

    $data = Get-Date -Format "yyyy-MM-dd_HH-mm"
    $arquivo = "C:\Backups\JurisMonitor\backup_$data.sql"
    $env:PGPASSWORD = "SuaSenhaPostgres"
    & "C:\Program Files\PostgreSQL\15\bin\pg_dump.exe" -U postgres jurismonitor | Out-File $arquivo -Encoding utf8
    Compress-Archive -Path $arquivo -DestinationPath "$arquivo.zip" -Force
    Remove-Item $arquivo
    # Remove backups com mais de 30 dias
    Get-ChildItem "C:\Backups\JurisMonitor\*.zip" |
        Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
        Remove-Item
    Write-Output "[$data] Backup concluido: $arquivo.zip"
  3. Agende via Agendador de Tarefas (rodar todo dia às 2h da manhã):

    # PowerShell como Administrador
    $action  = New-ScheduledTaskAction -Execute "powershell.exe" `
                 -Argument "-NonInteractive -File C:\Backups\backup_jurismonitor.ps1"
    $trigger = New-ScheduledTaskTrigger -Daily -At "02:00"
    $settings = New-ScheduledTaskSettingsSet -RunOnlyIfNetworkAvailable:$false
    Register-ScheduledTask -TaskName "JurisMonitor Backup" `
        -Action $action -Trigger $trigger -Settings $settings `
        -RunLevel Highest -Force

[ ] 2.5 — Manter o Windows atualizado

  1. Abra Configurações → Windows Update
  2. Ative Atualizações automáticas
  3. Verifique se o Windows Defender está ativo: Win + I → Segurança do Windows

FASE 3 — Se precisar acessar pela internet

Só faça isto se precisar abrir o sistema para fora da sua rede Wi-Fi. Se for uso interno (mesmo escritório/casa), pule esta fase.


[ ] 3.1 — Instalar HTTPS com certificado gratuito (win-acme)

Sem HTTPS, senhas trafegam em texto puro pela internet.

  1. Baixe o win-acme: https://www.win-acme.com/
  2. Extraia em C:\win-acme\
  3. Você precisará de um domínio apontando para seu IP público
  4. Execute como Administrador:
    C:\win-acme\wacs.exe
  5. Siga o assistente para gerar certificado Let's Encrypt gratuito

[ ] 3.2 — Instalar o Nginx para Windows como reverse proxy

O Nginx recebe as conexões HTTPS e repassa para o Django:

  1. Baixe o Nginx para Windows: https://nginx.org/en/download.html
  2. Extraia em C:\nginx\
  3. Edite C:\nginx\conf\nginx.conf e substitua pelo conteúdo:
    events {}
    http {
      # Rate limiting: bloqueia força bruta no login
      limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
    
      server {
        listen 443 ssl;
        server_name SEU_DOMINIO.com.br;
    
        ssl_certificate     C:/caminho/para/cert.pem;
        ssl_certificate_key C:/caminho/para/key.pem;
    
        location /accounts/login/ {
          limit_req zone=login burst=3 nodelay;
          proxy_pass http://127.0.0.1:8000;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
        }
        location / {
          proxy_pass http://127.0.0.1:8000;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
        }
      }
      server {
        listen 80;
        return 301 https://$host$request_uri;
      }
    }
  4. No .env, atualize ALLOWED_HOSTS com o domínio:
    ALLOWED_HOSTS=localhost,127.0.0.1,SEU_DOMINIO.com.br
    

[ ] 3.3 — Abrir apenas a porta 443 no roteador

No painel do seu roteador (geralmente 192.168.1.1):

  • Crie uma regra de Port Forwarding: porta 443 → IP local do seu computador
  • Não abra as portas 8000, 5432 ou 6379 para a internet

[ ] 3.4 — Configurar IP fixo no roteador para este computador

Para que o Port Forwarding sempre funcione, reserve o IP local do seu computador pelo MAC Address no roteador (DHCP Reservation).


FASE 4 — Manutenção contínua (mensal)


[ ] 4.1 — Verificar dependências com vulnerabilidades

cd C:\Users\Vitor\Documents\Pessoal\JurisMonitor
.\venv\Scripts\pip.exe install safety bandit
.\venv\Scripts\safety.exe check -r requirements.txt
.\venv\Scripts\bandit.exe -r apps\ -ll

[ ] 4.2 — Revogar e gerar nova SECRET_KEY a cada 6 meses

.\venv\Scripts\python.exe -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"

Atualize no .env. Efeito: todos os usuários serão deslogados automaticamente.


[ ] 4.3 — Testar restauração do backup

Uma vez por mês, verifique que o backup pode ser restaurado:

$env:PGPASSWORD = "SuaSenhaPostgres"
# Cria banco temporário para teste
& "C:\Program Files\PostgreSQL\15\bin\createdb.exe" -U postgres jurismonitor_teste
# Restaura o backup mais recente
$backup = Get-ChildItem "C:\Backups\JurisMonitor\*.zip" | Sort-Object LastWriteTime -Descending | Select-Object -First 1
Expand-Archive $backup.FullName -DestinationPath "C:\Backups\temp_restore"
$sql = Get-ChildItem "C:\Backups\temp_restore\*.sql" | Select-Object -First 1
& "C:\Program Files\PostgreSQL\15\bin\psql.exe" -U postgres -d jurismonitor_teste -f $sql.FullName
# Apaga banco de teste
& "C:\Program Files\PostgreSQL\15\bin\dropdb.exe" -U postgres jurismonitor_teste
Remove-Item "C:\Backups\temp_restore" -Recurse

Resumo — O que fazer agora

HOJE (obrigatório):
  [x] 1.1  Gerar SECRET_KEY forte no .env
  [x] 1.2  Gerar JWT_SIGNING_KEY separada no .env
  [x] 1.3  Definir ADMIN_URL único no .env
  [x] 1.4  Trocar senha do PostgreSQL (está "postgres")
  [ ] 1.5  DEBUG=False quando for usar com dados reais
  [ ] 1.6  Configurar 2FA (TOTP) no painel admin

ESTA SEMANA:
  [ ] 2.1  Senha no Redis
  [ ] 2.2  Regras de Firewall do Windows
  [ ] 2.3  Auto-iniciar com o Windows
  [ ] 2.4  Backup automático diário
  [ ] 2.5  Windows Defender + Windows Update ativo

SE ACESSAR PELA INTERNET:
  [ ] 3.1  Certificado HTTPS (win-acme)
  [ ] 3.2  Nginx como reverse proxy
  [ ] 3.3  Só abrir porta 443 no roteador
  [ ] 3.4  IP fixo reservado no roteador

MENSALMENTE:
  [ ] 4.1  Varredura de dependências (safety + bandit)
  [ ] 4.2  Rotacionar SECRET_KEY a cada 6 meses
  [ ] 4.3  Testar restauração do backup