Re: Netfilter not dropping packets as it should

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Binarus,

A non expert here....so my answer if probably rubbish...but anyway...

I went ahead and loaded your listed configuration into my /etc/nftables.conf file.

I got an error when I tried to load your configuration and as such IP traffic was allowed because there were essentially no nftables rules operating.

The lines that generated an error were as follows..

# nft -c -f /etc/nftables.conf
/etc/nftables.conf:27:26-40: Error: invalid priority expression value in this context.
     type nat hook input priority dstnat; policy drop;
                         ^^^^^^^^^^^^^^^
/etc/nftables.conf:41:27-41: Error: invalid priority expression value in this context.
     type nat hook output priority srcnat; policy drop;
                          ^^^^^^^^^^^^^^^
However when I replaced "dstnat" with "-100" and "srcnat" with "100" the nftables filers were accepted and IPv4 traffic to the unit stopped.

The diffs between what I used and what you posted are as follows

*** /etc/nftables.conf.binarus  2025-02-01 21:25:46.418090954 +1100
--- /etc/nftables.conf  2025-02-01 21:25:22.198057049 +1100
***************
*** 24,30 ****
     }
  
     chain input-nat {
!      type nat hook input priority dstnat; policy drop;
       log prefix "ip4-input-nat:" drop;
     }
     chain input-filter {
--- 24,30 ----
     }
  
     chain input-nat {
!      type nat hook input priority -100; policy drop;
       log prefix "ip4-input-nat:" drop;
     }
     chain input-filter {
***************
*** 38,44 ****
     }
  
     chain output-nat {
!      type nat hook output priority srcnat; policy drop;
       log prefix "ip4-output-nat:" drop;
     }
     chain output-filter {
--- 38,44 ----
     }
  
     chain output-nat {
!      type nat hook output priority 100; policy drop;
       log prefix "ip4-output-nat:" drop;
     }
     chain output-filter {

I hope that helps.

Berto.


On Fri, 31 Jan 2025, at 06:35, Binarus wrote:
> Dear experts,
>
> this is a cross posting, see 
> https://unix.stackexchange.com/questions/789174/netfilter-not-dropping-packets-as-it-should. 
> Since I didn't get an answer there for a couple of weeks, I am 
> repeating the question here in the hope that the problem can easily be 
> reproduced. For me this is a very important key point in understanding 
> netfilter / nftables.
>
> Please consider the ruleset that's at the end of this post. It doesn't 
> make any sense, but it lets everybody reproduce the problem easily.
>
> With this ruleset, all IPv4 packets that come in via enp0s3 are 
> accepted in the ingress hook, but finally traverse a chain with a drop 
> policy. Each of these chains does not contain any explicit rule besides 
> the drop policy, and thus should behave as it would (only) contain an 
> explicit drop verdict for all packets.
>
> Hence, applications on that machine should not see any IPv4 packets 
> that originate from other machines.
>
> But they definitely do. For example, I have an SSH daemon running on 
> that machine. The daemon listens on an IPv4 address only (in fact, I 
> have disabled IPv6 on that machine completely by adding ipv6.disable=1 
> to the kernel command line). Even after I have loaded the ruleset 
> below, I can connect to the SSH daemon via IPv4 from the outside 
> without any issue.
>
> Can somebody please explain why the rules below don't make the kernel 
> drop all incoming IPv4 packets? Did I misunderstand the purpose of the 
> drop policy?
>
> Thank you very much in advance, and best regards,
>
> Binarus
>
>
>
>
>
> table netdev t_NETDEV_enp0s3 {
>    chain enp0s3-ingress-filter {
>      type filter hook ingress device "enp0s3" priority filter; policy drop;
>      ether type 0x0806 arp ptype 0x0800 accept
>      ether type 0x0800 accept
>      log prefix "foo: " drop
>    }
> }
>
> table ip t_IP {
>
>    chain prerouting-nat {
>      type nat hook prerouting priority dstnat; policy drop;
>      log prefix "ip4-prerouting-nat:" drop;
>    }
>    chain prerouting-filter {
>      type filter hook prerouting priority filter; policy drop;
>      log prefix "ip4-prerouting-filter:" drop;
>    }
>
>    chain input-nat {
>      type nat hook input priority dstnat; policy drop;
>      log prefix "ip4-input-nat:" drop;
>    }
>    chain input-filter {
>      type filter hook input priority filter; policy drop;
>      log prefix "ip4-input-filter:" drop;
>    }
>
>    chain forward-filter {
>      type filter hook forward priority filter; policy drop;
>      log prefix "ip4-forward-filter:" drop;
>    }
>
>    chain output-nat {
>      type nat hook output priority srcnat; policy drop;
>      log prefix "ip4-output-nat:" drop;
>    }
>    chain output-filter {
>      type filter hook output priority filter; policy drop;
>      log prefix "ip4-output-filter:" drop;
>    }
>    chain output-route {
>      type route hook output priority mangle; policy drop;
>      log prefix "ip4-output-route:" drop;
>    }
>
>    chain postrouting-nat {
>      type nat hook postrouting priority srcnat; policy drop;
>      log prefix "ip4-postrouting-nat:" drop;
>    }
>    chain postrouting-filter {
>      type filter hook postrouting priority filter; policy drop;
>      log prefix "ip4-postrouting-filter:" drop;
>    }
> }




[Index of Archives]     [Linux Netfilter Development]     [Linux Kernel Networking Development]     [Netem]     [Berkeley Packet Filter]     [Linux Kernel Development]     [Advanced Routing & Traffice Control]     [Bugtraq]

  Powered by Linux