เปเบเบฅเบฐเบเบฑเบ kernel, เบเบฝเบเปเบเปเปเบเบฑเบเบเบปเบงเปเบเปเบเบญเบเปเบเบเปเบญเบเบฐเบฅเบฒเบเบเบญเบเปเบเปเบเบเบญเบเบเบปเปเบงเปเบเบเบตเปเบชเบฐเบซเบเบญเบเบซเบเปเบฒเบเบตเปเบเบทเปเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบฐเบเบฑเบเบเปเปเบกเบนเบเบเบฒเบเปเบเบฑเบเปเบเบฑเบ, เบเบฐเบเบดเบเบฑเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบญเบเบเปเปเบกเบนเบ, เปเบฅเบฐเบเบฒเบเบเบงเบเบเบธเบกเบเบฒเบเปเบซเบผ. เบเบปเบเบฅเบฐเบเบฝเบเบเบฒเบเบเบฑเปเบเบเบญเบเบเปเบงเบเบเบปเบเปเบญเบเปเบฅเบฐเบเบปเบงเบเบฑเบเบเบฒเบเบชเบฐเปเบเบฒเบฐเปเบเปเบเบเบญเบเปเบเปเบเบทเบเบฅเบงเบเบฅเบงเบกเปเบเบปเปเบฒเปเบเปเบ bytecode เบเปเบญเบเบเบนเปเปเบเป, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ bytecode เบเบตเปเบเบทเบเปเบซเบฅเบเปเบเบปเปเบฒเปเบเปเบ kernel เปเบเบเปเบเปเบเบฒเบเปเบเปเบเบญเบ Netlink เปเบฅเบฐเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบ kernel เปเบเปเบเบทเปเบญเบ virtual เบเบดเปเบชเบเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบ BPF (Berkeley Packet Filters). เบงเบดเบเบตเบเบฒเบเบเบตเปเปเบฎเบฑเบเปเบซเปเบกเบฑเบเบชเบฒเบกเบฒเบเบซเบผเบธเบเบฅเบปเบเบขเปเบฒเบเบซเบผเบงเบเบซเบผเบฒเบเบเบญเบเบฅเบฐเบซเบฑเบเบเบฒเบเบเบฑเปเบเบเบญเบเบเบตเปเปเบฅเปเบเบขเบนเปเปเบเบฅเบฐเบเบฑเบ kernel เปเบฅเบฐเบเปเบฒเบเบซเบเปเบฒเบเบตเปเบเบฑเบเบซเบกเบปเบเบเบญเบเบเบฒเบเปเบเบเบเบปเบเบฅเบฐเบเบฝเบเปเบฅเบฐเปเบซเบเบเบปเบเบเบญเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเปเบเปเบเบเบญเบเปเบเบปเปเบฒเปเบเปเบเบเบทเปเบเบเบตเปเบเบญเบเบเบนเปเปเบเป.
เบเบฐเบงเบฑเบเบเบฐเบเปเบฒเบเบปเปเบเบเป:
- เบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเปเบเบฑเบเปเบเบฑเบเปเบฅเบฐเบเบปเบงเบเบฑเบเบเบฒเบเบเบฐเบฅเบฒเบเบญเบเบเบตเปเบเปเบฝเบงเบเปเบญเบเบเบฑเบเบญเบปเบเบเบฐเบเบญเบเบเบตเปเบเปเบฒเบเบปเบเปเบงเปเปเบเปเบเบทเบเปเบเบตเปเบกเปเบเบปเปเบฒเปเบเบเบธเบ. เปเบเบทเปเบญเบเบเบฑเบเบเบทเบเปเบเบตเบเปเบเปเบเบฒเบเปเบเบเปเบเปเบเปเบฒ "counter":
เบเบฒเบเบฐเบฅเบฒเบ ip x {
เบเบฑเปเบ y {
เบเบฐเปเบเบเบเบญเบ ip saddr
เบงเบฝเบเบเบฒเบเบเปเบฒเบเบเบฒเบ
เบญเบปเบเบเบฐเบเบญเบ = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}เปเบชเป z {
type filter hook output filter เบเบนเบฅเบดเบกเบฐเบชเบดเบ; เบเบฐเปเบเบเบฒเบเบเบญเบกเบฎเบฑเบ;
ip daddr @y
}
} - เปเบเบทเปเบญเบเปเบฒเบเบปเบเบเปเบฒเปเบเบทเปเบญเบเบเบปเปเบเบเบญเบ counters, เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบเบปเบงเบขเปเบฒเบ, เปเบเบทเปเบญเบเบทเปเบเบเบน counters เบเบตเปเบเปเบฒเบเบกเบฒเบซเบผเบฑเบเบเบฒเบ restart, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเปเบเปเบฒเบชเบฑเปเบ "nft -f":
# cat ruleset.nft
เบเบฒเบเบฐเบฅเบฒเบ ip x {
เบเบฑเปเบ y {
เบเบฐเปเบเบเบเบญเบ ip saddr
เบงเบฝเบเบเบฒเบเบเปเบฒเบเบเบฒเบ
เบญเบปเบเบเบฐเบเบญเบ = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
counter p 192.168.10.135 counter packets 0 bytes 0 }
}เปเบชเป z {
type filter hook output filter เบเบนเบฅเบดเบกเบฐเบชเบดเบ; เบเบฐเปเบเบเบฒเบเบเบญเบกเบฎเบฑเบ;
ip daddr @y
}
}
# nft -f ruleset.nft
#nft เบเบปเบเบฅเบฐเบเบฝเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเป
เบเบฒเบเบฐเบฅเบฒเบ ip x {
เบเบฑเปเบ y {
เบเบฐเปเบเบเบเบญเบ ip saddr
เบงเบฝเบเบเบฒเบเบเปเบฒเบเบเบฒเบ
เบญเบปเบเบเบฐเบเบญเบ = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
counter p 192.168.10.135 counter packets 0 bytes 0 }
}เปเบชเป z {
type filter hook output filter เบเบนเบฅเบดเบกเบฐเบชเบดเบ; เบเบฐเปเบเบเบฒเบเบเบญเบกเบฎเบฑเบ;
ip daddr @y
}
} - เบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเปเบฒเบ counter เบเบฑเบเปเบเปเบเบทเบเปเบเบตเปเบกเปเบเบปเปเบฒเปเบ flowtable:
เบเบฒเบเบฐเบฅเบฒเบ ip foo {
เปเบเบ flowtable {
hook ingress เบเบนเบฅเบดเบกเบฐเบชเบดเบ -100
เบญเบธเบเบฐเบเบญเบ = {eth0, eth1 }
เบงเบฝเบเบเบฒเบเบเปเบฒเบเบเบฒเบ
}เบเปเบญเบเปเบชเปเบเปเปเบซเบเปเบฒ {
type filter hook forward filter เบเบนเบฅเบดเบกเบฐเบชเบดเบ;
flow add @bar counter
}
}เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเบฅเบฒเบเบเบทเปเบเบปเบงเบเบฑเบเปเบเบเปเบเปเบเปเบฒเบชเบฑเปเบ "conntrack -L":
tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 เปเบเบฑเบเปเบเบฑเบ=9 bytes=608 \
src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 เปเบเบฑเบเปเบเบฑเบ=8 bytes=428 [OFFLOAD] mark=0 \
sectx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
packets=1005763 bytes=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
packets=967505 bytes=50310268 [OFFLOAD] mark=0 secctx=null เปเบเป=2 - เปเบเบเบธเบเบชเปเบฒเบฅเบฑเบ concatenation (concatenation, bundles เบเบตเปเปเบเปเบเบญเบเบเบญเบเบเบตเปเบขเบนเปเปเบฅเบฐเบเบญเบเบเบตเปเบเปเบฒเบเบเบฒเบเบเบฝเบเบเบฝเบ), เบกเบฑเบเปเบเบฑเบเปเบเปเบเปเบเบตเปเบเบฐเปเบเปเบเปเบฒเบชเบฑเปเบ "typeof", เปเบเบดเปเบเบเปเบฒเบเบปเบเบเบฐเปเบเบเบเบญเบเบเปเปเบกเบนเบเบเบญเบเบญเบปเบเบเบฐเบเบญเบเบเบญเบเบญเบปเบเบเบฐเบเบญเบเบเบญเบเบญเบปเบเบเบฐเบเบญเบเบเบญเบเบเบธเบ:
เบเบฒเบเบฐเบฅเบฒเบ ip foo {
เบเบฑเปเบเบเบฑเบเบเบตเบเบฒเบง {
เบเบฐเปเบเบเบเบญเบ ip saddr . tcp dport
เบญเบปเบเบเบฐเบเบญเบ = { 192.168.10.35 . 80, 192.168.10.101. 80}
}เปเบเบเปเบชเป {
type filter hook prerouting priority filter; เบเบฐเปเบเบเบฒเบเบซเบผเบธเบเบฅเบปเบ;
ip เบเปเป. tcp dport @whitelist เบเบญเบกเบฎเบฑเบ
}
} - เบเบฐโเปเบเบโเบเบญเบโเบเปเบฒโเบชเบฑเปเบโเปเบโเบเบฑเบโเบเบธโเบเบฑเบโเบเบฑเบโเบเปเบฒโเปเบเปโเบเบฑเบโเบเบฒเบโเปเบเบปเปเบฒโเบฎเปเบงเบกโเปเบโเบฅเบฒเบโเบเบฒเบโเปเบเบโเบเบตเปโ:
เบเบฒเบเบฐเบฅเบฒเบ ip foo {
เปเบเบเบเบตเป addr2mark {
เบเบฐเปเบเบเบเบญเบ ip saddr . tcp dport: เปเบเบทเปเบญเบเบซเบกเบฒเบ meta
เบญเบปเบเบเบฐเบเบญเบ = { 192.168.10.35 . 80 : 0x00000001 ,
192.168.10.135. 80 : 0x00000002 }
}เปเบเบเปเบชเป {
type filter hook prerouting priority filter; เบเบฐเปเบเบเบฒเบเบซเบผเบธเบเบฅเบปเบ;
meta mark set ip daddr . tcp dport เปเบเบเบเบตเป @addr2mark เบเบญเบกเบฎเบฑเบ
}
} - เปเบเบตเปเบกโเบเบฒเบโเบชเบฐโเบซเบเบฑเบโเบชเบฐโเบซเบเบนเบโเบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเปเบเบปเปเบฒโเบฎเปเบงเบกโเปเบฅโเบเบฐโเปเบโเบเบธเบโเบเปเปโเบฅเบฐโเบเบธโเบเบทเป (เบเปเปโเบกเบตโเบเบทเปโ)โ:
# nft เปเบเบตเปเบกเบเบปเบเบฅเบฐเบเบฝเบ inet filter input ip daddr . tcp dport\
{ 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } เบเบญเบกเบฎเบฑเบ - เบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเบเบปเบเปเบฅเบตเบเปเบเบฑเบเปเบเบฑเบเบเบตเปเบกเบตเบเบธเบ 802.1q (VLAN) เปเบกเบทเปเบญเบเบฐเบกเบงเบเบเบปเบเบเบปเบงเปเบเบทเบญเบเปเบฒเบเบเบทเบเบชเบฐเปเบญเบเปเบซเป:
# nft เปเบเบตเปเบกเบเบปเบเบฅเบฐเบเบฝเบเบเบปเบง foo bar ether เบเบฐเปเบเบ vlan เบเบฐเบเบดเปเบชเบเบเปเบงเบเบเบฒเบเบเบฑเบ tcp
- เปเบเบตเปเบกเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเบเบเบนเปเปเบเบ TCP session identifier (conntrack ID). เปเบเบทเปเบญเบเปเบฒเบเบปเบ conntrack ID, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเปเบเบฒเบเปเบฅเบทเบญเบ "--output id":
# conntrack -L โoutput id
udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 เบเบธเบ=2 \
bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 เปเบเบฑเบเปเบเบฑเบ=2 bytes=320 \
[เบฎเบฑเบเบเบฐเบเบฑเบ] mark=0 use=1 id=2779986232# nft เปเบเบตเปเบกเบเบปเบเบฅเบฐเบเบฝเบ foo bar ct id 2779986232 counter
เปเบซเบผเปเบเบเปเปเบกเบนเบ: opennet.ru