# HTTP Proxy

Today we will setup a HTTP proxy to tunnel OpenVPN client traffic over. We only
care about CentOS 7 at this stage.

## Server

Make sure you install Apache:

    $ sudo yum -y install httpd

Put the following configuration snippet in `/etc/httpd/conf.d/proxy.conf`:

    ProxyRequests On
    AllowConnect 1194

    <Proxy "*">
        Require valid-user
        AuthType Basic
        AuthBasicProvider file
        AuthUserFile "/etc/httpd/proxy-users"
        AuthName "Proxy"
    </Proxy>

Add user `foo` with password `bar` to the `proxy-users` file:

    $ htpasswd -B -b -c /etc/httpd/proxy-users foo bar

Make sure you allow Apache to connect to the network:

    $ setsebool -P httpd_can_network_connect=on

Enable and start Apache:

    $ sudo systemctl enable --now httpd

That's all!

## Client

**NOTE** this will all be over **HTTP**, so the password will be sent in 
plain text!

In your OpenVPN client configuration you can enable the `http-proxy` option. 
Make sure you only list "remotes" with the TCP protocol.

For example:

    remote vpn.tuxed.net 1194 tcp

    # ...

    http-proxy proxy.tuxed.net 80 basic

    <http-proxy-user-pass>
    foo
    bar
    </http-proxy-user-pass>

You can also use IP addresses. Currently the hostname do not work as IPv6 is 
again broken on the VM platform hosting `proxy.tuxed.net`.

Client log output when connecting using a proxy:

    Thu Jul  2 23:37:28 2020 Attempting to establish TCP connection with [AF_INET]145.100.181.81:80 [nonblock]
    Thu Jul  2 23:37:29 2020 TCP connection established with [AF_INET]145.100.181.81:80
    Thu Jul  2 23:37:29 2020 Send to HTTP proxy: 'CONNECT 116.203.195.80:1194 HTTP/1.0'
    Thu Jul  2 23:37:29 2020 Send to HTTP proxy: 'Host: 116.203.195.80'
    Thu Jul  2 23:37:29 2020 Attempting Basic Proxy-Authorization
    Thu Jul  2 23:37:30 2020 HTTP proxy returned: 'HTTP/1.0 200 Connection Established'
