Monthly Archives: April 2018

nginx conditional reverse proxy

Asta e un post din categoria despre cat de jmecher e nginx.

Am avut relativ de curand o speta in care  aveam un setup de genul:

[aplicatie interna] <---> [reverse proxy] <---> [internet clients]

si trebuia s-o securizez cumva pentru ca [aplicatia interna] e o aplicatie care accepta niste cereri HTTP (si doar HTTP) si raspunde la ele. Nu stie autentificare, nimic. E doar un fel de API endpoint super dumb. Si, evident software comercial care asa vine el si e treaba ta ca si client sa-l securizezi cumva.

[internet clients] reprezinta un software scris in-house care sta pe niste servere undeva prin internet si care are nevoie sa faca query-uri in [aplicatie interna].

Cerinta a fost relativ simpla: sa accept query-uri doar de la [internet clients] si orice alte request-uri sa le ignor.

Prima ideea a fost aia enterprise si complicata: facem SSL mutual authentication pe nginx si doar clientii care au certificat client valid in contextul asta sunt acceptati. Da era mega complicat de mentinut, ca dupa aia trebuia sa fac si management de certificate, sa le schimb periodic etc.

Varianta simpla a fost sa fac passthrough doar la cererile care aveau un header cu o anumita valoare.

location / {
 if ($http_Secret_Header = 'secretheadervalue')
  { proxy_pass http://aplicatie.interna }
 return 301 https://google.com
}

De ce e nginx super jmecher? Pentru ca toate headerele dintr-un request HTTP le pune la dispozitie in variabile prefixate cu $http_ urmat de numele header-ului. Daca headerul are cratime in el, gen My-Header, atunci ele vor fi transformate in _ (underscore) si va deveni My_Header in contextul nginx.

nginx are activat doar HTTPS cand vorbeste cu clientii si in felul asta nu se poate intercepta ce se transmite intre clienti si aplicatie.

Si variabilele pot fi folosite in reguli de genul celei de mai sus, care trimite cererea mai departe doar daca Secret-Header are valoarea secretheadervalue. Daca nu, trimite clientii la google sa caute acolo stuff pe internet ca sigur au ajuns din greseala pe serverul meu :)

Cum ziceam, [internet clients] reprezinta o aplicatie in-house si a fost mai simplu sa adauge programatorii un header in plus decat sa implementeze SSL mutual authentication.

cambridge analytica butthurt

De vreo cateva saptamani, toata lumea se da cu curul de pamant ca vai, am fost manipulati pe facebook si am luat decizii gresite si vai si iar vai.

Astea dupa ce unu’ s-a apucat sa dea in gat compania pentru care lucra, ca uite, au luat datele de la multe milioane de utilizatori de pe facebook, le-au analizat si au inventat un algoritm (sau mai multe) prin care puteau sa zica cu o precizie destul de mare ce anume lucruri i-ar face pe un grup de oameni sa ia decizia A sau B sau C sau cate se doreau.

Si vai ca Trump s-a folosit de aia sa castige alegerile si acu britanii incearca s-o dea la intors cu Brexitul lor ca de fapt ei ar fi fost manipulati si de fapt le place in UE. Si vai ca in nustiuce tara din Africa au folosit facebook-ul sa-l sape pe un candidat la presedentie. Sau deja presedinte, da e irelevant pentru discutie.

In primul rand lumea uita ca daca nu platesti pentru un produs de-l folosesti, de fapt tu esti produsul.

In al doilea rand, cu cat dai mai multe informatii despre tine (gen ce-am scris eu de 12 ani pe blog) sau si mai rau, pe facebook, dai like la tot felul de crapuri, comentezi in anumite situatii si tot asa, cu atat poti fi profilat mai bine: ce-ti place, ce inclinari ai, ce nu-ti place etc.

Machine learning functioneaza super bine cand ai un set super mare de date (adevarate si false), ai un algoritm eficient care poate fi antrenat cum trebuie si dupa aia rezultatele, dupa ce-s corectate bagate la loc in el, gen sa le mai pitroceasca o data, o sa-ti zica lucruri despre oameni de nici ei nu le stiu despre ei.

Si asta e super adevarat pentru ca nici un om nu are un task in background care-i face introspectie la toate actiunile luat 24/7. De aceea, dovedit stiintific, in anumite situatii, prietenii tai te pot caracteriza mai corect decat o poti face tu.

Si ia si baga toate informatiile astea intr-un computer care n-are sentimente si nu pune problema intr-un fel in care sa nu te bosumfli cum mai fac prietenii cand vor sa-ti zica una sau alta, si o sa-ti zica niste chestii really scary despre tine.

Si modelul asta, cu suficient de multe date, poate fi extrapolat la populatii intregi (demographics) de subiecti.

Acum, ca am trecut de introducere, sa intre in scena politicienii. Care au un singur rol: sa stea lipiti de un scaun caldut super multa vreme si sa faca ceva util doar atunci cand locul ala caldut de pe scaun e un pericol. Si asta trecand peste diverse exceptii, ca mai dai de niste naivi gen USR prin .ro care cred ca o sa fie mega-apreciati ca ei sunt cinstiti da nu produc rezultate, sau pisti ala din UK de si-a dat demisia ca a intarziat 5 minute la nus’ce sedinta/discutie.

Si daca e sa ne uitam la politica in mod general, toata lumea promite si manipuleaza cu slogane, platforme electorale care de care mai fanteziste, cu televiziuni (gen Antena3 si RTV in .ro, fox news si cnn prin US si tot asa), presa si orice alt mijloc de a transmite un mesaj si de a castiga voturi.

Nu este absolut nici un fel de fair-play in treaba asta si nici nu ti se intampla nimic 3-4-5-6 ani de mandat daca nu livrezi absolut nimic din ce-ai promis. Poate eventual cand se ajunge la proteste masive mai misti vreo hartie sau vreun aviz si te faci ca ti-ai bagat mintile in cap.

E, butthurt-ul maxim cu Cambridge Analytica e ca unii au fost mai inteligenti si i-au folosit cu efect maxim sa schimbe opinia oamenilor intr-un favorabila lor (gen votati Trump sau votati Brexit sau votati GMO sau votati X) si altii au fost mai prosti si nu s-au gandit sa apeleze la date sa faca acelasi lucru. Si e tragedie mare si fiecare dintre pierzatori se victimizeaza cat se poate de mult, poate, poate le iese si poate, poate apuca si ei acolo un pic de ciolan.

Si indiferent de ce o sa iasa din scandalul asta, acum ca se stie ca se poate, chiar daca o sa se inchida Cabridge Analytica, o sa apara Oxford Insights, Amsterdam People Minds si o caruta de altii care o sa faca acelasi lucru, poate chiar mai bine. Si nu neaparat mai bine e important, ci mai subtil.

Si de ce, e super simplu: natura umana. Ca ne place sa ne laudam cu diverse, sa “keep up with the Jones’es” si tot asa. Si poate cel mai important, din observatiile mele sa zicem limitate, ne placem sa primim informatiile deja mestecate, sa nu ne batem capul prea tare sa ne formam propriile opinii pe baza datelor si foarte important, coroborarea lor. Pentru ca lumea are incredere in liderii de opinie, nu?