Using ssh to protect web browsing over wireless or other hostile networks
This really could be used to encyrpt web traffic over any “hostile” network. Here’s what I’m talking about. Laptop using wireless. Within our internal network we would LIKE all our web traffic to be encrypted at least from the laptop to a wired host. (From there to the outside world it will be open.) At the minimum we would like to have the traffic encrypted over the wireless leg of the journey. Here’s the most straightforward approaches uing ssh.
OK, from the laptop, we use…. ssh -D 8080 username@machinewithinwirednetwork
(You can choose a port other than 8080) It is possible to setup this with putty ssh as well. If you don’t want a command shell add the -N switch to the above.
What this does is set’s up a socks proxy on the local machine at port 8080 and does dynamic port forwarding to “machinewithinwirednetwork”. Of course, the example above is a wireless user, but you could just the same tunnel traffic to your home network from a wireless access point somewhere out in the world, or to a server elsewhere. Basically anywhere you have ssh access can act as a poxy.
Anyway, that much done, we need to configure our web browser to use it. Firefox will be a straightforward example. Open firefox and then go to edit… preferences (Windows users may find this in the tools…. options menu IIRC) and select “connection settings” next choose the radio button next to “manual proxy configuration”. Now, where it says “Socks host” enter localhost and for the port number use what was specified above (8080). My current setup works as Socks 5, but if you run into problems you may need to tell it to use socks 4. Let’s leave it at Socks v5 and click apply and ok. Assuming that you’ve got your tunnel started already you should be able to browse through the other host.
One thing I use to test it is visiting my IP check page, mainly because I’ve included a field to echo the INTERNAL lan address as well as the INTERNET address. This way I can see if it looks like I’m browsing from 192.168.5.200 or 192.168.5.20 (as well as the usual external IP.)
Of course if you’ve tunneled out through the internet to another computer you can use something like whatismyip.com or some similar page. This can be a useful technique for working on /testing a webpage when the DNS is first propogating. Some networks may have current DNS information before others and you can tunnel traffic to a host that knows where the machine is (of course you could put it in a hosts file too, but that’s too easy….)
It’s important to have a basic understanding of WHERE the data is encrypted and WHERE it is sent in the clear in a setup like this. Of course, https should be encrypted between the client machine and the server no matter what path it takes, but http over a tunnel like this is ONLY encrypted for the length of the tunnel (in this case from the laptop to “machinewithinwirednetwork”). From “machinewithinwirednetwork” out to the world, the traffic is unencrypted as usual.
Of course, it’s possible to use this to protect OTHER data channels (mail) as well. Another common method to do this is using specific port forwards, with a specific port forward to encrypt web traffic you need a proxy server running at the other machine which adds more layers to setup.