Member of the VA Linux Affiliate Underground

Surfboard is a filtering HTTP 1.1 proxy. It features dynamic filter management through an interactive HTML console, IP tunneling, WindowMaker applets, and a suite of filters. See the Features page for details.

Who should use this? Surfboard is a "personal proxy", intended to be used by individuals rather than organizations. It's purpose is not to censor or monitor surfing activity, nor is it intended to implement caching within the proxy. Filters could be written to do these things, but it's not something I'm personally interested in doing, and it's already available in other proxies. My goal with surfboard is to make a proxy that covers new ground and let's you "surf in style" by adding visual feedback, interaction, and network load balancing to make websurfing more enjoyable.

Why another filtering proxy? A long time ago, I wanted a simple way to examine HTTP headers for a project I was working on. All the existing proxies I found were overkill for what I wanted, and were nontrivial to configure. So instead, I spent a lunch break writing a very simple proxy in Java that did everything I needed. Later I modified it to remove certain types of banner ads, but I was unhappy with the code -- it was ugly and difficult to maintain. I imagined that someday I would re-write it and "do it right", making everything dynamic with a browser-enabled console, some WindowMaker applets to visualize HTTP activity and to toggle filters on/off on the fly, etc. The typical second-system effect, in other words :-)

Surfboard is this re-written proxy, released under the GNU Public License.

It's written in Java? Won't that make it slow? Web surfing is inherently I/O bound rather than CPU bound, so no, you won't notice any slowdowns. All the "heavy" resources (like threads and filters) are pooled and cached internally, so it's pretty efficient. Since it makes use of persistent connections, both between browser->proxy and proxy->server, it won't introduce any significant connection latencies. Furthermore, data is always streamed through filters in a pipeline fashion, so pages will render incrementally in your browser as usual. And finally, it has some filters that deal with bandwidth metering that can be used to speed up your surfing if you have other kinds of network traffic going in the background, like Napster/Gnutella, etc.

Since it is written in Java, it is extremely easy to extend and enhance. New filters can be written in a matter of minutes by extending base classes, and can then be dynamically loaded into Surfboard and managed from the console (and applets) without even having to restart the proxy.

And by the way, only the proxy is written in Java; the WindowMaker applets are written in C and use HTTP to communicate with the proxy.