¿Cómo hago para que nftables registre los paquetes descartados?

¿Cómo hago para que nftables registre los paquetes descartados?

Parece que he hecho que nftables registre todo el tráfico entrante permitido en lugar de solo el tráfico denegado, y no sé de qué otra manera decir "denegar y registrar todo lo demás".

Aquí está mi /etc/nftables.confarchivo:

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
  chain input {
    type filter hook input priority 0;

    # Accept any localhost traffic
    iif lo accept

    # Accept traffic originated from us
    ct state established,related accept

    # Accept neighbour discovery otherwise IPv6 connectivity breaks
    ip6 nexthdr icmpv6 icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept

    # Allow incoming SSH connections
    tcp dport ssh ct state new counter accept

    # Allow mdns from the LAN
    ip saddr 192.168.1.0/24 udp dport mdns counter accept
    ip6 saddr fe80::/10 udp dport mdns counter accept

    ip saddr 192.168.1.0/24 log prefix "Rejected: " flags all reject comment "send rejection to LAN only"
    ip6 saddr fe80::/10 log prefix "Rejected: " flags all reject comment "send rejection to LAN only"

    # Log and drop any other traffic
    # THIS IS THE BROKEN PART
    log prefix "Dropped:  " flags all drop
  }
  chain forward {
    type filter hook forward priority 0;
  }
  chain output {
    type filter hook output priority 0;
  }
}

Respuesta1

Supongo que te perdiste la parte sobre el valor predeterminado de las cadenas. Deel manual:

{add | create} chain [family] table chain [{ type type hook hook [device device] priority priority ; [policy policy ;] }]

Ese policyvalor mencionado aquí se describe de la siguiente manera:

Las cadenas base también permiten establecer la cadena policy, es decir, qué sucede con los paquetes no aceptados o rechazados explícitamente en las reglas contenidas. Los valores de política admitidos son accept(que es el valor predeterminado) o drop.

Así que supongo que querrás cambiar estas líneas:

  chain input {
    type filter hook input priority 0;

para éstos:

  chain input {
    type filter hook input priority 0;
    policy drop;

Pero asegúrese de tener alguna forma de acceder a esta máquina en caso de que se bloquee con sus reglas. El iptablescomando a usar sería iptables-apply, pero no estoy seguro de qué se puede usar en su lugar nft. iptables-applyrevertirá las reglas si no puede confirmar dentro de un período de tiempo determinado que puede (todavía) acceder al host...

Respuesta2

Finalmente resolví esto saltando a una cadena separada para reglas solo de LAN, de modo que la inputcadena tenga solo una línea de registro. No estoy seguro de por qué simplemente agregar policy dropa la inputcadena como lo sugiere @ 0xC0000022L no fue suficiente.

#!/usr/sbin/nft --file

flush ruleset

table inet filter {
  chain input {
    type filter hook input priority 0
    policy drop
    # Normal "prelude" things you always want.
    ct state vmap {
      new: continue,
      established: accept,
      related: accept,
      invalid: drop
    }
    ct status dnat  accept
    iiftype loopback  accept
    icmp type echo-request  accept
    icmpv6 type {
      echo-request,
      nd-neighbor-solicit,
      nd-router-advert,
      nd-neighbor-advert
    } accept

    tcp dport ssh accept comment "Allow incoming SSH connections"

    ip  saddr 192.168.1.0/24  jump lan_only
    ip6 saddr fe80::/10       jump lan_only

    log prefix "Dropped:  " flags all drop comment "non-LAN gets dropped brusquely"
  }

  chain lan_only {
    udp dport mdns counter accept comment "Allow mdns from the LAN"
    log prefix "Rejected: " flags all reject comment "LAN gets rejected politely (others get dropped brusquely)"
  }

  chain forward {
    type filter hook forward priority 0
  }
  chain output {
    type filter hook output priority 0
  }
}

información relacionada