Puncte:0

Setați proxy HTTP/HTTPS man-in-the-middle pentru serverul web (Apache2)

drapel kr

Pentru a înregistra toate solicitările http/https de către o anumită aplicație, folosim proxy man-in-the-middle (setate ca proxy http sau SOCKS5). Pe mașinile noastre locale cu Windows și Mac, de obicei „proxificăm” aplicațiile sau setăm temporar un proxy la nivelul întregului sistem. Acest lucru funcționează ca un farmec pentru orice aplicație la care ne putem gândi. Pe casetele noastre Linux la distanță, proxy-ul cu adevărat la nivelul întregului sistem cauzează probleme de conexiune (și, de asemenea, este ceva mai greu să obțineți aceleași rezultate într-un mediu non-desktop). Așa că am decis să mergem doar cu proxy aplicații separate acolo.

Pentru a face acest lucru, în prezent folosim mitmproxy + tsocks/proxychains. Acest lucru funcționează din nou excelent pentru aplicații normale. Problema actuală pe care o avem, totuși, este că se pare că nu o putem face să funcționeze cu serviciile noastre apache2/php. Am căutat soluții în ultimele zile, dar este greu să găsim opțiuni care să nu transforme serverul web însuși într-un proxy invers de la sau către o anumită adresă URL. Ceea ce dorim este să monitorizăm orice solicitare http/https de la distanță pe care o face serverul web (cererile de ieșire ale unei aplicații PHP). Ne-am gândit să rulăm serverul web în Docker și să setăm un proxy pentru container, dar asta înseamnă că trebuie să setăm totul din nou în container și se simte ca o soluție proastă care vine cu propriile probleme.

Intrebarea reala: cum putem direcționa tot traficul http/https pe care serverul nostru web îl face prin proxy-ul nostru MITM, astfel încât să putem vedea toate solicitările către gazdele http/https la distanță?

Soluțiile alternative/mai bune pentru a obține același lucru sunt binevenite.

drapel cn
Bob
O modalitate destul de convențională de a rula un proxy pentru aplicațiile care nu respectă setările proxy este de a folosi regulile firewall pentru a rescrie tot traficul de ieșire cu un port web ca destinație pentru un proxy transparent. Destul de banal pentru http simplu, dar puțin mai implicat când este vorba de https.
Puncte:0
drapel kr

Îi mulțumesc lui Bob că m-a îndreptat în direcția corectă. Uneori lucrurile sunt cu adevărat doar la o căutare pe Google, odată ce știi ce să cauți.

@Bob a comentat:

O modalitate destul de convențională de a rula un proxy pentru aplicațiile care nu respectă setările proxy este de a folosi regulile firewall pentru a rescrie tot traficul de ieșire cu un port web ca destinație pentru un proxy transparent. Destul de banal pentru http simplu, dar puțin mai implicat când este vorba de https.

În loc să setăm proxy-ul în setările proxy ale sistemului de operare, putem configura iptables să direcționeze totul pe portul 80 și 443 către proxy-ul nostru (pașii luați din docs.mitmproxy.org)

Activați redirecționarea IP și dezactivați redirecționările ICMP:

sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1
sudo sysctl -w net.ipv4.conf.all.send_redirects=0

Omiteți pasii 3 și 4 din manual, deoarece dorim să redirecționăm traficul care provine de la mașină în sine.

Pentru a face acest lucru, creați un utilizator care să ruleze mitmproxy pentru a direcționa traficul către:

sudo useradd --create-home mitmproxyuser
sudo -u mitmproxyuser -H bash -c 'cd ~ && pip install --user mitmproxy'

Și în sfârșit regulile iptables (proxy care rulează pe portul 8080):

sudo iptables -t nat -A OUTPUT -p tcp -m proprietar ! --uid-owner mitmproxyuser --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A OUTPUT -p tcp -m proprietar ! --uid-owner mitmproxyuser --dport 443 -j REDIRECT --to-port 8080
sudo ip6tables -t nat -A OUTPUT -p tcp -m proprietar ! --uid-owner mitmproxyuser --dport 80 -j REDIRECT --to-port 8080
sudo ip6tables -t nat -A OUTPUT -p tcp -m proprietar ! --uid-owner mitmproxyuser --dport 443 -j REDIRECT --to-port 8080

În cele din urmă, rulați mitmproxy ca utilizator nou:

sudo -u mitmproxyuser -H bash -c 'mitmproxy --mode transparent --showhost --set block_global=false'

În ceea ce privește manualul furnizat de mitmproxy. În acest moment, am terminat cu configurarea, dar trebuie să instalăm un nou certificat (orice certificat anterior de la mitm.it nu va funcționa).

După prima rulare, se generează un nou certificat la /home/mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.pem. Trebuie să îl convertim în crt și să îl instalăm:

sudo openssl x509 -in /home/mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.pem -inform PEM -out /home/mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.crt
sudo cp /home/mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.crt /usr/share/ca-certificates/extra/mitmproxy-ca-cert.crt
sudo dpkg-reconfigure ca-certificates

În acest moment, sunteți aproape gata, cu excepția faptului că Apache2/PHP încă nu va avea încredere în certificatul nostru proxy, astfel încât solicitările externe nu vor ajunge. Am încercat o grămadă de configurații SSL apache.conf care nu au funcționat. S-a dovedit că a trebuit să decomentez următorul rând /etc/php/7.4/apache2/php.ini și conectați-l la fișierul crt creat de noi:

openssl.cafile=/home/mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.crt

Nu uitați să reporniți apache2/php7.4-fpm și gata! Aplicația noastră PHP este acum direcționată prin proxy. De asemenea, poate fi necesar să aveți încredere în fișierul crt generat din browser pentru a scăpa de avertismentul obișnuit.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.