For power, simplicity, and price I suggest Monowall or PFSense.
Seconded, the m0n0wall and PFsense family usually provided everything you need. Just be wary if you're running this in a heavy usage environment as it's performance can start to suffer at 20Mb+ depending on ruleset optimisation and utilised features.
Can't think of anything better for small environments though.