OpenVPN client-connect hook-a: norantz doan zure helbidea benetan
client-connect script batek ezin du helbide bat itzuli inprimatuz. Ikusi nola hook-aren aldi baterako fitxategiak, irteera-egoerak eta topologiak erabakitzen duten bezeroaren IPa.
client-connect script batetik helbide bat itzultzeak bezeroaren IPa ezarriko balu bezala ematen du. Ez du: hook-ak zerbitzariarekiko duen kanal bakarra aldi baterako fitxategi bat da, zeinaren bidea script-aren azken argumentu gisa iristen den, eta helbidea han idatzi behar da ifconfig-push sintaxian. Helbidea inprimatzen duen edo ezer idatzi gabe zeroz irteten den script batek igerilekuko helbidea duen bezero konektatu bat sortzen du, eta zerbitzariaren erregistroa guztiz osasuntsu ematen du.
Nahasketa arrazoizkoa da, beste hainbat hook-ek bai baitute erantzuten irteera-kodeen edo ingurune-aldagaien bidez. Honek kontratu propioa du, eta kontratua fitxategi-izen batekin hasten da.
Hook-ak fitxategi bat idazten du, ez itzulera-balio bat
Deklarazioa bi lerro dira: script-security 2 deialdia baimenduz, gero client-connect /etc/openvpn/server/assign-address.sh. Bezero batek autentifikatzen duenean, zerbitzariak script hori exekutatzen du sortutako fitxategi-bidea azken argumentu gisa erantsita, eta hori $1 da soilik deklarazioak bere argumentu gehigarririk pasatzen ez badu. Bezero horri aplikatzen zaion guztia fitxategi horretan sartzen da direktiba arrunt gisa, lerro bakoitzeko bat, konfigurazio batean agertuko liratekeen bezalaxe. Bere parametroak gehitzen dituen bilgarri batek posizioa aldatzen du, eta sintoma klasikoa --verbose bezalako itxura duen bide batera idazten duen script bat da.
Irteera-egoera kontratuaren beste erdia da. Zero esan nahi du onartu eta fitxategia irakurri; beste edozein gauzak konexioa baztertzen du, eta horrela ukatzen da mapatu gabeko identitatea isil-isilik igerilekura itzuli beharrean. Idatzi direktiba osoa arrakasta itzuli aurretik, erdi idatzitako fitxategi bat inoiz bezero baten konfigurazio bihur ez dadin.
Bi direktibak arreta merezi dute, gainerako guztiarekin elkarreragiten dutelako. ifconfig-push helbidea finkatzen du, eta bidalitako route batek bezeroari esaten dio zer den irisgarri tunelaren bidez; lehena itzuli eta bigarrena ahaztu eta helbidea duen eta nora joan ez duen bezeroa lortzen duzu. Fitxategi barruko ordenak ez du axola, baina osoak izateak bai. Inor iristen ez den aurrizki baterako ruta bidaltzen duen hook bat beste muturretik ikusitako akats bera da.
Sarrerak ingurune-aldagaien bidez iristen dira: common_name, trusted_ip, ifconfig_pool_remote_ip eta gainerakoak. Hartu guztiak zerbitzaritik kanpoko kate gisa, inoiz ez shell zati gisa.
Helbide-mapinga politika bat da, ez aritmetika
Bide labur tentagarria ziurtagiriaren izena aztertzea eta haren digituak azken okteto gisa erabiltzea da. Hori ez da esleitzaile bat, eta ohiko moduetan huts egiten du: sufixu bera duten bi izen talka egiten dute, 300ean amaitzen den izen bat ez da helbidea, eta administratzaile batek izena aldatu duen ziurtagiri batek gailu bat isil-isilik mugitzen du. Balioztatu azpisareko kidetza, erabil daitekeen ostalari-barrutia, gordetako helbideak eta bakartasuna deialdi bakoitzean, eta eduki mapinga pertsona batek irakur dezakeen taula batean.
Izena kontrolatzen duenak helbidea kontrolatzen du, beraz erabaki zer ordezkatzen duen common_name-ek benetan inplementazio honetan. username-as-common-name gaituta, identitatea saio-hasiera da, ez ziurtagiriaren subjektua. Inoiz ez pasatu balio hori shell ebaluaziora, eta inoiz ez utzi bezeroari fitxategi-bide bat eragiten.
Erregistroan oinarritutako esleitzaile batek konkurrentzia gainditu behar du. Erreserbatu helbidea atomikoki, kudeatu idazketa huts bat erdi konfiguratutako bezero bat onartu gabe, eta etiketatu esleipen bakoitza hura duen konexioarekin, saio zaharrago baten deskonexio berantiarrak berriago batek dagoeneko duen helbidea askatu ez dezan. Igerileku bat partekatzen duten zerbitzari-instantzia batzuek baldintza hori zorrozten dute, ez egiten hautazko.
Topologiak erabakitzen du zer esan nahi duen ifconfig-push-ek
10.77.0.0/24an topology subnet-ekin, ifconfig-push 10.77.0.20 255.255.255.0 helbide bat gehi haren sare-maskara da. topology net30 pean bigarren argumentua ez da batere maskara, parearen helbidea baizik, beraz azpisare-forma net30 zerbitzari batera kopiatzeak konektatzen den baina trafikoa pasatu ezin duen bezeroa ematen dizu. Aldatu topologia nahita, inoiz ez adibide bat koherentea emateko. Dagoeneko net30 erabiltzen duen zerbitzari batek bezero bizirik ditu helbideratze zaharrean, beraz aldaketa mantenimendu-leihoa duen migrazioa da, ez lerro bakarreko zuzenketa.
Helbide estatikoek igerileku dinamikotik kanpo egon behar dute eta beste edozein esleipen estatikoetatik kanpo, client-config-dir fitxategi arruntek banatzen dituztenak barne. Bi mekanismok bezero ezberdinetarako helbide bera sor badezakete, horietako batek egingo du azkenean.
Probatu lau kasu hari fidatu aurretik
Exekutatu kontrol berak identitate mapatu baten aurka, mapatu gabeko baten aurka, berrikonexio baten aurka eta erregistroaren hutsegite simulatu baten aurka. openvpn --config client.ovpn --verb 4 esleitutako helbidea erakusten du push erantzunean, eta zerbitzarian grep -A2 PUSH_REPLY /var/log/openvpn/openvpn.log aginduak benetan bidali zena baieztatzen du. Mapatu gabeko identitatearentzat espero den emaitza baztertutako konexio bat da, ez igerilekuko helbide bat.
Ondoren ikuskatu daemonak aldi baterako fitxategi horiek idazten dituen direktorioa. Script-a zerbitzu-testuinguru degradatuan exekutatzen da, beraz root-ek idatz dezakeen baina daemonak ezin duen bide batek konexio bakoitza bazterketa bihurtzen du, baimen-errorea erregistroan hainbat lerro beherago lurperatuta.
Esleitzea ez da baimena: finkatutako helbide batek oraindik ez du ematen zerbitzariaren atzeko helmuga guztietara sarbiderik. Eduki bideratze- eta suebaki-politika bere geruzan, eta egiaztatu finkatu berri duzun helbidearen aurka.