Parzûna pakêtê ya nftables 0.9.1 berdan

Piştî salek pêşveçûn pêşkêş kirin serbestberdana parzûna pakêtê nftables 0.9.1, wekî şûna iptables, ip6table, arptables û ebtables bi yekkirina navberên fîlterkirina pakêtê ji bo IPv4, IPv6, ARP û pirên torê pêşve diçe. Pakêta nftables hêmanên parzûna pakêtê yên ku di cîhê bikarhêner de dimeşin vedihewîne, dema ku xebata asta kernelê ji hêla binepergala nf_tables ve tê peyda kirin, ku ji berdana 3.13-an vir ve beşek ji kernel Linux-ê ye.

Asta kernel tenê navgînek serbixwe-protokolek gelemperî peyda dike ku fonksiyonên bingehîn ji bo derxistina daneyan ji pakêtan, pêkanîna operasyonên daneyê, û kontrolkirina herikînê peyda dike.
Mantiqa fîlterkirinê bixwe û rêvebirên protokol-taybet di cîhê bikarhêner de di nav bytekodê de têne berhev kirin, piştî ku ev bytekod bi karanîna navbeynkariya Netlink di nav kernelê de tê barkirin û di makîneyek virtual ya taybetî ya ku BPF (Parzeyên Pakêta Berkeley) tîne bîra xwe de tê darve kirin. Ev nêzîkatî dihêle hûn bi girîngî mezinahiya koda fîlterkirinê ya ku di asta kernelê de tê xebitandin kêm bikin û hemî fonksiyonên qaîdeyên parskirinê û mantiqê ji bo xebata bi protokolan re li cîhê bikarhêner biguhezînin.

Nûvekirinên sereke:

  • Piştgiriya IPsec, rê dide lihevhatina navnîşanên tunelê li ser bingeha pakêtê, ID-ya daxwaza IPsec, û nîşana SPI (Indeksa Parametreya Ewlekariyê). Bo nimûne,

    ... ipsec di ip saddr 192.168.1.0/24
    ... ipsec li spi 1-65536

    Di heman demê de gengaz e ku meriv kontrol bike ka rêyek di tunelek IPsec re derbas dibe. Mînakî, ji bo astengkirina trafîkê ne bi IPSec:

    … derana parzûnê rt ipsec winda winda dibe

  • Piştgiriya ji bo IGMP (Protokola Rêveberiya Koma Înternetê). Mînakî, hûn dikarin qaîdeyek bikar bînin da ku daxwazên endametiya koma IGMP-ê ya hatinî ji holê rakin

    nft qaîdeya netdev foo bar igmp-ê binivîsîne endametî-pirsgirêka dilopê zêde bike

  • Ihtîmala karanîna guhêrbaran ji bo danasîna zincîreyên veguheztinê (bazdan / goto). Bo nimûne:

    define dest = ber
    qaîdeya ip foo bar jump $dest zêde bike

  • Piştgiriya maskan ji bo naskirina pergalên xebitandinê (OS Fingerprint) li ser bingeha nirxên TTL di serî de. Mînakî, ji bo nîşankirina pakêtan li ser bingeha OS-ya şanderê, hûn dikarin fermanê bikar bînin:

    ... set nîşana meta osf ttl nexşeya navan derbas bike { "Linux" : 0x1,
    "Windows": 0x2,
    "MacOS": 0x3,
    "nenas" : 0x0 }
    ... osf ttl guhertoya derbasbûna "Linux: 4.20"

  • Qebûlbûna hevgirtina navnîşana ARP ya şander û navnîşana IPv4 ya pergala armanc. Mînakî, ji bo zêdekirina jimareya pakêtên ARP yên ku ji navnîşana 192.168.2.1 hatine şandin, hûn dikarin qaîdeya jêrîn bikar bînin:

    tablo arp x {
    zincîra y {
    Parzûna pêşîn a têketina hookê ya parzûnê; polîtîka qebûl dikin;
    arp saddr ip 192.168.2.1 pakêtên dijî 1 bytes 46
    }
    }

  • Piştgiriya şandina zelal a daxwaziyan bi navgînek (tproxy) ve. Mînakî, ji bo beralîkirina bangên port 80 berbi porta proxy 8080:

    tablo ip x {
    zincîra y {
    type Parzûna hook prerouting priority -150; polîtîka qebûl dikin;
    tcp dport 80 tproxy ji bo: 8080
    }
    }

  • Piştgiriya ji bo nîşankirina soketan bi şiyana ku meriv nîşana mîhengê bi riya setsockopt() di moda SO_MARK de bêtir bi dest bixe. Bo nimûne:

    sifrê inet x {
    zincîra y {
    type Parzûna hook prerouting priority -150; polîtîka qebûl dikin;
    tcp dport 8080 nîşana set soket nîşana
    }
    }

  • Piştgirî ji bo diyarkirina navên nivîsê yên pêşîn ên ji bo zincîran. Bo nimûne:

    nft lê zêde bike zincîra ip x raw { type filter hook prerouting priority raw; }
    nft zincîra ip x fîlterê zêde bike { filter hook prerouting priority filter; }
    nft ip zincîra lê zêde bike x filter_later { type filter hook prerouting filter priority + 10; }

  • Piştgiriya ji bo tagên SELinux (Secmark). Mînakî, ji bo danasîna etîketa "sshtag" di çarçoveyek SELinux de, hûn dikarin bixebitin:

    nft sshtag fîltera inet secmarkê zêde bike "system_u:object_r:ssh_server_packet_t:s0"

    Û paşê vê labelê di rêbazan de bikar bînin:

    nft qaîdeyê lê zêde bike têketina parzûna inet tcp dport 22 meta secmark set "sshtag"

    nft lê zêde bike nexşeya inet filter secmapping { type inet_service : secmark; }
    nft elementê zêde bike secmapping parzûna inet {22: "sshtag" }
    nft qaydeyê lê zêde bike inet filter têketina meta secmark set tcp dport map @secmapping

  • Qabiliyeta diyarkirina portên ku ji protokolan re di forma nivîsê de hatine destnîşankirin, wekî ku ew di pelê /etc/services de têne destnîşan kirin. Bo nimûne:

    nft qaîdeya xy tcp dport "ssh" zêde bike
    rêzikên lîsteya nft -l
    tablo x {
    zincîra y {
    ...
    tcp dport "ssh"
    }
    }

  • Kapasîteya kontrolkirina celebê pêwendiya torê. Bo nimûne:

    qaîdeya zêde bike inet raw prerouting meta iifkind "vrf" qebûl bike

  • Piştgiriya pêşkeftî ya ji bo nûvekirina dînamîkî ya naveroka koman bi eşkerekirina ala "dînamîk". Mînakî, ji bo nûvekirina set "s" ku navnîşana çavkaniyê lê zêde bike û heke 30 çirkeyan pakêt tune bin, têketinê ji nû ve saz bikin:

    tabloya x lê zêde bike
    lê zêde bike set xs { type ipv4_addr; size 128; dema 30s; alên dînamîk; }
    zincîra xy zêde bike { 0 }
    qaîdeya xy nûvekirinê zêde bike @s { ip saddr }

  • Kapasîteya danîna şertek demjimêrek cuda. Mînakî, ji bo derbaskirina dema xwerû ya ji bo pakêtên ku digihîjin porta 8888-ê, hûn dikarin diyar bikin:

    Parzûna ip-ya masê {
    ct timeout aggressive-tcp {
    protokola tcp;
    l3proto ip;
    polîtîka = {damezrandin: 100, nêzîk_bendî: 4, girtin: 4}
    }
    derketina zincîra {
    ...
    tcp dport 8888 ct set out time "aggressive-tcp"
    }
    }

  • Piştgiriya NAT ji bo malbata inet:

    sifrê inet nat {
    ...
    ip6 daddr mirî::2::1 dnat to dead:2::99
    }

  • Raporkirina xeletiya tîpê ya çêtir:

    nft testa parzûna zincîrê lê zêde bike

    Çewtî: Pelê an pelrêça wiha tune; Mebesta we di ip-ya malbatê de "filter" bû?
    test Parzûna zincîra zêde bike
    ^^^^^^^

  • Qabiliyeta diyarkirina navên navberê di nav koman de:

    set sc {
    inet_service binivîse. ifname
    element = {"ssh" . "eth0"}
    }

  • Hevoksaziya qaîdeyên flowtable nûvekirî:

    nft tabloya x lê zêde bike
    nft flowtable zêde bike x ft { hook ingress priority 0; cîhaz = { eth0, wlan0 }; }
    ...
    nft qaîdeya lê zêde bike x protokola ip-ya pêşde { tcp, udp } herikîne @ft

  • Piştgiriya JSON çêtir kirin.

Source: opennet.ru

Add a comment