implant lockdown

Primitiva genérica para restringir qualquer serviço com TTL e auto-recovery via systemd-run. O wrapper ssh-service usa esta primitiva com lockdown_cmd e restore_cmd específicos do SSH. Aqui você expõe os mesmos building blocks para outros serviços. A mesma primitiva é usada internamente pelo emergency-mode e pela confirmação/ guarda de boot do firewall-restore.

Uso

implant lockdown <subcomando> [OPTIONS]

Subcomandos

`create --service --ttl-seconds --lockdown-cmd --restore-cmd `

Cria um lockdown novo (ou substitui existente para o mesmo service).

  • --service — identificador único do serviço ([A-Za-z0-9._-]{1,64})
  • --ttl-seconds — TTL em segundos (max 21600 = 6h)
  • --lockdown-cmd — shell command que restringe o serviço (ex: systemctl stop nginx && ufw deny 80/tcp)
  • --restore-cmd — shell command que restaura o serviço (ex: systemctl start nginx && ufw allow 80/tcp)

`heartbeat --service --ttl-seconds [--source ]`

Renova o TTL e reagenda o systemd-run. Sem heartbeat, o restore acontece quando o TTL atual expira.

`status [--service ]`

Sem --service: lista todos os lockdowns ativos. Com --service: detalhe de um lockdown específico.

`list`

Lista todos os lockdowns ativos persistidos em /var/lib/implant/lockdowns/.

`emergency-restore --service `

Recovery imediato: roda o restore_cmd sem esperar o TTL e cancela o timer agendado. Exige TTY interativo (prompt de confirmação).

Persistência

  • Diretório: /var/lib/implant/lockdowns/ (mode 0700)
  • Arquivo por serviço: <service>.json (mode 0600)
  • Schema: LockdownEntry com service, disabled_at, expires_at, ttl_seconds, lockdown_cmd, restore_cmd, last_heartbeat, last_heartbeat_source, history, schema_version
  • Writes atômicos via .tmp + fs::rename

systemd-run

A cada create ou heartbeat, um transient unit é (re)agendado:

systemd-run --on-active={ttl}s --unit=implant-restore-{service} \
    /bin/sh -c '<restore_cmd>'

Inspecionar manualmente:

systemctl status implant-restore-ssh-service.timer
systemctl list-timers --all | grep implant-restore

Saída JSON

Igual ao ssh-service — envelope com o registro do lockdown para create/heartbeat/status/emergency-restore; lista de registros para list.

Exemplo

# Tirar o nginx do ar por 30 min, com volta automática
sudo implant lockdown create --service nginx --ttl-seconds 1800 \
  --lockdown-cmd 'systemctl stop nginx' \
  --restore-cmd 'systemctl start nginx'

# Manter por mais 30 min
sudo implant lockdown heartbeat --service nginx --ttl-seconds 1800 --source ticket-123

# Voltar agora
sudo implant lockdown emergency-restore --service nginx

Veja também