Algú pregunta per què un usuari de VPN apareix al registre de l’aplicació amb una adreça que pertany a la passarel·la, o amb una adreça que va canviar després de dinar. La resposta comença per què és aquest valor: una entrada que el servidor web va posar a l’entorn de la petició. No és una consulta al túnel, ni una identitat de certificat, ni la promesa que el número pertany a una sola persona. Llegir-lo com qualsevol d’aquestes tres coses produeix respostes segures que són incorrectes de maneres diferents.

El valor ve del servidor, no del túnel

PHP rep l’entorn de la petició del que va executar l’script. La referència de variables de servidor de PHP descriu aquestes entrades com a creades pel servidor web, amb una disponibilitat que depèn de com va arribar la petició.

Un script executat com a hook de línia d’ordres de la VPN és un context d’execució completament diferent. No té petició web, ni socket de client, ni REMOTE_ADDR, i per això el codi web copiat en un hook produeix valors buits en lloc d’incorrectes. El hook té el seu propi entorn, omplert pel dimoni, i està documentat per separat. Buscar REMOTE_ADDR allà és buscar una variable que mai es va definir.

Tingueu present aquesta distinció abans de comparar dos registres. Potser esteu comparant una petició de pàgina amb un hook, i això no és cap comparació. Comproveu primer el context d’execució i després l’adreça.

Recorreu el camí de la petició abans de confiar en el número

L’adreça informada és el parell de la connexió que va veure el servidor web. Inseriu qualsevol cosa entre el client i aquell servidor i el parell canvia. La traducció, la terminació i el balanceig mouen cadascuna l’observació un salt més enllà de l’usuari.

Quatre camins habituals produeixen quatre observacions diferents.

Path to the listenerWhat can be reported
Client routed straight to the private listener, no translationThe client's tunnel address
Gateway translates the source before forwardingThe gateway's translated address
Reverse proxy terminates the client and opens its own backend connectionThe proxy's backend address
Load balancer in front of two proxiesWhichever hop the server treats as its peer

Anoteu el camí amb el nom de la destinació, la família d’adreces i cada punt de traducció. Sense aquest mapa, un valor correcte i un valor incorrecte semblen idèntics en una línia de registre. Dues línies de diagrama estalvien una tarda de discussió.

La substitució només passa on està configurada

Un servidor o un framework pot substituir deliberadament l’adreça del client. El mòdul remote-IP d’Apache i el mòdul real-IP de NGINX fan tots dos això, i el valor que rep PHP depèn d’aquesta configuració i dels paràmetres que es passen al gestor de l’script.

Així que REMOTE_ADDR no és universalment el parell TCP intacte. És el parell tal com el servidor va decidir informar-lo després d’aplicar la seva pròpia política. Aquesta distinció decideix si el valor és prova o adorn.

Pregunteu al responsable del servidor quin camp és autoritatiu en aquesta instal·lació i com es conserva el parell original quan hi ha substitució. Si ningú no sap respondre, el registre encara no prova res.

No llegiu les capçaleres de reenviament amb confiança

Qui crida pot enviar ell mateix capçaleres de reenviament. Tractar la primera entrada separada per comes com una adreça d’usuari verificada és decidir creure en qui es connecti, exactament el contrari del propòsit de la capçalera. La capçalera descriu una cadena, i només una capa de confiança pot respondre per aquesta cadena.

Utilitzeu el suport de proxys de confiança del servidor o del framework amb la cadena de proxys real configurada, i deixeu que descarti els valors de fonts alienes a aquesta cadena. L’anàlisi escrita a mà és on viuen la majoria de les fallades interessants.

Una adreça informada per un proxy tampoc no canvia l’origen dels paquets que veu un tallafoc anterior. Mantingueu les metadades HTTP i el filtratge de xarxa com a observacions separades, perquè responen a preguntes diferents.

Utilitzeu la identitat de l’aplicació per decidir

Per accedir als registres d’un usuari, recolzeu-vos en el principal autenticat i en les regles d’autorització de l’aplicació. Una adreça interna es pot reassignar, i una adreça traduïda pot representar centenars d’usuaris simultanis. Cap d’aquestes propietats no la pot reparar una comprovació d’adreça.

Si les operacions necessiten vincular una petició a una sessió VPN, uneixi l’adreça observada i la marca de temps amb els registres de sessió autoritatius segons el model de traducció que heu documentat. Això produeix una associació defensable; una adreça sola, no.

Per al diagnòstic, registreu els pocs camps que necessiteu en lloc de tot l’array del servidor, que pot portar capçaleres i material d’autenticació. La conclusió útil di què significa aquest valor en aquesta instal·lació, no quin valor s’assembla més a un client.

Articles relacionats