เปเบ™เบฐเบ™เปเบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” Aya เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™ eBPF เปƒเบ™ Rust

เบเบฒเบ™เบ›เปˆเบญเบเบฅเบธเป‰เบ™เบ—เบณเบญเบดเบ”เบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ” Aya, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™ eBPF เบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆ kernel เปƒเบ™ Rust, เป„เบ”เป‰เบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒเปเบฅเป‰เบง. Linux เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡ virtual เบชเบฐเป€เบžเบฒเบฐเบ—เบตเปˆเบกเบต JIT. เบšเปเปˆเป€เบซเบกเบทเบญเบ™เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบžเบฑเบ”เบ—เบฐเบ™เบฒ eBPF เบญเบทเปˆเบ™เป†, Aya เบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰ libbpf เบซเบผเบทเบ•เบปเบงเบฅเบงเบšเบฅเบงเบก bcc, เปเบ•เปˆเบชเบฐเป€เปœเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เบ—เบตเปˆเบ‚เบฝเบ™เปƒเบ™ Rust เป€เบŠเบดเปˆเบ‡เปƒเบŠเป‰เบŠเบธเบ” libc crate เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบเบฒเบ™เป€เบญเบตเป‰เบ™เบฅเบฐเบšเบปเบš kernel เป‚เบ”เบเบเบปเบ‡. เบเบฒเบ™เบชเป‰เบฒเบ‡ Aya เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™ C toolchains เบซเบผเบทเป„เบŸเบฅเปŒ kernel header. เบฅเบฐเบซเบฑเบ”เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เปเบกเปˆเบ™เปเบˆเบเบขเบฒเบเบžเบฒเบเปƒเบ•เป‰เปƒเบšเบญเบฐเบ™เบธเบเบฒเบ” MIT เปเบฅเบฐ Apache 2.0.

เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆ เบชเบณ เบ„เบฑเบ™:

  • เบฎเบญเบ‡เบฎเบฑเบš BTF (เบฎเบนเบšเปเบšเบšเบ›เบฐเป€เบžเบ” BPF), เป€เบŠเบดเปˆเบ‡เปƒเบซเป‰เบ‚เปเป‰เบกเบนเบ™เบ›เบฐเป€เบžเบ”เปƒเบ™เบฅเบฐเบซเบฑเบ”เบ›เบญเบก BPF เบชเบณเบฅเบฑเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ›เบฐเป€เบžเบ” เปเบฅเบฐ เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบเบฑเบšเบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบชเบฐเปœเบญเบ‡เปƒเบซเป‰เป‚เบ”เบเป€เบ„เบตเป€เบ™เบฅเบ›เบฑเบ”เบˆเบธเบšเบฑเบ™. เบเบฒเบ™เปƒเบŠเป‰ BTF เบŠเปˆเบงเบเปƒเบซเป‰เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™ eBPF เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰เป‚เบ”เบเบšเปเปˆเบ•เป‰เบญเบ‡เบ„เบญเบกเป„เบžเบฅเปŒเบ„เบทเบ™เปƒเปเปˆเปƒเบ™เป€เบ„เบตเป€เบ™เบฅเบฅเบธเป‰เบ™เบ•เปˆเบฒเบ‡เป†. Linux.
  • เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ "bpf-to-bpf" เบเบฒเบ™เป‚เบ—, เบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป‚เบฅเบเปเบฅเบฐเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเบญเบเปเบšเบšเป‚เบ›เบผเปเบเบผเบกเบชเปเบฒเบฅเบฑเบš eBPF เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเป‚เบ›เปเบเบผเบกเบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเปƒเบŠเป‰ aya เป€เบ›เบฑเบ™ runtime เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบ„เบทเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™ eBPF.
  • เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ›เบฐเป€เบžเบ”เปเบเปˆเบ™เบ•เปˆเบฒเบ‡เป†, เบฅเบงเบกเบ—เบฑเบ‡เบญเบฒเป€เบฅเบ›เบปเบเบเบฐเบ•เบด, เปเบœเบ™เบ—เบตเปˆ hashes, stacks, เปเบ–เบง, stack traces, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš socket เปเบฅเบฐเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”.
  • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบ›เบฐเป€เบžเบ”เบ•เปˆเบฒเบ‡เป†เบ‚เบญเบ‡เป‚เบ›เบฅเปเบเบฅเบก eBTF, เบฅเบงเบกเบ—เบฑเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เปเบฅเบฐเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™, cgroup handlers เปเบฅเบฐเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ•เปˆเบฒเบ‡เป† socket, เป‚เบ„เบ‡เบเบฒเบ™ XDP.
  • เบฎเบญเบ‡เบฎเบฑเบšเปเบžเบฅเบ”เบŸเบญเบกเบชเบณเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปเบšเบšเบšเปเปˆเบŠเบดเป‰เบ‡เป‚เบ„เบ™เปƒเบ™เป‚เปเบ”เบšเปเปˆเบ–เบทเบเบšเบฅเบฑเบญเบ tokio เปเบฅเบฐ async-std.
  • เบเบฒเบ™เบ›เบฐเบเบญเบšเป„เบง, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบเบฒเบ™เบ›เบฐเบเบญเบš kernel เปเบฅเบฐเป„เบŸเบฅเปŒ header kernel.

เบ›เบฐเบˆเบธเบšเบฑเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบเบฑเบ‡เบ–เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡ - API เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เปƒเบซเป‰เปเบฑเป‰เบ™เบ„เบปเบ‡ เปเบฅเบฐ เบเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒเบขเบนเปˆ. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เบกเบตเบเบฒเบ™เบ™เบณเปƒเบŠเป‰เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบงเบฒเบ‡เปเบœเบ™เป„เบงเป‰เป€เบ—เบทเปˆเบญ. เบžเบฒเบเปƒเบ™เบ—เป‰เบฒเบเบ›เบตเบ™เบตเป‰, เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบซเบงเบฑเบ‡เบงเปˆเบฒเบˆเบฐเบ™เบณเป€เบญเบปเบฒเปœเป‰เบฒเบ—เบตเปˆเบ‚เบญเบ‡ Aya เบกเบฒเปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบš libbpf, เปเบฅเบฐ เบ›เปˆเบญเบเบฅเบธเป‰เบ™เบ—เบตเปˆเปเบฑเป‰เบ™เบ„เบปเบ‡เบฅเบธเป‰เบ™เบ—เบณเบญเบดเบ”เปƒเบ™เป€เบ”เบทเบญเบ™เบกเบฑเบ‡เบเบญเบ™ 2022. เบžเบงเบเป€เบ‚เบปเบฒเบเบฑเบ‡เบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเบฅเบงเบกเป€เบญเบปเบฒเบชเปˆเบงเบ™เบ•เปˆเบฒเบ‡เป†เบ‚เบญเบ‡ Aya เบ—เบตเปˆเบˆเบณเป€เบ›เบฑเบ™เบชเบณเบฅเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ” Rust เบชเบณเบฅเบฑเบš kernel. Linux เบ”เป‰เบงเบเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ•เปˆเบฒเบ‡เป†เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰ เปเบฅเบฐ เปƒเบŠเป‰เป€เบžเบทเปˆเบญเป‚เบซเบผเบ”, เบ„เบฑเบ”เบ•เบดเบ” เปเบฅเบฐ เบžเบปเบงเบžเบฑเบ™เบเบฑเบšเป‚เบ›เบฃเปเบเบฃเบก eBPF.

เป€เบ›เบฑเบ™เบเบฒเบ™เป€เบ•เบทเบญเบ™, eBPF เปเบกเปˆเบ™ kernel เบ—เบตเปˆเบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™ Linux เบ•เบปเบงเปเบ›เป„เบšเบ•เปŒเป‚เบ„เบ”เบ—เบตเปˆเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบเบฒเบ™เบ”เบณเป€เบ™เบตเบ™เบ‡เบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบ, เบ•เบดเบ”เบ•เบฒเบกเบเบงเบ”เบเบฒเบเบดเบ”เบˆเบฐเบเบณเบ‚เบญเบ‡เบฅเบฐเบšเบปเบš, เบชเบฐเบเบฑเบ”เบเบฑเป‰เบ™เบเบฒเบ™เป€เบญเบตเป‰เบ™เบฅเบฐเบšเบปเบš, เบ„เบงเบšเบ„เบธเบกเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡, เบ›เบฐเบกเบงเบ™เบœเบปเบ™เป€เบซเบ”เบเบฒเบ™เบ”เป‰เบงเบเบเบฒเบ™เบˆเบฑเบšเป€เบงเบฅเบฒ, เบ„เบดเบ”เป„เบฅเปˆเบ„เบงเบฒเบกเบ–เบตเปˆ เปเบฅเบฐ เป„เบฅเบเบฐเป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบฒเบ™เบ”เบณเป€เบ™เบตเบ™เบ‡เบฒเบ™, เปเบฅเบฐ เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเป‚เบ”เบเปƒเบŠเป‰ kprobes/uprobes/tracepoints. เบ‚เปเบ‚เบญเบšเปƒเบˆเบเบฑเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบก just-in-time (JIT), เป„เบšเบ•เปŒเป‚เบ„เบ”เบ–เบทเบเปเบ›เป€เบ›เบฑเบ™เบ„เบณเปเบ™เบฐเบ™เบณเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเป„เบ”เป‰เบ—เบฑเบ™เบ—เบต เปเบฅเบฐ เบ›เบฐเบ•เบดเบšเบฑเบ”เบ”เป‰เบงเบเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡. XDP เปƒเบซเป‰เบงเบดเบ—เบตเบเบฒเบ™เปƒเบ™เบเบฒเบ™เปเบฅเปˆเบ™เป‚เบ›เบฃเปเบเบฃเบก BPF เปƒเบ™เบฅเบฐเบ”เบฑเบšเป„เบ”เบฃเป€เบงเบตเป€เบ„เบทเบญเบ‚เปˆเบฒเบ, เบ”เป‰เบงเบเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป‚เบ”เบเบเบปเบ‡เบเบฑเบšเบšเบฑเบŸเป€เบŸเบตเปเบžเบฑเบเป€เบเบฑเบ” DMA, เป€เบฎเบฑเบ”เปƒเบซเป‰เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเบนเบ‡เบชเบณเบฅเบฑเบšเบเบฒเบ™เป‚เบซเบผเบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ—เบตเปˆเปœเบฑเบ.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เบŠเบทเป‰เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ DDoS, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ VPS VDS ๐Ÿ”ฅ เบŠเบทเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™ DDoS, เป€เบŠเบตเบšเป€เบงเบต VPS VDS | ProHoster