The best way to do this is a Dynamic Range Compressor. Audacity has one built-in, under "Filters->Compressor."
This is, essentially, a program that removes the range between quiet sounds and loud sounds. It's surprisingly easy to use.
Set the "Threshold" value to something very low. Set the "Noise floor" to around -30DB. Set the ratio to a very high fraction -- Most of the time, I max it out at 10:1. Then check the "make-up gain for 0db" box.
Set both the attack and decay time to the lowest possible values. These are useful when applying compressors to music, but for speech, they just make it sound weird.
Here's an example. I made a quick audio file, which contains myself speaking both very softly, and very loudly (using the Windows version because I happened to be booted into Windows while answering this, but the compressor interface is almost exactly the same on all platforms):
Now, I apply the "Compressor" filter to it:
And, viola, the quiet parts and the loud parts are roughly the same volume.