nftables paket filtre sürümü 0.9.1

Bir yıllık geliştirmenin ardından gönderilen paket filtre sürümü NFTables 0.9.1IPv6, IPv4, ARP ve ağ köprüleri için paket filtreleme arayüzlerini birleştirerek iptables, ip6table, arptables ve ebtables'ın yerine geçecek şekilde geliştiriliyor. Nftables paketi, kullanıcı alanında çalışan paket filtre bileşenlerini içerirken çekirdek düzeyindeki çalışma, 3.13 sürümünden bu yana Linux çekirdeğinin bir parçası olan nf_tables alt sistemi tarafından sağlanır.

Çekirdek düzeyi yalnızca paketlerden veri çıkarmak, veri işlemlerini gerçekleştirmek ve akış kontrolü için temel işlevleri sağlayan genel protokolden bağımsız bir arayüz sağlar.
Filtreleme mantığının kendisi ve protokole özgü işleyiciler, kullanıcı alanında bayt kodu halinde derlenir, ardından bu bayt kodu Netlink arayüzü kullanılarak çekirdeğe yüklenir ve BPF'yi (Berkeley Paket Filtreleri) anımsatan özel bir sanal makinede yürütülür. Bu yaklaşım, çekirdek düzeyinde çalışan filtreleme kodunun boyutunu önemli ölçüde azaltmanıza ve protokollerle çalışmaya yönelik tüm ayrıştırma kuralları ve mantık işlevlerini kullanıcı alanına taşımanıza olanak tanır.

Ana yenilikler:

  • Pakete, IPsec istek kimliğine ve SPI (Güvenlik Parametre Dizini) etiketine göre tünel adreslerinin eşleştirilmesine olanak tanıyan IPsec desteği. Örneğin,

    ... ip saddr'da ipsec 192.168.1.0/24
    ... spi'de ipsec 1-65536

    Bir rotanın IPsec tünelinden geçip geçmediğini kontrol etmek de mümkündür. Örneğin, IPSec aracılığıyla olmayan trafiği engellemek için:

    … filtre çıkışı rt ipsec eksik düşüş

  • IGMP (İnternet Grup Yönetimi Protokolü) desteği. Örneğin, gelen IGMP grup üyeliği isteklerini reddetmek için bir kural kullanabilirsiniz

    nft kural ekle netdev foo bar igmp türü üyelik sorgusu sayacı düşüşü

  • Geçiş zincirlerini tanımlamak için değişkenleri kullanma imkanı (atlama / gitme). Örneğin:

    hedefi tanımla = ber
    kural ekle ip foo bar $hedefe atla

  • Başlıktaki TTL değerlerine göre işletim sistemlerini (OS Parmak İzi) tanımlamaya yönelik maske desteği. Örneğin, gönderenin işletim sistemine göre paketleri işaretlemek için şu komutu kullanabilirsiniz:

    ... meta işaret seti osf ttl isim haritasını atla { "Linux" : 0x1,
    "Pencereler": 0x2,
    "MacOS": 0x3,
    "bilinmiyor" : 0x0 }
    ... osf ttl "Linux:4.20" sürümünü atla

  • Gönderenin ARP adresi ile hedef sistemin IPv4 adresini eşleştirme yeteneği. Örneğin 192.168.2.1 adresinden gönderilen ARP paketlerinin sayacını artırmak için şu kuralı kullanabilirsiniz:

    tablo arp x {
    zincir y {
    filtre kancası giriş önceliği filtresini yazın; politika kabul;
    arp saddr ip 192.168.2.1 sayaç paketleri 1 bayt 46
    }
    }

  • İsteklerin bir proxy (tproxy) aracılığıyla şeffaf bir şekilde iletilmesi desteği. Örneğin, 80 numaralı bağlantı noktasına yapılan çağrıları proxy bağlantı noktası 8080'e yönlendirmek için:

    tablo ip x {
    zincir y {
    tip filtre kancası ön yönlendirme önceliği -150; politika kabul;
    tcp dport 80 tproxy'den :8080'e
    }
    }

  • SO_MARK modunda setsockopt() yoluyla ayar işaretini daha fazla elde etme yeteneği ile soketleri işaretleme desteği. Örneğin:

    tablo inet x {
    zincir y {
    tip filtre kancası ön yönlendirme önceliği -150; politika kabul;
    tcp dport 8080 işareti seti soket işareti
    }
    }

  • Zincirler için öncelikli metin adlarını belirleme desteği. Örneğin:

    nft zincir ekle ip x raw { type filtre kancası ön yönlendirme önceliği ham; }
    nft zincir ekle ip x filtresi { type filter hook ön yönlendirme öncelik filtresi; }
    nft zincir ekle ip x filter_later { type filtre kancası ön yönlendirme önceliği filtresi + 10; }

  • SELinux etiketleri (Secmark) desteği. Örneğin, SELinux bağlamında "sshtag" etiketini tanımlamak için şunu çalıştırabilirsiniz:

    nft secmark inet filtresi sshtag'i "system_u:object_r:ssh_server_packet_t:s0" ekleyin

    Daha sonra bu etiketi kurallarda kullanın:

    nft kural ekle inet filtre girişi tcp dport 22 meta secmark seti “sshtag”

    nft harita ekle inet filtre secmapping { type inet_service : secmark; }
    nft add element inet filtre secmapping { 22 : "sshtag" }
    nft kural ekle inet filtresi giriş meta secmark seti tcp dport haritası @secmapping

  • Protokollere atanan bağlantı noktalarını /etc/services dosyasında tanımlandığı gibi metin biçiminde belirtme yeteneği. Örneğin:

    nft kural ekle xy tcp dport "ssh"
    nft listesi kural kümesi -l
    tablo x {
    zincir y {
    ...
    tcp bağlantı noktası "ssh"
    }
    }

  • Ağ arayüzünün türünü kontrol edebilme. Örneğin:

    kural ekle inet ham ön yönlendirme meta iifkind "vrf" kabul et

  • "Dinamik" bayrağını açıkça belirterek kümelerin içeriğini dinamik olarak güncellemeye yönelik geliştirilmiş destek. Örneğin, kaynak adresini eklemek üzere "s" kümesini güncellemek ve 30 saniye boyunca paket yoksa girişi sıfırlamak için:

    x tablosunu ekle
    set xs ekle { ipv4_addr yazın; boyut 128; zaman aşımı 30 saniye; bayraklar dinamik; }
    zincir ekle xy { type filtre kancası giriş önceliği 0; }
    kural ekle xy update @s { ip saddr }

  • Ayrı bir zaman aşımı koşulu ayarlama yeteneği. Örneğin, 8888 numaralı bağlantı noktasına gelen paketler için varsayılan zaman aşımını geçersiz kılmak üzere şunları belirtebilirsiniz:

    tablo ip filtresi {
    ct zaman aşımı agresif-tcp {
    protokol tcp;
    l3proto ip;
    politika = {kuruldu: 100, close_wait: 4, kapat: 4}
    }
    zincir çıkışı {
    ...
    tcp dport 8888 ct zaman aşımı seti "agresif-tcp"
    }
    }

  • inet ailesi için NAT desteği:

    tablo girişi nat {
    ...
    ip6 daddr öldü::2::1 dnat'tan öldü:2::99
    }

  • Geliştirilmiş yazım hatası hatası raporlaması:

    nft zincir filtre testi ekleme

    Hata: Böyle bir dosya veya dizin yok; aile IP'sindeki tablo "filtresini" mi kastettiniz?
    zincir filtre testi ekle
    ^^^^^^

  • Setler halinde arayüz adlarını belirtme yeteneği:

    sc'yi ayarla {
    inet_service yazın. ifname
    öğeler = { "ssh" . "et0" }
    }

  • Güncellenmiş akış tablosu kuralları sözdizimi:

    nft x tablosunu ekle
    nft add flowtable x ft { kanca giriş önceliği 0; cihazlar = { eth0, wlan0 }; }
    ...
    nft kural ekle x ileri ip protokolü { tcp, udp } akış ekle @ft

  • Geliştirilmiş JSON desteği.

Kaynak: opennet.ru

Yorum ekle