Pfsense - Tor Proxy mit Anmeldung über Internet squid polipo

Aus znilwiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

Ich wollte einen Web-Proxy Server der

  • über das öffentliche Internet erreichbar ist
  • in das Tor-Netzwerk verbindet
  • eine vorherige Anmeldung erfordert
  • auf meiner pfSense-VM läuft (Version 2.2.5 zum Zeitpunkt der Erstellung dieses Artikels)


An der Lösung saß ich wieder einmal 2 bis 3h ... und wieder einmal gab es im Internet nicht einfach DIE Lösung so das ich mir mein eigenes Rezept gestrickt habe.



SSH Zugang auf pfSense freischalten

Leider kriegen wir nicht alles über das Webinterface hin, also schaltet SSH frei:

System -> Advanced -> Secure Shell

und setzt dort den Haken:

Proxy-Tor-pfSense-squid-polipo-001.png




Als root per SSH anmelden

Wir melden uns zum Beispiel per puTTY an der pfSense an.
Als Benutzernamen nehmt Ihr root mit dem Kennwort des Benutzers admin!
Ihr könnt euch zwar auch als admin anmelden aber dann wird manches umständlicher
Es erscheint folgendes Menü:

 0) Logout (SSH only)                  9) pfTop
 1) Assign Interfaces                 10) Filter Logs
 2) Set interface(s) IP address       11) Restart webConfigurator
 3) Reset webConfigurator password    12) pfSense Developer Shell
 4) Reset to factory defaults         13) Upgrade from console
 5) Reboot system                     14) Disable Secure Shell (sshd)
 6) Halt system                       15) Restore recent configuration
 7) Ping host                         16) Restart PHP-FPM
 8) Shell
Enter an option:

Dort wählen wir 8) die Shell:

[2.2.5-RELEASE][root@pfSenseDGHB.znil.local]/root:




pkg Paketmanager installieren

Ähnlich wie apt-get unter Ubuntu gibt es auch auf der pfSense einen Paketmanager mit dem Namen pkg, den müssen wir nur installieren.

pkg

Ausgabe:

The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]:

was wir dann mit y bestätigen:
Im Anschluss aktualisieren wir die Quellen:

pkg update




nano installieren

Von Ubuntu verwöhnt nutze ich zum editieren den nano den wir gleich als ersten Test installieren können:

pkg install nano




Tor installieren

Das notwendige Tor-Paket ist netterweise in den Quellen vorhanden, wir müssen uns nur das richtige heraussuchen:

pkg search tor- | grep Anonymizing

Ausgabe:

tor-0.2.6.10                   Anonymizing overlay network for TCP
tor-devel-0.2.6.7              Anonymizing overlay network for TCP

Das erste ist das neuere, das nehmen wir:

pkg install tor-0.2.6.10

Ausgabe:

Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
Updating database digests format: 100%
The following 2 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        tor: 0.2.6.10
        libevent2: 2.0.22_1

The process will require 8 MiB more space.
1 MiB to be downloaded.

Proceed with this action? [y/N]: y
Fetching tor-0.2.6.10.txz: 100%    1 MiB   1.3MB/s    00:01
Fetching libevent2-2.0.22_1.txz: 100%  258 KiB 264.0kB/s    00:01
Checking integrity... done (0 conflicting)
[1/2] Installing libevent2-2.0.22_1...
[1/2] Extracting libevent2-2.0.22_1: 100%
[2/2] Installing tor-0.2.6.10...
===> Creating users and/or groups.
Creating group '_tor' with gid '256'.
Creating user '_tor' with uid '256'.
[2/2] Extracting tor-0.2.6.10: 100%
Message from tor-0.2.6.10:
================================================================================
To enable the tor server, set tor_enable="YES" in your /etc/rc.conf
and edit /usr/local/etc/tor/torrc as desired. (However, note that the
/usr/local/etc/rc.d/tor rc.subr script can override some torrc
options: see that script for details.) To use the torify script, install
the net/torsocks port. After installing tor for the first time, or after
a major update of tor, you should:

rm -r /var/db/tor /var/run/tor
mkdir -p /var/db/tor/data /var/run/tor
touch /var/log/tor
chown -R _tor:_tor /var/db/tor /var/log/tor /var/run/tor
chmod -R 700 /var/db/tor
 
before starting the tor server. Tor users are strongly advised to prevent traffic
analysis that exploits sequential IP IDs by setting:

sysctl net.inet.ip.random_id=1

(see sysctl.conf(5)).
================================================================================

Nun führen wir die folgenden Befehle aus:

rm -r /var/db/tor /var/run/tor
mkdir -p /var/db/tor/data /var/run/tor
touch /var/log/tor
chown -R _tor:_tor /var/db/tor /var/log/tor /var/run/tor
chmod -R 700 /var/db/tor
sysctl net.inet.ip.random_id=1
echo "tor_enable=YES" >> /etc/defaults/rc.conf
cp /usr/local/etc/tor/torrc.sample /usr/local/etc/tor/torrc

Jetzt können wir noch die Konfiguration bearbeiten:

nano /usr/local/etc/tor/torrc

und suchen die Zeilen

#SocksPort 9050 # Default: Bind to localhost:9050 for local connections.
#SocksPort 192.168.0.1:9100 # Bind to this address:port too.

und ändern diese wie folgt ab:

SocksPort 9100 # Default: Bind to localhost:9050 for local connections.
SocksPort 192.168.1.1:9100 # Bind to this address:port too.

Die IP 192.168.1.1 müsst Ihr an eure interne IP anpassen.


Jetzt können wir den Tor Dienst starten:

/usr/local/etc/rc.d/tor start

Ausgabe:

Starting tor.
Dec 13 23:16:12.391 [notice] Tor v0.2.6.10 (git-58c51dc6087b0936) running on FreeBSD with Libevent 2.0.22-stable, OpenSSL 1.0.1l-freebsd and Zlib 1.2.8.
Dec 13 23:16:12.391 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Dec 13 23:16:12.392 [notice] Read configuration file "/usr/local/etc/tor/torrc".
Dec 13 23:16:12.398 [notice] You configured a non-loopback address '192.168.99.1:9100' for SocksPort. This allows everybody on your local network to use your machine as a proxy. Make sure this is  what you wanted.
Dec 13 23:16:12.399 [notice] You configured a non-loopback address '192.168.99.1:9100' for SocksPort. This allows everybody on your local network to use your machine as a proxy. Make sure this is  what you wanted.
Dec 13 23:16:12.400 [notice] Opening Socks listener on 127.0.0.1:9100
Dec 13 23:16:12.400 [notice] Opening Socks listener on 192.168.99.1:9100


So sieht das gut aus, machen wir den ersten kleinen Test im Webbrowser! Dazu nehme ich den Internet-Exporer und stelle bei diesem die IP und den Port unter

Einstellungen -> Verbindungen -> LAN Einstellungen

ein:

Proxy-Tor-pfSense-squid-polipo-002.png



Nun sollte eine Fehlermeldung kommen:

Proxy-Tor-pfSense-squid-polipo-003.png
Tor is not an HTTP Proxy


Prima! Alles in Ordnung! Den Proxy installieren wir nun im Anschluß!



Proxy polipo installieren

Für die pfSense gibt es zwar den squid (den wir auch noch nutzen werden) - aber leider kann squid nicht als Socks-proxy fungieren ... zu mindest nicht ohne extra neu kompiliert zu werden für die pfSense. Aber polipo kann das ganz prima:
Wieder suchen wir das richtige Paket:

pkg search polipo

Ausgabe:

polipo-1.1.1_1                 Small and fast caching web proxy

und Installieren:

pkg install polipo-1.1.1_1

und führen im Anschluß die folgenden Befehle aus:

echo "polipo_enable=YES" >> /etc/defaults/rc.conf
cp /usr/local/etc/polipo/config.sample /usr/local/etc/polipo/config

Jetzt können wir die Konfiguration bearbeiten:

nano /usr/local/etc/polipo/config

Wir suchen und ändern die folgenden Zeilen:

proxyAddress = "0.0.0.0"    # IPv4 only
allowedClients = 127.0.0.1, 192.168.1.0/24
diskCacheRoot = ""
socksParentProxy = "localhost:9100"
socksProxyType = socks5
dnsQueryIPv6 = no

Bei allowedClients müsst Ihr natürlich euer interes Netzwerk an der LAN Schnittstelle der pfSense eintragen!
Da wir bei proxyAddress nur 0.0.0.0 eingetragen haben lauscht der Proxy grundsätzlich auf allen IP-Adressen der pfSense. Trotzdem ist kein Zugriff von außen möglich! Die pfSense ist schließlich eine Firewall, ohne entsprechende Regel geht das nicht!
Die Zeile mit {{{1}}} sorgt übrigends dafür das keine lokalen Cache-Daten abgelegt werden (der Proxy cached also nichts).

Und nun können wir auch den polipo-Dienst starten:

/usr/local/etc/rc.d/polipo start

Dieser Proxy lauscht ab Werk auf den Port

8123

also ändern wir im Internet Explorer nun den Port auf diesen Wert und probieren es noch einmal:

Proxy-Tor-pfSense-squid-polipo-004.png


Nun sollte der Aufruf fast jeder beliebigen Seite funktionieren, geht aber doch mal auf die folgende:

https://check.torproject.org/?lang=de
Proxy-Tor-pfSense-squid-polipo-005.png


Alles Super! Wir surfen über Tor! Wenn auch mit einem unsicheren Browser ...

Aus dem interen Netzwerk können wir nun Tor als Proxy über Port 8123 nutzen ... nun, um diesen auch über das Internet nutzen zu können würde eine Firewall-Regel welches dieses erlaubt reichen.
Aber das wollte ich nicht. Ich will diesen Tor-Proxy nur für mich alleine nutzen und wollte deshalb eine Anmeldung an den Proxy davor setzen.

Leider kann das polipo nicht. Aber squid kann das!



squid installieren

So, auf der SSH Shell sind wir fertig, der Rest geht über die Weboberfläche der pfSense:

System -> Packages -> Available Packages -> Services -> squid
Proxy-Tor-pfSense-squid-polipo-006.png


Nach der Installation (die eine Weile dauert) gibt es einen neuen Menüpunkt unter Services:

Services -> Proxy server

Dort stellen wir die folgenden Dinge ein:

General

  • Unter Proxy interface markiert Ihr sowohl das LAN als auch das WAN Interface
  • Disable X-Forward markieren - schließlich soll niemand eure interne IP erfahren
  • Custom Options tragt Ihr die folgendende Zeile ein:
cache_peer 127.0.0.1 parent 8123 7 no-query no-digest;never_direct allow all;

Am 2. Teil hatte ich eine Weile gesucht ... ohne das never_direct allow all nimmt er nicht zuverlässig das Tor-Netzwerk!
Die Einstellung bedeutet das er IMMER das Tor-Netzwerk nimmt! geht das gerade nicht gibt es eine Fehlermeldung. Sonst hätte er es ohne Tor versucht was das ganze wieder absurdum führen würde

Proxy-Tor-pfSense-squid-polipo-007.png




Cache Mgmt

  • Wir wählen bei Hard disk cache system aus der Liste null - dadurch gibt es ebenfalls keine Cache-Dateien auf der Festplatten der pfSense
Proxy-Tor-pfSense-squid-polipo-008.png




Access Control

0.0.0.0/0

Den Zugriff regeln wir über Benutzername und Passwort!

Proxy-Tor-pfSense-squid-polipo-009.png




Auth Settings

  • Authentication method auf Local - andere gehen natürlich auch aber für einen Benutzer reicht das
Proxy-Tor-pfSense-squid-polipo-010.png




Local Users

Und hier müsst Ihr nun einen Benutzer anlegen:

Proxy-Tor-pfSense-squid-polipo-011.png




Test von Innen

Important.png

Hinweis: Wenn Ihr das alles gemacht habt ... geht einmal unter

Status -> Services
und startet den squid einmal neu. Insbesondere wenn er gleich meckert das Ihr eben nicht über das Tor-Netzwerk surft!

Und schon wieder ändern wir die Proxy-Einstellungen im Internet Explorer, diesmal auf den Port

3128

den Standardport von squid:
Es dann ein Anmeldfenster:

Proxy-Tor-pfSense-squid-polipo-012.png

in wlechen Ihr die Daten des eben angelegten Benutzers angebt.
Wieder die Tor-Testseite ansteuern:

https://check.torproject.org/?lang=de

Und immer noch solltet Ihr über das Tor Netzwerk surfen.



Freischaltung für den Zugriff von Außen

Der squid ist nur von Innen zu erreichen, mit einer neuen Firewall regel geht das auch von Außen:

Firewall -> Rules -> WAN

Und dort dann folgende neue Regel hinzufügen:

Proxy-Tor-pfSense-squid-polipo-013.png


Nun könnt Ihr in den Proxy Einstellungen auch die externe Adresse nutzen, zum Beispiel von Unterwegs mit dem Notebook.



Warnung: Der Browser!

Das ganz ist natürlich sinnfrei wenn Ihr dann zum Surfen eure normalen Browser verwendet bei denen Ihr am besten mit eurem Facebook, Google, Microsoft, Amazon Konto etc. angemeldet seit.
Dann habt Ihr zwar eine verschleierte IP-Adresse - und trotzdem kann jeder euch erkennen.

Ihr könnt den Tor-Browser nutzen: https://www.torproject.org/download/download-easy.html
Diesem könnt Ihr beim Start auch sagen das er euren Tor-Proxy nutzen soll (Verbindung über Proxy)



Anonymer Benutzer #1

6 Monaten zuvor
Punktzahl 0++
Erst Polipo und dann Squid it nicht so günstig, da man dann in allen Browsern die Weiterleitung zum Proxy eintellen muss. Besser ist Squid transparent über HTTP/HTTPS an Polipo weiterzuleiten, der dann SOCKS zu Tor draus macht. So surfen alle Teilernehmer des Netzes über Tor und können es nicht versehentlich umgehen (Squid in einer LAN-Firewall nutzen für alle). Nachteil: Manche Webseiten blocken Tor, speziell das pFSense-Forum. Man kann dann nicht mehr die Firewall umgehen und ohne Tor surfen. Das muss man dann abwägen was einem wichtiger ist: Alles sehen wollen oder Privatsphäre.
Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, registriere dich bitte oder melde dich an.