FreeBSD 5.4 with no Firewall?

Matthew Seaman m.seaman at infracaninophile.co.uk
Sun Jan 22 03:04:56 PST 2006


Benjamin D Adams wrote:
> I'm moving my server to a colocation.  Its a web-server (Apache 2.0) on
> FreeBSD 5.4.  Should I get a gigabyte firewall first?(I plan on getting
> one soon) How important? What can I do to help secure the OS its self?
> Any built in programs I should install first?

Sure, you can run a stand-alone FreeBSD box on the Internet without a
separate firewall, if you configure it carefully.  Mind you, you still need
the same degree of care /with/ a firewall -- it just gives you another layer
behind which you can get away with a few things.

What you need to look out for when securing a machine against attack from
the network:

    a) processes with network listeners: if there's nothing listening
       at a particular network port, you can't be attacked through it.
       Use sockstat(1) to see what programs are listening on your network
       interfaces -- including the loopback interface.  Do you really
       need to run that program?  Can you reconfigure something that listens
       on all interfaces to bind to just the loopback interface?

    b) When considering processes that you have to run to provide the
       intended service -- are they configured to run as securely as
       possible?  Long-lived daemon processes, such as Apache should not
       be run as the root user[*].  Always run them under an unprivileged
       UID that does not have a real shell (/sbin/nologin exists for that
       purpose).  Make sure that UID cannot write to its home directory
       (setting daemon users homes to / is fine) or to any other significant
       locations -- a common mistake is to change the ownership of the
       webserver's document tree to the UID the web server runs under.  
       Make full use of chroot(8) and jail(8) to further isolate exposed
       processes from the rest of the system.

    c) Do your homework, and keep alert to various channels where security
       information is available.  Sites like Secunia (http://secunia.com/),
       the VuXML project (http://www.vuxml.org/freebsd/) and not least any
       mailing lists or newsgroups or fora dedicated to software you're
       running -- you should keep abreast of all such.  Understand the
       distinction between 'local' and 'remote' compromises or DoSes: it's
       the remote ones you should spend energy worrying about unless you
       are providing logins on your server to untrusted users.  Keep
       installed software up to date.  The ports tree is actually really
       good at getting security related updates committed promptly.

       Similarly you should regularly update the OS itself.  Track one of
       the -SECURITY branches, and upgrade when advisories come out.  

    d) Abhor the use of any program which transmits sensitive information
       across networks in plain text.  Use ssh(1) exclusively for remote 
       login access -- preferably with key based auth rather than using
       passwords.  Avoid ftp(1) for copying web content onto servers: any of
       scp(1), rsync(1) [over SSH] or WebDAV over HTTPS will serve you better.
       If you have to display X programs on a remote desktop, always tunnel
       the X traffic through ssh(1).

    e) Configure a local packet filter -- one of pf(4), ipfw(8),ipf(8). Your
       aim should be to be secure even without the firewall in place: it should
       be insurance rather than anything more.  Sometimes however it is the only
       answer to protecting processes you have to run, but that expose themselves 
       on the net.

       Although there is one class of attack you can eliminate easily using
       a packet filter which is hard to do otherwise: spoofing the loopback
       address.  If the machine you're protecting conforms to the 'weak routing
       model' (as FreeBSD does) then it will accept a packet destined for any of
       its network interfaces on any other interface irrespective of network
       routing.  pf(4) makes preventing this really easy.  This three line
       pf.conf(5)  will prevent a lot of potential attacks against daemons
       listening on the loopback address, although you'll probably want something
       a bit more comprehensive in actual use:

          scrub in
          pass all
          antispoof log quick for lo0

Keeping a server properly secured is not rocket science -- mostly it's just
common sense.  But you cannot just 'secure your server' and then forget about
it: lasting security means active maintenance.

	Cheers,

	Matthew

-- 
Dr Matthew J Seaman MA, D.Phil.                       7 Priory Courtyard
                                                      Flat 3
PGP: http://www.infracaninophile.co.uk/pgpkey         Ramsgate
                                                      Kent, CT11 9PW

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 250 bytes
Desc: OpenPGP digital signature
Url : http://lists.freebsd.org/pipermail/freebsd-chat/attachments/20060122/d56c8437/signature.bin


More information about the freebsd-chat mailing list