рд╣рдо рдиреЗрдЯрдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реИрдВ: рд╣рдо рдХрдИ рдкреИрдЯрд░реНрди рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП xt_string рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрдиреЗ рдореИрдЪ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВ

рдкрд░рд┐рдЪрдп


рд╣рд╛рд▓ рд╣реА рдореЗрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ рдХрд┐ рдПрдХ рд╣рдмреНрд░ рдкрд░ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдереЛрдбрд╝реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рд╕рднреА рдореИрдВрдиреЗ рдкрд╛рдпрд╛:


рдпрд╣ рд╣рдореЗрд╢рд╛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдерд╛ рдХрд┐ рдЬреЛ рд▓реЛрдЧ C рдХреЗ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдЬрд╛рдирдХрд╛рд░ рд╣реИрдВ рд╡реЗ рдбрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрд░реНрдиреЗрд▓ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ рднреА рдмрдЪрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕рдореЗрдВ 60% рдХреЗ рд▓рд┐рдП рдХреЛрдбрд╛рдВрддрд░рдХ рд╣реЛрддреЗ рд╣реИрдВ (рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддрдирд╛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ)ред рджрд░рдЕрд╕рд▓, рдореИрдВ рдореМрдЬреВрджрд╛ рдиреЗрдЯрдлрд┐рд▓реНрдЯрд░ рдФрд░ рдЖрдИрдкреАрдЯреИрдм рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдпрд╛ рд╢реЛрдзрди рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╢реБрд░реБрдЖрддреА рдХрд░реНрдиреЗрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕, рдбреНрд░рд╛рдЗрд╡рд░ рд▓реЗрдЦрдХреЛрдВ, рдпрд╛ рд╕рд┐рд░реНрдл рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдВрдЧреЗ рдЬреЛ рдПрдХ рдирдП рд╡рд┐рдХрд╛рд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЦреБрдж рдХреЛ рдЖрдЬрдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ


рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦ рдХрд╛ рд╢реАрд░реНрд╖рдХ рдХрд╣рддрд╛ рд╣реИ, рд╣рдо xt_string рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕рд░рд▓ iptables рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦреЗрдВрдЧреЗред Xt_string рдПрдХ рдиреЗрдЯрдлрд┐рд▓реНрдЯрд░ рдореЙрдбреНрдпреВрд▓ рд╣реИ рдЬреЛ рдкреИрдХреЗрдЯ рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреА рдЦреЛрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЙрд╕рдХреЗ рдкрд╛рд╕ рджрд┐рдП рдЧрдП рдХреНрд░рдо рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдХрдИ рджреГрд╢реНрдпреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИред рдЦреИрд░, рдЬреАрдкреАрдПрд▓ рдХреЗ рдмрд╛рдж рд╕реЗ, рдпрд╣ рдЗрд╕ рдЕрд╡рд╕рд░ рджреЗрдиреЗ рд╕реЗ рдХреНрдпрд╛ рд░реЛрдХрддрд╛ рд╣реИ?


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗ, рд╣рдо рдЗрд╕реЗ xt_wildstring рдХрд╣реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рдореЛрдЯреЗ рдкреАрдЖрд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

iptables -I FORWARD -p tcp --dport 80 --tcp-flags ACK,PSH ACK,PSH -m wildstring --wildstring "reductor*price*carbonsoft.ru" -j DROP. 

рд╡рд┐рдХрд╛рд╕ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реА рдореИрдВ рд▓реЗрдЦ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджреВрдВрдЧрд╛ред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЬреЛ рдХрд┐ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░реЗрдЧрд╛, рд╕рд╛рде рд╣реА рдиреЗрдЯрдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдПред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ netfilter рдФрд░ iptables рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдЖрдорддреМрд░ рдкрд░, iptables рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ - рдХрд░реНрдиреЗрд▓рд╕реНрдкреЗрд╕ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рдиред рдХрд░реНрдиреЗрд▓рд╕реНрдкреЗрд╕ рдореЗрдВ рдПрдХ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд▓реЛрдб рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рд╣рдо iptables рдореЗрдВ рдПрдХ рдирд┐рдпрдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдпреВрдЬрд░реНрд╕рд╕реНрдкреЗрд╕ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА iptables рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдирд┐рдпрдо рдмрдирд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдиреЗрдЯрдлрд┐рд▓реНрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рддреАрди рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рд╕реНрд░реЛрдд рдореЗрдВ рдпреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╣рд╛рдВ рд╣реИрдВ:

рдиреЗрдЯрдлрд┐рд▓реНрдЯрд░ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рд╕реНрд░реЛрдд рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг 2.6.32 рдореЗрдВ рдХрдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ:
/ usr / src / linux / net / netfilter / - рдЕрдзрд┐рдХрд╛рдВрд╢ рдореИрдЪ рдореЙрдбреНрдпреВрд▓ред
/ usr / src / linux / net / ipv4 / netfilter / рд▓рдХреНрд╖реНрдп рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
/ usr / src / linux / рд╢рд╛рдорд┐рд▓ / linux / netfilter / - рдЗрди рджреЛрдиреЛрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╣реЗрдбрд░ред

Iptables рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ
/ usr / src / iptables / рдПрдХреНрд╕рдЯреЗрдВрд╢рди /

рдХрд░реНрдиреЗрд▓рд╕реНрдкреЗрд╕ рдФрд░ рдпреВрдЬрд░рд╕реНрдкреЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╣реЗрдбрд░ рд╕рдорд╛рди рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд┐рдВрдЧрд▓ рдлрд╛рдЗрд▓ рд╣реИред

рдЕрдм рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдЕрднреНрдпрд╛рд╕ рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВ


рд╣рдо рдкрд╣рд┐рдпрд╛ рдХреЛ рд╕реБрджреГрдврд╝ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдЬреАрдкреАрдПрд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рд╕рдордп рд╕рдмрд╕реЗ рд╕реНрдерд┐рд░ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╡реАрдирддрдо CentOS 6 рдХрд░реНрдиреЗрд▓ рд╕реЗ xt_string рдореЙрдбреНрдпреВрд▓ рд▓реЗрдВред

рдореЙрдбреНрдпреВрд▓ рдФрд░ рд╕реНрдЯреИрдВрдб рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреНрд░рдгрд╛рд▓реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рдордиреЗ рдЖрдИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрд┐рдЧрд╛рдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рдиреАрдЪреЗ рдЫрд┐рдкрд╛ рджрд┐рдпрд╛ред рдпрджрд┐ рдХреЛрдИ рдЧрд▓рддрдлрд╣рдореА рдпрд╛ рд░реБрдЪрд┐ рд╣реИ рдХрд┐ рдХрд╣рд╛рдВ рдФрд░ рдХреНрдпрд╛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдЗрд╕рдХреЗ рддрд╣рдд рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдПрдВ рдФрд░ рдмреЗрдВрдЪ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред
рдПрдХ рдмрд┐рд▓реНрдб рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рддреИрдпрд╛рд░ рдХрд░рдирд╛

рд╣рд╛рдВ, рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЖрдИрдбреАрдИ рдХреЗ рдХрдИ рд╕рдкрдиреЗред рд▓реЗрдХрд┐рди, рдЕрдлрд╕реЛрд╕ рдФрд░ рдЖрд╣, рдореБрдЭреЗ рдХреБрдЫ рднреА рд╕рд╛рд░реНрдердХ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЗрд╕рдХреЗ рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИ - рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд╕реЗрдЧрдлреЙрд▓реНрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдХрд░реНрдиреЗрд▓ рдЖрддрдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рдкрд░ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рддреЗ рд╣реИрдВ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдорд╢реАрди рдкрд░ рдШрдмрд░рд╛рд╣рдЯ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд┐рдХрд╛рд╕, рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдореЗрдВ рдпрд╛ рдПрдХ рдЕрд▓рдЧ рд╕реНрдЯреИрдВрдб рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдорд╛рд░рд╛ рдореЙрдбреНрдпреВрд▓ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд╣рдордиреЗ CentOS рдХреЛ рджреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЛрдВ рдкрд░ рд░рдЦрд╛ рд╣реИ

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рддрд╛рдХрд┐ рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд░реНрдиреЗрд▓ рдЖрддрдВрдХ рдХреЗ рджреМрд░рд╛рди рд╣рдорд╛рд░рд╛ рдорд╕реНрддрд┐рд╖реНрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рди рдЦрдбрд╝рд╛ рд╣реЛ, рдФрд░ рд╡реЗ рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реЛ, рд╣рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗред рджреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдЬрд┐рдирдХреА рдЗрдВрдЯрд░рдиреЗрдЯ рддрдХ рдФрд░ рдПрдХ-рджреВрд╕рд░реЗ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛред рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрд┐рд▓реНрдбрд░ рд╣реЛрдЧрд╛, рдФрд░ рджреВрд╕рд░рд╛ рдПрдХ рдЯреЗрд╕реНрдЯ рд╕реНрдЯреИрдВрдб рд╣реЛрдЧрд╛ред

рдХрд▓реЗрдХреНрдЯрд░ рдкрд░ рд╣рдореЗрдВ рд▓рд┐рдирдХреНрд╕ рдФрд░ iptables рд╕реНрд░реЛрдд рдорд┐рд▓рддреЗ рд╣реИрдВ

рд╡реИрд╕реЗ, рдХрд▓реЗрдХреНрдЯрд░ рдкрд░ рд╣рдореЗрдВ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдФрд░ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 yum install git ncurses-devel make gcc rpm-build indent 


рдЕрдм рдЕрдкрдиреЗ рдмреБрдХрдорд╛рд░реНрдХ рдореЗрдВ CentOS рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЬреЛрдбрд╝реЗрдВ:

http://vault.centos.org/6.4/os/Source/SPackages/

рдпрд╣рд╛рдБ рд╕реЗ рд╣рдо src.rpm Linux kernels рдФрд░ iptables рд▓реЗрдВрдЧреЗред

 rpm -i http://vault.centos.org/6.4/os/Source/SPackages/kernel-2.6.32-358.el6.src.rpm rpm -i http://vault.centos.org/6.4/os/Source/SPackages/iptables-1.4.7-9.el6.src.rpm 


рдлрд┐рд░, / root / rpmbuild / SPECS / рдкрд░ рдЬрд╛рдПрдВ рдФрд░ CentOS рд╕реЗ рдкреИрдЪ рдкреИрдЪ рдХреЗ рд╕рд╛рде рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░реЗрдВред

 rpmbuild -bp iptables.spec rpmbuild -bp kernel.spec 


/ Root / rpmbuild / BUILD / рдореЗрдВ рд╣рдо рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рд╕реНрд░реЛрддреЛрдВ рдФрд░ iptables рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рджреЗрдЦреЗрдВрдЧреЗред

рдЕрдм рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рдкреВрд░реЗ рдХрд░реНрдиреЗрд▓ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╕рдордп рдХреЗрд╡рд▓ рдиреЗрдЯ / рдиреЗрдЯрдлрд┐рд▓реНрдЯрд░ / рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рдкрд░рд┐рдЪрд┐рдд рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рд╣рд╛рдиреБрднреВрддрд┐ рдмрдирд╛рдПрдВрдЧреЗ:

 ln -s /root/rpmbuild/BUILD/kernel-2.6.32-358.el6/linux-2.6.32-358.el6.x86_64/ /usr/src/linux ln -s /root/rpmbuild/BUILD/iptables-1.4.7/ /usr/src/iptables/ 


/ Usr / src / linux рдкрд░ рдЬрд╛рдПрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗред

 make menuconfig 


рд╣рдо рдЗрд╕реЗ рдмрдЪрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреВрд░реЗ рдХреЛрд░ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВред рд╡реИрд╕реЗ, рд╢рд╛рдпрдж rpmbuild рдкрд░ рдпрд╛ рдЗрд╕реЗ gpg рдкрд░ рд▓рдЯрдХрд╛рдПрдВрдЧреЗ: рдХреАрд░рд┐рдВрдЧ `/ред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╣рдо рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЙрд░рдЬрд╝рдореЗ рд╣реИред

 rm -f /dev/random ln -s /dev/urandom /dev/random 


рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛:

 make prepare make -j 3 make modules_install 


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, GIT рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ ~ / GIT / рд╡рд╛рдЗрд▓реНрдбрд╕реНрдЯреНрд░рд┐рдВрдЧ / рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред

рдХрд░реНрдиреЗрд▓ рдЖрддрдВрдХ рдХреЗ рд╕рд╛рде рд╕реНрдЯреИрдВрдб рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░рдирд╛

рдЖрдк рдЗрд╕реЗ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рдмрд╕реЗ рд╕рд╣реА рдПрдХ рд╣реИ / proc / sys / рдХрд░реНрдиреЗрд▓ / рдкреИрдирд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ 2 рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ред рд▓реЗрдХрд┐рди рдШрдмрд░рд╛рд╣рдЯ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрд╛рд╡рдирд╛ рдореЗрдВ рд╣реЛрд╕реНрдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 name=centos_test ip=<ip_> while true; do if ! ping -qc 1 $ip; then virt-viewer $name sleep 2 scrot virsh destroy $name virsh start $name sleep 60 fi done 


рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛

 #!/bin/bash test_wildstring() { iptables -F OUTPUT rmmod xt_wildstring insmod xt_wildstring iptables -I OUTPUT -p tcp тАУdport 80 -m wildstring тАЬopensource*carbonsoftтАЭ -j DROP wget -t 1 -T 1 http://carbonsoft.ru/opensource/ Iptables -nvL OUTPUT } test_wildstring if [ тАЬ$1тАЭ = 'while' ]; then while true; do test_wildstring sleep 1 done fi 


рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдПрдХ рдмрд╛рд░ рд▓реЙрдиреНрдЪ:
 ./test_wildstring.sh 


рдЕрдВрддрд╣реАрди рдкрд╛рд╢:
 ./test_wildstring.sh while 



Linux рдФрд░ iptables рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ

рд╣рдореЗрдВ рд╡реЗ рдореЙрдбреНрдпреВрд▓ рдорд┐рд▓рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред

 cp -v /usr/src/linux/net/netfilter/xt_string.c ~/GIT/wildstring/xt_wildstring.c mkdir -p ~/GIT/wildstring/include/linux/netfilter/ cp -v /usr/src/linux/include/linux/netfilter/xt_string.h ~/GIT/wildstring/include/linux/netfilter/xt_wildstring.h 


рдореЗрдХрдлрд╛рдЗрд▓ рд▓рд┐рдЦрдирд╛

рд╣рдо рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓, рдЖрдИрдкреАрдЯреИрдм рдореЙрдбреНрдпреВрд▓ рдХреА рдЕрд╕реЗрдВрдмрд▓реА, рд╕рд╛рде рд╣реА рдХреЛрдб рдХреЗ рд╕рдВрд░реЗрдЦрдг, рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рдХреА рд╕рдлрд╛рдИ, рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд▓рдХреНрд╖реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред

 obj-m += xt_wildstring.o all: module lib module: cp include/linux/netfilter/xt_wildstring.h /usr/src/linux/include/linux/netfilter/xt_wildstring.h make -C /lib/modules/2.6.32/build M=$(PWD) modules lib: cp libxt_wildstring.c /usr/src//iptables/extensions cp include/linux/netfilter/xt_wildstring.h /usr/src/iptables/include/linux/netfilter/xt_wildstring.h make -C /usr/src/iptables/extensions cp /usr/src/iptables/extensions/libxt_wildstring.so libxt_wildstring.so userspace: gcc userspace_wildstring.c -o userspace ./userspace rm -f userspace install: scp xt_wildstring.ko root@10.90.140.160: scp libxt_wildstring.so root@10.90.140.160:/lib64/xtables-1.4.7/ clean: rm -f *~ *.ko *.so *.mod.c *.ko.unsigned *.o modules.order Module.symvers indent: Lindent *.c include/linux/netfilter/xt_wildstring.h 


рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдкрд░ Makefile:


рд╣рдо .gitignore рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ

рдЬреАрдЖрдИрдЯреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдирдЯреНрд░реИрдХ рдХреА рдЧрдИ рдлрд╛рдЗрд▓реЗрдВ рдХреБрдЫ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП ~ / GIT / рд╡рд╛рдЗрд▓реНрдбрд╕реНрдЯреНрд░рд┐рдВрдЧ / .ignignore рдмрдирд╛рдПрдВ:

* .o
* .рддреЛ
ред *
* .рдХреЛ
* .ko.unsigned
modules.order
Module.symvers
* .mod.c
.itignignore

рдирд╛рдо рдмрджрд▓рдХрд░ рд╡рд╛рдЗрд▓реНрдбрд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд░рдирд╛

рддрд╛рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдореВрд▓ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рди рдХрд░реЗ, рдЗрд╕рдХрд╛ рдЕрд░реНрде рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдФрд░ рдЗрд╕рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рд╡рд╛рдЗрд▓реНрдбрд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПред рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ - рдЖрдкрдХреЛ рд╕рдм рдХреБрдЫ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╣реЗрдбрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рд╕реНрдкреЗрд╕ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдХрд░реНрдиреЗрд▓рд╕реНрдкреЗрд╕ рдореЙрдбреНрдпреВрд▓ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, grep рд░реВрд╕реА рд▓реЛрдХрддрдВрддреНрд░ рдХреЗ рдкрд┐рддрд╛ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛:

 grep -ri string xt_wildstring.c | grep -vi wildstring 


рдорд┐рд▓рд╛рди рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрд░рдЪрдирд╛

рдФрд░ рдлрд┐рд░ рд╕реЗ, рдПрдХ рдЫреЛрдЯрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд: рдкреНрд░рддреНрдпреЗрдХ рдореИрдЪ-рдореЙрдбреНрдпреВрд▓ рдХреА рдЕрдкрдиреА рдорд┐рд▓рд╛рди-рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрд░рдЪрдирд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рд╕реНрдкреЗрд╕ рд╕реЗ рдкрд╛рд░рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред рдпрд╣ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ ( xt_wildstring.h ) рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред

рдорд╛рдирдХ xt_string.h рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ
 #ifndef _XT_STRING_H #define _XT_STRING_H #include <linux/types.h> #define XT_STRING_MAX_PATTERN_SIZE 128 #define XT_STRING_MAX_ALGO_NAME_SIZE 16 enum { XT_STRING_FLAG_INVERT = 0x01, XT_STRING_FLAG_IGNORECASE = 0x02 }; struct xt_string_info { __u16 from_offset; //      тАУ   . __u16 to_offset; //      тАУ    . char algo[XT_STRING_MAX_ALGO_NAME_SIZE]; // . char pattern[XT_STRING_MAX_PATTERN_SIZE]; //,   , . __u8 patlen; // ,  . union { struct { __u8 invert; //   ! -m string тАУstring тАЬsomethingтАЭ } v0; struct { __u8 flags; //    . } v1; } u; /* Used internally by the kernel *   . *     ,     *   java-? *    ,     xml. */ struct ts_config __attribute__((aligned(8))) *config; }; #endif /*_XT_STRING_H*/ 




Xt_wildstring_info рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ xt_wildstring.h рдореЗрдВ рдЧреБрдгрд╛ рдХрд░реЗрдВ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдмреНрд╕рдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдЬреЛрдбрд╝реЗрдВред рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╡рд░реНрдгреЛрдВ рдХрд╛ рд╕рд╛рд░рдгреА рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореВрд▓ рдореЗрдВ рд╣реИ, рдЪреВрдВрдХрд┐ рджреВрд╕рд░рд╛ рдФрд░ рддреАрд╕рд░рд╛ рд╕рдВрдХреЗрдд рд░рд┐рдХреНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдмрд┐рдирд╛ рддрд╛рд░ рдХреЗ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рд╛рджреГрд╢реНрдп рд╕реЗ, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдореЗрдВ рдкрд╛рда рдЦреЛрдЬ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ + рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рд▓рд┐рдП рдЪрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рд╢реБрд░реВ рд╣реБрдИ:

 #ifndef _XT_WILDSTRING_H #define _XT_WILDSTRING_H #include <linux/types.h> #define XT_WILDSTRING_MAX_PATTERN_SIZE 128 #define XT_WILDSTRING_MAX_ALGO_NAME_SIZE 16 enum { XT_WILDSTRING_FLAG_INVERT = 0x01, XT_WILDSTRING_FLAG_IGNORECASE = 0x02 }; struct xt_wildstring_info { __u16 from_offset; __u16 to_offset; char algo[XT_WILDSTRING_MAX_ALGO_NAME_SIZE]; char pattern[XT_WILDSTRING_MAX_PATTERN_SIZE]; /*    */ char *pattern_part1; char *pattern_part2; char *pattern_part3; __u8 patlen; /*   */ __u8 patlen_part1; __u8 patlen_part2; __u8 patlen_part3; union { struct { __u8 invert; } v0; struct { __u8 flags; } v1; } u; /* Used internally by the kernel */ /*        */ struct ts_config __attribute__((aligned(8))) *config; struct ts_config __attribute__((aligned(8))) *config_part1; struct ts_config __attribute__((aligned(8))) *config_part2; struct ts_config __attribute__((aligned(8))) *config_part3; }; #endif 


рдирдП рд╣реЗрдбрд░ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛

Xt_wildstring.c рдкрд░ рдЬрд╛рдПрдВред

рдЕрдм рд╣рдордиреЗ рд╣реЗрдбрд░ рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рдЬреЛрдбрд╝рд╛ рд╣реИ рд╡рд╣ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЦреЛрдЬ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рддреИрдпрд╛рд░реА рдФрд░ рд╡рд┐рдирд╛рд╢ рдХреЛ рд▓рд╛рдПрдВред

рдпрд╣рд╛рдВ рдлрд┐рд░ рд╕реЗ, рдереЛрдбрд╝рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд - рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдореИрдЪ рдореЙрдбреНрдпреВрд▓ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдФрд░ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:



рдореВрд▓ xt_string рдореЗрдВ, рдПрдХ рдирд┐рдпрдо рдЬреЛрдбрд╝рдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

String_mt_check (рдЬреЛрдбрд╝рдиреЗ) рдореЗрдВ, ts_config, (ts - text search) рд╕рдВрд░рдЪрдирд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдкреИрдХреЗрдЬ рдбреЗрдЯрд╛ (skb_find_text) рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕реЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ (string_mt_destroy рдлрд╝рдВрдХреНрд╢рди) рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╝рд╛ рдХреА рдЧрдИ рдореЗрдореЛрд░реА рдХреЛ textearch_destroy рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдлрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЙрд╕ рд╕рдордп рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдирд┐рдпрдо рдХреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

Xt_wildstring_check рдкрд░ textearch_prepare рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдЬреЛрдбрд╝реЗрдВ

рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдореВрд▓ рд╡рд╛рдЗрд▓реНрдбрд╕реНрдЯреНрд░рд┐рдВрдЧ_рдПрдордЯреА рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреИрдХреЗрдЬ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдЬрдм рд╡рд╣ рдирд┐рдпрдо рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рд╕рд╛рд░реНрдердХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЙрди рдкрд░ рдмрд╣реБрдд рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред

 static bool wildstring_mt(const struct sk_buff *skb, const struct xt_match_param *par) { return false; #if 0 ... #endif } 


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реЗ ts_conf рдХреЛ xt_wildstring_check рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рддреИрдпрд╛рд░ рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рдирд┐рдпрдо iptables рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдЪрд░ рдореЗрдВ рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╣рдо рдЗрд╕реЗ рд╕реНрдЯреНрд░рд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЪрд▓реЗрдВрдЧреЗ, рдЬреЛ рджрд┐рдП рдЧрдП рд╡рд░реНрдг рд╕реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рд╛рдЗрди рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдПрдХ рдЯреЛрдХрди рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╛рда рдЦреЛрдЬ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред

 s = (char *) conf->pattern; conf->pattern_part1 = strsep(&s, delim); if (!conf->pattern_part1) return false; //       conf->patlen_part1 = strlen(conf->pattern_part1); ts_conf = textsearch_prepare(conf->algo, conf->pattern_part1, conf->patlen_part1, GFP_KERNEL, flags); if (IS_ERR(ts_conf)) return false; conf->config_part1 = ts_conf; 


рд╣рдо рдЕрдЧрд▓реЗ рджреЛ ts_conf рдХреЛ рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рднрд░рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЗрд╕ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рдХрд┐ рдпрджрд┐ рдкреИрдЯрд░реНрди рдХрд╛ рд╕реВрдЪрдХ рдЦрд╛рд▓реА рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдм рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рд╕рд╣реА рд╣реИ, рдЕрд░реНрдерд╛рдд рд╣рдо рдХрдо рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдФрд░ рдЙрдиреНрд╣реЗрдВ wildstring_mt_destroy рдореЗрдВ рдирд╖реНрдЯ рдХрд░ рджреЗрдВ

рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдирд┐рдпрдо рдХреЛ iptables рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рдпрдо рдХреЛ рд╣рдЯрд╛рддреЗ рд╕рдордп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреБрдгрд╛ рдХрд░реЗрдВред

 static void wildstring_mt_destroy(const struct xt_mtdtor_param *par) { struct xt_wildstring_info *conf = WILDSTRING_TEXT_PRIV(par->matchinfo); if (conf->pattern_part1) textsearch_destroy(conf->config_part1); if (conf->pattern_part2) textsearch_destroy(conf->config_part2); if (conf->pattern_part3) textsearch_destroy(conf->config_part3); } 


рдореИрдЪ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВ

рдФрд░ рдЗрд╕рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓реЛрдб-рдЕрдирд▓реЛрдб рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдФрд░ рдирд┐рдпрдо рдЬреЛрдбрд╝ рджрд┐рдП рдЧрдП-рд╣рдЯрд╛рдП рдЧрдП, рдФрд░ рдХреЛрдИ рдХрд░реНрдиреЗрд▓ рдкреИрдирд┐рдХ рдирд╣реАрдВред рдЕрдм рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХрд┐рдП рдЧрдП рд╡рд╛рдЗрд▓реНрдбрд╕реНрдЯреНрд░рд┐рдВрдЧ_рдПрдордЯреА рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рджрд┐рдП рдЧрдП рд╕рднреА рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рдЦреЛрдЬ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЙрд╕ рдмрджрд▓рд╛рд╡ рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рдХрд▓реНрдк рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред

 unsigned int skb_find = 0; 


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИ, рдпрд╣ tmp_from_offset рдпрд╛ wildstring_from_offset рдЬреИрд╕рд╛ рдХреБрдЫ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧрд┐рдЯрд╣рдм рдкрд░ рдХрдорд┐рдЯреНрд╕ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЕрдлрд╕реЛрд╕, рдпрд╣ рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИред рдЕрдм, рдкрд╣рд▓реА рдЦреЛрдЬ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рдирдП рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдФрд░ рдпрджрд┐ рдХреБрдЫ рдирд╣реАрдВ рдорд┐рд▓рд╛, рддреЛ рдЭреВрдареЗ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдЬрдм рддрдХ рд╣рдо рд╕рднреА рджрд┐рдП рдЧрдП рдкреИрдЯрд░реНрди рд╕реЗ рдирд╣реАрдВ рдЧреБрдЬрд░рддреЗред

 memset(&state, 0, sizeof(struct ts_state)); skb_find = skb_find_text((struct sk_buff *)skb, conf->from_offset, conf->to_offset, conf->config_part1, &state); if (skb_find == UINT_MAX) return false; 


рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо config_part2 рдФрд░ config_part3 рдХреЗ рд▓рд┐рдП рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ, рдЗрд╕ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рдХрд┐ pattern_part2 рдФрд░ pattern_part3 рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╕рд╣реА рд▓реМрдЯреЗрдВред

рд╣рдо рдЦрддреНрдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рд╕рднреА рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдмрд╛рд░ рд╕рдВрдХрд▓рди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рддрд╛рд░реНрдХрд┐рдХ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдЬрдм рддрдХ рдХрд┐ рдЕрдЧрд▓рд╛ рднрд╛рдЧ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рд╣рдо рдиреЛрдЯрд┐рд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд░реНрдиреЗрд▓ рдШрдмрд░рд╛рд╣рдЯ рд╣реБрдИ рд╣реИред рдпрд╣ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рддреНрд░реБрдЯрд┐ рдХреА рдХреАрдордд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп рдмреАрдд рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрд╛рд▓реВ рд╣реИред рдЗрд╕реАрд▓рд┐рдП рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реА рд╕реНрдЯреИрдВрдб рдкрд░ рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рдбреАрдмрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдЗрддрдирд╛ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЕрдВрджрд░ рдХреА рдмрд╛рдд рдЪрд╛рд╣реЗ рдХрд┐рддрдиреА рднреА рдЕрдЪреНрдЫреА рдХреНрдпреЛрдВ рди рд╣реЛ, рдЕрдЧрд░ рдЙрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

Wget рдпрд╛ рдХрд░реНрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдкрд░ рдкрд░реАрдХреНрд╖рдгред рдПрдХ рдирд┐рдпрдо рдмрдирд╛рддреЗ рд╕рдордп, рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ HTTP рдкреИрдХреЗрдЬ рдореЗрдВ HOST рдХреЗ рд╕рд╛рдордиреЗ GET рд╣реИ, рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдереЛрдбрд╝рд╛ рдкреАрдЫреЗ рдХреА рдУрд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:


рдпрд╣реА рд╣реИ, рд╣рдо рдирд┐рдпрдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

 iptables -I OUTPUT -p tcp тАУdport 80 -m wildstring тАЬreductor*scheme*carbonsoftтАЭ -j DROP 


рдФрд░ рдкреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

wget -t 1 -T 1 http://www.carbonsoft.ru/products/reductor/carbon-reductor/#hemheme

рдмрд┐рдВрдЧреЛ - рд╣рдордиреЗ рддреЛрдбрд╝ рджрд┐рдпрд╛ рдФрд░ iptables -nvL OUTPUT рдПрдХ рдмрдврд╝рд╛ рд╣реБрдЖ рдкреИрдХреЗрдЯ рдХрд╛рдЙрдВрдЯрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рд╕реВрдЪрд┐рдпрд╛рдБ рдХреНрдпреЛрдВ рдирд╣реАрдВ?


рдПрдХ рдЪреМрдХрд╕ рдФрд░ рдЕрдиреБрднрд╡реА рдкрд╛рдардХ рд╢рд╛рдпрдж рдпрд╣ рдХрд╣реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЪреАрдЦрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ - рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рдХреГрддрд┐рдпрд╛рдВ рдФрд░ рдмреИрд╕рд╛рдЦреА рдХреНрдпреЛрдВ рд╣реЛрддреА рд╣реИрдВ, рдЬрдм рдЖрдк рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдкреИрдЯрд░реНрди, рдкреЕрд▓реЗрди рдФрд░ рдХреЙрдиреНрдлрд┐рдЧ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ for_each_entry рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди - рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдиреЗрдЯрдлрд┐рд▓реНрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдХреА рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рд╣реИ, рдФрд░ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рд░ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЦреИрд░, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдкрд╛рдардХ рдХреЛ рдХреБрдЫ рдЫреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

рд╕рдорд╛рдкрди


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдиреЗрдЯрдлрд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ рдХреИрд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ?
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рди рдХреЗрд╡рд▓ HTTP рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рдХрдИ рдЕрдиреНрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рднреА рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг, рд╢рд╛рдпрдж, рдореИрдВ рдмрд╛рдж рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝реВрдВрдЧрд╛ред

рд╣рдорд╛рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдУрдкрдирд╕реЛрд░реНрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ рд╕реВрддреНрд░ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/In200854/


All Articles