- Açık portları saldırı yüzeyi olarak değerlendirmek ve gereksizleri kapatmak
- “İlk eşleşen kazanır” ilkesiyle güvenlik duvarı kuralları kurmak
- VPN'lerin ve Wi-Fi standartlarının neye karşı koruduğunu ve neye karşı korumadığını bilmek
- MITM, DNS sahteciliği ve DDoS'u tanımak ve savunma seçmek
Murad okul kulübü için evde küçük bir web sunucusu kurdu. Ertesi sabah kayıtlarda tanımadığı adreslerden 22 ve 3389 numaralı portlara binlerce bağlantı denemesi gördü. Kimse onu özellikle hedef seçmemişti: tarayıcılar bütün interneti durmadan yoklar. Bu derste bir ağı nasıl savunacağımızı öğreneceğiz.
Portlar ve saldırı yüzeyi
IP adresi bir binaya, port ise bir kapı numarasına benzer (0–65535). Her açık portun arkasında bir hizmet çalışır ve her hizmet olası bir giriş yoludur. Dışarıdan erişilebilen tüm giriş noktalarının toplamına saldırı yüzeyi denir. Altın kural: ihtiyacın olmayan her şeyi kapat.
| Port | Hizmet | Öneri |
|---|---|---|
| 22 | SSH | yalnızca VPN ya da izinli adreslerden; parola yerine anahtarlar |
| 23 | Telnet | şifresiz — kapat |
| 80 | HTTP | yalnızca HTTPS'e yönlendirmek için |
| 443 | HTTPS | herkese açık web sitesi için açık |
| 3306 | MySQL | asla internete açık olmamalı |
| 3389 | RDP | doğrudan internete değil, yalnızca VPN arkasında |
Güvenlik duvarı (firewall)
Güvenlik duvarı (firewall), trafiği kurallarla süzer: yön, protokol, port, kaynak ve hedef adres. Kurallar yukarıdan aşağıya kontrol edilir, ilk eşleşen kural kazanır ve son kural “geri kalan her şeyi engelle”dir. Durum izleyen (stateful) bir güvenlik duvarı kurulmuş bağlantıları hatırlar; bu yüzden senin gönderdiğin isteklere gelen yanıtlar ayrı bir kural olmadan geçer.
import ipaddress
RULES = [
('allow', 'tcp', 443, '0.0.0.0/0'), # HTTPS from anywhere
('allow', 'tcp', 22, '10.0.0.0/24'), # SSH only from the office LAN
('deny', 'any', None, '0.0.0.0/0'), # everything else
]
def decide(proto, port, src):
for action, r_proto, r_port, r_net in RULES:
if r_proto not in ('any', proto):
continue
if r_port is not None and r_port != port:
continue
if ipaddress.ip_address(src) in ipaddress.ip_network(r_net):
return action
return 'deny'
for packet in [('tcp', 443, '203.0.113.7'), ('tcp', 22, '10.0.0.15'),
('tcp', 22, '203.0.113.7'), ('tcp', 3306, '10.0.0.15')]:
print(packet, '->', decide(*packet))▸ Beklenen çıktı
('tcp', 443, '203.0.113.7') -> allow
('tcp', 22, '10.0.0.15') -> allow
('tcp', 22, '203.0.113.7') -> deny
('tcp', 3306, '10.0.0.15') -> deny203.0.113.x adresleri belgelerdeki örnekler için ayrılmıştır, 10.0.0.0/24 ise iç ofis ağıdır.VPN ve Wi-Fi
VPN, cihazınla bir VPN sunucusu (ya da şirket ağı) arasında şifreli bir tünel kurar: güvenilmeyen bir ağda trafiği korur ve iç kaynaklara uzaktan erişim sağlar. Ancak VPN seni anonim yapmaz, oltalamaya ve kötü amaçlı yazılıma karşı korumaz; güvenini internet sağlayıcısından VPN hizmetine taşır. Modern protokoller: WireGuard, IPsec, OpenVPN.
| Wi-Fi modu | Değerlendirme |
|---|---|
| Açık ağ | radyo bağlantısı şifrelenmez; yalnızca HTTPS ve VPN ile |
| WEP | çoktan kırıldı, asla kullanma |
| WPA2 (AES) | uzun bir parola cümlesiyle kabul edilebilir |
| WPA3 (SAE) | en iyisi: parolanın çevrim dışı tahminine karşı dirençlidir |
Büyük ağlarda bir başka önemli yöntem segmentasyondur: ağ ayrı bölgelere ayrılır (ofis bilgisayarları, sunucular, kameralar, misafirler) ve bölgeler arasında yalnızca gerçekten gereken trafiğe izin verilir. Bir kamera ele geçirilse bile saldırgan oradan muhasebe sunucusuna geçemez. Bölge sınırlarında IDS/IPS sistemleri şüpheli trafiği tespit eder ya da engeller.
Yaygın saldırılar ve savunma
| Saldırı | Fikir | Savunma |
|---|---|---|
| Ortadaki adam (MITM) | saldırgan seninle site arasına girer, örneğin sahte bir “Ücretsiz_WiFi” noktasıyla, ve trafiği okur ya da değiştirir | HTTPS ve HSTS, sertifika uyarılarını ciddiye almak, halka açık ağlarda VPN |
| DNS sahteciliği | DNS çözümleyicisi sahte bir yanıt alır ve alan adı saldırganın IP'sine yönelir | DNSSEC, şifreli DNS (DoH, DoT), güvenilir bir çözümleyici; TLS sertifika kontrolü sahte siteyi ortaya çıkarır |
| DDoS | binlerce ele geçirilmiş cihaz (botnet) bir hizmeti isteklerle boğar | CDN ve temizleme hizmetleri, istek sınırlama, yedek kapasite, sağlayıcıyla önceden hazırlanmış bir plan |
Okulun internet bağlantısı 1 Gbit/s. Bir botnette 10.000 cihaz var ve her biri 2 Mbit/s gönderiyor. Bağlantı kaç kat aşılır?
Çözümü gösterÇözümü gizle
Oran: 20 Gbit/s : 1 Gbit/s = 20 kat.
Sonuç: paketler sunucuya ulaşmadan bağlantı dolar; bu yüzden sunucudaki güvenlik duvarı işe yaramaz. Süzme daha yukarıda, sağlayıcıda ya da bir CDN'de yapılmalıdır.
Ofisteki bilgisayarlar DNS sunucusuna (UDP, port 53) erişemiyor. RULES listesine UDP 53'e yalnızca 10.0.0.0/24 ağından izin veren bir kural ekle. Çıktı allow, deny, deny olsun diye kuralı doğru yere koy.
import ipaddress
RULES = [
('allow', 'tcp', 443, '0.0.0.0/0'),
('allow', 'tcp', 22, '10.0.0.0/24'),
('deny', 'any', None, '0.0.0.0/0'),
]
# add a rule for DNS: udp, port 53, office LAN only
def decide(proto, port, src):
for action, r_proto, r_port, r_net in RULES:
if r_proto not in ('any', proto):
continue
if r_port is not None and r_port != port:
continue
if ipaddress.ip_address(src) in ipaddress.ip_network(r_net):
return action
return 'deny'
print(decide('udp', 53, '10.0.0.15'))
print(decide('udp', 53, '198.51.100.4'))
print(decide('tcp', 23, '10.0.0.15'))▸ Beklenen çıktı
allow deny deny
Önemli noktalar
- Her açık port saldırı yüzeyinin bir parçasıdır; gereksiz portları kapat, yönetim portlarını internete açma.
- Güvenlik duvarı kuralları yukarıdan aşağıya kontrol edilir, ilk eşleşen kazanır ve en sonda “her şeyi engelle” durur.
- VPN trafiği tünel içinde korur ama anonimlik sağlamaz ve oltalamaya karşı korumaz.
- Wi-Fi için en iyisi WPA3'tür, WPA2 uzun bir parola cümlesiyle kabul edilebilir, WEP ise işe yaramaz.
- MITM'e karşı HTTPS ve sertifika kontrolü, DNS sahteciliğine karşı DNSSEC, DDoS'a karşı yukarı akışta süzme işe yarar.
Kendini test et
10 soru. Her doğru cevap XP kazandırır.