Rich Kulawiec on 7 Jul 2017 07:16:22 -0700

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

Re: [PLUG] Firewall choices for a small software development business

On Tue, Jul 04, 2017 at 10:14:58AM -0400, K.S. Bhaskar wrote:
> Especially a firewall, it seems to me that fixes are important. I don't
> know what the pfSense track record is with patches, but when pfSense 2.5
> comes out, will the older versions continue to receive patches?

To clarify: I was talking about pf, the firewall that's part of OpenBSD.
(It's is also available on FreeBSD, NetBSD, etc.  However, the version
that's part of OpenBSD is always the latest/greatest.)  pfsense is based
on FreeBSD with pf.

I recommended pf, not pfsense, for a couple of reasons -- one of which
is the statement in parenthesis above.  Another is that I take a very
dim view of GUI-based tools for firewall configuration.  (If you can't
run your firewall from the command line, then you shouldn't be running
your firewall.)  And another is that writing a configuration file for pf
from scratch -- while certainly a demanding task in nontrivial use cases
-- is an excellent way to force yourself to understand *exactly* what your
requirements are and *exactly* how the firewall meets those requirements.

That exercise is well worth the effort.

And while I'm on the subject, let me note that I also take a dim view
of all-in-one approaches.  They tend to lead to excessive complexity
which in turn leads to maintenance issues, bug issues, and worse.
I think it's better to clearly separate functionality and layer
defenses (something I've advocated for years when it comes to SMTP).

For example: your firewall should be using the Spamhaus DROP and EDROP
lists to bidirectionally drop all traffic from/to those network ranges.
Now, you *could* deploy software measures to stop incoming brute-force
ssh attacks and http server exploit attempts -- and perhaps you should.
But traffic from these ranges *should never get that far*: you should
have already stopped it cold because you know a priori that it's
invariably malicious.  It's thus a waste of bandwidth, CPU, log entries,
and everything else if it falls to ssh/http-specific defenses to deal
with this.  (And perhaps just as or even more important: it generates
clutter that makes it harder to see attacks you really want to see.)

The same is true for many other combinations of address ranges, ports,
protocols, etc.  It's much simpler to drop their traffic on their floor
than it is to do something more sophisticated.  It's also much more
effective, particularly on the day when a new exploit shows up that
your sophisticated defenses aren't ready for.  (Note that these days
used to happen rather infrequently, but that's not the case any more.)

For example:

	block log proto tcp from <amazon> to $myself port ssh

This drops all incoming traffic from <amazon> to ssh, which is a network
list where I've attempted to enumerate all of Amazon's cloud operation.
Why not?  Nobody here will ever attempt to ssh in from there.  And thanks
to Amazon's systemic/chronic incompetence and negligence, AWS has been
a massive, ongoing source of brute-force attacks for years.  So sure,
I could deploy fail2ban or something similar to deal with those, but
why even let them get that far?  Drop the packets on the floor, make
a note of it in the firewall log, and move on.

And -- with the reference to the zero-days I mentioned above -- this
means that when that day comes, and it inevitably will, I'll have lots of
things to worry about.  But one of them will not be "attackers on
AWS hosts attempting to use an ssh zero-day".  (Lest anyone think
this is rather limited, let me note in passing that this is far, FAR
from the only defense I have in place.  This is merely an example.)

Philadelphia Linux Users Group         --
Announcements -
General Discussion  --