[LINUX] [https-Proxy mit Tintenfisch] So stellen Sie eine Whitelist von https mit url_regex dar

Einführung

Ich habe versucht, eine Whitelist für den https-Proxy zu erstellen, der ssl abfängt. Die zu verwendende Umgebung ist die folgende, die beim letzten Mal erstellt wurde. ** Proxy mit Active Directory-Verknüpfung und SSL-Abfangen mit Squid mit Docker einfach erstellen **

Kurz gesagt, was soll ich tun?

Die Whitelist- und Blacklist-URLs werden wie folgt durch url_regex dargestellt.

** Bei der Darstellung einer bestimmten Domain, einschließlich Subdomains ** Das folgende Beispiel zeigt eine Domain namens qiita.com, die Subdomains enthält.

whitelist


^(https*://)*([^/][^/]*\.)*qiita\.com(:443|:80)*(/.*)*$

** Bei der Darstellung einer bestimmten Domain, einschließlich Subdomains. Wenn Sie also mehrere Domain-Strings zusammenstellen möchten, die etwas gemeinsam haben ** Das folgende Beispiel zeigt eine Domain namens slack.com oder slack-edge, com, die Subdomains enthält.

whitelist


^(https*://)*([^/][^/]*\.)*slack(-edge)*\.com(:443|:80)*(/.*)*$

Bereiten Sie die obige Whitelist als Textdatei vor und laden Sie sie als url_regex unter squid.com.

squid.com


acl whitelist  url_regex -i "/etc/squid/whitelist"
http_access allow whitelist

Der Prozess, einen Weg zum Schreiben zu finden

Beispiel: für qiita.com

Wenn Sie nur fqdn auf die Whitelist setzen, werden Sie mit einer schädlichen Site verbunden.

Angenommen, Sie schreiben dies in Ihre Whitelist:

whitelist


qiita\.com

Dies würde jedoch übereinstimmen, wenn der vollständige Pfad oder die Subdomain dieselbe Zeichenfolge hätte.

match_url


https://example.com/qiita.com/exploit.js
https://qiita.com.example.com/exploit.js

Warum schreiben Sie dies dann nicht unter Verwendung der Kontinuität des ersten Protokolls, um einen bestimmten Domänennamen, einschließlich Subdomänen, zuzulassen?

whitelist


^https*://([^/][^/]*\.)*qiita\.com/

Das war nicht gut. Vielleicht, um ein Zertifikat zu erhalten, versuche ich zuerst, eine Verbindung zu qiita.com: 443 herzustellen.

squid_log


 TCP_DENIED/407 4054 CONNECT qiita.com:443 - HIER_NONE/- text/html
 TCP_DENIED/407 4424 CONNECT qiita.com:443 - HIER_NONE/- text/html
 TCP_DENIED/200 0 CONNECT qiita.com:443 PROSPER2\\USERNAME HIER_NONE/- -

Betrachten wir das Protokoll und die Portnummer in der vorherigen Regel. Wenn es sich um HTTP handelt, können Sie auch dann kommunizieren, wenn Sie Folgendes eingeben: 80. Der Anfang der Zeichenfolge wird mit oder ohne Protokollnotation abgeglichen, und das Ende des vollqualifizierten Domänennamens wird mit oder ohne Portnummer abgeglichen.

whitelist


^(https*://)*([^/][^/]*\.)*qiita\.com(:443|:80)*/

Es war immer noch nutzlos. Es hat sich nicht geändert. Es endet mit einer Portnummer, sodass der letzte Schrägstrich im Weg ist und nicht übereinstimmt.

squid_log


 TCP_DENIED/407 4054 CONNECT qiita.com:443 - HIER_NONE/- text/html
 TCP_DENIED/407 4424 CONNECT qiita.com:443 - HIER_NONE/- text/html
 TCP_DENIED/200 0 CONNECT qiita.com:443 PROSPER2\\USERNAME HIER_NONE/- -

Zusätzlich zur vorherigen Regel gibt es einen Schrägstrich oder keinen Schrägstrich, und die Portnummer oder der vollqualifizierte Domänenname befindet sich am Ende der Zeichenfolge. Und sagte.

whitelist


^(https*://)*([^/][^/]*\.)*qiita\.com(:443|:80)*(/.*)*$

Die Root-Site konnte die Kommunikation sowohl unter https: // qiita.com / als auch unter der Subdomain-Site unter https: // zine.qiita.com / bestätigen. Vielleicht ist das in Ordnung.

Beispiel: für slack.com

Lassen wir auch Slack-Sites zu.

whitelist


^(https*://)*([^/][^/]*\.)*slack\.com(:443|:80)*(/.*)*$

Wenn man es mit einem Browser betrachtet, ist es auf halbem Weg. Screenshot from Gyazo

Wenn ich mir das Protokoll ansehe, werde ich mit slack-edge.com kommunizieren.

squid_log


 TCP_DENIED/407 4082 CONNECT a.slack-edge.com:443 - HIER_NONE/- text/html
 TCP_DENIED/407 4452 CONNECT a.slack-edge.com:443 - HIER_NONE/- text/html
 TCP_DENIED/407 4082 CONNECT a.slack-edge.com:443 - HIER_NONE/- text/html
 TCP_DENIED/200 0 CONNECT a.slack-edge.com:443 PROSPER2\\USERNAME HIER_NONE/- -

Dies bedeutet, dass auf den String-Durchhang der String-Rand ** oder ** nicht ** folgen sollte.

whitelist


^(https*://)*([^/][^/]*\.)*slack(-edge)*\.com(:443|:80)*(/.*)*$

Versuchen wir es noch einmal mit einem Browser. Screenshot from Gyazo Ja, das sieht okay aus.

schließlich

** Es ist viel einfacher, dstdomain für Whitelists und Blacklists zu verwenden ** Ich habe jedoch auch versucht, reguläre Ausdrücke durch Versuch und Irrtum zu studieren.

Recommended Posts

[https-Proxy mit Tintenfisch] So stellen Sie eine Whitelist von https mit url_regex dar
So erstellen Sie einen HTTPS-Server mit Go / Gin
Wie aktualisiere ich mit SQLAlchemy?
Wie man mit Theano besetzt
Wie mit SQLAlchemy ändern?
So trennen Sie Zeichenfolgen mit ','
Wie man RDP auf Fedora31 macht
Wie lösche ich mit SQLAlchemy?
So brechen Sie RT mit tweepy ab
Python: So verwenden Sie Async mit
So verwenden Sie virtualenv mit PowerShell
So installieren Sie Python-Pip mit Ubuntu20.04LTS
Umgang mit unausgeglichenen Daten
Wie fange ich mit Scrapy an?
Erste Schritte mit Python
Umgang mit dem DistributionNotFound-Fehler
Wie fange ich mit Django an?
Aufblasen von Daten (Datenerweiterung) mit PyTorch
So berechnen Sie das Datum mit Python
So installieren Sie den MySQL-Connector mit pip3
So verbinden Sie INNER mit SQL Alchemy
So installieren Sie Anaconda mit pyenv
Richten Sie mit CentOS Linux 8 + Apache mod_ssl einen Reverse-Proxy für den https-Server ein
[https-Proxy mit Tintenfisch] Vermeiden Sie das Lesen von Slack-Nachrichten, da es sich um einen Web-Socket handelt.
So führen Sie eine arithmetische Verarbeitung mit der Django-Vorlage durch
[Blender] So legen Sie shape_key mit dem Skript fest
Wie man mit matplotlib mehrere Figuren betitelt
So erhalten Sie die Eltern-ID mit sqlalchemy
So fügen Sie ein Paket mit PyCharm hinzu
So installieren Sie DLIB mit aktiviertem 2020 / CUDA
Verwendung von ManyToManyField mit Djangos Admin
Verwendung von Cmder mit PyCharm (Windows)
So verhindern Sie Paketaktualisierungen mit apt
So arbeiten Sie mit BigQuery in Python
Wie man Ass / Alembic mit HtoA benutzt
Umgang mit Enum-Kompatibilitätsfehlern
Verwendung von Japanisch mit NLTK-Plot
Wie man einen Taschentest mit Python macht
So suchen Sie in Google Colaboratory nach Google Drive
So zeigen Sie Python-Japanisch mit Lolipop an
So laden Sie YouTube-Videos mit youtube-dl herunter
So schalten Sie Linux unter Ultra96-V2 aus
Verwendung des CUT-Befehls (mit Beispiel)
Wie man mit Python-Flüchen Japanisch eingibt
So installieren Sie zsh (mit .zshrc-Anpassung)
Wie man Problemdaten mit Paiza liest
Verwendung von SQLAlchemy / Connect mit aiomysql
So gruppieren Sie Volumes mit LVM
So installieren Sie Python3 mit Docker Centos
Verwendung des JDBC-Treibers mit Redash
[https Proxy mit Tintenfisch] Beheben Sie den Fehler, der mit einem zu kleinen Dh-Schlüssel aufgetreten ist
So löschen Sie vergangene Tweets mit Tweepy selektiv
Hochladen mit Heroku, Flask, Python, Git (4)
Umgang mit Speicherlecks in matplotlib.pyplot
Erstellen von CSV-Beispieldaten mit Hypothese