Нусхаи филтри бастаи nftables 0.9.1

Пас аз як соли рушд пешниҳод карда мешавад озод кардани филтри баста nftables 0.9.1, ҳамчун ивазкунандаи iptables, ip6table, arptables ва ebtables тавассути муттаҳид кардани интерфейсҳои филтркунии пакетҳо барои IPv4, IPv6, ARP ва пулҳои шабакавӣ таҳия карда мешавад. Бастаи nftables ҷузъҳои филтри бастаҳоро дар бар мегирад, ки дар фазои корбар кор мекунанд, дар ҳоле ки кори сатҳи ядро ​​аз ҷониби зерсистемаи nf_tables таъмин карда мешавад, ки аз замони нашри 3.13 қисми ядрои Linux мебошад.

Сатҳи ядро ​​​​танҳо интерфейси мустақили протоколро таъмин мекунад, ки вазифаҳои асосиро барои истихроҷи додаҳо аз пакетҳо, иҷрои амалиёти додаҳо ва назорати ҷараён таъмин мекунад.
Худи мантиқи филтркунӣ ва коркардкунандагони махсуси протокол дар фазои корбар ба байткод тартиб дода мешаванд, ки пас аз он ин байткод ба ядро ​​бо истифода аз интерфейси Netlink бор карда мешавад ва дар мошини махсуси виртуалӣ, ки BPF (Беркли Пакет Филтрҳо)-ро ба ёд меорад, иҷро мешавад. Ин равиш ба шумо имкон медиҳад, ки андозаи коди филтркуниро, ки дар сатҳи ядро ​​кор мекунад, хеле кам кунед ва тамоми функсияҳои қоидаҳои таҳлил ва мантиқи кор бо протоколҳоро ба фазои корбар интиқол диҳед.

Навовариҳои асосӣ:

  • Дастгирии IPsec, имкон медиҳад, ки суроғаҳои нақб дар асоси баста, ID дархости IPsec ва теги SPI (Индекси Параметрҳои Амният) мувофиқат кунад. Барои намуна,

    ... ipsec дар ip saddr 192.168.1.0/24
    ... ipsec дар spi 1-65536

    Инчунин тафтиш кардан мумкин аст, ки оё масир аз нақби IPsec мегузарад. Масалан, барои бастани трафик на тавассути IPSec:

    … филтр баромади rt ipsec тарки гумшуда

  • Дастгирии IGMP (Протоколи идоракунии гурӯҳи Интернет). Масалан, шумо метавонед қоидаеро истифода баред, то дархостҳои воридшудаи узвият дар гурӯҳи IGMP-ро рад кунед

    nft илова кардани қоида netdev foo bar igmp навъи узвият-пурсиш тарки ҳисобкунак

  • Имконияти истифодаи тағирёбандаҳо барои муайян кардани занҷирҳои гузариш (ҷаҳидан / goto). Барои намуна:

    таъинот = бер
    илова кардани қоида ip foo bar jump $dest

  • Дастгирии ниқобҳо барои муайян кардани системаҳои оператсионӣ (OS Fingerprint) дар асоси арзишҳои TTL дар сарлавҳа. Масалан, барои қайд кардани пакетҳо дар асоси ОС ирсолкунанда шумо метавонед фармонро истифода баред:

    ... meta mark set osf ttl гузаред харитаи ном { "Linux" : 0x1,
    "Windows": 0x2,
    "MacOS": 0x3,
    "номаълум": 0x0 }
    ... osf ttl гузаред версияи "Linux:4.20"

  • Имконияти мувофиқ кардани суроғаи ARP-и ирсолкунанда ва суроғаи IPv4-и системаи ҳадаф. Масалан, барои зиёд кардани ҳисобкунаки бастаҳои ARP аз суроғаи 192.168.2.1 фиристодашуда шумо метавонед қоидаи зеринро истифода баред:

    ҷадвали arp x {
    занҷир y {
    навъи филтр қалмоқ филтри афзалияти вуруд; қабули сиёсат;
    arp saddr ip 192.168.2.1 пакетҳои муқобил 1 байт 46
    }
    }

  • Дастгирии интиқоли шаффофи дархостҳо тавассути прокси (tproxy). Масалан, барои интиқоли зангҳо ба порти 80 ба прокси 8080:

    ҷадвали ip x {
    занҷир y {
    навъи филтр қалмоқе пеш аз масир афзалият -150; қабули сиёсат;
    tcp dport 80 tproxy ба: 8080
    }
    }

  • Дастгирии тамғагузории розеткаҳо бо имкони минбаъд ба даст овардани тамғаи муқарраршуда тавассути setsockopt() дар реҷаи SO_MARK. Барои намуна:

    ҷадвали inet x {
    занҷир y {
    навъи филтр қалмоқе пеш аз масир афзалият -150; қабули сиёсат;
    tcp dport 8080 тамғаи маҷмӯи васлаки
    }
    }

  • Дастгирии муайян кардани номҳои матнии афзалиятнок барои занҷирҳо. Барои намуна:

    nft илова занҷираи ip x хом { навъи филтр қалмоқе prerouting афзалият хом; }
    nft илова занҷираи ip x филтр { навъи филтр қалмоқе пеш аз масир филтри афзалиятнок; }
    nft илова занҷири ip x filter_later { навъи филтр қалмоқе пеш аз масир филтри афзалиятнок + 10; }

  • Дастгирии барчаспҳои SELinux (Secmark). Масалан, барои муайян кардани теги "sshtag" дар контексти SELinux, шумо метавонед иҷро кунед:

    nft илова кунед secmark inet filter sshtag "system_u:object_r:ssh_server_packet_t:s0"

    Ва он гоҳ ин нишонаро дар қоидаҳо истифода баред:

    nft илова кардани қоида inet вуруди филтр tcp dport 22 meta secmark маҷмӯи "sshtag"

    nft илова кардани харитаи inet филтри secmapping {навъи inet_service: secmark; }
    nft илова кардани элементи филтри секмаппатсия {22: "sshtag" }
    nft илова қоида inet филтр вуруди meta secmark маҷмӯи tcp dport харитаи @secmapping

  • Имконияти муайян кардани портҳое, ки ба протоколҳо дар шакли матн таъин шудаанд, зеро онҳо дар файли /etc/services муайян шудаанд. Барои намуна:

    nft илова кардани қоида xy tcp dport "ssh"
    nft рӯйхати қоидаҳо -l
    ҷадвали x {
    занҷир y {
    ...
    tcp dport "ssh"
    }
    }

  • Имконияти тафтиши намуди интерфейси шабака. Барои намуна:

    Иловаи қоида inet хом prerouting мета iifkind "vrf" қабул

  • Дастгирии мукаммал барои ба таври динамикӣ навсозии мундариҷаи маҷмӯаҳо тавассути нишон додани парчами "динамикӣ". Масалан, барои навсозии маҷмӯи "s" барои илова кардани суроғаи манбаъ ва аз нав танзимкунии вуруд, агар дар тӯли 30 сония ягон баста мавҷуд набошад:

    ҷадвали x илова кунед
    илова маҷмӯи xs {навъи ipv4_addr; андоза 128; вақти тамомшавии 30 сония; парчамҳои динамикӣ; }
    илова занҷири xy {навъи филтр қалмоқе афзалияти вуруди 0; }
    илова кардани қоида xy навсозӣ @s { ip saddr }

  • Имконияти муқаррар кардани ҳолати ҷудогонаи вақт. Масалан, барои бекор кардани вақти пешфарз барои бастаҳои ба порти 8888 воридшаванда, шумо метавонед муайян кунед:

    филтри ҷадвали IP {
    ct timeout aggressive-tcp {
    протоколи tcp;
    l3proto ip;
    сиёсат = {таъсис: 100, close_wait: 4, пӯшидан: 4}
    }
    баромади занҷир {
    ...
    tcp dport 8888 ct timeout set "aggressive-tcp"
    }
    }

  • Дастгирии NAT барои оилаи inet:

    table inet nat {
    ...
    ip6 даддр мурда::2::1 днат ба мурда:2::99
    }

  • Гузориш оид ба хатогиҳои чопӣ беҳтар карда шудааст:

    nft санҷиши филтри занҷирро илова кунед

    Хатогӣ: Чунин файл ё директория нест; Оё шумо дар IP оилаи ҷадвали "филтр" -ро дар назар доред?
    санҷиши филтри занҷирро илова кунед
    ^^^^^^

  • Имконияти муайян кардани номҳои интерфейс дар маҷмӯаҳо:

    танзим sc {
    inet_service нависед. ifname
    элементҳо = {"ssh". "eth0" }
    }

  • Синтаксиси навшудаи қоидаҳои ҷадвали ҷорӣ:

    nft ҷадвали x илова кунед
    nft add flowtable x ft { афзалияти вуруди қалмоқ 0; дастгоҳҳо = {eth0, wlan0}; }
    ...
    nft add rule x forward ip protocol {tcp, udp } flow add @ft

  • Дастгирии беҳтаршудаи JSON.

Манбаъ: opennet.ru

Илова Эзоҳ