Modulo Hardening

Aplicacao de politicas de seguranca.

implant check --modules hardening             # somente leitura
implant check --auto-fix --modules hardening  # aplica

Verificacoes

Item Descricao
Fail2Ban Instalacao e servico ativo
Configuracao Fail2Ban Jail SSH com os valores esperados
Kernel hardening Parametros sysctl de seguranca, conferidos no kernel
Kernel ip_forward Coerente com o papel do host (roteia ou nao)
Servicos Desabilita bluetooth, cups e avahi-daemon se ativos
Boot-survival do firewall Unit que restaura os ipsets do Implant no boot e persistencia das regras (netfilter-persistent ou, sem ele, reaplicacao pela unit)
Cobertura DOCKER-USER Blocklist do rate-limit tambem vale para containers

Fail2Ban

Configuracao Aplicada

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
ignoreip = <IPs confiaveis>

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
  • Um jail.local que nao foi escrito pelo Implant nunca e sobrescrito: a configuracao vai para o drop-in /etc/fail2ban/jail.d/implant.conf, e a do operador continua valendo.
  • ignoreip recebe localhost, os IPs de security.trusted_ips (config.toml) e, por padrao, o IP da sessao SSH atual. Para adicionar IPs: implant ssh-key --whitelist-ip <IP>.

Gerenciamento manual: `implant fail2ban` (enable, status, list-banned, unban...). Para desbanir em todos os mecanismos de uma vez, use `implant unban`.

Kernel Hardening

Parametros aplicados via /etc/sysctl.d/99-hardening.conf:

net.ipv4.tcp_syncookies = 1
net.ipv4.ip_forward = {0 ou 1}
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.all.rp_filter = {1 ou 2}
net.ipv4.conf.default.rp_filter = {1 ou 2}
net.ipv4.tcp_timestamps = 0
kernel.randomize_va_space = 2

# Somente se o kernel suporta BBR
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

Depois de aplicar, o Implant confere o valor efetivo de cada chave (sysctl -n), o que detecta drop-ins conflitantes ou modulo ausente.

Hosts que roteiam (Docker, K3s, WireGuard)

O Implant detecta se o host roteia pacotes:

Papel ip_forward rp_filter
Docker, K3s ou WireGuard presente 1 2 (loose: aceita trafego assimetrico de VPN e multiplas interfaces)
Host single-homed 0 1 (strict)

Se o Docker for instalado depois do hardening, a divergencia (ip_forward=0 com Docker) e corrigida na mesma rodada do --auto-fix.

BBR

Quando o kernel suporta BBR (builtin ou modulo tcp_bbr), o arquivo inclui fq + bbr e o modulo e persistido em /etc/modules-load.d/tcp_bbr.conf. Sem suporte, nada e adicionado (continua CUBIC).

Gerenciamento manual: `implant sysctl apply | revert | status`.

Pack estendido de rede (opt-in)

Protecoes adicionais de IPv6, SYN flood e TIME_WAIT ficam fora do check padrao:

implant check --auto-fix --harden-network
# ou
implant harden-network apply

Veja harden-network.

Boot-survival do firewall

Verifica se a unit implant-firewall-restore esta instalada e atualizada. Sem ela, um reboot deixa os ipsets do Implant (blocklist, whitelist, geo-block, auto-ban) vazios e as regras que os referenciam falham.

O check --auto-fix nao instala a unit: o item fica em Fail e aponta a instalacao. Desde a v2.58.0 o implant rate-limit reconcile instala (ou atualiza) a unit sozinho, com confirmacao automatica e guarda de boot. A instalacao manual continua disponivel:

implant rate-limit reconcile                                  # instala com guarda
implant firewall-restore install --confirm-timeout 10 --boot-guard   # manual

Desde a v2.59.0 o check tambem exige que as regras que usam os ipsets voltem no boot. Sets sem as regras nao bloqueiam nada. O item reprova, dizendo o que falta, quando:

  • netfilter-persistent nao esta instalado;
  • iptables-persistent nao esta instalado (sem o plugin dele, o netfilter-persistent save sai 0 sem gravar nada);
  • o servico netfilter-persistent nao esta habilitado;
  • /etc/iptables/rules.v4 esta ausente ou vazio.

Atencao com o UFW: instalar o pacote ufw remove o iptables-persistent e o netfilter-persistent no apt (conflito de pacotes). Ate a v2.60, os ipsets voltavam pela unit e as regras nao. Desde a v2.61.0 a unit atual reaplica as regras do Implant no boot a partir dos states (rate-limit, feed-block, geo-block), acima das chains do UFW, e o item passa com ela em dia; com unit antiga, o self-update a troca. Regras cruas do operador (DROP solto, policy DROP propria) continuam sem quem as traga: use o UFW ou implant ban. O item tambem reprova se a reaplicacao deste boot falhou e o componente nao foi refeito depois. O `ban` segue a mesma regra e so responde "sobrevive a reboot: sim" com sets e regras.

Veja firewall-restore.

Cobertura DOCKER-USER

Quando o rate-limit esta aplicado, verifica se a chain DOCKER-USER tem o DROP da blocklist (sem ele, IPs banidos alcancam containers com porta publicada). Nao corrige sozinho; a correcao e:

implant rate-limit reconcile