nftables пакет чыпкасы 0.9.1 чыгаруу

Бир жылдык өнүгүүдөн кийин сунушталды пакет чыпкасы чыгаруу nftables 0.9.1, IPv6, IPv4, ARP жана тармак көпүрөлөрү үчүн пакет чыпкалоо интерфейстерин бириктирүү аркылуу iptables, ip6table, arptables жана ebtables алмаштыруучу катары өнүгүп жатат. nftables пакети колдонуучу мейкиндигинде иштеген пакет чыпкасынын компоненттерин камтыйт, ал эми ядро ​​деңгээлиндеги жумуш 3.13. чыгаруудан бери Linux ядросунун бир бөлүгү болгон nf_tables подсистемасы тарабынан камсыз кылынат.

Ядро деңгээли пакеттерден маалыматтарды алуу, маалымат операцияларын аткаруу жана агымды башкаруу үчүн негизги функцияларды камсыз кылган жалпы протоколдон көз карандысыз интерфейсти гана камсыз кылат.
Фильтрлөө логикасынын өзү жана протоколго тиешелүү иштеткичтер колдонуучу мейкиндигинде байткодго түзүлөт, андан кийин бул байт код Netlink интерфейсинин жардамы менен ядрого жүктөлөт жана BPFди (Беркли пакеттик чыпкалары) эске салган атайын виртуалдык машинада аткарылат. Бул ыкма ядро ​​деңгээлинде иштеген чыпкалоочу коддун көлөмүн бир топ кыскартууга жана талдоо эрежелеринин жана протоколдор менен иштөө логикасынын бардык функцияларын колдонуучу мейкиндигине жылдырууга мүмкүндүк берет.

Негизги инновациялар:

  • пакетке, IPsec суроо ID жана SPI (Коопсуздук Параметр индекси) тегине негизделген туннель даректерин дал келүүгө мүмкүндүк берген IPsec колдоосу. Мисалы,

    ... ipsec in ip saddr 192.168.1.0/24
    ... ipsec in spi 1-65536

    Маршруттун IPsec туннели аркылуу өтүшүн текшерүүгө да болот. Мисалы, IPSec аркылуу эмес, трафикти бөгөттөө үчүн:

    … чыпка чыгаруу rt ipsec missing drop

  • IGMP (Internet Group Management Protocol) колдоо. Мисалы, сиз кирүүчү IGMP тобуна мүчөлүк суроо-талаптарын жокко чыгаруу үчүн эрежени колдоно аласыз

    nft эрежесин кошуу netdev foo бар igmp түрү мүчө-суроо эсептегич түшүрүү

  • Өткөөл чынжырларды аныктоо үчүн өзгөрмөлөрдү колдонуу мүмкүнчүлүгү (секирүү / өтүү). Мисалы:

    dest = бер
    эрежесин кошуу ip foo бар секирүү $dest

  • Баштагы TTL маанилеринин негизинде операциялык системаларды (OS Fingerprint) аныктоо үчүн маскаларды колдоо. Мисалы, жөнөтүүчү OS негизинде пакеттерди белгилөө үчүн, сиз буйрукту колдоно аласыз:

    ... meta mark set osf ttl skip name map { "Linux" : 0x1,
    "Windows": 0x2,
    "MacOS": 0x3,
    "белгисиз" : 0x0 }
    ... osf ttl "Linux:4.20" версиясын өткөрүп жиберүү

  • Жөнөтүүчүнүн ARP дарегин жана максаттуу системанын IPv4 дарегин дал келүү мүмкүнчүлүгү. Мисалы, 192.168.2.1 дарегинен жөнөтүлгөн ARP пакеттеринин эсептегичтерин көбөйтүү үчүн төмөнкү эрежени колдонсоңуз болот:

    table arp x {
    чынжыр y {
    түрү чыпкасы илгич киргизүү артыкчылык чыпкасы; саясатты кабыл алуу;
    arp saddr ip 192.168.2.1 эсептегич пакеттер 1 байт 46
    }
    }

  • Прокси (tproxy) аркылуу суроо-талаптарды ачык жөнөтүүнү колдоо. Мисалы, чалууларды 80 портуна 8080 прокси портуна багыттоо үчүн:

    стол ip x {
    чынжыр y {
    түрү чыпкасы илгич алдын ала багыттоо артыкчылык -150; саясатты кабыл алуу;
    tcp dport 80 tproxyден :8080ге чейин
    }
    }

  • SO_MARK режиминде setsockopt() аркылуу белгиленген белгини андан ары алуу мүмкүнчүлүгү менен розеткаларды белгилөө үчүн колдоо. Мисалы:

    table inet x {
    чынжыр y {
    түрү чыпкасы илгич алдын ала багыттоо артыкчылык -150; саясатты кабыл алуу;
    tcp dport 8080 белги коюлган розетка белгиси
    }
    }

  • чынжырлар үчүн артыкчылыктуу текст аталыштарын көрсөтүү үчүн колдоо. Мисалы:

    nft кошуу чынжыр IP x raw { түрү чыпка илгич prerouting приоритет чийки; }
    nft чынжыр кошуу IP x чыпкасы { түрү фильтр илгич алдын ала багыттоо артыкчылык чыпкасы; }
    nft add chain ip x filter_later { type filter hook prerouting priority filter + 10; }

  • SELinux тэгдерин колдоо (Secmark). Мисалы, SELinux контекстинде "sshtag" тэгин аныктоо үчүн, сиз иштете аласыз:

    nft кошуу secmark inet чыпкасы sshtag "system_u:object_r:ssh_server_packet_t:s0"

    Анан эрежелерде бул белгини колдонуңуз:

    nft кошуу эреже inet чыпкасы киргизүү tcp dport 22 meta secmark топтому “sshtag”

    nft кошуу карта inet чыпкасы secmapping { type inet_service : secmark; }
    nft кошуу элементи inet чыпкасы сеcmapping {22: "sshtag" }
    nft кошуу эреже inet чыпкасы киргизүү мета secmark топтому tcp dport картасы @secmapping

  • /etc/services файлында аныкталгандай, протоколдорго дайындалган портторду текст түрүндө көрсөтүү мүмкүнчүлүгү. Мисалы:

    nft кошуу эрежеси xy tcp dport "ssh"
    nft тизме эрежелеринин топтому -l
    үстөл x {
    чынжыр y {
    ...
    tcp dport "ssh"
    }
    }

  • Тармак интерфейсинин түрүн текшерүү мүмкүнчүлүгү. Мисалы:

    inet raw prerouting эрежесин кошуу мета iifkind "vrf" кабыл алуу

  • "Динамикалык" желекти ачык көрсөтүү менен топтомдордун мазмунун динамикалык жаңыртуу үчүн жакшыртылган колдоо. Мисалы, булак дарегин кошуу үчүн "s" топтомун жаңыртуу үчүн жана 30 секунд ичинде пакеттер жок болсо, жазууну баштапкы абалга келтириңиз:

    таблица x кошуу
    xs топтомун кошуу { type ipv4_addr; өлчөмү 128; күтүү мөөнөтү 30с; желектер динамикалык; }
    чынжыр кошуу xy {түр фильтр илгич киргизүү приоритети 0; }
    эрежени кошуу xy жаңыртуу @s { ip saddr }

  • өзүнчө күтүү шартын коюу мүмкүнчүлүгү. Мисалы, 8888 портуна келген пакеттердин демейки күтүү убактысын жокко чыгаруу үчүн, сиз төмөнкүлөрдү белгилесеңиз болот:

    стол IP чыпкасы {
    ct timeout agressive-tcp {
    протокол tcp;
    l3proto ip;
    саясат = {түзүлгөн: 100, close_wait: 4, жабуу: 4}
    }
    чынжыр чыгаруу {
    ...
    tcp dport 8888 ct күтүү убакыты "агрессивдүү-tcp" коюлган
    }
    }

  • inet үй-бүлө үчүн NAT колдоо:

    стол inet nat {
    ...
    ip6 daddr өлгөн::2::1 днат өлгөнгө:2::99
    }

  • Жакшыртылган тамга катасы жөнүндө кабарлоо:

    nft чынжыр чыпкасы сыноо кошуу

    Ката: Мындай файл же каталог жок; үй-бүлөлүк IP'де таблица "фильтр" дегенди айткыңыз келдиби?
    чынжыр чыпкасы сыноо кошуу
    ^^^^^^

  • Интерфейс аттарын топтомдордо көрсөтүү мүмкүнчүлүгү:

    ск коюу {
    inet_service териңиз. ifname
    элементтер = { "ssh" . "eth0"}
    }

  • Жаңыртылган flowtable эрежелеринин синтаксиси:

    nft таблицаны x кошуу
    nft add flowtable x ft { hook ingress priority 0; түзмөктөр = { eth0, wlan0 }; }
    ...
    nft кошуу эрежеси x forward ip protocol { tcp, udp } flow add @ft

  • Жакшыртылган JSON колдоосу.

Source: opennet.ru

Комментарий кошуу