Pfsense - Tor Proxy mit Anmeldung über Internet squid polipo
Aus znilwiki
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:
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:
Nun sollte eine Fehlermeldung kommen:
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:
Nun sollte der Aufruf fast jeder beliebigen Seite funktionieren, geht aber doch mal auf die folgende:
https://check.torproject.org/?lang=de
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
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
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
Access Control
- Unter Vorlage:Allowed subnets tragen wir folgendes ein um den Zugriff von überall zu ermöglichen:
0.0.0.0/0
Den Zugriff regeln wir über Benutzername und Passwort!
Auth Settings
- Authentication method auf Local - andere gehen natürlich auch aber für einen Benutzer reicht das
Local Users
Und hier müsst Ihr nun einen Benutzer anlegen:
Test von Innen
Hinweis: Wenn Ihr das alles gemacht habt ... geht einmal unter
Status -> Servicesund 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:
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:
Nun könnt Ihr in den Proxy Einstellungen auch die externe Adresse nutzen, zum Beispiel von Unterwegs mit dem Notebook.
Warnung: Der Browser!
Das ganze ist natürlich sinn frei 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)