You might think about a Linux front-end that forwards only specific ports to your private network.
A simple iptables script is easy to implement provided your kernel supports NAT/Masquerade and the many other iptables handles.
Slackware with full installation is capable of using iptables.
Remember it takes 2 network interfaces. eth0 is my public and eth1 is private. Any machine connected to the private network can also access the internet. Photos can be found at
http://scolfax.us/pics of the network here. Email me with any questions.
Ok, now the good stuff-------->
Here's my firewall: /etc/rc.d/rc.firewall
echo 1 > /proc/sys/net/ipv4/ip_forward
# Setup default actions
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# Flush (-F) all specific rules
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -F -t nat
# Forwarding for TWGS and the web-based telnet client
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -i eth0 -d 0/0 --dport 23 -j ACCEPT
iptables -A FORWARD -p tcp -i eth1 -d 0/0 --dport 23 -j ACCEPT
iptables -A FORWARD -p tcp -i eth0 -d 0/0 --dport 15000 -j ACCEPT
iptables -A FORWARD -p tcp -i eth1 -d 0/0 --dport 15000 -j ACCEPT
iptables -A FORWARD -p tcp -i eth0 -d 0/0 --dport 15010 -j ACCEPT
iptables -A FORWARD -p tcp -i eth1 -d 0/0 --dport 15010 -j ACCEPT
# Permit packets in to firewall itself that are part of existing and related connections.
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow all inputs to firewall from the internal network and local interfaces
iptables -A INPUT -i eth1 -s 0/0 -d 0/0 -j ACCEPT
iptables -A INPUT -i lo -s 0/0 -d 0/0 -j ACCEPT
iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE
# Continuing TWGS rules --> This is where we forward the connections to internal box
iptables -A PREROUTING -t nat -p tcp -i eth0 -d 0/0 --dport 23 -j DNAT --to 192.168.0.41:23
iptables -A PREROUTING -t nat -p tcp -i eth0 -d 0/0 --dport 15000 -j DNAT --to 192.168.0.41:23
iptables -A PREROUTING -t nat -p tcp -i eth1 -d 0/0 --dport 15000 -j DNAT --to 192.168.0.41:23
iptables -A PREROUTING -t nat -p tcp -i eth0 -d 0/0 --dport 15010 -j DNAT --to 192.168.0.41:32000
iptables -A PREROUTING -t nat -p tcp -i eth1 -d 0/0 --dport 15010 -j DNAT --to 192.168.0.41:32000
# Deny any packet coming in on the public internet interface eth0
# which has a spoofed source address from our local networks
iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP
iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j DROP
iptables -A INPUT -i eth0 -s 98.172.178.51/32 -j DROP
# Drop all these llamas (also this is where you kill hacker's ip addys from ever reaching a port) #
# Handy to know the CIDR but you can make your own if you know what you're doing ##### #
iptables -A INPUT -i eth0 -s 216.75.0.0/18 -j DROP
iptables -A INPUT -i eth0 -s 71.41.84.120/32 -j DROP
iptables -A INPUT -i eth0 -s 220.240.0.0/16 -j DROP
# SSH
# SSH vanilla lets everybody connect to ssh port #
# DISABLED for security reasons (also notice ssh isnt on standard port 22)
#iptables -A INPUT -p tcp -s 0/0 -d 0/0 --dport 55555 --syn -j ACCEPT
# FTP # vanilla plus higher ports cuz transfers happen there esp c mac #
# notice we're not including port 55555 cuz thats our protected ssh port #
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --dport 21 --syn -j ACCEPT
iptables -A INPUT -p udp -s 0/0 -d 0/0 --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --dport 20 --syn -j ACCEPT
iptables -A INPUT -p udp -s 0/0 -d 0/0 --dport 20 -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --dport 1024:55550 --syn -j ACCEPT
iptables -A INPUT -p udp -s 0/0 -d 0/0 --dport 1024:55550 -j ACCEPT
# scolfax (the boss) needs to get in and access almost everything so here goes
iptables -A INPUT -p tcp -s 192.168.0.0/16 --dport 21:65535 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 98.172.178.54/32 --dport 21:65535 --syn -j ACCEPT
# SMTP defunct (mail moved elsewhere since 2004)
# iptables -A INPUT -p tcp -s 0/0 -d 0/0 --dport 25 --syn -j ACCEPT
# DNS & DHCP - soon to disappear - and they're gone lol
#iptables -A INPUT -p tcp --sport 68 --dport 67 -j ACCEPT
#iptables -A INPUT -p udp --sport 68 --dport 67 -j ACCEPT
#iptables -A INPUT -p udp -s 0/0 --sport 53 -d 0/0 --dport 1024:65535 -j ACCEPT
#iptables -A INPUT -p udp -s 0/0 --sport 53 -d 0/0 -j ACCEPT
#iptables -A INPUT -p udp -s 0/0 -d 0/0 --dport 53 -j ACCEPT
# Allow connects to apache server
iptables -A INPUT -p tcp -s 0/0 -d 98.172.178.51/32 --dport 80 --syn -j ACCEPT
# IDENT outgoing # arcti servercentral easynews blessed dks blackened #
# IDENT has been blocked because IRC connections from this machine are forbidden #
# Which is why they are all commented out. #
########## ### ### ### ### ##########
#iptables -A INPUT -p tcp -s 198.163.216.60/32 -d 0/0 --dport 113 --syn -j ACCEPT
#iptables -A INPUT -p tcp -s 208.247.17.2/32 -d 0/0 --dport 113 --syn -j ACCEPT
#iptables -A INPUT -p tcp -s 69.16.172.2/32 -d 0/0 --dport 113 --syn -j ACCEPT
#iptables -A INPUT -p tcp -s 66.225.225.225/32 -d 0/0 --dport 113 --syn -j ACCEPT
#iptables -A INPUT -p tcp -s 204.92.73.10/32 -d 0/0 --dport 113 --syn -j ACCEPT
#iptables -A INPUT -p tcp -s 198.175.186.5/32 -d 0/0 --dport 113 --syn -j ACCEPT
#iptables -A INPUT -p tcp -s 64.18.134.74/32 -d 0/0 --dport 113 --syn -j ACCEPT
#iptables -A INPUT -p tcp -s 208.51.40.2/32 -d 0/0 --dport 113 --syn -j ACCEPT
#iptables -A INPUT -p tcp -s 198.3.160.3/32 -d 0/0 --dport 113 --syn -j ACCEPT
#iptables -A INPUT -p tcp -s 64.161.255.2/32 -d 0/0 --dport 113 --syn -j ACCEPT
#iptables -A INPUT -p tcp -s 205.188.234.121/32 -d 0/0 --dport 113 --syn -j ACCEPT
# IDENT incoming - hybchat links (server->server) #
iptables -A INPUT -p tcp -s 72.20.37.227/32 -d 0/0 --dport 113 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 67.220.81.124/32 -d 0/0 --dport 113 --syn -j ACCEPT
# IDENT incoming - hybchat clients
iptables -A INPUT -p udp -s 0/0 -d 98.172.178.51/32 --sport 113 -j ACCEPT
# HybChat irc server, must let people connect
iptables -A INPUT -p tcp -s 0/0 -d 98.172.178.51/32 --dport 6665:6667 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d 98.172.178.51/32 --dport 9000 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d 98.172.178.51/32 --dport 6697 --syn -j ACCEPT
# Drop everything else
iptables -A INPUT -s 0/0 -d 0/0 -p udp -j DROP
iptables -A INPUT -s 0/0 -d 0/0 -p tcp --syn -j DROP
iptables -A INPUT -s 0/0 -d 0/0 -p all -j DROP