"I say we take off and nuke the entire site from orbit. It's the only
way to be sure."
Saturday afternoon my home web server got cracked. I found out
because Google started refusing my searches, asking me to fill out a
CAPTCHA form (incidentally, I hate the word CAPTCHA, and even typing
it gives me hives) to prove I was human. What the hell?
So I checked on the server, which is also our firewall, which isn't
good but frankly I was tired of maintaining a complex network at home,
and sure enough there was some perl script running as user www-data
(which Debian uses to run the webserver), sending off tons of Google
queries and taking commands on IRC the way I keep hearing nobody does
anymore. Crap.
Fortunately I've been running Bacula for a while now, backing up to an
external hard drive, and so I figured that even though it probably
would go away when I rebooted, I'd Do The Right Thing(tm) and rebuild
from scratch.
This had to wait 'til the evening, so I shut down the webserver, ran
backups a bunch more times, got more info, and moved the machine (a
tiny li'l Shuttle box) from my youngest son's bedroom (apparently the
only room in the house w/a phone outlet not covered by an ADSL filter)
to our bedroom upstairs, running the network cable up the stairs.
In the end, it all went pretty smoothly. I was able to get all my
packages back and restore from backup; the only thing I messed up was
getting the ownership wrong on my restored crontab. (Debian uses a
pool of UIDs for daemons, so you're not guaranteed to get the same
UIDs if you reinstall.)
As a bandaid, I've firewalled off www-data from initiating connections
out. I should have done this long before. Now I'm starting to
think about the next step -- Xen, maybe, or SELinux. (I did briefly
consider other distros, or even a BSD: CentOS for SELinux, FreeBSD for
pf and jails. But I decided that one problem at a time was quite
enough, thanks.)