MAC ve abtables kullanarak IP sahtekarlığı nasıl önlenir?


10

Ebtables'ta IP-MAC eşleştirme kuralları oluşturmaya çalışıyorum . Mevcut çok az sayıda öğretici ve ilgili soru var [1], ancak belirli bir belirti var.

ÇEVRE: Çok fazla fiziksel ev sahibim var . Her ana bilgisayar birkaç tane ethernet kartına sahiptir, birbirine bağlanmıştır ve köprü için köle olarak kullanılmıştır. Her ana bilgisayarda (kvm, qemu, libvirt) pek çok sanal makine var. Her sanal makine, fiziksel ana bilgisayarının köprüsüne vnet [0-9] + adlı yeni bağlantı noktası üzerinden bağlanır. NAT yok. Ağ bağlantısı iyi çalışır, tüm fiziksel ana bilgisayarlar, tüm sanal makineler de pinglenebilir. Her sanal makinenin kendi IP adresi ve MAC adresi vardır.

SORUN: Sanal makinenin içinde IP adresi başka bir tane ile değiştirilebilir.

ÇÖZÜM ÇÖZÜM: ebtables sitesinde [2] bilinen bir çözüm var, ancak bu çözüm yalnızca bir ana bilgisayar kullanıldığında uygulanabilir. Tüm trafiğe izin verir ve IP’den izin verilenden başka bir MAC’a sahip bir paket varsa, paket bırakılır. Birden fazla ana bilgisayar varsa, mevcut tüm IP-MAC çiftlerinin tüm ana bilgisayarlara kaydedilmesini gerektirir. Ters politika çözümüne ihtiyaç var.

CRAFTED ÇÖZÜM: Ebeveynleri ters şekilde kullanmaya çalıştım. İşte ne denedim bir örnek.

ÖRNEK 1

Bridge table: filter
Bridge chain: INPUT, entries: 2, policy: DROP
-i bond0 -j ACCEPT 
-p IPv4 -s 54:52:0:98:d7:b6 --ip-src 192.168.11.122 -j ACCEPT 
Bridge chain: FORWARD, entries: 0, policy: ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

ÖRNEK 2

Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 1, policy: DROP
-p IPv4 -s 54:52:0:98:d7:b6 --ip-src 192.168.11.122 -j ACCEPT 
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

İstediğim şeyin özü, varsayılan DROP ilkesine sahip olmak ve yalnızca verilen ana bilgisayara dağıtılan doğru IP-MAC çifti ile sanal makinelerden gelen trafiğe izin vermektir. Ancak, bu çözümler işe yaramıyor.

SORU: Köprüde trafiğe yalnızca çalışan sanal makinelerin belirtilen IP-MAC çiftleri için izin vermek ve vnet [0-9] + bağlantı noktalarından gelen tüm bilinmeyen IP-MAC çiftlerini bırakmak nasıl?

Cevaplarınız için çok teşekkür ederim.


2
Ama, ya birileri mac'larını yaparsa?
Zoredache

1
Bu da bir problem. Ancak doğru IP-MAC çiftinin tahmin edilmesi çok zordur ve zamanında servisimin güvenlik seviyesini aşıyor.
Martin

Yanıtlar:


12

Sonunda çalışan bir çözüm üretmeyi başardım.

  1. Çözüm, abtables ve IP-MAC çiftlerini kullanıyor.
  2. Sadece gerekli tablo varsayılan 'filtre' tablodur.
  3. INPUT zincirinin çalışan sanal makinelerle ilgili olmadığından INPUT zincirine herhangi bir kural veya politika eklemenize gerek yoktur. Filtre tablosundaki GİRİŞ, ÇIKIŞ ve FORWARD zincirlerinin anlamlarının açıklanması ebtables sayfasındadır.
  4. Ebtablesetnet ethernet seviyesinde çalıştığından ve IP-MAC eşleşmesi sadece IP paketlerinde uygulanabildiğinden, kuralların ARP çerçevelerini ve diğer hayati trafiği engellememek için kurallara aykırı olması gerekir.

Dolayısıyla, başlangıçta, hiçbir kural yoktur ve tüm politikalar KABUL için ayarlanmıştır. Kullanıcı tanımlı zincir yok. Filtre tablosu şöyle görünür:

Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 0, policy: ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

Yeni bir zincir eklenir. Bu zincir izin verilen tüm IP-MAC çiftlerini içerir. Buna VMS denir.

# ebtables -N VMS

Şimdi, önemli kısım. Bağlantı noktası vnet [0-9] + 'dan köprüden geçen IP paketini (veya bölümlerini) içeren her çerçeve için, zincir politikası ve zincir VMS kurallarını uygulayın. Başka bir deyişle, herhangi bir sanal makineden gelen her IP paketi için VMS zincirini uygulayın.

# ebtables -A FORWARD -p ip -i vnet+ -j VMS

VMS zincirinin varsayılan politikası DROP olmalıdır. Bu şekilde, herhangi bir sanal makineden gelen her IP paketi varsayılan olarak iptal edilir. Daha sonra izin verilen IP-MAC çiftleri istisnaları eklendi. Varsayılan DROP ilkesi, bilinmeyen IP-MAC çifti olan herhangi bir sanal makineden gelen tüm trafiğin bir kerede düşürülmesine neden olarak IP sahtekarlığını imkansız hale getirir.

# ebtables -P VMS DROP

Masa filtresi şimdi bu şekilde görünüyor. Ayrıca, bu şekilde çalışan sanal makine olmadığında da (izin verilir) görünür.

Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 1, policy: ACCEPT
-p IPv4 -i vnet+ -j VMS
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
Bridge chain: VMS, entries: 0, policy: DROP

Diyelim ki iki koşu makinesi var. Onlara ping atmaya çalışırsak, trafik düşer ve hedefe ulaşılamaz. Bu, istenen bir sonuçtur, çünkü bu trafiğe henüz izin verilmedi. Her sanal makine trafiğine izin vermek için yalnızca bir komut yeterlidir.

# ebtables -A VMS -p ip --ip-src 192.168.11.125 -s 54:52:00:cc:35:fa -j ACCEPT
# ebtables -A VMS -p ip --ip-src 192.168.11.122 -s 54:52:00:98:d7:b6 -j ACCEPT

Artık izin verilen sanal makinelerden gelen trafik iyi akıyor ve IP sahtekarlığı önleniyor.

Bu çözüm kusurlu olabilir ve herhangi bir yorumunuz veya iyileştirmeniz varsa, bunları memnuniyetle duyacağım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.