Meine Idee ist es einen eigenen Proxy in meinem lokalen Netz zu betreiben und dann die Firewallregeln dahin gehend zu ändern, dass der Zugriff auf das Internet nur noch über den Proxy möglich ist. damit will ich die Zugriffe der inzwischen immer zahlreicher werdenden Internetfähigen Geräte besser kontrollieren können. Aber das Ganze wird in einem zweiten Schritt erfolgen. Als erstes soll der Proxy aufgesetzt werden und ich plane meine Workstation dann darüber mit dem Internet zu verbinden.

Da ich keinen weiteren Server betreiben will, sollte das Ganze als Container auf meinem existierenden NAS laufen. Es gibt kein offizielles Squid Image, aber es gibt zwei die bei der Suche auf Docker direkt gefunden werden:

  • Datadog, das allerdings auf dem zweiten Image von
  • sameersbn basiert. Beide basieren auf einem Ubuntu Base Image.
  • Weitere Möglichkeiten ein eigenes Image zu starten, das nicht unbedingt riesiggroß sein muss ist natürlich das Alpine Image und das im
  • Fedora Magazin beschriebene Fedora Minimal Image.

Ich wünsche mir schon ein möglicht kleines Image, wenn die Größe aber nicht wesentlich unterschiedlich ist, werde ich aber ein Fedora Basis Image bevorzugen, da ich mich mit Fedora einigermassen auskenne. Für die Beispiele hier auf der Seite benutze ich podman, da es aktuell ein Problem mit Docker und Fedora 31 gibt, und ich einfach keine Notwendigkeit habe die Defaults per Bootparameter anzupassen. Mit podman kann ich genauso wie mit Docker CLI Images pullen und anhand von Dockerfiles generieren. Ein Vorteil von podman ist, dass ich damit Container auch als non-root User erstellen und ausführen kann. In den allermeisten Fällen kann ich einfach docker durch podman in der Kommandozeile austauschen und alles funktioniert wie gewohnt:

podman pull alpine
podman pull ubuntu
podman pull fedora-minimal
podman pull sameersbn/squid
podman pull datadog/squid
podman pull fedora
podman pull fedora

Damit kann ich dann die Größen der verschiedenen Images gegenüber stellen

REPOSITORY                                  TAG      IMAGE ID       CREATED        SIZE
docker.io/library/alpine                    latest   cc0abc535e36   10 days ago    5.86 MB
docker.io/library/ubuntu                    latest   549b9b86cb8d   2 weeks ago    66.6 MB
registry.fedoraproject.org/fedora-minimal   latest   7bb5a60e8a78   2 months ago   167 MB
docker.io/library/fedora                    latest   f0858ad3febd   2 months ago   201 MB
docker.io/sameersbn/squid                   latest   a68a19f689c3   6 months ago   168 MB
docker.io/datadog/squid                     latest   861692bb9d22   8 months ago   213 MB

Ich gebe zu, dass ich ein wenig überrascht bin, dass der Unterschied zwischen fedora-minimal und fedora weniger als 40 MB sind, und dass das ubuntu Image nicht einmal halb so groß wie das fedora-minimal Image ist. Das alpine Image ist zwar größer als die versprochenen 5 MB, aber ist trotzdem weniger als 1 Zehntel der Größe des ubuntu Images. Die letzten beiden Images enthalten bereits squid, können also nicht unmittelbar verglichen werden. Den Unterschied zwischen den beiden letzten Images muss ich aber noch herausfinden. Für das zweite Image ist kein Dockerfile einsehbar.

Aber grundsätzlich macht es Sinn, Versuche mit dem alpine Image zu starten, denn kleiner geht es nicht, und das zu erzeugende Image benötigt auch keine weiteren Usertools um zu laufen.

Eine Beschreibung wie in Alpine Pakete installiert werden können findet sich hier, die Liste der verfügbaren Pakete für Alpine hier. Da es Squid bereits als Paket für Alpine gibt, sogar in aktueller Version 4.9 (am 06 November 2019 released), sollte der erste Schritt mit dem Image nicht sehr schwer sein:

# start with alpineimage
FROM alpine

#Install squid and clean the cache in the same step
RUN apk add squid && \
    rm -rf /var/cache/apk/*

Damit ist das neue Image 16.3 MB groß, was immer noch deutlich kleiner ist als auch nur die Basis Images von Fedora oder Ubuntu. In dem Image liegt squid dann unter /usr/sbin/squid. Jetzt fehlt noch die Konfig für die Volumes und den automatischen Programstart. Dazu komme ich in einem der nächsten Beiträge, hier nur noch ein paar Vorüberlegungen:

Soweit es dokumentiert ist, sind die folgenden Verzeichnisse für squid relevant:

  • /etc/squid: Konfiguration
  • /var/log/squid: Logfiles
  • /var/cache/squid: Cache

Alle Dateien, die einen Neustart des Containers überstehen sollen, müssen via Mount auf dem Hostsystem gemappt werden. Grundsätzlich macht es Sinn die Konfiguration vom Host zu nutzen, damit Änderungen daran den Neustart überstehen. Auch bei den Logfiles ist es sinnvoll diese auch über den Neustart hinweg zu behalten. Die Cachedateien dagegen können ruhig wieder aufgebaut werden.