рдХрдВрдкрдиреА рдореЗрдВ, DDoS рд╣рдорд▓реЛрдВ рдХрд╛ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдЯреАрдо рдХреЛ "рдкреИрдХреЗрдЯ рдбреНрд░реЙрдкрд░" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдмрдХрд┐ рдЕрдиреНрдп рд╕рднреА рдЯреАрдореЗрдВ рд╣рдорд╛рд░реЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реЗ рдЯреНрд░реИрдлрд┐рдХ рдХреЗ рд╕рд╛рде рд╢рд╛рдВрдд рдЪреАрдЬреЗрдВ рдХрд░ рд░рд╣реА рд╣реИрдВ, рд╣рдореЗрдВ рдЗрд╕рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рддрд░реАрдХреЗ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдордЬрд╝рд╛ рдЖрддрд╛ рд╣реИред
рдлреЛрдЯреЛ: рдмреНрд░рд╛рдпрди рдЗрд╡рд╛рдВрд╕ , рд╕реАрд╕реА рдмрд╛рдп-рдПрд╕рдП 2.0рдбреАрдбреАрдУрдПрд╕ рд╣рдорд▓реЛрдВ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЯ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЯ рдХреЛ рдХрдИ рд╕реНрддрд░реЛрдВ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖ рд╣реИрдВред рдХрдЯреМрддреА рдХреЗ рддрд╣рдд, рд╣рдо рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХреА рдЧрдИ рд╣рд░ рдЪреАрдЬ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред
рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯ: рдкреНрд░рд╕реНрддреБрдд рдХреБрдЫ рдЖрджреЗрд╢реЛрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ, рдкрдардиреАрдпрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╣рдЯрд╛ рджрд┐рдП рдЧрдП рдереЗред
рдкрд░реАрдХреНрд╖рдг рд╕реНрдерд▓
рддрд░реАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЖрдкрдХреЛ рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдХреГрддреНрд░рд┐рдорддрд╛ рдХреЗ рдХрд╛рд░рдг, рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд▓реЗрддреЗ рд╣реИрдВред рд╣рдо рдЕрдкрдиреЗ рдЗрдВрдЯреЗрд▓ 10Gb / s рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдб рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╢реЗрд╖ рд╕рд░реНрд╡рд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЗрддрдиреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реАрдорд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдирд╣реАрдВред
рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдВрдЧреЗ:
- рд╣рдо рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЫреЛрдЯреЗ рдпреВрдбреАрдкреА рдкреИрдХреЗрдЯреЛрдВ рдХрд╛ рднрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ 14 рдорд┐рд▓рд┐рдпрди рдкреИрдХреЗрдЯ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХреЗ рдореВрд▓реНрдп рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ;
- рдпрд╣ рд╕рднреА рдЯреНрд░реИрдлрд╝рд┐рдХ рдЪрдпрдирд┐рдд рд╕рд░реНрд╡рд░ рдХреЗ рдПрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рд╣рдо рдПрдХрд▓ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдкрд░ рдХрд░реНрдиреЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдкреИрдХреЗрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВред
рдЕрдзрд┐рдХрддрдо рд▓реЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреГрддреНрд░рд┐рдо рдЯреНрд░реИрдлрд╝рд┐рдХ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ: рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЖрдИрдкреА рдкрддреЗ рдФрд░ рдкреНрд░реЗрд╖рдХ рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ tcpdump рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ:
$ tcpdump -ni vlan100 -c 10 -t udp and dst port 1234 IP 198.18.40.55.32059 > 198.18.0.12.1234: UDP, length 16 IP 198.18.51.16.30852 > 198.18.0.12.1234: UDP, length 16 IP 198.18.35.51.61823 > 198.18.0.12.1234: UDP, length 16 IP 198.18.44.42.30344 > 198.18.0.12.1234: UDP, length 16 IP 198.18.106.227.38592 > 198.18.0.12.1234: UDP, length 16 IP 198.18.48.67.19533 > 198.18.0.12.1234: UDP, length 16 IP 198.18.49.38.40566 > 198.18.0.12.1234: UDP, length 16 IP 198.18.50.73.22989 > 198.18.0.12.1234: UDP, length 16 IP 198.18.43.204.37895 > 198.18.0.12.1234: UDP, length 16 IP 198.18.104.128.1543 > 198.18.0.12.1234: UDP, length 16
рдЪрдпрдирд┐рдд рд╕рд░реНрд╡рд░ рдкрд░, рд╕рднреА рдкреИрдХреЗрдЯ рдПрдХ рдЖрд░рдПрдХреНрд╕ рдХрддрд╛рд░ рдореЗрдВ рдмрди рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕рд▓рд┐рдП, рдПрдХ рдХреЛрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рдЗрд╕реЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
ethtool -N ext0 flow-type udp4 dst-ip 198.18.0.12 dst-port 1234 action 2
рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдПрдХ рдЬрдЯрд┐рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рдЬрдм рд╣рдордиреЗ рдкрд░реАрдХреНрд╖рдг рддреИрдпрд╛рд░ рдХрд┐рдП, рддреЛ рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╕рдХреНрд░рд┐рдп рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА
tcpdump
рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдЦрд░рд╛рдм рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ:
$ ss -A raw,packet_raw -l -p|cat Netid State Recv-Q Send-Q Local Address:Port p_raw UNCONN 525157 0 *:vlan100 users:(("tcpdump",pid=23683,fd=3))
рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЗрдВрдЯреЗрд▓ рдЯрд░реНрдмреЛ рдмреВрд╕реНрдЯ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ:
echo 1 | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЯрд░реНрдмреЛ рдмреВрд╕реНрдЯ рдПрдХ рдорд╣рд╛рди рдЪреАрдЬ рд╣реИ рдФрд░ рдХрдо рд╕реЗ рдХрдо 20% рд╕реЗ рдереНрд░реВрдкреБрдЯ рдмрдврд╝рддрд╛ рд╣реИ, рдпрд╣ рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдорд╛рдирдХ рд╡рд┐рдЪрд▓рди рдХреЛ рдХрд╛рдлреА рдЦрд░рд╛рдм рдХрд░рддрд╛ рд╣реИред рдЯрд░реНрдмреЛ рдХреЗ рд╕рд╛рде, рд╡рд┐рдЪрд▓рди bo 1.5% рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХреЗрд╡рд▓ 0.25% рд╣реЛрддрд╛ рд╣реИред

рдЪрд░рдг 1. рдЖрд╡реЗрджрди рдореЗрдВ рдкреИрдХреЗрдЯ рдЫреЛрдбрд╝реЗрдВ
рдЖрдЗрдП рдЖрд╡реЗрджрди рд╕реЗ рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдкреНрд░рдпреЛрдЧ рдХреА рдИрдорд╛рдирджрд╛рд░реА рдХреЗ рд▓рд┐рдП, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ iptables рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ:
iptables -I PREROUTING -t mangle -d 198.18.0.12 -p udp --dport 1234 -j ACCEPT iptables -I PREROUTING -t raw -d 198.18.0.12 -p udp --dport 1234 -j ACCEPT iptables -I INPUT -t filter -d 198.18.0.12 -p udp --dport 1234 -j ACCEPT
рдЖрд╡реЗрджрди рдПрдХ рд╕рд░рд▓ рдЪрдХреНрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рддреБрд░рдВрдд рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
s = socket.socket(AF_INET, SOCK_DGRAM) s.bind(("0.0.0.0", 1234)) while True: s.recvmmsg([...])
рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА
рдХреЛрдб рддреИрдпрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рднрд╛рдЧреЛ:
$ ./dropping-packets/recvmmsg-loop packets=171261 bytes=1940176
рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХрд░реНрдиреЗрд▓ рдХреЛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХрддрд╛рд░ рд╕реЗ рдХреЗрд╡рд▓ 175 рд╣рдЬрд╛рд░ рдкреИрдХреЗрдЯ рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐
mmwatch
рдФрд░
рд╣рдорд╛рд░реА mmwatch
рджреНрд╡рд╛рд░рд╛ рдорд╛рдкрд╛ рдЧрдпрд╛ рдерд╛:
$ mmwatch 'ethtool -S ext0|grep rx_2' rx2_packets: 174.0k/s
рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 14 рдорд┐рд▓рд┐рдпрди рдкреИрдХреЗрдЯ рд╕рд░реНрд╡рд░ рдкрд░ рдЖрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдорд╛рддреНрд░рд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
mpstat
рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ:
$ watch 'mpstat -u -I SUM -P ALL 1 1|egrep -v Aver' 01:32:05 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 01:32:06 PM 0 0.00 0.00 0.00 2.94 0.00 3.92 0.00 0.00 0.00 93.14 01:32:06 PM 1 2.17 0.00 27.17 0.00 0.00 0.00 0.00 0.00 0.00 70.65 01:32:06 PM 2 0.00 0.00 0.00 0.00 0.00 100.00 0.00 0.00 0.00 0.00 01:32:06 PM 3 0.95 0.00 1.90 0.95 0.00 3.81 0.00 0.00 0.00 92.38
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рдЕрдбрд╝рдЪрди рдирд╣реАрдВ рд╣реИ: CPU # 1 рдХрд╛ рдЙрдкрдпреЛрдЧ 27.17% + 2.17% рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЗрдВрдЯрд░рдкреНрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ CPU # 2 рдкрд░ 100% рддрдХ рд╣реЛрддреА рд╣реИред
recvmessagge(2)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред рд╕реНрдкреЗрдХреНрдЯрд░ рднреЗрджреНрдпрддрд╛ рдХрд╛ рдкрддрд╛
рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж , рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд
рдХреЗрдкреАрдЯреАрдЖрдИ рдФрд░
рд░реЗрдЯрдкреЙрд▓рд┐рди рдХреЗ рдХрд╛рд░рдг рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдФрд░ рднреА рдЕрдзрд┐рдХ рдорд╣рдВрдЧреЗ рд╣реЛ рдЧрдП
$ tail -n +1 /sys/devices/system/cpu/vulnerabilities/* ==> /sys/devices/system/cpu/vulnerabilities/meltdown <== Mitigation: PTI ==> /sys/devices/system/cpu/vulnerabilities/spectre_v1 <== Mitigation: __user pointer sanitization ==> /sys/devices/system/cpu/vulnerabilities/spectre_v2 <== Mitigation: Full generic retpoline, IBPB, IBRS_FW
рдЪрд░рдг 2. рд╣рддреНрдпрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛
рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрдВрд╡рд░реНрдЯ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдИрдкреА рдФрд░ рдкреНрд░реЗрд╖рдХ рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рд▓реЛрдб рдХрд┐рдпрд╛ред рдЯреЗрд╕реНрдЯ рдХреЗ рджреМрд░рд╛рди рдХреЙрдирдЯреНрд░реИрдХ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рд╣рдо рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$ conntrack -C 2095202 $ sysctl net.netfilter.nf_conntrack_max net.netfilter.nf_conntrack_max = 2097152
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
dmesg
рдЖрдк рдХрдВрдХрд░рд░ рдЪреАрдЦ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
[4029612.456673] nf_conntrack: nf_conntrack: table full, dropping packet [4029612.465787] nf_conntrack: nf_conntrack: table full, dropping packet [4029617.175957] net_ratelimit: 5731 callbacks suppressed
рддреЛ рдЪрд▓рд┐рдП рдЗрд╕реЗ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ:
iptables -t raw -I PREROUTING -d 198.18.0.12 -p udp -m udp --dport 1234 -j NOTRACK
рдФрд░ рдкрд░реАрдХреНрд╖рдг рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ:
$ ./dropping-packets/recvmmsg-loop packets=331008 bytes=5296128
рдЗрд╕рдиреЗ рд╣рдореЗрдВ 333 рд╣рдЬрд╛рд░ рдкреИрдХреЗрдЯ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХреЗ рдирд┐рд╢рд╛рди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рд╣реБрд░реНрд░реЗ!
PS SO_BUSY_POLL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 470 рд╣рдЬрд╝рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИред
рдЪрд░рдг 3. рдмрд░реНрдХрд▓реЗ рдмреИрдЪ рдлрд╝рд┐рд▓реНрдЯрд░
рдЪрд▓реЛ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреИрдХреЗрдЬ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо
setsockopt(SO_ATTACH_FILTER)
рдХреЙрд▓ рдХрд░рдХреЗ рдХреНрд▓рд╛рд╕рд┐рдХ рдмрд░реНрдХрд▓реЗ рдкреИрдХреЗрдЯ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рд╕реЙрдХреЗрдЯ рд╕реЗ рдмрд╛рдБрдз рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдкреИрдХреЗрдЯ рдХреЛ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд╡рд╛рдкрд╕ рдбреНрд░реЙрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЛрдб рддреИрдпрд╛рд░ рдХрд░реЗрдВ, рдЪрд▓рд╛рдПрдВ:
$ ./bpf-drop packets=0 bytes=0
рдПрдХ рдкреИрдХреЗрдЯ рдлрд┐рд▓реНрдЯрд░ (рдХреНрд▓рд╛рд╕рд┐рдХ рдФрд░ рдЙрдиреНрдирдд рдмрд░реНрдХрд▓реЗ рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдЧрднрдЧ рд╕рдорд╛рди рдкреНрд░рджрд░реНрд╢рди рджреЗрддрд╛ рд╣реИ), рд╣рдо рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд▓рдЧрднрдЧ 512 рд╣рдЬрд╛рд░ рдкреИрдХреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдмрд╛рдзрд╛ рдХреЗ рджреМрд░рд╛рди рдПрдХ рдкреИрдХреЗрдЯ рдЫреЛрдбрд╝рдиреЗ рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЬрдЧрд╛рдиреЗ рд╕реЗ рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЪрд░рдг 4. рд░реВрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рдж DROP рдХреЛ iptables
рдЕрдм рд╣рдо INPUT рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ iptables рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдо рдЬреЛрдбрд╝рдХрд░ рдкреИрдХреЗрдЯ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
iptables -I INPUT -d 198.18.0.12 -p udp --dport 1234 -j DROP
рдореБрдЭреЗ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
-j NOTRACK
рдирд┐рдпрдо рдХреЗ рд╕рд╛рде
-j NOTRACK
рдЧрдП рд╣реИрдВред рдпреЗ рджреЛ рдирд┐рдпрдо рд╣рдореЗрдВ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 608 рд╣рдЬрд╛рд░ рдкреИрдХреЗрдЯ рджреЗрддреЗ рд╣реИрдВред
рдЖрдЗрдП iptables рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдВ:
$ mmwatch 'iptables -L -v -n -x | head' Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 605.9k/s 26.7m/s DROP udp -- * * 0.0.0.0/0 198.18.0.12 udp dpt:1234
рдареАрдХ рд╣реИ, рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд░рдг 5. PREROUTING рдореЗрдВ iptabes DROP
рдЗрд╕ рдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреИрдХреЗрдЯ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддреЗрдЬрд╝ рддрдХрдиреАрдХ рд╣реИ:
iptables -I PREROUTING -t raw -d 198.18.0.12 -p udp --dport 1234 -j DROP
рдпрд╣ рд╣рдореЗрдВ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 1.688 рдорд┐рд▓рд┐рдпрди рдкреИрдХреЗрдЯ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдереЛрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдЫрд▓рд╛рдВрдЧ рд╣реИред рдореБрдЭреЗ рдЕрднреА рднреА рдХрд╛рд░рдгреЛрдВ рдХреА рд╕рдордЭ рдирд╣реАрдВ рд╣реИ, рд╢рд╛рдпрдж рд╣рдорд╛рд░реА рд░реВрдЯрд┐рдВрдЧ рдЬрдЯрд┐рд▓ рд╣реИ, рдпрд╛ рд╢рд╛рдпрдж рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рдмрдЧ рд╣реИред
рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдЪреНрдЪреЗ iptables рдмрд╣реБрдд рддреЗрдЬ рд╣реИрдВред
рдЪрд░рдг 6. рдбреАрдПрдЯреАрдкреА рдХреЛ рдПрдирдПрдлрдЯреАрдмрд▓реНрд╕
Iptables рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЕрдм рдереЛрдбрд╝реА рдкреБрд░рд╛рдиреА рд╣реЛ рдЧрдИ рд╣реИред рд╡рд╣ nftables рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреНрдпреЛрдВ nftables рд╢реАрд░реНрд╖ рд╣реИ
рдХреА рдЗрд╕ рд╡реАрдбрд┐рдпреЛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред Nftables рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ iptables рдХреЛ рдЧреНрд░реЗ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ рд╣реЛрдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдлрд╡рд╛рд╣реЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдХрд┐ рд░рд┐рдЯрдкреЛрд▓рд┐рди iptables рдХреЛ рдмрд╣реБрдд рдзреАрдорд╛ рдХрд░ рджреЗрддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рд╣рдорд╛рд░рд╛ рд▓реЗрдЦ рдЕрднреА рднреА iptables рдФрд░ nftables рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЪрд▓реЛ рдмрд╕ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдЬреЛ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛:
nft add table netdev filter nft -- add chain netdev filter input { type filter hook ingress device vlan100 priority -500 \; policy accept \; } nft add rule netdev filter input ip daddr 198.18.0.0/24 udp dport 1234 counter drop nft add rule netdev filter input ip6 daddr fd00::/64 udp dport 1234 counter drop
рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
$ mmwatch 'nft --handle list chain netdev filter input' table netdev filter { chain input { type filter hook ingress device vlan100 priority -500; policy accept; ip daddr 198.18.0.0/24 udp dport 1234 counter packets 1.6m/s bytes 69.6m/s drop
Nftables рдЗрдирдкреБрдЯ рд╣реБрдХ рдиреЗ рд▓рдЧрднрдЧ 1.53 рдорд┐рд▓рд┐рдпрди рдкреИрдХреЗрдЯ рдХреЗ рдорд╛рди рджрд┐рдЦрд╛рдПред рдпрд╣ iptables рдореЗрдВ PREROUTING рдЪреЗрди рд╕реЗ рдереЛрдбрд╝рд╛ рдХрдо рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдПрдХ рд░рд╣рд╕реНрдп рд╣реИ: рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, nftables рд╣реБрдХ PREROUTING iptables рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд╣рд▓реЗ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ рддреЗрдЬреА рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, nftables iptables рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реИ, рд▓реЗрдХрд┐рди nftables рд╡реИрд╕реЗ рднреА рдХреВрд▓рд░ рд╣реИрдВред : рдкреА
рдЪрд░рдг 7. рдЯреАрд╕реА DROP
рдХреБрдЫ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ, tc (рдЯреНрд░реИрдлрд┐рдХ рдХрдВрдЯреНрд░реЛрд▓) рд╣реБрдХ iptables PREROUTING рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИред рдЯреАрд╕реА рд╣рдореЗрдВ рд╕рд░рд▓ рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреИрдХреЗрдЯреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдереЛрдбрд╝рд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП
рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВред рдФрд░ рд╣рдореЗрдВ рдПрдХ рдЬрдЯрд┐рд▓ рдирд┐рдпрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
tc qdisc add dev vlan100 ingress tc filter add dev vlan100 parent ffff: prio 4 protocol ip u32 match ip protocol 17 0xff match ip dport 1234 0xffff match ip dst 198.18.0.0/24 flowid 1:1 action drop tc filter add dev vlan100 parent ffff: protocol ipv6 u32 match ip6 dport 1234 0xffff match ip6 dst fd00::/64 flowid 1:1 action drop
рдФрд░ рд╣рдо рдЗрд╕реЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
$ mmwatch 'tc -s filter show dev vlan100 ingress' filter parent ffff: protocol ip pref 4 u32 filter parent ffff: protocol ip pref 4 u32 fh 800: ht divisor 1 filter parent ffff: protocol ip pref 4 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:1 (rule hit 1.8m/s success 1.8m/s) match 00110000/00ff0000 at 8 (success 1.8m/s ) match 000004d2/0000ffff at 20 (success 1.8m/s ) match c612000c/ffffffff at 16 (success 1.8m/s ) action order 1: gact action drop random type none pass val 0 index 1 ref 1 bind 1 installed 1.0/s sec Action statistics: Sent 79.7m/s bytes 1.8m/s pkt (dropped 1.8m/s, overlimits 0 requeues 0)
рдЯреАрд╕реА рд╣реБрдХ рдиреЗ рд╣рдореЗрдВ рдПрдХ рдХреЛрд░ рдкрд░ 1.8 рдорд┐рд▓рд┐рдпрди рдкреИрдХреЗрдЯ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рдпрд╣ рдорд╣рд╛рди рд╣реИ!
рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдФрд░ рднреА рддреЗрдЬреА рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...
рдЪрд░рдг 8. XDP_DROP
рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░рд╛ рд╕рдмрд╕реЗ рдордЬрдмреВрдд рд╣рдерд┐рдпрд╛рд░: XDP -
eXpress рдбреЗрдЯрд╛ рдкрде ред XDP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдиреЗрдЯрд╡рд░реНрдХ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдмрд░реНрдХрд▓реЗ рдкреИрдХреЗрдЯ рдлрд╝рд┐рд▓реНрдЯрд░ (eBPF) рдХреЛрдб рдХреЛ рд╕реАрдзреЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд,
skbuff
рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рднреА, рдЬреЛ рд╣рдореЗрдВ рдЧрддрд┐ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИред
рдЖрдорддреМрд░ рдкрд░, XDP рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ:
- рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп eBPF рдХреЛрдб
- рдмреВрдЯрд▓реЛрдбрд░ рдЬреЛ рд╕рд╣реА рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдХреЛрдб рдбрд╛рд▓рддрд╛ рд╣реИ
рдЕрдкрдиреЗ рдмреВрдЯрд▓реЛрдбрд░ рдХреЛ рд▓рд┐рдЦрдирд╛ рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рдХрд╛рдо рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрд╕
рдирдП iproute2 рдЪрд┐рдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХреЛрдб рд▓реЛрдб рдХрд░реЗрдВ:
ip link set dev ext0 xdp obj xdp-drop-ebpf.o
рддрд╛ рдбреИрдо!
рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп eBPF рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб
рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ ред рдХрд╛рд░реНрдпрдХреНрд░рдо рдпреВрдкреАрдбреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рдкреНрд░реЗрд╖рдХ рд╕рдмрдиреЗрдЯ, рдФрд░ рдЧрдВрддрд╡реНрдп рдкреЛрд░реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдИрдкреА рдкреИрдХреЗрдЯ рдХреА рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ:
if (h_proto == htons(ETH_P_IP)) { if (iph->protocol == IPPROTO_UDP && (htonl(iph->daddr) & 0xFFFFFF00) == 0xC6120000 // 198.18.0.0/24 && udph->dest == htons(1234)) { return XDP_DROP; } }
XDP рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЖрдзреБрдирд┐рдХ рдХреНрд▓реИрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ BPF рдмрд╛рдпрдЯреЗрдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо BFP рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$ ip link show dev ext0 4: ext0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 xdp qdisc fq state UP mode DEFAULT group default qlen 1000 link/ether 24:8a:07:8a:59:8e brd ff:ff:ff:ff:ff:ff prog/xdp id 5 tag aedc195cc0471f51 jited
рдФрд░ рдлрд┐рд░
ethtool
рдореЗрдВ рдЖрдВрдХрдбрд╝реЗ рджреЗрдЦреЗрдВ:
$ mmwatch 'ethtool -S ext0|egrep "rx"|egrep -v ": 0"|egrep -v "cache|csum"' rx_out_of_buffer: 4.4m/s rx_xdp_drop: 10.1m/s rx2_xdp_drop: 10.1m/s
рдпреВ рд╣реВ! XDP рдХреЗ рд╕рд╛рде, рд╣рдо рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 10 рдорд┐рд▓рд┐рдпрди рдкреИрдХреЗрдЯ рддрдХ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ!
рдлреЛрдЯреЛ: рдПрдВрдбреНрд░рдпреВ рдлрд┐рд▓рд░ , рд╕реАрд╕реА рдмрд╛рдп-рдПрд╕рдП 2.0рдирд┐рд╖реНрдХрд░реНрд╖
рд╣рдордиреЗ IPv4 рдФрд░ IPv6 рдХреЗ рдкреНрд░рдпреЛрдЧ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдФрд░ рдЗрд╕ рдЖрд░реЗрдЦ рдХреЛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛:

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рддрд░реНрдХ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдИрдкреАрд╡реА 6 рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рд╕реЗрдЯрдЕрдк рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдЖрдИрдкреАрд╡реА 6 рдкреИрдХреЗрдЯ рдХреБрдЫ рдмрдбрд╝реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЧрддрд┐ рдореЗрдВ рдЕрдВрддрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред
рд▓рд┐рдирдХреНрд╕ рдХреЗ рдкрд╛рд╕ рдкреИрдХреЗрдЬ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХреА рдЕрдкрдиреА рдЧрддрд┐ рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ рд╣реИред
DDoS рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП, рдЖрд╡реЗрджрди рдХреЛ рдкреИрдХреЗрдЯ рджреЗрдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдХрд╛рдлреА рдЙрдЪрд┐рдд рд╣реИред рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЖрд╡реЗрджрди рдЕрдЪреНрдЫреЗ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИред
DDoS рд╣рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдпрд╛ рд╕реНрдкреВрдл рдХрд┐рдП рдЧрдП рдЖрдИрдкреА рдХреЗ рд╕рд╛рде рдЧрддрд┐ рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд╡реГрджреНрдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрд╡рд░реНрдЯ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ: рдРрд╕реЗ рд╣рдорд▓реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдЦрд┐рд▓рд╛рдл рдХреЙрдирдЯреНрд░реИрдХ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред
рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, DDoS рд╣рдорд▓реЗ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдирдХреНрд╕ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, "-t рд░реЙ PREROUTING" рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдлрд╝рд┐рд▓реНрдЯрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдиреНрдирдд рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╣рдореЗрд╢рд╛ XDP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рд╣рд╛рдВ, рдпрд╣ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЪреАрдЬ рд╣реИред рдпрд╣рд╛рдБ рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдЧреНрд░рд╛рдл рд╣реИ, рдХреЗрд╡рд▓ XDP рдХреЗ рд╕рд╛рде:

рдпрджрд┐ рдЖрдк рдкреНрд░рдпреЛрдЧ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ
README рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ рд╕рдм рдХреБрдЫ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИ ред
рд╣рдо CloudFlare рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ... рдЗрди рддрдХрдиреАрдХреЛрдВ рдХреЗ рд▓рдЧрднрдЧ рд╕рднреАред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рдореЗрдВ рдХреБрдЫ рдЯреНрд░рд┐рдХреНрд╕ рд╣рдорд╛рд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдПрдХреАрдХреГрдд рд╣реИрдВред рд╣рдорд╛рд░реЗ
рдЧреЗрдЯрдмреЛрдЯ рдореЗрдВ iptables рддрдХрдиреАрдХ рдкрд╛рдИ
рдЬрд╛рддреА рд╣реИ ред рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреЛрд░ рд╕рдорд╛рдзрд╛рди рдХреЛ XDP рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реИрдВред
рдЙрдирдХреА рдорджрдж рдХреЗ рд▓рд┐рдП
рдЬреЗрд╕рдкрд░ рдбреЗрдВрдЧрд╛рд░реНрдб рдмреНрд░реВрдЕрд░ рдХреЛ рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред