Re: [nftables] Deleting element from set from packet path

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

 



On Fri, 27 Apr 2018, rypervenche wrote:
Hello Yves,

Thank you for your configuration. I looked over it and see that you are
indeed using the "timeout 0s" to achieve what I was looking to achieve.
It seems that when I create a rule to do this, the "timeout 0s" simply
gets removed. I even copied your entire config and started my nftables
with it and as you can see below, all of the places where "timeout 0s"
was present in your config, it no longer exists in the actual running

Oh, you are right! And I did not notice! I guess a simple solution, although less satisfying is to replace 0 with 1... I suppose this is the smallest we can write above 0. IMO, this is a bug from nft.

Thanks for notifying me! Cheers,
Yves.

configuration. I simply cleared nftables of all rules, than ran "nft -f
/path/to/your/config/file" and then "nft list ruleset -nn" and below is
the result.

Does yours show this as well? When I tested it, any "set update" would
simply restart the timeout to 1m. Is your configuration doing this as
well?

I'm on kernel 4.14.35 and nftables version 0.8.3 in Gentoo.

=================================================
table ip Inet4 {
	set Knocked_1 {
		type ipv4_addr
		timeout 10s
		gc-interval 4s
	}

	set Knocked_2 {
		type ipv4_addr
		timeout 10s
		gc-interval 4s
	}

	set Knocked_3 {
		type ipv4_addr
		timeout 10s
		gc-interval 4s
	}

	set Knocked_4 {
		type ipv4_addr
		timeout 2m
		gc-interval 4s
	}

	chain Knock_1 {
		set add ip saddr @Knocked_1
	}

	chain Unknock_1 {
		set update ip saddr @Knocked_1
	}

	chain Knock_2 {
		set update ip saddr @Knocked_1
		set add ip saddr @Knocked_2
	}

	chain Unknock_2 {
		set update ip saddr @Knocked_2
	}

	chain Knock_3 {
		set update ip saddr @Knocked_2
		set add ip saddr @Knocked_3
	}

	chain Unknock_3 {
		set update ip saddr @Knocked_3
	}

	chain Knock_4 {
		set update ip saddr @Knocked_3
		set add ip saddr @Knocked_4 log prefix "Port-Knock accepted: "
	}

	chain RefreshKnock {
		set update ip saddr timeout 2m @Knocked_4
	}

	chain PortKnock {
		ct state new ip saddr @Knocked_4 goto RefreshKnock
		tcp dport 456 ct state new ip saddr @Knocked_3 goto Knock_4
		tcp dport 345 ct state new ip saddr @Knocked_3 return
		ip saddr @Knocked_3 ct state new goto Unknock_3
		tcp dport 345 ct state new ip saddr @Knocked_2 goto Knock_3
		tcp dport 234 ct state new ip saddr @Knocked_2 return
		ip saddr @Knocked_2 ct state new goto Unknock_2
		tcp dport 234 ct state new ip saddr @Knocked_1 goto Knock_2
		tcp dport 123 ct state new ip saddr @Knocked_1 return
		ip saddr @Knocked_1 ct state new goto Unknock_1
		tcp dport 123 ct state new goto Knock_1
	}

	chain FilterIn {
		type filter hook input priority 0; policy drop;
		ct state { established, related } accept
		ct state invalid drop
		iif "lo" accept
		ip protocol icmp accept
		jump PortKnock
	}

	chain FilterOut {
		type filter hook output priority 0; policy accept;
	}
}
=================================================


On Fri, Apr 27, 2018 at 08:50:11AM +0200, nft.ml@xxxxxxxx wrote:
Hi rypervenche,

I have a working port-knocking nft firewall with this setup:
http://yalis.fr/public/knock_nftables.conf

In this example, the ports to knock are 123 234 345 456.A
I hope this helps. Cheers,

Yves.

On Thu, 26 Apr 2018, rypervenche wrote:
Hello,

I'm looking to set up something of a port knocker in nftables. While I
can do this with sets with timeouts, I also would like the flexibility
to be able to remove an IP from one of said sets if the next packet that
gets sent from the source address is not the port in the specific order
I have chosen. This way port scanners would not be able to bruteforce all
of the ports within the timeout that I have chosen.

Would it be possible to request the addition of a "delete" operation to
the following feature? https://wiki.nftables.org/wiki-nftables/index.php/Updating_sets_from_the_packet_path

If this is not possible, would it be possible to use the "update"
operation to set the timeout to "0s" and this have it immediately delete
the element in question? Currently trying to update the element with the
timeout 0s does not update the timeout, however non-zero timeouts do
work.

While my syntax is likely not correct here, this is essentially the idea
in mind:

table inet filter {
   set knock1 { type ipv4_addr; timeout 5s; }
   set knock2 { type ipv4_addr; timeout 5s; }
   set knock3 { type ipv4_addr; timeout 5s; }
   chain input {
        type filter hook input priority 0; policy drop;
        ct state established,related accept
        ... cut for space ...
        meta nfproto ipv4 counter packets 0 bytes 0 jump knock
        meta l4proto tcp counter packets 0 bytes 0 reject with tcp reset
        meta nfproto ipv4 counter packets 0 bytes 0 reject with icmp type prot-unreachable
        counter packets 0 bytes 0 reject
   }
   chain knock {
        tcp dport 1111 ct state new tcp flags & (syn|rst|ack|fin) == syn counter packets 0 bytes 0 set add ip saddr @knock1 reject
        tcp dport != 2222 ip saddr @knock1 counter packets 0 bytes 0 set update ip saddr timeout 0s @knock1
        tcp dport 2222 ip saddr @knock1 ct state new tcp flags & (syn|rst|ack|fin) == syn counter packets 0 bytes 0 set add ip saddr @knock2 reject
        tcp dport != 3333 ip saddr @knock2 counter packets 0 bytes 0 set update ip saddr timeout 0s @knock2
        tcp dport 3333 ip saddr @knock2 ct state new tcp flags & (syn|rst|ack|fin) == syn counter packets 0 bytes 0 set add ip saddr @knock3 reject
        tcp dport != 4444 ip saddr @knock3 counter packets 0 bytes 0 set update ip saddr timeout 0s @knock3
        tcp dport 4444 ip saddr @knock3 ct state new tcp flags & (syn|rst|ack|fin) == syn counter packets 0 bytes 0 accept
   }
}

Any and all help with this would be greatly appreciated.

Thank you,

rypervenche
--
To unsubscribe from this list: send the line "unsubscribe netfilter" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


--
To unsubscribe from this list: send the line "unsubscribe netfilter" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[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