Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 9 Nov 2008 03:21:25 -0800
From:      Jeremy Chadwick <koitsu@FreeBSD.org>
To:        Elvir Kuric <omasnjak@gmail.com>
Cc:        freebsd-pf@freebsd.org
Subject:   Re: Blocking udp flood trafiic using pf, hints welcome
Message-ID:  <20081109112125.GA36707@icarus.home.lan>
In-Reply-To: <1814bfe70811090137v39cd6434l49b545eb3b6eb88c@mail.gmail.com>
References:  <1814bfe70811090137v39cd6434l49b545eb3b6eb88c@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Nov 09, 2008 at 10:37:29AM +0100, Elvir Kuric wrote:
> I am playing with pf tool on openbsd/freebsd platforms and it is super
> tool for firewalls. On thing is interesting for me, and I am hopping
> someone has expeience with this.
> 
> If I say
> 
> block log all
> block in log (all) quick on $ext_if proto udp from any to $ext_if
> 
> this would block all traffic on $ext_if, but on my ext_if I recive a
> lot of ( huge amount ) of udp generated traffic which make me a lot
> of problems.
> I also tryed to add small pipe and play with ALTQ to handle this but
> it did not help a lot. Also I know that every packet which hit my
> ext_if should be
>  processed ( or least  take a little processor resources, if I block
> it with keyword quick ), but I am wondering is there some way to
> decrease impact on system
> when a lot of packets arive in short time.
> 
> My question would be, what are your experinces with battling against
> boring udp flooders ? Platform are FreeBSD / OpenBSD and all works
> like a charm except time to time, stupid udp flood atacks.

First, you should be very careful with use of the "log" directive on
your rules.  I've personally witnessed an attack which triggered "log"
entries in block rules causing pflog to log at such a tremendous/fast
rate, that newsyslog could not rotate+compress the log files fast
enough, resulting in CPU maxing out and so on (a true self-induced
denial-of-service).  Consider this warning.  :-)

Secondly, and this is more a direct answer of your question: I believe
what you're referring to is a UDP-based DoS attack against your FreeBSD
machine(s).

The "block" directives you're using will only stop your FreeBSD box from
responding to those packets (whatever you do, silently deny those
packets; do not use "reject", or else your box will be trying to send
back denial responses to the attackers, which just makes the problem
worse).  It *cannot* solve the problem of your network connection
becoming saturated.

Your next question will be: "okay, so how do I solve this problem?" This
is where it gets both technical and political.  There are two things to
do first:

1) See if the attacks are distributed (multiple IPs or even spoofed IPs
hitting your machine with UDP packets).  If they're distributed or
spoofed, you're out of luck.

If the packets are legitimate (e.g. some compromised machine on the
Internet is being used to attack you), you need to find out who own that
IP address, and contact them.  ARIN (WHOIS) can be of help here.  Pray
they have an abuse department.  If you do not get a prompt response
(24-48 hours), try to figure out who their upstream network provider is,
and send them a similar message.  Continue up the chain until you get a
response.  Phone calls (even international) often work wonders
decreasing mitigation time.

2) Investigate your own machine.  I cannot stress this enough.  Most DoS
attacks I've seen in my years ARE NOT random -- there's a reason they
happen.

The majority of attacks I've seen involve IRC in some way, either as a
central cause of attack (arguments, channel takeovers, whatever), or
indirectly (a compromised account on your machine).  If your machine is
a shell box for friends/customers, I highly recommend considering *not*
permitting IRC from it; this includes bouncers and eggdrops.

Many IRC-induced attacks are done against a machine solely to knock it
offline (so the user on IRC pings out for a channel takeover, or just to
keep the user from getting back on IRC).

And if your machine(s) run IRC servers... well, this is one of the many
dangers in hosting a server.  You have to weigh what's more important to
you in this case: IRC, or the availability of your machines.  I speak
from personal experience as someone who used to administrate a public
EFnet server, and as someone who has used IRC for the past 16 years.
Whichever matters to you more is what you should stick with.

The second most common reason for attack I've seen are controversial
websites or domain names -- things that induce arguments, controversy or
heated discussions, or are of a "shady" nature and would bring shady
or questionable attention to you (e.g. wehaveeggdropshellz.com).  If
you host anything like this, consider suspending it, or removing the
customer due to incidents which cause the network to become unavailable.
Remember: one customer/user is not worth sacrificing all the rest.

Finally: work with your own service/uplink provider.  In the case of a
very large-scale attack, your ISP will need to do the filtering to
ensure that the packets never reach your machine.  "What can they filter
on if it's DDoS?"  Good question -- very little.  But your uplink should
at least be told of the problem, both out of respect, and for your own
benefit (especially if you are billed for *incoming* traffic!)

If you don't find decent answers here, I highly recommend freebsd-net
or freebsd-isp.  Others may have better advice.

Footnote: Like SMTP and spam, IRC as an entity is not evil or bad -- the
problem is that in this day and age, it can breed trouble.  I don't want
to sound like I'm slamming IRC ("IRC sucks! Ban IRC!"); I'm not.  I'm
simply pointing out the realities that are involved with IRC in this day
and age.  The degree of anonymity DoS and IRC provide sometimes brings
out the worst in people, and that's sad.

-- 
| Jeremy Chadwick                                jdc at parodius.com |
| Parodius Networking                       http://www.parodius.com/ |
| UNIX Systems Administrator                  Mountain View, CA, USA |
| Making life hard for others since 1977.              PGP: 4BD6C0CB |




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