implant iptables
Wrapper sobre iptables com salvaguardas anti-tijolar — para
operadores que precisam de mais granularidade que o UFW oferece sem
risco de fechar o próprio acesso.
Uso
implant iptables <subcomando> [OPTIONS]Subcomandos
`list [--table filter|nat|mangle] [--chain INPUT|OUTPUT|FORWARD]`
Lista regras ativas. Default: tabela filter, todas as chains.
`append --chain --dport --jump [--proto ] [--source ]`
] [--source
Adiciona regra ao final da chain (iptables -A). Faz snapshot
automático antes.
--chain:INPUT,OUTPUTouFORWARD--proto:tcp(default),udp,icmpouall--jump:ACCEPT,DROP,REJECT,RETURNouLOG--source: origem opcional (IP ou CIDR)
`delete --chain --rule-num `
Remove uma regra pelo número (1-based, conforme
iptables -L --line-numbers). Recusa se a regra for crítica (ver
Anti-tijolar).
`flush [--chain ] --yes`
--yes é obrigatório. Flush global (sem --chain) também exige TTY
interativo — chamada via pipe/script é bloqueada; use --chain para
flush parcial sem TTY. Em ambos os casos cria snapshot antes e recusa se
a chain contiver regra crítica.
`save`
Persiste o ruleset atual com iptables-save, gravando em
/etc/iptables/rules.v4 (e rules.v6) quando o diretório existe.
Desde a v2.61.0 o arquivo é gravado sem as regras do Docker (o mesmo vale
para o save do rate-limit e do feed-block). Antes ia o iptables-save inteiro,
e container ou rede removidos depois ficavam no arquivo, voltando a cada boot
(DNAT para IP de container que não existe mais, MASQUERADE de rede apagada). O
Docker recria as regras dele ao subir.
| Sai do arquivo | Fica |
|---|---|
chains DOCKER e DOCKER-* (ISOLATION, FORWARD, BRIDGE, CT, INTERNAL, INGRESS) |
DOCKER-USER inteira (os ganchos do implant moram nela) e o salto da FORWARD para ela |
saltos para chains do Docker (-j DOCKER, -j DOCKER-FORWARD) |
INPUT/OUTPUT inteiras, chains do implant, do fail2ban e do operador |
na FORWARD (filter), POSTROUTING (nat) e PREROUTING (raw): regras com interface do Docker (docker0, docker_gwbridge, br-<id>) e as que o Docker cria por container |
MASQUERADE e FORWARD do operador (VPN, saída por interface física) |
Dump sem a tabela filter (o iptables-save falhou) nunca vira arquivo vazio.
`snapshot`
Cria snapshot manual sem outra ação. Cada snapshot grava as regras v4
(<ts>.rules), v6 (<ts>.rules6) e os ipsets (<ts>.ipsets) em
/var/lib/implant/iptables-snapshots/ (últimos 10).
`snapshots`
Lista os snapshots disponíveis (id 1 = mais recente), para uso no
restore --snapshot-id.
`restore --snapshot-id ` / `restore --snapshot-path `
Restaura um snapshot: regras v4 e v6 e o conteúdo exato dos ipsets
(o set vivo é trocado pelo do snapshot — um ban adicionado depois do
snapshot não sobrevive). O id aceita o número (1 = mais recente) ou o
timestamp (ex.: 20261009T080000Z). --snapshot-path só aceita
arquivos em /var/lib/implant/iptables-snapshots/ ou /etc/iptables/.
Antes de restaurar, o estado atual vira um novo snapshot
(pre_restore_snapshot no JSON). O restore não persiste em
/etc/iptables/rules.v4 (persisted: false): rode implant iptables save se quiser manter após reboot.
`audit-log-rules [--fix] [--restore] [--sample-seconds ]`
Procura regras -j LOG sem limite em todas as tabelas (v4 e v6) e
estima o volume de log comparando duas amostras de iptables-save -c
(--sample-seconds, default 5; 0 desliga a estimativa).
--fix: remove as regras encontradas pela spec exata, depois de um snapshot. Regras de UFW (ufw-*), fail2ban (f2b-*) e Docker (DOCKER*) nunca são tocadas--restore: refaz exatamente o que um--fixanterior removeu
Anti-tijolar
[append/delete/flush] → snapshot automático → validação anti-tijolar → execuçãoRegras consideradas críticas:
tcp dpt:22— SSH defaulttcp dpt:2222— SSH alternativo comumtcp dpt:<porta SSH atual>— detectada em runtimelo— loopbackESTABLISHED— conexões já abertas
Tentativa de remover/flushar essas regras retorna erro.
Saída JSON
Envelopes por ação (iptables.restore, iptables.snapshots,
iptables.audit-log-rules, …). Ações destrutivas incluem o caminho do
snapshot criado. O iptables.restore traz também
ipsets.replaced/created/warnings, pre_restore_snapshot e
persisted.
Exemplos
# Listar regras INPUT
implant iptables list --chain INPUT
# Bloquear uma origem na porta 8080 (com snapshot automático)
sudo implant iptables append --chain INPUT --dport 8080 --jump DROP --source 203.0.113.4
# Ver snapshots e restaurar o estado de antes da última mudança
sudo implant iptables snapshots
sudo implant iptables restore --snapshot-id 1
# Flush
sudo implant iptables flush --yes # exige TTY
sudo implant iptables flush --chain INPUT --yes # snapshot + flush da chain
# Auditar regras de LOG sem limite
sudo implant iptables audit-log-rules