SBN

PolarProxy in Docker

PolarProxy + Docker

Our transparent TLS proxy
PolarProxy is gaining lots of popularity
due to how effective it is at generating decrypted PCAP files in combination with how easy it is to deploy.
In this blog post we will show how to run PolarProxy in Docker.

Installation Instructions

Create a Dockerfile with the following contents:

FROM mcr.microsoft.com/dotnet/core/runtime:2.2
EXPOSE 10443
EXPOSE 10080
EXPOSE 57012

RUN
groupadd -g 31337 polarproxy &&
useradd -m -u 31337 -g polarproxy polarproxy &&
mkdir -p /var/log/PolarProxy /opt/polarproxy &&
chown polarproxy:polarproxy /var/log/PolarProxy &&
curl -s https://www.netresec.com/?download=PolarProxy | tar -xzf – -C /opt/polarproxy
VOLUME [“/var/log/PolarProxy/”, “/home/polarproxy/”]USER polarproxy
WORKDIR /opt/polarproxy/
ENTRYPOINT [“dotnet”, “PolarProxy.dll”]CMD [“-v”, “-p”, “10443,80,443”, “-o”, “/var/log/PolarProxy/”, “–certhttp”, “10080”, “–pcapoverip”, “0.0.0.0:57012”]

Save the Docker file as “Dockerfile” (no extension) in an empty directory and start a shell in that directory with root privileges.
Build the PolarProxy Docker image with:

docker build -t polarproxy-image .

Next, create a Docker container named “polarproxy”:

docker create -p 443:10443 -p 10443:10443 -p 10080:10080 –name polarproxy polarproxy-image

The “-p” switches in this command define three DNAT rules that will get activated when the polarproxy container is started. The first DNAT rule forwards incoming TCP port 443 traffic to the polarproxy Docker container’s transparent TLS proxy service on TCP port 10443. The second one does the same thing, but for incoming traffic to TCP 10443. The last one forwards TCP port 10080 traffic to a web server that delivers the public X.509 certificate of the proxy.

It is now time to start the polarproxy container:

docker start polarproxy

Verify that PolarProxy is running:

docker ps
docker logs polarproxy

Try fetching PolarProxy’s public root CA certificate with curl and then connect to a website over HTTPS through the proxy:


curl -sL http://localhost:10080 | openssl x509 -inform DER -issuer -noout -dates


curl –insecure –connect-to www.netresec.com:443:127.0.0.1:10443 https://www.netresec.com/


curl –insecure –resolve www.netresec.com:443:127.0.0.1 https://www.netresec.com/

Redirect HTTPS and Trust the Root CA

You can now redirect outgoing TCP 443 traffic from your network to your Docker host.
Review the “Routing HTTPS Traffic to the Proxy” section on the
PolarProxy page for recommendations on how to redirect outgoing traffic to PolarProxy.

Finally, configure the operating system, browsers and other applications that will get their TLS traffic proxied by PolarProxy
to trust the root CA of the PolarProxy service running in your Docker container.
Follow the steps in the “Trusting the PolarProxy root CA” section of the
PolarProxy documentation in order to install the root cert.

Docker Volumes

The Docker file we used in this blog post defines two volumes.
The first volume is mounted on “/var/log/PolarProxy” in the container,
which is where the decrypted network traffic will be stored as hourly rotated PCAP files.
The second volume is the polarproxy home directory, under which PolarProxy will store its private root CA certificate.

The volumes are typically located under “/var/lib/docker/volumes” on the Docker host’s file system.
You can find the exact path by running:

docker volume ls
docker volume inspect <VOLUME_NAME>

Or use find to list *.pcap files in the Docker volumes directory:

find /var/lib/docker/volumes/ -name *.pcap
/var/lib/docker/volumes/7ebb3f56fd4ceab96[…]/_data/​proxy-201006-095937.pcap/var/lib/docker/volumes/7ebb3f56fd4ceab96[…]/_data/​proxy-201006-105937.pcap/var/lib/docker/volumes/7ebb3f56fd4ceab96[…]/_data/​proxy-201006-115937.pcap

The full path of your private PolarProxy Root CA certificate, which is located under “/home/polarproxy/” in the Docker container, can also be located using find:

find /var/lib/docker/volumes/ -name *.p12
/var/lib/docker/volumes/dcabbbac10e1b1461[…]/_data/​.local/share/PolarProxy/​e249f9c497d7b5c41339f153a31eda1c.p12

We recommend reusing the “/home/polarproxy/” volume, when deploying new PolarProxy instances or upgrading to a new version of PolarProxy,
in order to avoid having to re-configure clients to trust a new root CA every time a new PolarProxy container is created.

PolarProxy in Docker on ARM Linux

PolarProxy can also run on ARM Linux installations, such as a Raspberry Pi.
However, the Dockerfile must be modified slightly in order to do so.

ARM 32-bit / AArch32 / ARMv7


If you’re running an “arm32” Linux OS, then change the download link in the “RUN” instruction to the following URL:

https://www.netresec.com/?download=PolarProxy_linux-arm

ARM 64-bit / AArch64 / ARMv8


If you’re running an “arm64” Linux OS, then change the download link in the “RUN” instruction to the following URL:

https://www.netresec.com/?download=PolarProxy_linux-arm64


Don’t know if you’re running a 32-bit or 64-bit OS?
Run “uname -m” and check if the output says “armv7*” (arm32) or “armv8*” (arm64).

See our blog post “Raspberry PI WiFi Access Point with TLS Inspection” for more details about deploying PolarProxy on a Raspberry Pi (without Docker).

Credits

We’d like to thank Jonas Lejon for contacting us back in February
about the work he had done to get PolarProxy running in Docker.
We used Jonas’ work as a starting point when building the installation instructions in this how-to guide.

We also want to thank Erik Ahlström for providing valuable feedback on the instructions in this guide.

ʕ•ᴥ•ʔ + 🐳 = 💜

Facebook Share on Facebook  Twitter Tweet  Reddit Submit to reddit.com


*** This is a Security Bloggers Network syndicated blog from NETRESEC Network Security Blog authored by Erik Hjelmvik. Read the original post at: https://www.netresec.com/?page=Blog&month=2020-10&post=PolarProxy-in-Docker