HAProxy рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЛ рдХреИрд╕реЗ рд╕реАрдорд┐рдд рдХрд░реЗрдВ: рдЪрд░рдг-рджрд░-рдЪрд░рдг рдирд┐рд░реНрджреЗрд╢


рд▓реЗрдЦрдХ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдИрдкреА-рдкрддреЛрдВ рдХреЗ рд╕рд╛рде HAProxy рдХреНрд╡реЗрд░реА рдЧрддрд┐ рд╕реАрдорд╛ (рджрд░ рд╕реАрдорд┐рдд) рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП ред Mail.ru рдХреНрд▓рд╛рдЙрдб рд╕реЙрд▓реНрдпреВрд╢рдВрд╕ рдЯреАрдо рдиреЗ рдЙрдирдХреЗ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ - рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдЙрд╕ рдкрд░ рдЙрддрдирд╛ рд╕рдордп рдФрд░ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛ рдЬрд┐рддрдирд╛ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЦрд░реНрдЪ рдХрд░рдирд╛ рдерд╛ред

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

HAProxy рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреВрд░реНрд╡ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХрджрдо рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╣реИрдВред

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

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

рдПрдХ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛


рд╕рдордп рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреА рд╕реНрдерд╛рдкрдирд╛ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЙрдХрд░ рдФрд░ рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд▓реЗрдВ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдореБрдЦреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред

рдкрд╣рд▓рд╛ рдХрд╛рдо рдХрдИ рдЕрдкрд╛рдЪреЗ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде HAProxy рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХреЗ рдХрд╛рдо рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред

рднрдВрдбрд╛рд░ рдХрд╛ рдХреНрд▓реЛрди


$ git clone git@github.com:stargazer/haproxy-ratelimiter.git
$ cd haproxy-ratelimiter

рдЖрдк рд╕реНрдерд╛рдкрдирд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ DockerfileрдФрд░ рдЙрд╕рдХреЗ docker-compose.ymlрд╕рд╛рде рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред рдЙрдирдХреА рдЪрд░реНрдЪрд╛ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ loadbalancerрджреЛ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ HAProxy рдЙрджрд╛рд╣рд░рдг api01рдФрд░ рдмрдирд╛рдпрд╛ рд╣реИ api02ред HAProxy рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╢реБрд░реВ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ haproxy-basic.cfg, рдФрд░ рдлрд┐рд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВрдЧреЗ haproxy-ratelimiting.cfgред

рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ haproxy-basic.cfgрдирдВрдЧреЗ рдиреНрдпреВрдирддрдо рддрдХ рдШрдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛ рдордВрдЬреВрд░реА рджреЗ рджреА рдЧрдИ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рджреЗрдЦреЗрдВ:

defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms

frontend proxy
bind *:80

use_backend api

backend api
balance roundrobin

server api01 api01:80
server api02 api02:80

рдпрд╣ рдЦрдВрдб frontend proxyрдкреЛрд░реНрдЯ 80 рдкрд░ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП HAProxy рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ apiрдмреИрдХрдПрдВрдб рдкрд░ рд╕рд░реНрд╡рд░ рдкреВрд▓ рдореЗрдВ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ ред

рд╢реНрд░реЗрдгреА backend apiрдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреВрд▓ рдмреИрдХреЗрдВрдб apiрджреЛ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде api01рдФрд░ api02рдФрд░ рдЗрд╕реА рдкрддреЗред рдкреНрд░рддреНрдпреЗрдХ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рд░реНрд╡рд┐рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХреЛ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рджреНрд╡рд╛рд░рд╛ рдЪреБрдирд╛ рдЬрд╛рддрд╛ roundrobinрд╣реИ, рдЕрд░реНрдерд╛рддреН, рджреЛ рдЙрдкрд▓рдмреНрдз рд╕рд░реНрд╡рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрджрд▓реЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рддреАрдиреЛрдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ


$ sudo docker-compose up

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реИ loadbalancerрдЬреЛ рджреЛ рдмреИрдХрдПрдВрдб api01рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ api02ред рдпрджрд┐ рд╣рдо рдкрддрд╛ рдмрд╛рд░ рдореЗрдВ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЬрд╡рд╛рдм рдорд┐рд▓реЗрдЧрд╛ http://localhost/ред

рдкреГрд╖реНрда рдХреЛ рдХрдИ рдмрд╛рд░ рддрд╛рдЬрд╝рд╛ рдХрд░рдирд╛ рдФрд░ рд▓реЙрдЧ рджреЗрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ docker-composeред

api01_1 | 192.168.192.3 - - [08 / рдЬрдирд╡рд░реА / 2019: 11: 38: 09 +0000] "GET / HTTP / 1.1" 200 45
api02_1 | 192.168.192.3 - - [08 / рдЬрдирд╡рд░реА / 2019: 11: 38: 10 +0000] "GET / HTTP / 1.1" 304 -
api01_1 | 192.168.192.3 - - [08 / рдЬрдирд╡рд░реА / 2019: 11: 38: 10 +0000] "GET / HTTP / 1.1" 304 -
api02_1 | 192.168.192.3 - - [08 / рдЬрдирд╡рд░реА / 2019: 11: 38: 11 +0000] "GET / HTTP / 1.1" 304 -
api01_1 | 192.168.192.3 - - [08 / рдЬрдирд╡рд░реА / 2019: 11: 38: 11 +0000] "GET / HTTP / 1.1" 304 -
api02_1 | 192.168.192.3 - - [08 / рдЬрдирд╡рд░реА / 2019: 11: 38: 11 +0000] "GET / HTTP / 1.1" 304 -

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рджреЛ рд╕рд░реНрд╡рд░ apiрдмрджрд▓реЗ рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рднрд╛рд░ рд╕рдВрддреБрд▓рди рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдПрдХ HAProxy рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдПрдХ рд╕реАрдорд╛ рдЬреЛрдбрд╝реЗрдВ


рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдПрдХ рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ HAProxy рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХрдВрдЯреЗрдирд░ loadbalancerрдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ haproxy-ratelimiter.cfgред

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ Dockerfile рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВред

FROM haproxy:1.7
COPY haproxy-ratelimiter.cfg /usr/local/etc/haproxy/haproxy.cfg

рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛


рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВ haproxy-ratelimiter.cfgред рдЖрдЗрдпреЗ рдЗрд╕рдХрд╛ рдзреНрдпрд╛рдирдкреВрд░реНрд╡рдХ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВред

defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms

frontend proxy
bind *:80

# ACL function declarations
acl is_abuse src_http_req_rate(Abuse) ge 10
acl inc_abuse_cnt src_inc_gpc0(Abuse) gt 0
acl abuse_cnt src_get_gpc0(Abuse) gt 0

# Rules
tcp-request connection track-sc0 src table Abuse
tcp-request connection reject if abuse_cnt
http-request deny if abuse_cnt
http-request deny if is_abuse inc_abuse_cnt

use_backend api
backend api
balance roundrobin

server api01 api01:80
server api02 api02:80

backend Abuse
stick-table type ip size 100K expire 30m store gpc0,http_req_rate(10s)

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

рддрд╛рд▓рд┐рдХрд╛ Abuse


backend Abuse
stick-table type ip size 100K expire 30m store gpc0,http_req_rate(10s)


рдпрд╣рд╛рдВ рд╣рдордиреЗ рдПрдХ рдбрдореА рдмреИрдХрдПрдВрдб Abuse("рджреБрд░реБрдкрдпреЛрдЧ") рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдХрд╛рд▓реНрдкрдирд┐рдХ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕реНрдЯрд┐рдХ-рдЯреЗрдмрд▓ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд╛рдо рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ Abuseред рд╕реНрдЯрд┐рдХ-рдЯреЗрдмрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдПрдХ рдЯреЗрдмрд▓ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдЖрдк рдЬреАрд╡рдирдХрд╛рд▓ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдорд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:

  • type ip: рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдИрдкреА рдкрддреЗ рджреНрд╡рд╛рд░рд╛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рд╣реА рдЖрдИрдкреА рдкрддреЗ рд╕реЗ рдЕрдиреБрд░реЛрдз рдПрдХ рд╣реА рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдЧрд╛ред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЖрдИрдкреА рдкрддреЗ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдкрд░ рдирдЬрд╝рд░ рд░рдЦ рд░рд╣реЗ рд╣реИрдВред
  • size 100K: рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЕрдзрд┐рдХрддрдо 100 рд╣рдЬрд╛рд░ рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВред
  • expire 30m: рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рддрд┐рдзрд╛рд░рдг рдЕрд╡рдзрд┐ 30 рдорд┐рдирдЯ рдХреА рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рд╣реИред
  • store gpc0,http_req_rate(10s): gpc0рдЕрдВрддрд┐рдо 10 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдХрд╛рдЙрдВрдЯрд░ рдФрд░ рдЖрдИрдкреА рдкрддреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИ ред рдЗрд╕рдХреА рдорджрдж рд╕реЗ gpc0рд╣рдо рдЯреНрд░реИрдХ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЖрдИрдкреА рдПрдбреНрд░реЗрд╕ рдХрд┐рддрдиреА рдмрд╛рд░ рдЧрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдХрд╛рдЙрдВрдЯрд░ рд╡реИрд▓реНрдпреВ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдИрдкреА рдкрддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрджрд┐рдЧреНрдз рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИред рдЪрд▓реЛ рдЗрд╕ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмреБрд▓рд╛рдУ abuse indicatorред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рддрд╛рд▓рд┐рдХрд╛ AbuseрдЖрдкрдХреЛ рдпрд╣ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдИрдкреА рдкрддреЗ рдХреЛ рд╕рдВрджрд┐рдЧреНрдз рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЗрд╕ рдкрддреЗ рд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╡рд░реНрддрдорд╛рди рдЖрд╡реГрддреНрддрд┐ред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреА рдЬрд╛рдирдХрд╛рд░реА рднреА рд╣реИред

рдЕрдм рд╣рдо рдЕрдиреБрднрд╛рдЧ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ frontend proxyрдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдирдпрд╛ рд╣реИред

рдПрд╕реАрдПрд▓ рдХрд╛рд░реНрдп рдФрд░ рдирд┐рдпрдо


frontend proxy
bind *:80

# ACL function declarations
acl is_abuse src_http_req_rate(Abuse) ge 10
acl inc_abuse_cnt src_inc_gpc0(Abuse) gt 0
acl abuse_cnt src_get_gpc0(Abuse) gt 0

# Rules
tcp-request connection track-sc0 src table Abuse
tcp-request connection reject if abuse_cnt
http-request deny if abuse_cnt
http-request deny if is_abuse inc_abuse_cnt

use_backend api

рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рд▓рд┐рд╕реНрдЯ (ACL) рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдирд┐рдпрдо рдХреЗ рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

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

  • acl is_abuse src_http_req_rate(Abuse) ge 10: рдлрд╝рдВрдХреНрд╢рди is_abuseрд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИ Trueрдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдЕрдиреБрд░реЛрдз рдЖрд╡реГрддреНрддрд┐ рджрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдЙрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред
  • acl inc_abuse_cnt src_inc_gpc0(Abuse) gt 0: рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рд╢реВрдиреНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдкрд░ рдлрд╝рдВрдХреНрд╢рди inc_abuse_cntрд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рд╢реВрдиреНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрд╢рд╛ рд░рд┐рдЯрд░реНрди рдХрд░рддрд╛ рд╣реИ ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рдореВрд▓реНрдп рдмрдврд╝рд╛рддрд╛ рд╣реИ , рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЗрд╕ рдЖрдИрдкреА рдкрддреЗ рд╕реЗ рджреБрд░реБрдкрдпреЛрдЧ рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИредTruegpc0gpc0Trueabuse indicator
  • acl abuse_cnt src_get_gpc0(Abuse) gt 0: рдпрджрд┐ рдорд╛рди рд╢реВрдиреНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди abuse_cntрд▓реМрдЯрддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╡рд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЖрдИрдкреА рдкрддрд╛ рдкрд╣рд▓реЗ рд╣реА рдЧрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИредTruegpc0

рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, ACL рдХреЗрд╡рд▓ рдШреЛрд╖рдгрд╛рдПрдБ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛рдПрдБ рд╣реИрдВред рд╡реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдХреБрдЫ рдирд┐рдпрдо рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

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

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ:

  • tcp-request connection track-sc0 src table Abuse: рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдХреНрд╡реЗрд░реА рдЬреЛрдбрд╝рддрд╛ рд╣реИ Abuseред рдЪреВрдВрдХрд┐ рдХреБрдВрдЬреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЖрдИрдкреА рдкрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдирд┐рдпрдо рдЖрдИрдкреА рдкрддреЗ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
  • tcp-request connection reject if abuse_cnt: TCP-, IP- , abuse. , TCP- IP-.
  • http-request deny if abuse_cnt: , IP- . IP-, abuse.
  • http-request deny if is_abuse inc_abuse_cnt: , is_abuse inc_abuse_cnt True. , , IP- , IP- .

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

рдЪрд▓реЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдлрд┐рд▓реНрдЯрд░ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЛ!


рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдФрд░ рд▓реЙрдиреНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

$ sudo docker-compose down
$ sudo docker-compose build
$ sudo docker-compose up

рд▓реЛрдб рдмреИрд▓реЗрдиреНрд╕рд░ рдХреЛ рджреЛ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рд╕реЗ рдкрд╣рд▓реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдкреНрд░рд╢рди


рдкреНрд░рддрд┐ рджрд╕ рд╕реЗрдХрдВрдб рдореЗрдВ рджрд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕реАрдорд╛ рдХреНрдпреЛрдВ рд╣реИ?


рддрд╛рд▓рд┐рдХрд╛ Abuseрдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ http_req_rate(10s), рдЕрд░реНрдерд╛рдд, рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЛ рджрд╕ рд╕реЗрдХрдВрдб рдХреА рд╡рд┐рдВрдбреЛ рдореЗрдВ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИред is_abuseрдПрд╕реАрдПрд▓ рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди Trueрдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рднреАрддрд░ the10 рдХреЗ рдЕрдиреБрд░реЛрдз рджрд░ рдкрд░ рд▓реМрдЯрддрд╛ рд╣реИ ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рджреБрд░реБрдкрдпреЛрдЧ рдХреЛ рджрд╕ рд╕реЗрдХрдВрдб рдореЗрдВ рджрд╕ рдпрд╛ рдЕрдзрд┐рдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЖрд╡реГрддреНрддрд┐ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рд▓рд┐рдорд┐рдЯрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдо рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред

Http-request рдФрд░ tcp-request рдХрдиреЗрдХреНрд╢рди рдирд┐рдпрдореЛрдВ рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?


рд╕реЗ рдкреНрд░рд▓реЗрдЦрди :

http-request: http-request рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдиреЗрдЯрд╡рд░реНрдХ рд▓реЗрдпрд░ 7 [OSI рдореЙрдбрд▓] рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ

рд╕реЗ рдкреНрд░рд▓реЗрдЦрди :
рдЯреАрд╕реАрдкреА-рдЕрдиреБрд░реЛрдз рдХрдиреЗрдХреНрд╢рди: рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рдд 4 рдкрд░ рдПрдХ рд╢рд░реНрдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдкрд░ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХрд░рдирд╛

HTTP-, TCP-?


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

рдЕрдм рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдЖрдИрдкреА рдкрддреЗ рд╕реЗ HTTP рдХрдиреЗрдХреНрд╢рди рдЦреБрд▓рд╛ рд░рд╣реЗ ( рд▓рдЧрд╛рддрд╛рд░ HTTP рдХрдиреЗрдХреНрд╢рди рджреЗрдЦреЗрдВ ), рдФрд░ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЖрд╡реГрддреНрддрд┐ рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб рдорд╛рди рд╕реЗ рдиреАрдЪреЗ рдЪрд▓реА рдЧрдИ рд╣реИред рддреАрд╕рд░рд╛ рдирд┐рдпрдо рдЧрд╛рд░рдВрдЯреА HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд░реЛрдХрдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ abuse indicatorрдЗрд╕ рдЖрдИрдкреА рдкрд░ рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИ ред

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

рдирд┐рд╖реНрдХрд░реНрд╖


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

рдФрд░ рдХреНрдпрд╛ рдкрдврд╝реЗрдВ :

  1. Mail.ru Cloud Solutions рдХреЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЗрдВ рджреЛрд╖-рд╕рд╣рд┐рд╖реНрдгреБ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ ред
  2. рд╢реАрд░реНрд╖ 10 рдХреБрдмреЗрд░рдиреЗрдЯ рдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рдЯрд┐рдкреНрд╕ ред
  3. рдбрд┐рдЬрд┐рдЯрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рд╣рдорд╛рд░рд╛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдирд▓ ред

All Articles