Under Attack: Bandwidth throttling on 5.2.1?

Panagiotis pnestora at ee.duth.gr
Thu Sep 14 12:53:22 PDT 2006


Chris wrote:

> This is probably going to tax the memory. I'm sorry in advance.
>
> We observed 2 hangs and 3 crashes in the last 5 hours and finally  
> after looking at the nature of the traffic, it appears to be little  
> infested windows spybots from all over targeting our forums to  
> attempt to reply to all messages with gambling and other spam. The  
> referer in every case is a few obvious spam sites. We measured 33  
> pages per second and all invoking perl (well you can image the load).  
> It's killed the system in several was I've never even seen. We  
> shutdown on purpose for the first time in years which is pretty bad  
> for business. I'm readying the quad opteron tyan to take down and  
> shove in it's place since the T1 can't swamp it, but still building.  
> The machine is a dual 3.0 xeon with 4G and Intel 1000/Pro on 5.2.1  
> with IPFW enabled. If I can configure throttling on this old a  
> system, we could come back up I think and try ride out the attack.  
> I've never done this before but in an earlier thread I saw where you  
> configure a pipe such as:
>
> ipfw pipe 1 config bw 256Kbit/s
> ipfw add pipe 1 tcp from 192.168.1.2 80
>
> then set sysctl.conf
> net.inet.ip.fw.one_pass=1
>
> Is that is all that's necessary for this old a system or is there  
> anything else. If this is correct, would this keep this fellow from  
> crashing

To use traffic shaping with IPFW you have to compile the kernel with the 
following options:

options         DUMMYNET
options         HZ=1000

then you can add some lines like these to make your bandwidth limit to work:

#first flush all the previous pipes
ipfw -q -f pipe flush

ipfw pipe 1 config bw 256Kbit/s
ipfw add pipe 1 tcp from any to any

usually we use two pipes, one for download and one for upload so you can 
try something like this:


#first flush all the previous pipes
ipfw -q -f pipe flush

#upload bandwidth+download bandwidth=total bandwidth
#pipe for upload
ipfw pipe 1 config bw 128Kbit/s
#pipe for download
ipfw pipe 2 config bw 256Kbit/s

server_port="20,21,80,443,995,...,etc"
internal_network="192.168.0.0"

#config upload
ipfw add pipe 1 tcp from $internal_network to any $server_port
#config upload
ipfw add pipe 2 tcp from any $server_port to $internal_network

The variables "server_port" and "internal_network" are examples of 
course... :-)
If you are running natd on your machine the you have to put rules AFTER 
the divert natd rule like these:
ipfw add pipe 1 tcp from {external_ip} to any $server_port
ipfw add pipe 2 tcp from any $server_port to $internal_network

The net.inet.ip.fw.one_pass=1 must be set if you want your traffic to 
pass from pipes and not continue at next rules....

Sorry for my bad english....






More information about the freebsd-questions mailing list