Fwd: Re: double NOT in rules is not working as expected
Bojidara Marinchovska <[email protected]> Fri, 08 Apr 2011 18:39:47 +0300
| Newsgroups | gmane.os.openbsd.pf |
|---|---|
| Message-ID | <[email protected]> |
-------- Original Message -------- Subject: Re: double NOT in rules is not working as expected Date: Fri, 08 Apr 2011 17:00:52 +0300 From: Bojidara Marinchovska <[email protected]> To: Stuart Henderson <[email protected]> On 04/08/11 16:11, Stuart Henderson wrote: > On 2011/04/08 15:42, Bojidara Marinchovska wrote: >> It is not wrong but I cannot find it is possible to use negation with >> AND ( something like block in quick from !{$a, $b, $c} ) and yes as >> it is typed it will be produce exactly this ruleset you wrote. >> >> So if rules in conf are defined as separated as ( not interpreted as >> subrules ) >> >> block in quick on $netif from !$test1 to x.x.x.x >> block in quick on $netif from !$test2 to x.x.x.x > let's fill in the macros because they really don't help. > > block in quick on netif from !1.2.3.4 to x.x.x.x > block in quick on netif from !2.3.4.5 to x.x.x.x > >> why 1.2.3.4 it is blocked by the second rule. shouldn't be passed >> from the first rule ? ( rules are read from top to bottom ) > the first rule doesn't pass anything, it only blocks: it blocks > everything except for 1.2.3.4 > > so the only traffic which reaches the second rule is that from 1.2.3.4 > > the second rule doesn't pass anything, it only blocks: it blocks > everything except for 2.3.4.5 > > so the second rule is irrelevant because packets from 2.3.4.5 get > blocked at the first rule. > >> So the correct question is how to accomplish >> >> pass in quick on $netif from {$test1, $test2} to x.x.x.x >> block in quick on $netif from any to x.x.x.x >> >> with only 1 rule ? > why do you want only 1 rule? isn't it clearer to use the two rules? > you might be able to do what you want with tables though, see the faq > about negation. > Hello, Thank you, yes my mistake about block , whole day looking at the 2 rules ... As Claudio already wrote " The {foo, bar} notation results in a OR operation so foo || bar. Now !foo || !bar with foo != bar is always true. " As I can define with 1 rule for example from {<tableA>,<tableB> } I want to be able to use also from ! {<tableA>,<tableB>} Yes, it is clear ... Yes, I wrote about negation in tables, there is enough examples of its usage in the Book Of PF, but it is not what I need ( following KISS ) Anyway thank you all I try to accomplish something which is correct to be done with no firewall but with other software and I try to use as simple as possible rules I have 2 types of lists with IPs which I put in tables (because these IPs changes often and I don't want to reload rules, it is easy to add just the new IP address) table<lista> persist file "/somefile" table<listb> persist file "/someotherfile" IPs from list A have to be able to access IP A.A.A.A,B.B.B.B,C.C.C.C, D.D.D.D and E.E.E.E for example ( protocol, port ) IPs from list B have to be able to access for example only D.D.D.D and E.E.E.E # block access to A.A.A.A - C.C.C.C for all except listA block in quick on $if inet proto protocol from !<lista> to A.A.A.A... port ... # here I wanted to be able to use something like to allow listA and listB to access D.D.D.D and E.E.E.E block in quick on $if inet proto protocol from ! {<lista>,<listb> } to D.D.D.D,... port ... instead of using: pass in quick on $if inet proto protocol from {<lista>,<listb> } to D.D.D.D ... port ... block in quick on $if inet proto protocol from any to D.D.D.D ... port ...