Izinga le-kernel linikeza kuphela isixhumi esibonakalayo esizimele esijwayelekile esihlinzeka ngemisebenzi eyisisekelo yokukhipha idatha emaphaketheni, ukwenza imisebenzi yedatha, nokulawula ukugeleza. Imithetho yokuhlunga kanye nezibambi eziqondene nephrothokholi kuhlanganiswa ku-bytecode esikhaleni somsebenzisi, ngemva kwalokho le-bytecode ilayishwa ku-kernel kusetshenziswa isixhumi esibonakalayo se-Netlink futhi isetshenziswe ku-kernel emshinini okhethekile osikhumbuza i-BPF (Izihlungi ze-Berkeley Packet). Le ndlela ikuvumela ukuthi unciphise ngokuphawulekayo usayizi wekhodi yokuhlunga egijima ezingeni le-kernel futhi uhambise yonke imisebenzi yemithetho yokuhlukanisa kanye nengqondo yokusebenza namaphrothokholi endaweni yomsebenzisi.
Okuqanjiwe okuyinhloko:
- Usekelo lwezibali zephakethe nethrafikhi ezihlotshaniswa nesethi yezakhi zengezwe kumasethi. Izibali zinikwe amandla kusetshenziswa igama elingukhiye elithi “counter”:
ithebula ip x {
setha y {
uhlobo lwe-ip saddr
Counter
izici = { 192.168.10.35, 192.168.10.101, 192.168.10.135}
}iketango z {
thayipha isihlungi se-hook yokuphuma kuqala kwesihlungi; yamukela inqubomgomo;
ip baba @y
}
} - Ukusetha amanani okuqala okubala, ngokwesibonelo, ukubuyisela izinto zokubala zangaphambilini ngemuva kokuqalisa kabusha, ungasebenzisa umyalo othi “nft -f”:
# cat ruleset.nft
ithebula ip x {
setha y {
uhlobo lwe-ip saddr
Counter
izinto = { 192.168.10.35 counter amaphakethe 1 byte 84, 192.168.10.101 \
counter p 192.168.10.135 counter amaphakethe 0 amabhayithi 0 }
}iketango z {
thayipha isihlungi se-hook yokuphuma kuqala kwesihlungi; yamukela inqubomgomo;
ip baba @y
}
}
# nft -f ruleset.nft
Isethi yemithetho yohlu engu-#nft
ithebula ip x {
setha y {
uhlobo lwe-ip saddr
Counter
izinto = { 192.168.10.35 counter amaphakethe 1 byte 84, 192.168.10.101 \
counter p 192.168.10.135 counter amaphakethe 0 amabhayithi 0 }
}iketango z {
thayipha isihlungi se-hook yokuphuma kuqala kwesihlungi; yamukela inqubomgomo;
ip baba @y
}
} - Ukusekelwa kwekhawunta nakho kungeziwe ku-flowtable:
ithebula ip foo {
ibha egelezayo {
i-hook ingress priority -100
amadivayisi = { eth0, eth1 }
Counter
}iketango phambili {
thayipha isihlungi sehhuku yokuya phambili isihlungi esibalulekile;
geleza engeza @bar counter
}
}Ungabuka uhlu lwezinto zokubala usebenzisa umyalo “contrack -L”:
tcp 6 src=192.168.10.2 dst=10.0.1.2 ezemidlalo=47278 dport=5201 amaphakethe=9 bytes=608\
src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 amaphakethe=8 bytes=428 [KHIPHA] mark=0 \
secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 ezemidlalo=47280 dport=5201 \
amaphakethe=1005763 amabhayithi=44075714753 src=10.0.1.2 dst=10.0.1.1 ezemidlalo=5201 dport=47280 \
amaphakethe=967505 amabhayithi=50310268 [KHISHIWE] mark=0 secctx=null use=2 - Kumasethi okuhlanganisa (i-concatenation, inqwaba yamakheli nezimbobo ezenza ukuqhathanisa kube lula), kuyenzeka kusetshenziswe umyalelo othi “typeof”, onquma uhlobo lwedatha lwezingxenye zezakhi zesethi:
ithebula ip foo {
setha uhlu olumhlophe {
uhlobo lwe-ip saddr. tcp dport
izakhi = { 192.168.10.35 . 80, 192.168.10.101. 80}
}ibha yeketango {
thayipha isihlungi sehuku yokulungiselela isihlungi esibalulekile; ukwehla kwenqubomgomo;
ip baba. tcp dport @whitelist vuma
}
} - I-typeof Directive manje iyasebenza kwabajoyina ohlwini lwamamephu:
ithebula ip foo {
imephu addr2mark {
uhlobo lwe-ip saddr. tcp dport: meta mark
izakhi = { 192.168.10.35 . 80 : 0x00000001,
192.168.10.135. 80 : 0x00000002 }
}ibha yeketango {
thayipha isihlungi sehuku yokulungiselela isihlungi esibalulekile; ukwehla kwenqubomgomo;
I-meta mark set ip daddr. imephu ye-tcp dport @addr2mark yamukela
}
} - Ukusekela okungeziwe kobubanzi kujoyina kumasethi angaziwa (angaqanjwanga):
# nft engeza umthetho we-inet filter input ip daddr. tcp dport\
{ 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } vuma - Ikhono lokulahla amaphakethe anamafulegi angu-802.1q (VLAN) lapho kucutshungulwa amabhuloho enethiwekhi kunikezwa:
# nft engeza ibhuloho lokubusa i-foo bar ether uhlobo lwe-vlan yenqaba ngokusetha kabusha kwe-tcp
- Kwengezwe usekelo lokufanisa ngesihlonzi seseshini ye-TCP (i-ID yokuxhumana). Ukuze unqume i-ID ye-conntrack, ungasebenzisa inketho "--output id":
# contrack -L -i-id yokuphumayo
udp 17 18 src=192.168.2.118 dst=192.168.2.1 ezemidlalo=36424 dport=53 amaphakethe=2 \
bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 amaphakethe=2 bytes=320\
[OKUQINISEKISIWE] umaka=0 ukusetshenziswa=1 id=2779986232# nft add rule foo bar ct id 2779986232 counter
Source: opennet.ru