MS рд░рд┐рдореЛрдЯ рдбреЗрд╕реНрдХрдЯреЙрдк рдЧреЗрдЯрд╡реЗ, HAProxy рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдЕрдиреБрдорд╛рди

рдирдорд╕реНрддреЗ рджреЛрд╕реНрддреЛрдВ!

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

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

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

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдВрдд F5, A10, Netscaler (ADC) рд╣реИрдВред рдЗрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдкреНрд░рд╢рд╛рд╕рдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЗрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рдкрд░реНрджрд╛рдлрд╛рд╢ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред рдФрд░ рд╣рд╛рдБ, рдпреЗ рд╕рд┐рд╕реНрдЯрдо рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдмрд╛рдврд╝ рд╕реЗ рдЖрдкрдХреА рд░рдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ред

рд▓реЗрдХрд┐рди рд╣рд░ рдХрдВрдкрдиреА рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдЦрд░реАрдж рд╕рдХрддреА (рдФрд░ рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдвреВрдВрдв рд╕рдХрддреА рд╣реИ :), рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦ рд╕рдХрддреА рд╣реИ!

рдПрдХ рдореБрдлреНрдд рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ HAProxy рдХреЗ рдореБрдХреНрдд рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдореИрдВрдиреЗ рдбреЗрдмрд┐рдпрди 10 рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рд╣реИрдкреНрд░реЛрдХреНрд╕реА 1.8.19 рдХреЗ рд╕реНрдерд┐рд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВред рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг 2.0.xx рдкрд░ рднреА рдЬрд╛рдБрдЪ рдХреАред

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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ hproxy рдХреЛ SSL рдмреНрд░рд┐рдЬрд┐рдВрдЧ рдореЛрдб (рдЙрд░реНрдл рдореЛрдб http) рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рдВрдЧ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдХрд┐ рдХреМрди-рд╕рд╛ RDP рдХреЗ рдЕрдВрджрд░ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреАрдЪ рдореЗрдВ рдЪрдврд╝ рдЧрдпрд╛ред рдЗрд╕рд▓рд┐рдП, RDGateway рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдкрд░ "рд╕рднреА" рд▓реЗрдЦреЛрдВ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ / RDWeb рдкрде рдЧрд╛рдпрдм рд╣реИред рд╡рд╣рд╛рдБ рд╕рдм рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ /rpc/rpcproxy.dll рдФрд░ / RemoteDesktopGateway / рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдорд╛рдирдХ GET / POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рдЕрдиреБрд░реЛрдз рдкреНрд░рдХрд╛рд░ RDG_IN_DATA, RDG_OUT_DATA рд╣реИред

рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рддреЛред

рдЪрд▓реЛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВ mstsc рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ, рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╛рддрд╛ рд╣реВрдВ, рдореБрдЭреЗ рд▓реЙрдЧ рдореЗрдВ рдЪрд╛рд░ 401 рддреНрд░реБрдЯрд┐рдпрд╛рдВ (рдЕрдирдзрд┐рдХреГрдд) рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ, рдлрд┐рд░ рдореИрдВ рд▓реЙрдЧрд┐рди / рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдЙрддреНрддрд░ 200 рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдореИрдВ

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

рдЪреВрдВрдХрд┐ рд▓реЙрдЧрд┐рди рдпреВрдЖрд░рдПрд▓ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рд╣рд╛рдЗрдкреНрд░реЛрдХреНрд╕реА рдореЗрдВ 401 рддреНрд░реБрдЯрд┐ рдХреИрд╕реЗ рдкрдХрдбрд╝рдиреА рд╣реИ, рдореИрдВ рд╕рднреА 4xx рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝реВрдВрдЧрд╛ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдкрдХрдбрд╝рддрд╛, рд▓реЗрдХрд┐рди рдЧрд┐рдирддреА)ред рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЦреБрд╢ред

рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рд╕рдордп рдХреА рдкреНрд░рддрд┐ рдпреВрдирд┐рдЯ 4xx рддреНрд░реБрдЯрд┐рдпреЛрдВ (рдмреИрдХрдПрдВрдб рдкрд░) рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдпрджрд┐ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЖрдИрдкреА рд╕реЗ рдЖрдЧреЗ рдХреЗ рд╕рднреА рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджреЗрдВред

рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдпрд╣ рдкрд╛рд╕рд╡рд░реНрдб рд╕реБрд░рдХреНрд╖рд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдпрд╣ 4xx рддреНрд░реБрдЯрд┐ рд╕реБрд░рдХреНрд╖рд╛ рд╣реЛрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЕрдХреНрд╕рд░ рдПрдХ рдЧреИрд░-рдореМрдЬреВрдж url (404) рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реБрд░рдХреНрд╖рд╛ рднреА рдХрд╛рдо рдХрд░реЗрдЧреАред

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

frontend fe_rdp_tsc
    bind *:443 ssl crt /etc/haproxy/cert/desktop.example.com.pem
    mode http
    ...
    default_backend be_rdp_tsc


backend be_rdp_tsc
    ...
    mode http
    ...

    # , , 1000 ,   15 ,  -    10 
    stick-table type string len 128 size 1k expire 15s store http_err_rate(10s)
    # ip
    http-request track-sc0 src
    #  http  429,    10   4 
    http-request deny deny_status 429 if { sc_http_err_rate(0) gt 4 }
	
	...
    server rdgw01 192.168.1.33:443 maxconn 1000 weight 10 ssl check cookie rdgw01
    server rdgw02 192.168.2.33:443 maxconn 1000 weight 10 ssl check cookie rdgw02

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

рд╣рдо рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рд╕рд╛рде рдмреЗрд░рд╣рдореА рд╕реЗ рдкреЗрд╢ рдЖрдПрдВрдЧреЗ, рд╣рдо рдЙрд╕рдХреЗ рд▓рд┐рдП tcp рдХрдиреЗрдХреНрд╢рди рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред

frontend fe_rdp_tsc
    bind *:443 ssl crt /etc/haproxy/cert/ertelecom_ru_2020_06_11.pem
    mode http
    ...
    #  ip , 1000 ,   15 ,    
    stick-table type ip size 1k expire 15s store gpc0
    # 
    tcp-request connection track-sc0 src
    # tcp ,    >0
    tcp-request connection reject if { sc0_get_gpc0 gt 0 }
	
    ...
    default_backend be_rdp_tsc


backend be_rdp_tsc
    ...
    mode http
    ...
	
    #  ip , 1000 ,   15 ,  -   10 
    stick-table type ip size 1k expire 15s store http_err_rate(10s)
    # ,  -   10   8
    acl errors_too_fast sc1_http_err_rate gt 8
    #     ( )
    acl mark_as_abuser sc0_inc_gpc0(fe_rdp_tsc) gt 0
    #  
    acl clear_as_abuser sc0_clr_gpc0(fe_rdp_tsc) ge 0
    # 
    tcp-request content track-sc1 src
    #, ,  
    tcp-request content reject if errors_too_fast mark_as_abuser
    #,   
    tcp-request content accept if !errors_too_fast clear_as_abuser
	
    ...
    server rdgw01 192.168.1.33:443 maxconn 1000 weight 10 ssl check cookie rdgw01
    server rdgw02 192.168.2.33:443 maxconn 1000 weight 10 ssl check cookie rdgw02

рдПрдХ рд╣реА рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдирдореНрд░рддрд╛ рд╕реЗ, рд╣рдо рддреНрд░реБрдЯрд┐ http 429 (рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдиреБрд░реЛрдз) рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗ

frontend fe_rdp_tsc
    ...
    stick-table type ip size 1k expire 15s store gpc0
    http-request track-sc0 src
    http-request deny deny_status 429 if { sc0_get_gpc0 gt 0 }
    ...
    default_backend be_rdp_tsc

backend be_rdp_tsc
    ...
    stick-table type ip size 1k expire 15s store http_err_rate(10s)
    acl errors_too_fast sc1_http_err_rate gt 8
    acl mark_as_abuser sc0_inc_gpc0(fe_rdp_tsc) gt 0
    acl clear_as_abuser sc0_clr_gpc0(fe_rdp_tsc) ge 0
    http-request track-sc1 src
    http-request allow if !errors_too_fast clear_as_abuser
    http-request deny deny_status 429 if errors_too_fast mark_as_abuser
    ...

рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: mstsc рдЪрд▓рд╛рдПрдВ рдФрд░ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рддреАрд╕рд░реЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрд╛рдж, рдпрд╣ 10 рд╕реЗрдХрдВрдб рдореЗрдВ рдореБрдЭреЗ рдорд╛рд░рддрд╛ рд╣реИ, рдФрд░ mstsc рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд▓реЙрдЧ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдореИрдВ рдПрдХ рд╣рд╛рдИрдкреНрд░реЛрдлрд╛рдЗрд▓ рдЧреБрд░реБ рд╕реЗ рджреВрд░ рд╣реВрдВред рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
http-request-deny_status 429 рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ {sc_http_err_rate (0) gt 4}
рдЖрдкрдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓рдЧрднрдЧ 10 рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдореИрдВ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВред рд╣рд╛рдкреНрд░реЛрд╕реА рдорд╛рд╕реНрдЯрд░реНрд╕, рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдпрджрд┐ рдЖрдк рдореБрдЭреЗ рдкреВрд░рдХ рдХрд░рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд╕рд╣реА рдХрд░рддреЗ рд╣реИрдВ, рдмреЗрд╣рддрд░ рдХрд░рддреЗ рд╣реИрдВред

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, рдЖрдк рдЖрд░рдбреА рдЧреЗрдЯрд╡реЗ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рддрд░реАрдХреЗ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред

рд╡рд┐рдВрдбреЛрдЬ рд░рд┐рдореЛрдЯ рдбреЗрд╕реНрдХрдЯреЙрдк рдХреНрд▓рд╛рдЗрдВрдЯ (mstsc) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ TLS1.2 (рдХрдо рд╕реЗ рдХрдо рд╡рд┐рдВрдбреЛрдЬ 7 рдореЗрдВ) рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ TLS1 рдЫреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛; рд╡рд░реНрддрдорд╛рди рд╕рд┐рдлрд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рднреА рдкреБрд░рд╛рдиреЗ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛ред

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ, рдмрд╕ рд╕реАрдЦрдиреЗ, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЪреНрдЫрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдореИрдВ рдкреВрд░реЗ рдХреЙрдиреНрдлрд┐рдЧ рджреЗ рджреВрдБрдЧрд╛ред

haproxy.conf
global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
        #ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE
-RSA-AES256-GCM-SHA384
        ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
        ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
        #ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
        ssl-default-bind-options no-sslv3
        ssl-server-verify none


defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        timeout connect 5000
        timeout client  15m
        timeout server  15m
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http


frontend fe_rdp_tsc
    bind *:443 ssl crt /etc/haproxy/cert/dektop.example.com.pem
    mode http
    capture request header Host len 32
    log global
    option httplog
    timeout client 300s
    maxconn 1000

    stick-table type ip size 1k expire 15s store gpc0
    tcp-request connection track-sc0 src
    tcp-request connection reject if { sc0_get_gpc0 gt 0 }

    acl rdweb_domain hdr(host) -i beg dektop.example.com
    http-request deny deny_status 400 if !rdweb_domain
    default_backend be_rdp_tsc


backend be_rdp_tsc
    balance source
    mode http
    log global

    stick-table type ip size 1k expire 15s store http_err_rate(10s)
    acl errors_too_fast sc1_http_err_rate gt 8
    acl mark_as_abuser sc0_inc_gpc0(fe_rdp_tsc) gt 0
    acl clear_as_abuser sc0_clr_gpc0(fe_rdp_tsc) ge 0
    tcp-request content track-sc1 src
    tcp-request content reject if errors_too_fast mark_as_abuser
    tcp-request content accept if !errors_too_fast clear_as_abuser

    option forwardfor
    http-request add-header X-CLIENT-IP %[src]

    option httpchk GET /
    cookie RDPWEB insert nocache
    default-server inter 3s    rise 2  fall 3
    server rdgw01 192.168.1.33:443 maxconn 1000 weight 10 ssl check cookie rdgw01
    server rdgw02 192.168.2.33:443 maxconn 1000 weight 10 ssl check cookie rdgw02


frontend fe_stats
    mode http
    bind *:8080
    acl ip_allow_admin src 192.168.66.66
    stats enable
    stats uri /stats
    stats refresh 30s
    #stats admin if LOCALHOST
    stats admin if ip_allow_admin


рдмреИрдХрдПрдВрдб рдкрд░ рджреЛ рд╕рд░реНрд╡рд░ рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдЧрд▓рддреА рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рд╣рд╛рдкреНрд░реЛрд╕реА рдлреНрд▓реЛрдЯрд┐рдВрдЧ рд╡реНрд╣рд╛рдЗрдЯ рдЖрдИрдкреА рдХреЗ рд╕рд╛рде рджреЛ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдХрдореНрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕рдВрд╕рд╛рдзрди: рдЖрдк "рджреЛ рдЧрд┐рдЧреНрд╕, рджреЛ рдХреЛрд░, рдПрдХ рдЧреЗрдорд┐рдВрдЧ рдкреАрд╕реА" рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ , рдпрд╣ рдорд╛рд░реНрдЬрд┐рди рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред

рд▓рд┐рдВрдХ:

HAProxy рд╕реЗ rdp-gateway рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдПрдХрдорд╛рддреНрд░ рд▓реЗрдЦ рдЬреЛ рдореИрдВрдиреЗ рдкрд╛рдпрд╛, рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреНрд░реИрдХрд┐рдВрдЧ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдХрд┐рдпрд╛
рдЧрдпрд╛ рдерд╛

All Articles