Wie bringe ich Nftables dazu, verlorene Pakete zu protokollieren?

Wie bringe ich Nftables dazu, verlorene Pakete zu protokollieren?

Anscheinend habe ich nftables so konfiguriert, dass der gesamte zulässige eingehende Datenverkehr und nicht nur der verweigerte Datenverkehr protokolliert wird. Ich weiß nicht, wie ich sonst „alles andere verweigern und protokollieren“ sagen kann.

Hier ist meine /etc/nftables.confDatei:

#!/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;
  }
}

Antwort1

Ich nehme an, Sie haben den Teil über die Vorgabe für Ketten übersehen. Vondas Handbuch:

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

Der policyhier genannte Wert wird wie folgt beschrieben:

Basisketten ermöglichen auch das Festlegen der Ketten policy, d. h. was mit Paketen geschieht, die in den enthaltenen Regeln nicht explizit akzeptiert oder abgelehnt werden. Unterstützte Richtlinienwerte sind accept(Standard) oder drop.

Ich nehme an, Sie möchten diese Zeilen austauschen:

  chain input {
    type filter hook input priority 0;

für diese:

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

Stellen Sie jedoch sicher, dass Sie irgendwie auf diesen Computer zugreifen können, falls Sie sich mit Ihren Regeln selbst aussperren. iptablesDer zu verwendende Befehl wäre iptables-apply, aber ich bin nicht sicher, was stattdessen für verwendet werden kann nft. iptables-applysetzt die Regeln zurück, wenn Sie innerhalb einer bestimmten Zeitspanne nicht bestätigen können, dass Sie (noch) auf den Host zugreifen können ...

Antwort2

Ich habe das Problem schließlich gelöst, indem ich zu einer separaten Kette für Nur-LAN-Regeln gesprungen bin, sodass die inputKette nur eine Protokollzeile hat. Ich bin mir nicht sicher, warum es nicht ausreichte policy drop, der inputKette einfach etwas hinzuzufügen, wie von @0xC0000022L vorgeschlagen.

#!/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
  }
}

verwandte Informationen