• Home
  • The Song
  • The Avatar
  • The Cat
  • Contact the Cat

Gyp the Cat dot Com

A Tinyproxy Transparent Installation on Ubuntu 12.04 with HTTPS Support
Business, Computers, internet

A Tinyproxy Transparent Installation on Ubuntu 12.04 with HTTPS Support

[alert style=”red”]Update: It appears as of June 2013 that the Ubuntu repositories now have compiled Tinyproxy with transparent support.  So unless you want to build from source for any other reason you may be better off following my tutorial on installing Tinyproxy on Ubuntu (just remember to change the default port numbers as appropriate).[/alert]

[alert style=”red”] If you want an easier way to get Tinyproxy working and don’t want to use transparent support try this post to install Tinyproxy on Ubuntu.[/alert]

The repositories for Ubuntu don’t have Transparent Support enabled for Tinyproxy.  Some firewalls and corporate installations need to use transparent proxies if they are internally redirecting.  This post will guide you through building Tinyproxy from source on Ubuntu 12.04 as a complete installation and working system.

I couldn’t find any decent guides out there on how to make this work, so I thought I’d put one together.  Hopefully my research will come in useful for someone else…  Warning this is a little more in-depth than my usual tutorials, but I promise it will be worth it in the end.

SSH onto your Ubuntu Box as normal, and lets install our compilers.

apt-get install build-essential

asciidoc is a requirement for Tinyproxy, but we don’t want to install it’s recommended updates (no thank you to 500Mb+ of other files…).

apt-get install asciidoc

We’ll build Tinyproxy in the recommended place on Ubuntu:

cd /usr/local/src

Download the tarball:

wget https://banu.com/pub/tinyproxy/1.8/tinyproxy-1.8.3.tar.bz2

Extract the aforementioned tarball:

tar xvjf tinyproxy-1.8.3.tar.bz2

Enter the directory we’ve just created:

cd tinyproxy-1.8.3

Lets run the configuration files with the all important “–enable-transparent” switch in there:

./configure –localstatedir=”/var” –sysconfdir=”/etc” –enable-xtinyproxy –enable-filter –enable-upstream –enable-reverse –enable-transparent –program-prefix=”” –enable-debug –program-suffix=””

Next one build up the libraries:

make

Now lets compile Tinyproxy:

make install

So far so good, now lets create the initialisation file so that Tinyproxy will start when we reboot the machine:

nano /etc/init.d/tinyproxy

Now paste the next whole file in Nano, please note that this text is taken directly from the Ubuntu repository:

#! /bin/sh
### BEGIN INIT INFO
# Provides: tinyproxy
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Tinyproxy HTTP proxy
# Description: Start, stop or reload tinyproxy.
### END INIT INFO
#
# Tinyproxy init.d script
# Ed Boraas 1999
#

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
CONFIG=/etc/tinyproxy.conf
DAEMON=/usr/sbin/tinyproxy
DESC=tinyproxy
FLAGS=
NAME=tinyproxy

if [ -r /etc/default/tinyproxy ]; then
. /etc/default/tinyproxy
fi

test -f $DAEMON || exit 0

set -e

# assert pidfile directory and permissions
if [ “$1” != “stop” ]; then
if [ -f “$CONFIG” ]; then
USER=$(grep -i ‘^User[[:space:]]’ “$CONFIG” | awk ‘{print $2}’)
GROUP=$(grep -i ‘^Group[[:space:]]’ “$CONFIG” | awk ‘{print $2}’)
PIDFILE=$(grep -i ‘^PidFile[[:space:]]’ “$CONFIG” | awk ‘{print $2}’ |\
sed -e ‘s/”//g’)
PIDDIR=`dirname “$PIDFILE”`
if [ -n “$PIDDIR” -a “$PIDDIR” != “/var/run” ]; then
if [ ! -d “$PIDDIR” ]; then
mkdir “$PIDDIR”
fi
if [ “$USER” ]; then
chown “$USER” “$PIDDIR”
fi
if [ “$GROUP” ]; then
chgrp “$GROUP” “$PIDDIR”
fi
fi
fi
fi
case “$1” in
start)
echo -n “Starting $DESC: ”
start-stop-daemon –start –quiet -o –exec $DAEMON — $FLAGS
echo “$NAME.”
;;
stop)
echo -n “Stopping $DESC: ”
start-stop-daemon –stop –quiet -o –exec $DAEMON
echo “$NAME.”
;;
reload|force-reload)
echo “Reloading $DESC configuration files.”
start-stop-daemon –stop –signal 1 –quiet -o –exec $DAEMON
;;
restart)
echo -n “Restarting $DESC: ”
start-stop-daemon –stop –quiet -o –exec $DAEMON
sleep 1
start-stop-daemon –start –quiet -o –exec $DAEMON — $FLAGS
echo “$NAME.”
;;
*)
N=/etc/init.d/$NAME
echo “Usage: $N {start|stop|restart|reload|force-reload}” >&2
exit 1
;;
esac

exit 0

[ctrl]+o to save, then [ctrl]+x to exit.

Now let’s make the file executable:

chmod +x /etc/init.d/tinyproxy

Now we need to add the user account that we’ll be running Tinyproxy as:

useradd -r -m tinyproxy

Lets give the user account a group, services get lonely if they’re not in a group:

usermod -G tinyproxy -a tinyproxy

Now we need to make the appropriate directories for Tinyproxy to run in:

mkdir /var/log/tinyproxy && mkdir /var/run/tinyproxy && touch /var/log/tinyproxy/tinyproxy.log

Lets make sure our Tinyproxy user can use the directories we’ve just created:

chown tinyproxy:tinyproxy /var/log/tinyproxy/ /var/run/tinyproxy /usr/sbin/tinyproxy

Now let’s make it so Ubuntu will call Tinyproxy on startup:

update-rc.d tinyproxy defaults 02 02

Since we’re running transparently, we’ll need to forward the HTTPS port to the HTTP port on the server:

iptables -t nat -A PREROUTING -p tcp –destination-port 443 -j REDIRECT –to-ports 80

Lets create a save file for the above rule:

sh -c “iptables-save > /etc/iptables.rules”

Now we need to make sure the rules are read on startup, we do this by editing the network interfaces file:

nano /etc/network/interfaces

Underneath the interface you want to use for Tinyproxy paste the following onto it’s own line:

pre-up iptables-restore < /etc/iptables.rules

[ctrl]+o to save, and [ctrl]+x to exit.

Now we need to change the config file for Tinyproxy to reflect all the changes we have made:

nano /etc/tinyproxy.conf

I’ll only focus on the bits we need for this tutorial.  Change the following section:

#
# User/Group: This allows you to set the user and group that will be
# used for tinyproxy after the initial binding to the port has been done
# as the root user. Either the user or group name or the UID or GID
# number may be used.
#
User nobody
Group nobody

To:

#
# User/Group: This allows you to set the user and group that will be
# used for tinyproxy after the initial binding to the port has been done
# as the root user. Either the user or group name or the UID or GID
# number may be used.
#
User tinyproxy
Group tinyproxy

Since we’ve gone to all this effort to build Tinyproxy with transparent support you’ll probably want to change this section:

#
# Port: Specify the port which tinyproxy will listen on. Please note
# that should you choose to run on a port lower than 1024 you will need
# to start tinyproxy using root.
#
Port 8888

To:

#
# Port: Specify the port which tinyproxy will listen on. Please note
# that should you choose to run on a port lower than 1024 you will need
# to start tinyproxy using root.
#
Port 80

Uncomment the PID line:

#
# PidFile: Write the PID of the main tinyproxy thread to this file so it
# can be used for signalling purposes.
#
#PidFile “/var/run/tinyproxy/tinyproxy.pid”

Uncomment the PID line:

#
# PidFile: Write the PID of the main tinyproxy thread to this file so it
# can be used for signalling purposes.
#
PidFile “/var/run/tinyproxy/tinyproxy.pid”

Change (or uncomment) the Allow rules as per your own network:

#
# Allow: Customization of authorization controls. If there are any
# access control keywords then the default action is to DENY. Otherwise,
# the default action is ALLOW.
#
# The order of the controls are important. All incoming connections are
# tested against the controls based on order.
#
Allow 127.0.0.1
Allow 192.168.0.0/24

That’s it, [crl]+o to save, and [ctrl]+x to exit.

Right now we have built Tinyproxy from source.  If you’ve got this far without any problems then you deserve a big well done!

Now, you can either start the Tinyproxy service:

service tinyproxy start

Or reboot the server to make sure all our efforts have been a success:

shutdown -r now

You can test by putting the server address in your proxy settings as usual, or by pushing traffic through it.

Is there anything I’ve left out?  Or anything wrong?  Anything could be done differently better?  Let me know in the comments.

Related

Written by gyp - October 8, 2012 - 11585 Views
Tags | business, internet, linux, proxy, security, tinyproxy, ubuntu

You Might Also Like

ISC(2) CISSP Revision Notes – Access Control

November 25, 2013

Public DNS Servers

September 26, 2015

IPSec VPN Host to Host on Windows 2012 R2 and Ubuntu 14.04

July 25, 2015

4 Comments

  • a a June 21, 2013 at 12:00 pm

    You need full asciidoc in 12.04, otherwise build fails at generating man pages.

    Reply
    • gyp June 21, 2013 at 9:58 pm

      Thanks for the tip, I’ve tested and updated the main post 🙂 Thanks again.

      Reply
  • dimzon July 3, 2013 at 11:13 pm

    me@nas:/usr/local/src/tinyproxy-1.8.3$ sudo ./configure –enable-xtinyproxy –enable-filter –enable-upstream –enable-reverse –enable-transparent –program-prefix=”” –enable-debug -enable-socks –program-suffix=””
    configure: WARNING: you should use –build, –host, –target
    configure: WARNING: invalid host type: –enable-xtinyproxy
    configure: WARNING: you should use –build, –host, –target
    configure: WARNING: invalid host type: –enable-filter
    configure: WARNING: you should use –build, –host, –target
    configure: WARNING: invalid host type: –enable-upstream
    configure: WARNING: you should use –build, –host, –target
    configure: WARNING: invalid host type: –enable-reverse
    configure: WARNING: you should use –build, –host, –target
    configure: WARNING: invalid host type: –enable-transparent
    configure: error: invalid variable name: `–program-prefix’
    me@nas:/usr/local/src/tinyproxy-1.8.3$ uname -a
    Linux nas 3.2.0-39-generic #62-Ubuntu SMP Wed Feb 27 22:05:17 UTC 2013 i686 i686 i386 GNU/Linux

    Reply
    • gyp July 4, 2013 at 6:07 pm

      Hi Dimzon,

      Try:

      sudo ./configure –enable-xtinyproxy –enable-filter –enable-upstream –enable-reverse –enable-transparent –program-prefix=”” –enable-debug –enable-sock –program-suffix=””

      Sorry I can’t test it from my end, no where near a Linux box at the moment.

      Hmmm, it doesn’t appear that the — is showing correctly (and probably won’t copy and paste), before each switch it’s suppose to be two minus signs together “- -” (without the space).

      Gyp

      Reply

    Please Post Your Comments & Reviews
    Cancel reply

    Your email address will not be published. Required fields are marked *

    Previous Post
    Next Post

    Latest Posts

    • How to Convert CSV to Parquet Easily with Python on Linux Shell
    • Kusto Geolocation IP Lookup
    • Monitoring Tor Usage in Azure Sentinel, ASC, MDATP and ALA
    • HTTP to HTTPS Redirect on Azure CDN
    • Strongswan IPSec (Including Cryptomap) to Microsoft Azure Virtual Network Gateway
    • Black Ops 3 NAT Type Strict & PS4 NAT Type 3 with pfSense Fixed!
    • Sorry for the lack of posts
    • How to Block Internet Access with Group Policy (GPO)
    • Enforcing Microsoft Office 365 and Azure Tennancy with McAfee Web Gateway (MWG)
    • Scanning Subnet for Issuing Certificate Authority with OpenSSL

    Top Posts & Pages

    • How to Block Internet Access with Group Policy (GPO)
      How to Block Internet Access with Group Policy (GPO)
    • How to Configure Windows 2012 NPS for Radius Authentication with Ubiquiti Unifi
      How to Configure Windows 2012 NPS for Radius Authentication with Ubiquiti Unifi
    • Kusto Geolocation IP Lookup
      Kusto Geolocation IP Lookup
    • Tinyproxy A Quick and Easy Proxy Server on Ubuntu
      Tinyproxy A Quick and Easy Proxy Server on Ubuntu
    • Monitoring Tor Usage in Azure Sentinel, ASC, MDATP and ALA
      Monitoring Tor Usage in Azure Sentinel, ASC, MDATP and ALA
    • How to DNSPerf on Ubuntu 14.04 with Installation and Quick Start
      How to DNSPerf on Ubuntu 14.04 with Installation and Quick Start
    • How to Add Different Disclaimers using alterMIME and Postfix based on Domain
      How to Add Different Disclaimers using alterMIME and Postfix based on Domain
    • Blocking Countries on Nginx without the GeoIP Module
      Blocking Countries on Nginx without the GeoIP Module
    • How to Enable Squid Anonymous Stealth Mode
      How to Enable Squid Anonymous Stealth Mode
    • Configuring Suite B, VPN-A and VPN-B in IPSec with Strongswan
      Configuring Suite B, VPN-A and VPN-B in IPSec with Strongswan

    Tags

    apache2 azure azure log analytics blops business centos cheating cissp cloudflare cryptography dns game google gyp internet iphone ipsec isc linux mac marketing microsoft mw2 mx mysql nginx pfsense postfix proxy ps3 qualification radius revision security seo smtp socks squid ssh strongswan tinyproxy ubuntu windows 2012 wordpress xdecrypt.com
    Gyp the Cat dot Com

    Some rights retained Gyp the Cat Dot Com