Ọkwa kernel na-enye naanị interface nke nwere onwe nke protocol nke na-enye ọrụ ndị bụ isi maka iwepụta data na ngwugwu, ịrụ ọrụ data, yana njikwa ọsọ. A na-achịkọta iwu nzacha na ndị na-ahụ maka usoro protocol n'ime bytecode na oghere onye ọrụ, mgbe nke a gasịrị, a na-etinye bytecode a n'ime kernel site na iji interface Netlink wee gbuo ya na kernel na igwe mebere pụrụ iche na-echetara BPF (Berkeley Packet Filters). Usoro a na-enye gị ohere ibelata nha nke koodu nzacha na-agba ọsọ na ọkwa kernel wee bugharịa ọrụ niile nke iwu nyocha na mgbagha maka ịrụ ọrụ na protocol n'ime oghere onye ọrụ.
Isi ihe ọhụrụ:
- Agbakwunyela nkwado maka ngwugwu na ọnụ ahịa okporo ụzọ jikọtara ihe ndị etinyere na nhazi. A na-enyere ndị na-agụta ihe aka site na iji mkpụrụokwu “counter”:
okpokoro ip x {
set y {
ụdị ip saddr
counter
ọcha = {192.168.10.35, 192.168.10.101, 192.168.10.135}
}yinye z {
ụdị nyo nko mmepụta mkpa nzacha; iwu nabata;
ip baba @y
}
} - Iji tọọ ụkpụrụ mbụ nke counters, dịka ọmụmaatụ, iji weghachite counters gara aga ka ịmalitegharịa, ị nwere ike iji iwu "nft -f":
# nwamba ruleset.nft
okpokoro ip x {
set y {
ụdị ip saddr
counter
ọcha = {192.168.10.35 ngwugwu counter 1 bytes 84, 192.168.10.101 \
counter p 192.168.10.135 mpempe akwụkwọ 0 bytes 0}
}yinye z {
ụdị nyo nko mmepụta mkpa nzacha; iwu nabata;
ip baba @y
}
}
# nft -f ruleset.nft
#nft ndepụta iwu
okpokoro ip x {
set y {
ụdị ip saddr
counter
ọcha = {192.168.10.35 ngwugwu counter 1 bytes 84, 192.168.10.101 \
counter p 192.168.10.135 mpempe akwụkwọ 0 bytes 0}
}yinye z {
ụdị nyo nko mmepụta mkpa nzacha; iwu nabata;
ip baba @y
}
} - agbakwunyela nkwado counter na flowtable:
table ip foo {
mmanya na-agbagharị agbagharị {
nko ntinye mkpa -100
ngwaọrụ = {eth0, eth1}
counter
}yinye n'ihu {
ụdị nyo nko n'ihu nzacha mkpa;
eruba tinye @bar counter
}
}Ị nwere ike ịlele ndepụta nke counters site na iji iwu "conntrack -L":
tcp 6 src = 192.168.10.2 dst = 10.0.1.2 egwuregwu = 47278 dport = 5201 ngwugwu = 9 bytes = 608 \
src = 10.0.1.2 dst = 10.0.1.1 egwuregwu = 5201 dport = 47278 ngwugwu = 8 bytes = 428 [OFFLOAD] akara = 0 \
sectx = ojiji efu = 2 tcp 6 src = 192.168.10.2 dst = 10.0.1.2 egwuregwu = 47280 dport = 5201 \
ngwugwu = 1005763 bytes=44075714753 src=10.0.1.2 dst=10.0.1.1 egwuregwu=5201 dport=47280 \
ngwugwu = 967505 bytes=50310268 [OFFLOAD] akara = 0 secx = ojiji efu = 2 - N'ime usoro maka njikọta (concatenation, ụfọdụ ngwugwu adreesị na ọdụ ụgbọ mmiri na-eme ka ntụnyere dị mfe), enwere ike iji ntuziaka "typeof", nke na-ekpebi ụdị data nke ihe maka akụkụ nke ihe mejupụtara:
table ip foo {
tọọ akwụkwọ ọcha {
ụdị ip saddr . tcp dport
ihe = {192.168.10.35 . 80, 192.168.10.101. 80}
}mmanya yinye {
ụdị nko nko prerouting mkpa nzacha; ọdịda amụma;
ip baba. tcp dport @whitelist nabata
}
} - Ụdị ntuziaka a na-emetụtakwa na nsonye na ndepụta maapụ:
table ip foo {
map addr2mark {
ụdị ip saddr . tcp dport: akara meta
ihe = {192.168.10.35 . 80: 0x00000001,
192.168.10.135. 80: 0x00000002 }
}mmanya yinye {
ụdị nko nko prerouting mkpa nzacha; ọdịda amụma;
meta mark set ip daddr . tcp dport maapụ @addr2mark nabata
}
} - Nkwado agbakwunyere maka nsonye na-esonye na nhazi ahaghị aha (akpọghị aha):
# nft tinye iwu inet filter ntinye ip daddr. tcp dport \
{10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } nabata - Ikike ịtụfu ngwugwu nwere ọkọlọtọ 802.1q (VLAN) mgbe enyere akwa mmiri netwọkụ:
# nft tinye iwu bridge foo bar ether ụdị vlan jụrụ na tcp nrụpụta
- Nkwado agbakwunyere maka dakọtara site na njirimara oge TCP (NJ conntrack). Iji chọpụta njirimara conntrack, ị nwere ike iji nhọrọ "--output id":
# conntrack -L — mmepụta id
udp 17 18 src=192.168.2.118 dst=192.168.2.1 egwuregwu=36424 dport=53 ngwugwu=2 \
bytes=122 src=192.168.2.1 dst=192.168.2.118 egwuregwu=53 dport=36424 ngwugwu =2 bytes=320 \
[AKWỤKWỌ] akara = 0 ojiji=1 id=2779986232# nft tinye iwu foo bar ct id 2779986232 counter
isi: opennet.ru