[LINUX] [proxy https avec squid] Comment représenter une liste blanche de https avec url_regex

introduction

J'ai essayé de créer une liste blanche à utiliser avec le proxy https qui intercepte ssl. L'environnement à utiliser est le suivant qui a été créé la dernière fois. ** Créez facilement un proxy pour la liaison Active Directory et l'interception SSL avec squid avec docker **

Bref, que dois-je faire?

Les URL de liste blanche et de liste noire sont représentées par url_regex comme suit.

** Lors de la représentation d'un domaine spécifique, y compris des sous-domaines ** L'exemple suivant représente un domaine appelé qiita.com qui contient des sous-domaines.

whitelist


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

** Lors de la représentation d'un domaine spécifique, y compris des sous-domaines. Donc, si vous souhaitez rassembler plusieurs chaînes de domaine qui ont quelque chose en commun ** L'exemple suivant représente un domaine appelé slack.com ou slack-edge, com qui contient des sous-domaines.

whitelist


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

Préparez la liste blanche ci-dessus en tant que fichier texte et chargez-la en tant que url_regex sur squid.com.

squid.com


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

Le processus de recherche d'un moyen d'écrire

Exemple: pour qiita.com

La liste blanche uniquement fqdn vous connectera à un site malveillant.

Par exemple, supposons que vous écriviez ceci sur votre liste blanche:

whitelist


qiita\.com

Mais cela correspondrait si le chemin complet ou le sous-domaine avait la même chaîne.

match_url


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

Alors, pourquoi ne pas écrire ceci, en utilisant la continuité du premier protocole, pour autoriser un nom de domaine spécifique, y compris les sous-domaines?

whitelist


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

Ce n'était pas bon. Peut-être que pour obtenir un certificat, je vais d'abord me connecter à qiita.com: 443.

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/- -

Considérons le protocole et le numéro de port dans la règle précédente. Quoi qu'il en soit, si c'est HTTP, communiquons même si vous entrez: 80. Le début de la chaîne de caractères correspond avec ou sans la notation de protocole et la fin du FQDN correspond avec ou sans le numéro de port.

whitelist


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

C'était toujours inutile. Cela n'a pas changé. Il se termine par un numéro de port, donc la dernière barre oblique gênera et ne correspondra pas.

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/- -

En plus de la règle précédente, il y a une barre oblique ou il n'y a pas de barre oblique et le numéro de port ou le nom de domaine complet se trouve à la fin de la chaîne. Et dit.

whitelist


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

Le site racine a pu confirmer la communication à la fois sur https: // qiita.com / et le site du sous-domaine était sur https: // zine.qiita.com /. Peut-être que c'est OK.

Exemple: pour slack.com

Autorisons également les sites slack.

whitelist


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

En le regardant avec un navigateur, c'est à mi-chemin. Screenshot from Gyazo

En regardant le journal, je vais communiquer avec slack-edge.com.

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/- -

Cela signifie que la chaîne slack doit être suivie de la chaîne -edge ** ou ** not **.

whitelist


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

Essayons à nouveau avec un navigateur. Screenshot from Gyazo Ouais, ça a l'air bien.

à la fin

** Il est beaucoup plus facile d'utiliser dstdomain pour les listes blanches et les listes noires ** Cependant, j'ai également essayé d'étudier les expressions régulières par essais et erreurs.

Recommended Posts

[proxy https avec squid] Comment représenter une liste blanche de https avec url_regex
Comment créer un serveur HTTPS avec Go / Gin
Comment mettre à jour avec SQLAlchemy?
Comment lancer avec Theano
Comment modifier avec SQLAlchemy?
Comment séparer les chaînes avec ','
Comment faire RDP sur Fedora31
Comment supprimer avec SQLAlchemy?
Comment annuler RT avec Tweepy
Python: comment utiliser async avec
Pour utiliser virtualenv avec PowerShell
Comment installer python-pip avec ubuntu20.04LTS
Comment gérer les données déséquilibrées
Comment démarrer avec Scrapy
Comment démarrer avec Python
Comment gérer l'erreur DistributionNotFound
Comment démarrer avec Django
Comment augmenter les données avec PyTorch
Comment calculer la date avec python
Comment installer mysql-connector avec pip3
Comment INNER JOIN avec SQL Alchemy
Comment installer Anaconda avec pyenv
Configurer un proxy inverse vers le serveur https avec CentOS Linux 8 + Apache mod_ssl
[proxy https avec squid] Évitez de lire les messages lâches car il s'agissait d'un socket Web.
Comment effectuer un traitement arithmétique avec le modèle Django
[Blender] Comment définir shape_key avec un script
Comment titrer plusieurs figures avec matplotlib
Comment obtenir l'identifiant du parent avec sqlalchemy
Comment ajouter un package avec PyCharm
Comment installer DLIB avec 2020 / CUDA activé
Comment utiliser ManyToManyField avec l'administrateur de Django
Comment utiliser Cmder avec PyCharm (Windows)
Comment empêcher les mises à jour de paquets avec apt
Comment utiliser BigQuery en Python
Comment utiliser Ass / Alembic avec HtoA
Comment gérer les erreurs de compatibilité d'énumération
Comment utiliser le japonais avec le tracé NLTK
Comment faire un test de sac avec python
Comment rechercher Google Drive dans Google Colaboratory
Comment afficher le japonais python avec lolipop
Comment télécharger des vidéos YouTube avec youtube-dl
Comment mettre hors tension de Linux sur Ultra96-V2
Comment utiliser la commande CUT (avec exemple)
Comment entrer le japonais avec les malédictions Python
Comment installer zsh (avec la personnalisation .zshrc)
Comment lire les données de problème avec Paiza
Comment utiliser SQLAlchemy / Connect avec aiomysql
Comment regrouper des volumes avec LVM
Comment installer python3 avec docker centos
Comment utiliser le pilote JDBC avec Redash
[proxy https avec squid] Résolvez l'erreur qui s'est produite avec une clé dh trop petite
Comment supprimer sélectivement les anciens tweets avec Tweepy
Comment télécharger avec Heroku, Flask, Python, Git (4)
Comment gérer les fuites de mémoire dans matplotlib.pyplot
Comment créer des exemples de données CSV avec hypothèse