I have always been a huge fan of using GNU/Linux for building my own firewall boxes. First, old machines like Pentium II or Pentium III boxes are perfect for this. These boxes will easily run even the latest version of GNU/Linux. The Linux kernel itself has many functions built in for network routing, traffic shaping, bridging, virtual IP addresses, and just about anything else that a firewall needs to support. And the fact that Cisco now leverages the Linux kernel for its appliances tells me that even Cisco agrees.
The link for this article located at ZDNet Blogs is no longer available.