Ders 12 / 14
VPN Teknolojileri
Tünel bir yönlendirme kurgusudur: tünel seçici hangi hedefleri içeri alacağına karar verir, seçilmeyen akış sınırı hiç görmeden çıkar; kırk akışta dört seçici ve iki tünel kurgusu fazla geçen ile fazla duranı ayrı ayrı ölçer.
İçindekiler
Kursun buraya kadarki dört dersi sınırı hep aynı yönde kullandı: dışarıyı içeriden ayırmak için. Güvenlik duvarı türleri, kural dizisi, bölge grafiği ve tespit düzeneği, hepsi “içeride olan” ile “dışarıda olan” ayrımını verili saydı ve o ayrımın üzerine karar kurdu.
Peki dışarıdaki bir uç içeri alınmak zorundaysa? Uzaktaki bir çalışanın makinesi, başka bir yerleşkedeki bütün bir bölüt, ya da bir bulut sağlayıcının içindeki bir küme — bunların hiçbiri fiziksel olarak içeride değildir ve içeride sayılmaları gerekir. VPN (virtual private network) bu işi yapan teknoloji sınıfının adıdır. Bu dersin sorusu tünelin ne koruduğu değil: tünelin hangi akışları içeri aldığı, ve içeri alınmayanların ne olduğu.
Tünel Bir Yönlendirme Kararıdır
Tünel kurulduktan sonra ne yapılabildiği, yani erişimin kapsamı, Siber Güvenlik müfredatının Çevre Savunması konusunda ölçüldü ve burada tekrarlanmaz. Burada ölçülen şey tünelin kurulmasından önceki karardır ve o karar bir güvenlik kararı değil, bir yönlendirme kararıdır.
Uzak uçta çalışan yazılım, gönderilecek her akış için tek bir soruya yanıt verir: bu akış tünelden mi gidecek, yoksa yerel çıkıştan mı? Yanıt evetse akış sarmalanır ve tünelin öbür ucundaki toplayıcıya taşınır; orada açılır ve kurumun sınırına oradan girer. Yanıt hayırsa akış hiç sarmalanmaz, uzak ucun kendi bağlantısından doğrudan çıkar ve kurumun sınırını hiç görmez.
Bu iki yolun ayrımı dersin tamamını taşır. Tünelden geçen akış kural dizisine tabidir. Tünelden geçmeyen akış hiçbir kurala tabi değildir — çünkü kuralın yazıldığı yere hiç uğramaz.
Tünel Seçici
Bu kararı veren yapının adı tünel seçici (tunnel selector) olur. Seçici bir kural dizisi değildir; eylem üretmez, yalnız bir küme tanımlar: hangi hedefler tünele girer.
# ogretilen dokum , calistirilmamistir
tünel tanımı A
kurgu : uçtan uca
seçici : hedef bölgesi { ic }
atanan bölge : ic
seçilmeyen : yerel çıkış
tünel tanımı B
kurgu : siteler arası
seçici : hedef bölgesi { ic, dmz, yonetim }
atanan bölge : (yok; kaynak bölgesi korunur)
seçilmeyen : yerel çıkış
Seçicinin bütün hedefleri kapsadığı kuruluma tam tünel, bir bölümünü dışarıda bıraktığı kuruluma bölünmüş tünel (split tunnel) denir. Bölünmüş tünelin gerekçesi taşımadır: uzak ucun bütün trafiğini toplayıcıdan geçirmek, hiç ilgisi olmayan akışları da oradan geçirmek demektir. Bu dersin sorduğu şey gerekçenin doğru olup olmadığı değil, bedelinin hangi yönde ödendiğidir.
Seçici Bir Yol Kümesidir
Seçicinin nereye yerleştiğini görmek, dersin geri kalanını okunur kılar. Anahtarlama ve Yönlendirme kursunda bir paketin yolu, hedefine bakılarak seçilen bir sonraki düğümle belirleniyordu. Tünel seçici tam olarak aynı yerde durur: tünel arayüzü bir sonraki düğüm adaylarından biridir ve seçici, hangi hedefler için o adayın kazanacağını söyler. Bu yüzden seçici kural dizisinden önce değerlendirilir — kural dizisi paketin sınıra ulaşmasını bekler, seçici paketin sınıra doğru yola çıkıp çıkmayacağına karar verir.
Bunun iki sonucu vardır. Birincisi, seçicinin çözünürlüğü yönlendirmenin çözünürlüğüdür: hedefe bakar. “Şu bağlantı noktası tünelden, şu bağlantı noktası yerel çıkıştan” biçiminde bir ayrım, aynı hedefe giden iki akışı ayırmayı gerektirir ve bir yol kümesi bunu ifade edemez. İkincisi, seçici uzak uçta durur. Toplayıcı onu tünel kurulurken gönderir, ama seçilmeyen akışın yolunu belirleyen şey uzak ucun kendi yönlendirme tablosudur. Seçicinin uzak uçta gevşetilmesi bir yapılandırma kusurudur ve sınır tarafında hiçbir belirti vermez: sınır o akışı zaten hiç görmemektedir.
İki Kurgu: Siteler Arası ve Uçtan Uca
İki tünel kurgusu arasındaki fark seçicide değil, kaynak kimliğindedir.
Siteler arası (site-to-site) tünelde iki uç da gerçek bir bölgedir. Bir yerleşkenin iç bölütü ile bir başkasınınki birbirine bağlanır; her akış kendi bölgesiyle gelir ve sınır onu kendi bölgesiyle değerlendirir. Tünel yalnız yolu değiştirir, akışın kim olduğunu değiştirmez.
Uçtan uca (remote access) tünelde uzak ucun bir bölgesi yoktur. Tek bir makinedir,
değişken bir yerden bağlanır ve sınır onu hangi bölgeye koyacağını bilmez. Bu yüzden tünel
ona bir bölge atar: tünelden çıkan her akış, toplayıcının verdiği bölgeyle sınıra girer.
Atama bir kolaylık değil, zorunluluktur — kural dizisi kaynak ölçütünü okuyor ve okuyacak
bir şey bulması gerekiyor.
Ölçümün varsayımları:
- AG51 — Kırk akış kursun ortak kurgusundan üretilir; her akışın kaynağı, hedefi ve
bağlantı noktası kurgudandır. Kâhin
politikaişlevidir ve kurguyu biz yazdığımız için bilinir.politikabu derste değiştirilmez. - AG52 — Tünele giren akış toplayıcıda açılır ve sınıra oradan girer; sınır onu
politikaile değerlendirir. Uçtan uca kurguda değerlendirme, kaynağı atanan bölgeyle değiştirilmiş kayıt üzerinde yapılır. Değiştirilen şey kayıttır, işlev değildir. - AG53 — Tünele girmeyen akış uzak ucun yerel çıkışından gider. Hedefi dış bölgeyse ulaşır; iç bölgelerden birine gidiyorsa hiç ulaşmaz. Bu akışlar kural dizisine hiç uğramaz.
- AG54 — Dört seçici karşılaştırılır: tam tünel ve üç bölünmüş küme. Seçiciler yalnız hedef bölgesine bakar; kâhini kullanmazlar.
- AG55 — Uçtan uca kurguda atanan bölge ikinci bir eksendir ve tek başına ölçülür; seçici o ölçümde tam tünelde sabitlenir.
- AG56 — Küme kırk akıştır; ölçülebilen en küçük fark
1/40 = 0,025. Bundan küçük bir fark bu kümeyle savunulmaz.
Ölçüm
"""Tunel bir yonlendirme kurgusudur: secici hangi hedefi iceri aliyor. Bolum 1 - dort tunel secicisi, iki tunel kurgusunda. Bolum 2 - ucdan uca tunelin atadigi bolge tek basina ne yapiyor. """ TOHUM = 20260811 BOLGELER = ("dis", "dmz", "ic", "yonetim") def uretec(tohum): d = tohum % 2147483646 + 1 def r(n): nonlocal d d = (d * 48271) % 2147483647 return d % n return r def akislar(sayi=40, tohum=TOHUM): r, liste = uretec(tohum), [] for i in range(sayi): liste.append({"no": i + 1, "kaynak": BOLGELER[r(4)], "hedef": BOLGELER[r(4)], "bnokta": (80, 443, 22, 3306, 8080)[r(5)]}) return liste def politika(a): """Niyet: disaridan yalniz DMZ web kalemine; yonetime disaridan kimse.""" if a["kaynak"] == "dis": return a["hedef"] == "dmz" and a["bnokta"] in (80, 443) if a["kaynak"] == "dmz": return a["hedef"] == "ic" and a["bnokta"] == 3306 if a["kaynak"] == "yonetim": return True return a["hedef"] != "yonetim" def fark(olaylar, niyet, duzenek): d = {"dogru_gecti": 0, "dogru_durdu": 0, "yanlis_gecti": 0, "yanlis_durdu": 0} for o in olaylar: n, g = niyet(o), duzenek(o) if n and g: d["dogru_gecti"] += 1 elif not n and not g: d["dogru_durdu"] += 1 elif g: d["yanlis_gecti"] += 1 else: d["yanlis_durdu"] += 1 return d SECICILER = {"tam tünel": lambda a: True, "bölünmüş: iç": lambda a: a["hedef"] == "ic", "bölünmüş: iç, dmz": lambda a: a["hedef"] in ("ic", "dmz"), "bölünmüş: dış hariç": lambda a: a["hedef"] != "dis"} def siteler_arasi(secici): """Iki uc de gercek bir bolge; tunel yalniz yolu secer.""" def calis(a): if secici(a): return politika(a) return a["hedef"] == "dis" # secilmeyen akis dogrudan disari cikar return calis def uctan_uca(secici, atanan="ic"): """Uzak ucun kendi bolgesi yok; tunel ona bir bolge atar.""" def calis(a): if secici(a): return politika({**a, "kaynak": atanan}) return a["hedef"] == "dis" return calis ak = akislar() print(f"akış {len(ak)} | niyetin geçirdiği " f"{sum(1 for a in ak if politika(a))} | hedefi dış olan " f"{sum(1 for a in ak if a['hedef'] == 'dis')}") print() print(f"{'tünel seçici':<20s} {'seçilen':>7s} {'siteler arası':>25s}" f"{'uçtan uca':>26s}") print(f"{'':20s} {'':7s} {'doğru':>8s} {'fazla g':>8s} {'fazla d':>8s}" f" {'doğru':>8s} {'fazla g':>8s} {'fazla d':>8s}") for ad, s in SECICILER.items(): x, y = fark(ak, politika, siteler_arasi(s)), fark(ak, politika, uctan_uca(s)) print(f"{ad:<20s} {sum(1 for a in ak if s(a)):7d} " f"{x['dogru_gecti'] + x['dogru_durdu']:8d} {x['yanlis_gecti']:8d} " f"{x['yanlis_durdu']:8d} {y['dogru_gecti'] + y['dogru_durdu']:8d} " f"{y['yanlis_gecti']:8d} {y['yanlis_durdu']:8d}") print() print(f"{'atanan bölge':<14s} {'doğru':>6s} {'fazla geçen':>12s} " f"{'fazla duran':>12s} (tam tünel, uçtan uca)") for atanan in BOLGELER: d = fark(ak, politika, uctan_uca(SECICILER["tam tünel"], atanan)) print(f"{atanan:<14s} {d['dogru_gecti'] + d['dogru_durdu']:6d} " f"{d['yanlis_gecti']:12d} {d['yanlis_durdu']:12d}") print() print(f"{'seçilmeyenler':<20s} {'sayı':>5s} {'doğrudan çıkan':>15s} " f"{'ulaşamayan':>11s}") for ad, s in SECICILER.items(): disarida = [a for a in ak if not s(a)] print(f"{ad:<20s} {len(disarida):5d} " f"{sum(1 for a in disarida if a['hedef'] == 'dis'):15d} " f"{sum(1 for a in disarida if a['hedef'] != 'dis'):11d}")
akış 40 | niyetin geçirdiği 22 | hedefi dış olan 11
tünel seçici seçilen siteler arası uçtan uca
doğru fazla g fazla d doğru fazla g fazla d
tam tünel 40 40 0 0 25 11 4
bölünmüş: iç 10 24 6 10 21 9 10
bölünmüş: iç, dmz 18 30 6 4 25 11 4
bölünmüş: dış hariç 29 34 6 0 25 11 4
atanan bölge doğru fazla geçen fazla duran (tam tünel, uçtan uca)
dis 22 0 18
dmz 20 0 20
ic 25 11 4
yonetim 22 18 0
seçilmeyenler sayı doğrudan çıkan ulaşamayan
tam tünel 0 0 0
bölünmüş: iç 30 11 19
bölünmüş: iç, dmz 22 11 11
bölünmüş: dış hariç 11 11 0
Seçilmeyen Akış Nereye Gidiyor
Üst tablonun ilk satırı bir taban çizgisidir. Siteler arası tam tünelde kırk akışın kırkı tünelden geçiyor, her biri kendi bölgesiyle sınıra giriyor ve sonuç 40 doğru, 0 fazla geçen, 0 fazla duran. Tünel burada politikaya hiçbir şey eklemedi ve hiçbir şey eksiltmedi; yalnız uzak bölütü sınırın önüne taşıdı.
Seçici daraldığında iki yön birden konuşmaya başlıyor ve ikisi aynı kaynaktan gelmiyor.
Fazla duran, tünele alınmayan ve hedefi bir iç bölge olan akışlardan geliyor. Yerel
çıkıştan gitmeye çalışıyorlar, kuruma ulaşamıyorlar ve niyet onların bir bölümünü
geçirecekti. iç seçicisinde 10, iç, dmz seçicisinde 4, dış hariç
seçicisinde 0. Seçiciyi genişletmek bu yönü doğrudan düzeltiyor.
Fazla geçen ise seçici ne kadar genişlerse genişlesin 6’da sabit kalıyor. Kaynağı
alt tablonun son satırında: her üç bölünmüş kurulumda da tünele girmeyen akışların
11’inin hedefi dış bölgedir ve bu on biri yerel çıkıştan gerçekten ulaşır. Kâhin
bunların 6’sını durduracaktı — çünkü politika dış hedefli her akışı geçirmiyor. Seçiciyi
iç’ten dış hariç’e kadar genişletmek bu altısına dokunmuyor, çünkü üç seçicinin hiçbiri
dış hedefi tünele almıyor.
Örüntü şudur: bölünmüş tünelde fazla duran seçicinin darlığından, fazla geçen ise
seçicinin dışında bırakılanın kural dizisini hiç görmemesinden doğar. Birincisi seçici
genişletilerek kapanır, ikincisi kapanmaz — kapanması için seçicinin dış hedefi de
içine alması, yani bölünmüş tünelin bırakılıp tam tünele dönülmesi gerekir. dış hariç
satırı bunu birebir gösteriyor: fazla duran sıfırlanmış, fazla geçen hâlâ 6.
Sayıların büyüklüğü de kayda değer. Kırk akışlık bir kümede ölçülebilen en küçük fark
1/40 = 0,025’tir. Sabit kalan altı fazla geçen bu kümede 0,150, iç seçicisinin on
fazla duranı 0,250 eder; ikisi de bandın çok üstündedir. Tablodaki sıfırdan büyük her
satır farkı en az iki akış, yani 0,050’dir; hiçbir okuma tek bir akışa dayanmıyor.
Ölçümün taşıdığı iddia yine de sayıların kendisi değil, iki yönün ayrı kaynaklardan
gelmesidir: biri seçicinin darlığından, öbürü seçicinin dışında kalanın denetime hiç
uğramamasından.
Atanan Bölge Tek Başına Ne Yapıyor
Sağdaki üç sütun aynı seçicileri uçtan uca kurguda ölçüyor ve tablo değişiyor: tam
tünelde bile 25 doğru, 11 fazla geçen, 4 fazla duran. Kırk akışın kırkı tünelden
geçmesine rağmen sonuç bozuldu, çünkü bu kurguda akışlar sınıra kendi bölgeleriyle değil,
tünelin atadığı bölgeyle giriyor. Kural dizisi kaynak ölçütünü okuyor ve artık hepsinde
aynı değeri okuyor.
Orta tablo bu eksenin tamamını açıyor. Atanan bölge ic iken 11 fazla geçen, 4 fazla
duran. Atama dis’e çekilirse fazla geçen 0’a iner ve fazla duran 18’e çıkar:
tünelden gelen hiçbir akışa güvenilmemiş olur. Atama yonetim‘e açılırsa fazla geçen
18, fazla duran 0 olur: her akış en geniş bölgeye yerleştirilmiştir. dmz ise iki
yönü birden kötüleştiriyor — 0 ve 20 — çünkü politikanın DMZ’ye verdiği yol dar bir
yoldur ve uzak uçların gerçek dağılımına uymaz.
Dört satırın hiçbiri sıfır–sıfır vermiyor. Bunun nedeni yapısaldır: kırk akış dört ayrı kaynak bölgesinden geliyor ve tek bir atama onları tek bir bölgeye topluyor. Bir ayrımı taşıyan bilgi, tek bir değere eşlendiğinde geri getirilemez. Uçtan uca tünelin bedeli taşıdığı bayt değil, sildiği ayrımdır.
Silinen ayrımı geri getirmenin tek yolu, atamayı tek bir değer olmaktan çıkarmaktır:
her yetki kümesi için ayrı bir tünel kurmak ve her tünele kendi bölgesini atamak. Ölçüm bunu
doğrudan söylüyor — dört bölgeden gelen akış dört ayrı atama altında dört ayrı satır üretir
ve satırların hiçbiri öbürünün hatasını taşımaz. Bedeli kural tarafında görünür: tünel sayısı
kadar toplayıcı arayüzü, arayüz sayısı kadar kaynak değeri ve kural dizisinde o kadar
ayrı dal. Kural saymanın politikayı ölçmediğini kurs zaten söylemişti; burada tersi de
doğrudur — kuraldan kaçınmak da politikayı ölçmez, yalnız ayrımı ucuza kapatır.
Özet
- Tünel, kurulmadan önce bir yönlendirme kararıdır: tünel seçici hangi hedeflerin içeri alınacağını belirler, seçilmeyen akış kural dizisine hiç uğramaz.
- Siteler arası tam tünelde kırk akış 40 doğru, 0 fazla geçen, 0 fazla duran verir; tünel politikaya bir şey eklemez.
- Bölünmüş tünelde fazla duran seçicinin darlığından gelir ve genişletmeyle 10 → 4 → 0 iner; fazla geçen üç bölünmüş kurulumda da 6’da sabit kalır çünkü kaynağı seçicinin dışında bırakılan 11 dış hedefli akıştır.
- Uçtan uca kurguda tünel akışa bir bölge atamak zorundadır; tam tünelde bile sonuç 25 doğru, 11 fazla geçen, 4 fazla duran’a düşer.
- Atanan bölge tek başına iki yönü zıt yönlerde çeker:
disile 0 / 18,yonetimile 18 / 0. Dört bölgeden gelen akışı tek bir bölgeye toplamak, ayrımı geri getirilemez biçimde siler.
Sonraki Adım
Uçtan uca tünelin bütün numarası, dışarıdaki bir ucu kural dizisine içeriden gelmiş gibi
göstermektir. Bu numaranın zorunlu olmasının nedeni tek bir satırdadır: kural dizisi hâlâ
kaynak ölçütünü okuyor ve okuyacak bir bölge bekliyor. Sonraki ders bu beklentiyi
kaldırdığında ne olduğunu ölçer — kaynak ölçütü kural dizisinden çıkarıldığında kural
sayısı ve iki yönlü hata nasıl değişir, ve konum ölçütünün yerine ne konmak zorunda kalır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.