implant harden-network

Pack opt-in de hardening de rede que cobre gaps do hardening base (check --auto-fix aplica só sysctls IPv4). Endereça três classes de problema comuns em servidores expostos:

  1. IPv6 desprotegido — VPS modernas (DO/Hetzner/Vultr/GCP) trazem IPv6 ativo por default. Sem accept_redirects=0 no IPv6, atacante na mesma LAN/segmento pode hijack rotas via ICMPv6 redirect.
  2. Anti SYN flood — tcp_syncookies=1 (já aplicado pelo hardening base) salva o servidor de cair, mas a fila default (tcp_max_syn_backlog) é pequena. Subir para 8192 + reduzir janela de retransmissão de SYN-ACK fortalece a defesa.
  3. TIME_WAIT acumulando — servidores expostos com muitas conexões curtas esgotam ephemeral ports com tcp_fin_timeout=60s default. Reduzir + ligar tcp_tw_reuse recicla mais rápido.

Uso

implant harden-network <SUBCOMANDO>

Como subcomando standalone (reversível independentemente)

sudo implant harden-network apply       # aplica pack
sudo implant harden-network status      # estado atual
sudo implant harden-network revert      # remove pack

Desligar temporariamente (emergency)

sudo implant harden-network emergency-disable --duration 3600 --source ticket-123
sudo implant harden-network emergency-status
sudo implant harden-network emergency-restore   # re-aplica agora e cancela o deadman

emergency-disable remove o pack por um TTL (--duration em segundos, default 3600, máximo 21600 = 6h); ao fim do TTL um deadman re-aplica sozinho. --source é um identificador livre de quem disparou (ex.: número de ticket). Para desligar todas as features opt-in de uma vez, use implant emergency-mode.

Junto com auto-fix (flag em `check`)

sudo implant check --auto-fix --harden-network

A flag requer --auto-fix (é destrutiva). Se passada sem --auto-fix, é ignorada com warning.

Sysctls aplicados

Arquivo: /etc/sysctl.d/99-harden-network.conf

Sysctl Valor Por quê
net.ipv6.conf.all.accept_redirects 0 Espelho do v4 — anti ICMPv6 redirect hijack
net.ipv6.conf.default.accept_redirects 0 Idem para novas interfaces
net.ipv6.conf.all.accept_source_route 0 Espelho do v4 — anti source-route attacks
net.ipv6.conf.default.accept_source_route 0 Idem
net.ipv4.tcp_max_syn_backlog 8192 Fila maior contra SYN flood
net.core.somaxconn 65535 Backlog de accept() para serviços
net.ipv4.tcp_synack_retries 2 Janela menor de retransmissão (default 5)
net.ipv4.tcp_syn_retries 3 Idem para SYN inicial
net.ipv4.tcp_fin_timeout 15 Recicla TIME_WAIT (default 60s)
net.ipv4.tcp_tw_reuse 1 Reuso de sockets em TIME_WAIT
net.ipv4.tcp_rfc1337 1 Anti TIME_WAIT assassination (RFC 1337)
net.ipv4.tcp_keepalive_time 600 Detecta zumbi em 10min (default 2h)
net.ipv4.tcp_keepalive_intvl 30 Intervalo entre probes
net.ipv4.tcp_keepalive_probes 5 Probes antes de dar como morto
vm.swappiness 10 Prefere RAM, swap só sob pressão
vm.overcommit_memory 0 Heurística padrão do kernel (ver nota abaixo)
vm.panic_on_oom 0 Kill processo, não derruba kernel
net.netfilter.nf_conntrack_max 524288 Apenas se Docker/K3s detectado
nf_conntrack_tcp_timeout_syn_recv 10 Idem (default 60s) — anti SYN flood na tabela
nf_conntrack_tcp_timeout_syn_sent 10 Idem
nf_conntrack_tcp_timeout_close_wait 30 Idem (default 60s)
nf_conntrack_tcp_timeout_fin_wait 30 Idem (default 120s)
nf_conntrack_tcp_timeout_time_wait 30 Idem (default 120s)

vm.overcommit_memory: versões anteriores à 2.43.0 gravavam o modo 2 (com overcommit_ratio = 80). Em hosts com memória comprometida acima do CommitLimit resultante (comum em hosts de containers sem swap), todo fork falhava e o SSH caía. O pack agora grava 0 explicitamente, o que desfaz o modo 2 no próximo apply.

Saída JSON

{
  "success": true,
  "schema_version": "1.0",
  "client": {"name": "implant", "version": "2.54.0"},
  "command": "harden-network",
  "data": {
    "action": "status",
    "target": "harden-network",
    "result": "completed",
    "dry_run": false,
    "state": {
      "applied": true,
      "config_file": "/etc/sysctl.d/99-harden-network.conf",
      "docker_detected": true,
      "ipv6_protected": true,
      "tcp_syn_backlog": "8192",
      "somaxconn": "65535"
    }
  }
}

Relação com o hardening base

Camada Arquivo Subcomando Default no check --auto-fix?
Base (IPv4 + ASLR) /etc/sysctl.d/99-hardening.conf implant sysctl apply Sim (sempre)
Estendido (IPv6 + SYN/TW tuning) /etc/sysctl.d/99-harden-network.conf implant harden-network apply Não (opt-in via flag)

Os dois são independentes — você pode rodar harden-network revert sem afetar o 99-hardening.conf base.

Veja também

  • sysctl — hardening base (sempre aplicado)
  • check — flag --harden-network aplica o pack junto