Tillfälliga länkar till IP-tillåtelselistor: vad tillåtelsen egentligen släpper in
En länk som öppnar en brandväggsport släpper in en adress, inte en person. Bestäm omfattningen, kräv medveten bekräftelse och testa uppspelning, utgång och IPv6.
Att göra ett klick till en tillfällig brandväggsregel är bekvämt, och det bygger samtidigt ett auktoriseringssystem som avgör vem som får nå en tjänst. Det utfärdar en adress i stället för en person, och den skillnaden spelar roll i det ögonblick två personer delar en NAT. Avgränsa tillåtelsen, bekräfta den medvetet och ge utgången en mening innan länken byggs. Beslutet framför dig är var gränsen ska ligga, inte om det borde finnas en.
Avgör vilken fråga tillåtelsen svarar på
Börja med kravet. Om en namngiven person måste nå tjänsten och applikationen redan autentiserar den personen, håller en autentiserad gateway identiteten vid verkställighetspunkten och behöver ingen adressinsläppning alls. Om målet är en byggagent, en administrativ hopport eller en apparat som inte kan delta i användarinloggning, kan en avgränsad adresstillåtelse vara den enda praktiska kontrollen.
Att välja adressinsläppning för en användarvänd applikation flyttar det egentliga auktoriseringsproblemet någon annanstans, och portalen ärver då skulden för en lucka den aldrig stängde.
Avgränsa begäran på servern
Webbläsaren får inte välja destination, port eller prefix. Portalen slår upp tjänsten från sina egna register och kontrollerar rätten med ett test på serversidan, vilket är samma princip som OWASP:s vägledning för auktorisering tillämpar på varje begäran. Även härledningen av adressen hör till den skyddade gränsen: när en omvänd proxy rapporterar klientadressen ska du bara acceptera den konfigurerade proxykedjan och dess dokumenterade hantering av rubriker. En vidarebefordringshuvud som en besökare tillhandahåller är ett påstående om ursprung, inte ett bevis för det.
Kontrollera sedan att portalen och tjänsten ser samma källa. Delad tunnling, ett proxyhopp och IPv4 kontra IPv6 kan ge två destinationer två olika adresser, så en tillåtelse som aktiverats via en väg täcker kanske inte nästa begäran.
Visa tillåtelsen innan den installeras
Att öppna en länk bör visa den föreslagna tjänsten, den observerade källan och varaktigheten, och ännu inte ändra något. Det enda steget gör länken från e-postmeddelandet från en handling till ett förslag, och det hindrar en förhandsgranskningsbot eller en e-postskanner från att ge åtkomst bara genom att hämta den.
Bekräftelsen bör vara en tillståndsändrande begäran med de vanliga skydden mot korsade webbplatser och ursprung. Token bör vara engångs och förbrukas atomärt i det ögonblick regeln installeras, och posten bör fånga ägare, tjänst, adress, tillåtelseidentifierare och utgång utan att någonsin logga den råa token.
Leveransen av token förtjänar samma omsorg som regeln själv. En utgången eller redan förbrukad länk som fortfarande skapar en regel är en andra dörr monterad med samma nyckel.
Adressen delas även medan tillåtelsen lever
Kontors-NAT, operatörs-NAT och en delad VPN-utgång sätter var och en flera personer bakom en adress. Att tillåta den adressen tillåter alla bakom den — så långt tjänstens nästa gräns angår —, utan att bevisa något om vem som har kontot som tjänsten förväntar sig.
Att ta bort regeln är inte heller en universell frånkoppling. Etablerade anslutningar, cachelagrade applikationstoken och långlivade sessioner kan överleva regeln i minuter eller mycket längre, så den livslängd du väljer bör spegla vad tjänsten gör efter insläppet och inte bara hur länge regeln finns.
Testa fyra fall och båda adressfamiljerna
En tillåtelse är bara så bra som de fyra fall den klarar: en ny tillåten begäran, en icke godkänd begäran, en uppspelning av samma länk och samma begäran efter utgång.
Testa sedan varje familj för sig, eftersom den källadress tjänsten observerar kan skilja sig mellan dem.
dig +short A service.example.com
dig +short AAAA service.example.com
curl -4 -sS -o /dev/null -w "%{http_code}\n" https://service.example.com
curl -6 -sS -o /dev/null -w "%{http_code}\n" https://service.example.com
Det användbara resultatet är ett tillfälligt, granskningsbart insläppsbeslut under normal användarauktorisering, i stället för en permanent öppning som bär namnet på den som klickade först.