Hardening Apache 241
Hardening Apache | |
author | Tony Mobily |
pages | 270 |
publisher | Apress |
rating | 9 |
reviewer | Gianluca Insolvibile |
ISBN | 1590593782 |
summary | A thorough guide through the intricacies and gotchas involved in securing an Apache installation |
Hardening Apache fills a huge gap in this sense, providing web administrators with a complete and yet concise book aimed to guide them from the very beginning of the installation process to the final steps of the server configuration. The author, Tony Mobily, is also the mind behind Professional Apache Security, a book published by Wrox Press which I reviewed on Slashdot about 17 months ago. Since Wrox's unfortunate closure, some of the material from that book has been moved into Hardening Apache. More specifically:
- The excellent chapter on "jailing" Apache is exactly the same;
- The chapter on XSS attacks has been slightly improved;
- The chapter on logging, which was nothing remarkable, has been greatly improved. It now includes a complete architecture to log on a remote host using encryption and a TCP/IP connection.
The first chapter of the book deals with deploying a clean and safe base installation, which will then be the grounds for adding extra functionality. Unfortunately, this task is often underestimated. What I liked in this chapter is the step-by-step guide to correctly downloading the source distribution and verifying its integrity (by checking its digital signature), as well as the clean approach to the creation of a lean, easily readable configuration file, which grants a painless maintenance. A highlight of this section is the use of Nikto to analyse and explain common weaknesses and to show how to fix them.
Chapter 2 presents some vulnerabilities and explains how to exploit them. The chapter doesn't have any "pearls of wisdom" (but it's nevertheless important to show that Apache can be vulnerable), and presents some important reference sites every web administrator should be aware of.
Chapter 3 definitely deserves a special mention: after introducing the "common" ways of logging and syslogd's architecture, the author describes a rational approach to realizing a complete logging solution which entails remote log servers, encryption of logs, and the use of a MySQL database to better organize them.
Chapter 4 is the only one which deals with the "programming" side of web security. It is not a comprehensive guide on how to write safe programs for the web, as it focuses on cross-site scripting attacks; it shows how to secure a simple and vulnerable message board written in PHP.
The following chapter talks about security modules: it presents an interesting overview of the most useful modules related to security, which will help administrators understand the importance of third-party modules and explains how to install and use some of them. I also liked Chapter 6, which deals with the installation of Apache in a secure, chrooted environment: the chapter does a great job in guiding the reader through the non-trivial steps required to get Apache, Perl and PHP working correctly in such a restricted environment.
The last chapter presents a number of powerful and well-written scripts which anybody can use to automate security and keep an eye on their web server (monitoring log growth, Apache's responsiveness, and so on).
What's to like
Information throughout the book is very well focused and presented with a clean and friendly writing style. The book provides a clear and detailed walkthrough of the process of securing an Apache installation, covering both versions 1.3.x and 2.x and thus providing long lasting information. The book has lots of references and pointers to resources on the web, and - what's more important - instructions on how to read them. I also liked the "checkpoints" at the end of each chapter.
What's to consider
Apart from chapter 4 on cross-site scripting attacks, the book does not cover secure web programming at all. It doesn't cover OS hardening either, which is out of scope but part of the game anyway. Going through the book requires some familiarity with Unix and Apache; otherwise you will have to resort to other books for the very basic steps.All in all, I found this sort of "new edition" of the book by Apress to be greatly enhanced, more homogeneous and better focused than the previous book: I had been happy with Wrox's version, but I am enthusiastic about this one. This is a book which should definitely be included in any serious Apache administrator's bookshelf.
You can purchase Hardening Apache from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
One of the unfortunate things about Apache... (Score:4, Insightful)
In a way, Internet Information Services provides a more secure environment because an administrator gets a wealth of help and a decent initial configuration. In the end it's all about knowing your product, but it helps if the product helps you.
Re:One of the unfortunate things about Apache... (Score:3, Interesting)
Re:One of the unfortunate things about Apache... (Score:2)
the default config in 2k3 is very pessimistic. can't say that i've had one of those work since the orginal code red.
Re:One of the unfortunate things about Apache... (Score:5, Informative)
Re:One of the unfortunate things about Apache... (Score:2, Insightful)
Re:One of the unfortunate things about Apache... (Score:4, Interesting)
Do a check on Netcraft for *.microsoft.com sometimes and check the first couple hundred servers for what they are running. If IIS is so damn good, how come Microsoft is always duck and covering behind open source?
Re:One of the unfortunate things about Apache... (Score:2)
Linux on all of them
If that's not what you meant and you just want to see a Windows machine running Apache, they are all over the place. Check out www.proclub.com for starters; they're Microsofts health club and they run Apache.
Re:One of the unfortunate things about Apache... (Score:3, Interesting)
Those results are skewed because of Akamai (Score:2)
Non-authoritative answer:
Name: a1076.g.akamai.net
Addresses: 199.44.34.70, 199.44.34.68
Aliases: autoupdate.microsoft.com, codecs.microsoft.com
codecs.windowsmedia.com.akadns.net, codecs.windowsmedia.com.edgesuite.net
MS uses Akamai for distribution, Akamai runs Linux. Side note, thank $_DEITY that MS does not use Connexion any more. Holy dog crap they were SLOW!
Re:One of the unfortunate things about Apache... (Score:2)
Sorry (Score:2)
Re:One of the unfortunate things about Apache... (Score:5, Informative)
In "Apache: The Definitive Guide", Ben and Peter Laurie suggest a way to learn how to build an Apache config file - start with a blank file, and start Apache. Oops, it won't start. OK, so what's it missing? Check the log files. It needs a User directive - OK, add that. Try to start. Hm, it started, but where do I put my HTML? Ah, add a DocumentRoot. And so forth.
This really doesn't take as long as it sounds - and after about 10 minutes of adding directives and restarting Apache, you'll have a lean configuration file that has just what you need in it - and you'll know how you got there, where the error logs are, and so on.
Re:One of the unfortunate things about Apache... (Score:5, Insightful)
the best thing about the pre-built apache config files is the degree to which they are self-documenting. you can learn everything you need to know about apache just by reading through the comments. the second-best thing about them is that they're the same on all of your servers. the third best thing about them is that you don't have to read through a bunch of documentation to find out-of-date and non-working examples of config stanzas, because they're already there, commented out and waiting for some s/ action.
Re:One of the unfortunate things about Apache... (Score:5, Insightful)
Hm. I find smaller configuration files to have both a lower gimp quotient and a reduced crapification level.
> they are self-documenting.
True, although there's a ton of stuff in there most folks won't use - content negotiation and such-like.
> they're the same on all of your servers
Hm. Most of my servers have different config files - different vhost names, different modules, etc. Perhaps if they were all fronting one application that might be different...
Re:One of the unfortunate things about Apache... (Score:3, Informative)
Re:One of the unfortunate things about Apache... (Score:3, Interesting)
This guy should get more + moderation! That method is one of the best ways to keep your apache configs sane, especially if you've got a whole bunch of servers that aren't part of a cluster or whatever (i.e. identical configs for all).
We actually take it a step further and do "Include conf.d/" from the httpd.conf, where conf.d is a subdirectory with configuration "containers" that are automatically included on startup/reload. That way we just drop individual vhost co
Re:One of the unfortunate things about Apache... (Score:2)
C'mon, surely you know the difference between "learning exercise" and "what I leave behind for my successors"!
Re:One of the unfortunate things about Apache... (Score:2)
grep -v "^#\|^$"
so that I can see the woods through the trees so to speak.
Comments arn't always good.
Re:One of the unfortunate things about Apache... (Score:2)
I spent about 3 hours years ago making my Apache config, and I haven't had to do it again. I have a second one I made last year for Apache 2, and I expect it to last me just as long.
Re:One of the unfortunate things about Apache... (Score:2)
I'm not a sysadmin or worked with Apache, but doesn't this sound a bit crude to figure out a configuration of a system?
Its like going through the Apache source code to see what strings in the config file they are looking for.
Re:One of the unfortunate things about Apache... (Score:5, Insightful)
Re:One of the unfortunate things about Apache... (Score:5, Interesting)
The point is that if you write your config file by hand, then you HAVE TO know each directive (well, sort of).
That's part of the reason why I wrote the first chapter that way...
Merc.
(The book's author)
Re:One of the unfortunate things about Apache... (Score:5, Insightful)
No, its not add that. Its copy that and the associated comment from the original stock config file apache provides. Now your lean config file is documented, looks just like apache's and won't confuse your successor. I generally do this with any new daemon I install that requires a config file. Note that from a security standpoint this may not be good enough if the daemon's secure options are turned off by default since you may not see any warnings in the logs.
Re:One of the unfortunate things about Apache... (Score:2)
Why doesn't Apache just ship a leaner default config file?
Re:One of the unfortunate things about Apache... (Score:2)
That is a good start, but also make sure you start from a completely blank file tree, delete all the default cgi scripts etc. A lot of exploits
Re:One of the unfortunate things about Apache... (Score:2, Insightful)
> the ground up
Right on. And you'd know what all the funky error messages look like, too, which is nice...
Re:One of the unfortunate things about Apache... (Score:5, Interesting)
Granted, that's just the in the distribution, not the server version... but at least it shows it's getting better at that. Now if only more people used Apache2, things would just fix themselves
-N
Re:One of the unfortunate things about Apache... (Score:5, Informative)
Really? I never found it all that hard. Most of the complex stuff is inserted in the default file, but is not insecure in of itself. You just have to think about everything you do after that.
I wouldn't be surprised if many of its so-called "security holes" actually came about because of misconfiguration by an administrator who was confused by the layout of the documentation or config files.
In my experience, most Apache security issues are related to giving access to files that shouldn't be on the web. Doing things like symlinking directories is very powerful, but it's also very dangerous. Also keep in mind that if an attacker can upload a script, he already has access to your system. These sorts of problems (as well as undiscovered buffer overflow issues) can be mitigated by the use of Jails. When you jail Apache, you ensure that any attacker that does gain access, will only have access to Apache files.
A typical Apache security problem would be something like an FTP server that has an anonymous account with access to a web-sharable directory. An attacker uploads a PHP script to the web-share, and it's game over for your machine/network.
secure (Score:4, Funny)
Don't forget (Score:4, Informative)
Umm. (Score:5, Interesting)
OpenBSD's [openbsd.org] Apache has a diff of 3 or 4 thousand lines over "stock" Apache. Why not just use that?
Re:Umm. (Score:5, Interesting)
and it's not that they haven't tried feeding the patches back, either. the ASF is being utterly retarded about accepting them. more [google.com] and more [google.com]
it's specific to OpenBSD (Score:3, Informative)
Re:it's specific to OpenBSD (Score:2, Informative)
Re:Umm. (Score:2, Informative)
step 2: search on 'no more apache updates group:lucky.openbsd.misc' (no quotes)
read that. this [google.com] one in particular to answer your question. it was also covered here on
Wait a second! FUD Alert! (Score:3, Interesting)
Comment removed (Score:4, Interesting)
Re:Interesting (Score:4, Insightful)
Don't let not knowing about security hold you back from hosting your own site. Experiment, learn, have fun. Put an apache box up on a DMZ, put stupid content on it, see what happens. Look at your logs, see what's going on, learn from any mistakes you make along the way.
If you're in this industry, and are afraid to be the "fall guy" who has do deal with the inevitable attacks, or the "fall guy" in general, you'd better fasten your seat belt...you're in for a bumpy ride.
He who makes no mistakes makes nothing at all
Re:Interesting (Score:2)
Thing is, I forgot to lock down the allowable hosts.
Soon, I was seeing scripting engines requesting ads from various web servers in my logs. Took over a year for those scripts to stop.
Didn't take long for me to find it, but once you're on an open proxy list.... You're screwed.
Re:Interesting (Score:3, Insightful)
In short, find a hosting company with a lot of Windows servers nearby IP-wise. This is, sadly, not a troll or flamebait, it's my experience. Apache is not what you have to w
Re:Interesting (Score:2)
Heh. I plan to serve my own site to gain the experience of log-reading, config-file twitching, and all that; I want to break into the Web field, and see this as a good opportunity to learn about webserver/OS hardening by fire, as well as being just plain fun :)
I'll also ask a buddy of mine who's a security consultant to attack the server. Better to have a friend attack and tell me my mistakes than some pimply-faced kid 0wneR my machine.
Re:Interesting (Score:2, Interesting)
I think the book would be great for you. If you do buy it, let me know what you think of it!
Merc.
(The book's author)
Devil's Advocate (Score:5, Informative)
Re:Devil's Advocate (Score:5, Funny)
Re:Devil's Advocate (Score:2)
Re:Devil's Advocate (Score:4, Funny)
j/k
Re:Devil's Advocate (Score:2)
Answer: None [secunia.com].
Re:Devil's Advocate (Score:2)
This [secunia.com] one is labeled "Moderately Critical".
The best way to harden IIS (Score:2)
Ctrl-Alt-Del
Is that anything like... (Score:5, Funny)
Well (Score:3, Funny)
*I apologize*
Re:Well (Score:5, Funny)
Maximum Apache Security (Score:4, Interesting)
Fragmented Justification (Score:4, Interesting)
Re:Fragmented Justification (Score:2)
Compare the final product... I think you'll see why Apache has and always will have the dominant market share.
Re:Fragmented Justification (Score:2)
Re:Fragmented Justification (Score:2)
Re:Fragmented Justification (Score:2, Funny)
Stronghold (Score:2)
Re:Stronghold (Score:2)
Short answer, likely not.
Don't advertise version number (Score:5, Insightful)
Re:Don't advertise version number (Score:2, Informative)
However, when it comes to exploits that deal with knowing version numbers, most of it is script kiddy stuff, so it's [ the script ] is going ot just run default exploit attempts against the webserver regardless of what is returned about the webserver.
ServerTokens Min (Score:2)
It's all in the docs.
Re:Don't advertise version number (Score:2, Informative)
Might help a little bit. As I saw so eloquently stated somewhere...
This would not stop skilled bad guys, but would slow down those kiddies playing around.
Should this perhaps be the default? Maybe. But the bottom line is, you don't have the right to put a machine online without knowing about the details.
Re:Don't advertise version number (Score:2)
Not in the least. My logs show tons of IIS and ancient Apache exploit attempts. Kiddies just mindlessly launch every exploit they know against any server they can find and hope to get lucky.
Re:Don't advertise version number (Score:2)
Re:Don't advertise version number (Score:3, Informative)
I've seen removing the version number being advocated by the Nessus folks, but I haven't done it.... It feels somewhat like security by obscurity....
Great. Another Book of The Arcane. (Score:5, Insightful)
With any luck, many hardening techniques will migrate towards the Apache installation process, or at least the Apache documentation.
just put an IIS server in front of it (Score:5, Funny)
Hardening apache? (Score:3, Funny)
logging (Score:2, Informative)
Thanks for posting. I could will look for it... (Score:2)
A year ago I wanted to put one public but found information on hardening it extremely limited -- or perhaps extremely disconnected.
If the book is indeed concise, it will be useful.
thttpd (Score:2)
Apache is extremely complicated and therefore a potentail rats nest of potential security holes. Please don't get me wrong here: I like Apache very much for its great flexibility, yet I helped a lot of security aware companies to migrate to thttpd [acme.com] because they wanted a code base that could be scrutinized in a reasonable amount of time. Most web apps really don't need the flexibility of Apache anyway, and those who do, will have to be run in secure environments like, say, jails [freebsd.org] or other virtualized environme
If possible, use a different httpd (Score:3, Interesting)
Now, you still have to learn how to set up that package right, and keep up on updates, but diversity is a nice thing. Even if you just move some files (e.g. static content like images) off onto a side server, there's less to secure on the Apache box, so it's usually simpler.
Lack of security between users/virtual hosts (Score:3, Insightful)
You would need to run multiple apaches running from different UIDs for each user
That's bad. suexec it's not a option - it doesn't work with mod_python and other apache modules.
perchild MPM module that should do it doesn't work and apache developers are not interested in fixing that. No idea why.
metuxmpm MPM module was written instead perchild by external developers but it also doesn't work well unfortunately (for me it doesn't work at all).
NIce Defcon Presentation (Score:2, Informative)
So why not do things differently? (Score:2, Interesting)
So why not create a smart program to generate the config file either as a script or as a GUI application that will have enough smarts to get your normal site up and running but with the possible security holes turned OFF and massive warnings written into the file so that when someone goes to ed
Re:So why not do things differently? (Score:2, Informative)
Re:So why not do things differently? (Score:2)
Re:Stupid is a Stupid does (Score:5, Funny)
%su
%httpd start
when we all know it should be
%su
#httpd start
Re:Stupid is a Stupid does (Score:2)
%su
#httpd start
when we ALL know it should be
%su -
#httpd start
Re:Stupid is a Stupid does (Score:2)
#httpd start
This implies:
%which su
alias su='sudo su'
and
Re:Stupid is a Stupid does (Score:3, Informative)
Re:Stupid is a Stupid does (Score:2)
If somebody has gotten enough access to your box to add an arbitrary module to your httpd config, you're in pretty big trouble anyhow...
NO IT'S NOT (Score:2)
What, me Rush fan?
Whaddayamean "who cares"?
Re:Stupid is a Stupid does (Score:2)
#ICMP traffic
einfo "Creating icmp chain"
$IPTABLES -N icmp_allowed
$IPTABLES -F icmp_allowed
$IPTABLES -A icmp_allowed -p icmp -s $NETWORK -j ACCEPT
$IPTABLES -A icmp_allowed -p icmp -s 127.0.0.1 -j ACCEPT
$IPTABLES -A icmp_allowed -m state --state ESTABLISHED,RELATED -p icmp --icmp-type echo-reply -j ACCEPT
$IPTABLES -A icmp_allowe
Re:Stupid is a Stupid does (Score:3, Insightful)
If you have a specific need to know I am here... it should be a part of your protocol.
Because, other than those things I want to work... my machine does not exist.
In short: I don't need ping replies to work. So, my machine does not do it.
Re:Stupid is a Stupid does (Score:3, Interesting)
I also use it as a monitor from another location so I can redirect certian traffic if it stops responding.
Sure, I could go firewall nazi and only allow ping from certain locations, but hell, it's only ping.
Not to say you MUST use it, but I find nothing particularly e
Re:Problems (Score:2)
thats not been my experience (Score:3, Informative)
Re:Problems (Score:2, Interesting)
I started using solely linux around 4 years ago. One of the first things I did was install apache and play around with that. I got it working with a little effort. After that I always built it from scratch. I eventually decided to try using apache out of the portage tree and it was set up as soon as I ran emerge and setup the configs in
Anyways I had to develop some webapp and my boss wante
Re:Problems (Score:2)
Are we talking about the same Apache webserver? (Score:4, Informative)
Maybe you missed the "documentation" section at the apache.org website? Or, do a google search for "linux apache howto". Tons of good stuff out there.
Apache on Linux requires you to spend 8 hours per day just to keep it up and running,
On what planet is this true? There's about 4 things to change from one webserver to another; you build one config file for your environment, and for the next one modify the listen, the user if you want, the document_root, and maybe servlet mapping if you're using that. Trivial and one-time.
and while its performance and security is fine if you have the time and staff for it, there is no way to just set it up and let it sit while installing patches when needed.
Our experience differs profoundly. Perhaps someone like you needs to hire someone like me to help you get set up. It's a trivial setup, configuration is well documented, and once it's up and running a webserver doesn't need any attention whatsoever until the next version comes out or you decide you want to change what it does. Arguing against Apache on actual factual grounds would be one thing, but "it's hard to set up and lots of work to keep running" is demonstrably false.
Re:Are we talking about the same Apache webserver? (Score:2)
Re:Problems (Score:2)
Re:Problems (Score:5, Informative)
Actually, for most of the configuration changes (short of an actual version upgrade or SSL cert change), you can do an 'apachectl graceful' and it applies your changes to the _new_ sessions, while letting the existing sessions close in the natural flow of the users' use of your site. Nice for minor tweaks on the fly during the day, with zero downtime.
Re:Problems (Score:2)
Re:Problems (Score:3, Informative)
Sigh, there are several ways to approach setting up an Apache server. All of them are easy.
First one is to start with an empty configuration file and then cut and past in portions of the standard file until you get a minimally working server.
The good part about this approach is that you get the least amount of bells and whistles added. Security via a small footprint is a good thing. The bad part about this approach is that you end up with a minimal server that may need more tweaking to get everythin
Re:Lead-in [OT, sorta] (Score:2)
Very briefly:
Who is nominative
Whom is accusative
Whose is genative/possessive
Whoms (should probably be whom's, if it were a real word) does not exist
I know I'll get flamed for being a grammar nazi, but whoms is such a very, very bad neologism...
Re:it should be secure out of the box (Score:2)
Dude! Shut the fuck up! I need to get a job when I'm out of college... if apache is 'secure by default' then what is stopping the janitor at my old high school from becoming an admin!
The more mysterious we keep the silicon, the more I get paid!
(