Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Aug 2004 08:51:50 -0500
From:      "Jack L. Stone" <jackstone@sage-one.net>
To:        James <haesu@towardex.com>, "Simon L. Nielsen" <simon@freebsd.org>
Cc:        FreeBSD - ipfw <freebsd-ipfw@freebsd.org>
Subject:   Re: Denying multiple IP's
Message-ID:  <3.0.5.32.20040830085150.01f1d220@10.0.0.10>
In-Reply-To: <20040830043833.GA41637@scylla.towardex.com>
References:  <20040824205513.GJ760@zaphod.nitro.dk> <412B6A23.1000708@makeworld.com> <20040824205513.GJ760@zaphod.nitro.dk>

next in thread | previous in thread | raw e-mail | index | archive | help
At 12:38 AM 8.30.2004 -0400, James wrote:
>On Tue, Aug 24, 2004 at 10:55:13PM +0200, Simon L. Nielsen wrote:
>> On 2004.08.24 11:17:39 -0500, Chris wrote:
>> > I'm working with a friend of mine w/ipfw. Below are IP's that are trying 
>> > to hack in via ssh. I suggested to use something in the form of:
>> > 
>> > # Allow in SFTP, SSH, and SCP from public Internet
>> > ${fwcmd} add 090 pass log tcp from xxx.xxx.xxx.xxx/29 to ${ip} 22 setup 
>> > limit src-addr 4
>> > 
>> > But he mentions that he needs access to his box from potential client 
>> > sites where the IP is unknown.
>> > 
>> > There has to be a better way to block the below - suggestions?
>> 
>> If you use FreeBSD -CURRENT or -STABLE (newer than 4.10 and 5.2) you
>> could use the new table feature.  Otherwise if you use ipfw2 you could
>> use "or-blocks" e.g.
>> 
>> ipfw deny ip from { 1.2.4.5 or 1.2.4.7 or 1.2.5.7 } to any
>
>Good call, but unfortunately, this is not very good in performance either..
>
>If you use latest kernel, your ipfw2 should have the lookup tables patch
which
>uses radix lookup.  { blah or bleh or x or y or z } list is a linear lookup,
>causing the system to lookup twice in linear fassion to come to a match.
It is
>not exactly any better in terms of performance efficiency than adding
hundreds
>of straight ipfw rules each with a ip address specification.
>
>Try this if you have tables feature:
>
>ipfw table 1 add x.x.x.x/32
>ipfw table 1 add x.x.x.x/32
>ipfw table 1 add x.x.x.x/32
>ipfw table 1 add x.x.x.x/32
>ipfw table 1 add x.x.x.x/32
>ipfw table 1 add x.x.x.x/32
>ipfw table 1 add x.x.x.x/32
>ipfw table 1 add x.x.x.x/32
>ipfw table 1 add x.x.x.x/32
>ipfw table 1 add x.x.x.x/32
>ipfw table 1 add x.x.x.x/32
>
>ipfw add 300 deny ip from table(1) to any
>
>No matter how many elements you got in table 1, due to radix/patricia trie
>lookup as with kernel routing table, the time spent in looking thru firewall
>elements is O(32) constant. 
>
>To demonstrate the efficiency:
>
>Test #1: Start with 1 ipfw rule (the last rule 65535 being allow all) that 
>denies one ip address on the DUT. Flood the remote tester device that is not
>denied by the ipfw rule. Start the test, and increment the ipfw rules from 1
>to 10. Result:
>
>1 rule:		140kpps
>2 rule:		140kpps
>3 rule:		138kpps
>4 rule:		137kpps
>5 rule:		135kpps
>6 rule:		135kpps
>7 rule:		132kpps
>8 rule:		133kpps
>9 rule:		131kpps
>10 rule:	129kpps
>
>Test #2: Perform the exact same test above, however use a lookup table to
store
>the elements from 1 to 10:
>
>1 element in table:	140kpps
>2 element in table:	140kpps
>3 element in table:	140kpps
>4 element in table:	141kpps
>5 element in table:	140kpps
>6 element in table:	139kpps
>7 element in table:	140kpps
>8 element in table:	142kpps
>9 element in table:	140kpps
>10 element in table:	140kpps
>
>
>> 
>> or something like that.
>> 
>> In any case there is probably no need to have sperate tcp/udp rules,
>> you could just use "ip" and block all traffic from the IP's.
>> 
>> > #
>> > # IPs that seem to want to get in REALLY bad... deny all tcp/udp from
IPs.
>> > #
>> >
>> > ${fwcmd} add 300 deny tcp from 24.79.68.179 to any
>> > ${fwcmd} add 301 deny udp from 24.79.68.179 to any
>> > ${fwcmd} add 302 deny tcp from 64.246.20.123 to any
>> > ${fwcmd} add 303 deny udp from 64.246.20.123 to any
>> > ${fwcmd} add 304 deny tcp from 81.223.99.90 to any
>> > ${fwcmd} add 305 deny udp from 81.223.99.90 to any
>> > ${fwcmd} add 306 deny tcp from 140.112.124.123 to any
>> > ${fwcmd} add 307 deny udp from 140.112.124.123 to any
>> > ${fwcmd} add 308 deny tcp from 193.145.87.3 to any
>> > ${fwcmd} add 309 deny udp from 193.145.87.3 to any
>> > ${fwcmd} add 310 deny tcp from 203.186.157.37 to any
>> > ${fwcmd} add 311 deny udp from 203.186.157.37 to any
>> > ${fwcmd} add 312 deny tcp from 210.204.129.11 to any
>> > ${fwcmd} add 313 deny udp from 210.204.129.11 to any
>> > ${fwcmd} add 314 deny tcp from 211.60.219.250 to any
>> > ${fwcmd} add 315 deny udp from 211.60.219.250 to any
>> > ${fwcmd} add 316 deny tcp from 211.252.9.126 to any
>> > ${fwcmd} add 317 deny udp from 211.252.9.126 to any
>> > ${fwcmd} add 318 deny tcp from 218.21.129.105 to any
>> > ${fwcmd} add 319 deny udp from 218.21.129.105 to any
>> > ${fwcmd} add 320 deny tcp from 218.49.183.17 to any
>> > ${fwcmd} add 321 deny udp from 218.49.183.17 to any
>> > ${fwcmd} add 322 deny tcp from 218.102.19.78 to any
>> > ${fwcmd} add 323 deny udp from 218.102.19.78 to any
>> > ${fwcmd} add 324 deny tcp from 218.237.66.152 to any
>> > ${fwcmd} add 325 deny udp from 218.237.66.152 to any
>> > ${fwcmd} add 326 deny tcp from 221.3.131.80 to any
>> > ${fwcmd} add 327 deny udp from 221.3.131.80 to any
>> > 
>> > # Everything else is denied by default
>> 
>> -- 
>> Simon L. Nielsen
>> FreeBSD Documentation Team
>
Running FBSD-4.10-p2/ipfw2

I don't know if I do it best way, but this method certainly works well for
me. I place it early at the top before NAT so that effort is not needed
either. Plus, it denies *all* packets of any kind. Plus2, I let ipfw assign
the rule numbers:

        #${fwcmd} add deny all from 168.226.97.0/24 to any via ${oif}
        #${fwcmd} add deny all from 83.114.157.0/24 to any via ${oif}
        #${fwcmd} add deny all from 69.88.27.0/24 to any via ${oif}
        #${fwcmd} add deny all from 68.79.28.0/24 to any via ${oif}

I haven't tried the tables and haven't investigated that yet

Best regards,
Jack L. Stone,
Administrator

SageOne Net
http://www.sage-one.net
jackstone@sage-one.net



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3.0.5.32.20040830085150.01f1d220>