рдЗрдВрдЯрд░рдиреЗрдЯ рд╣реЗ рдЕрддреНрдпрдВрдд рдкреНрд░рддрд┐рдХреВрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдЖрд╣реЗ рд╣реЗ рдЧреБрдкрд┐рдд рдирд╛рд╣реА. рдЖрдкрдг рд╕рд░реНрд╡реНрд╣рд░ рд╡рд╛рдврд╡рддрд╛рдЪ, рддреНрдпрд╛рд╡рд░ рддреНрд╡рд░рд┐рдд рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рд╣рд▓реНрд▓реЗ рдЖрдгрд┐ рдПрдХрд╛рдзрд┐рдХ рд╕реНрдХреЕрди рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде
рдЯрд╛рд░реНрдкрд┐рдЯ рдПрдХ рдЯреНрд░реЕрдк рдкреЛрд░реНрдЯ рдЖрд╣реЗ рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдЗрдирдХрдорд┐рдВрдЧ рдХрдиреЗрдХреНрд╢рди рдХрдореА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдЬрд░ рддреГрддреАрдп-рдкрдХреНрд╖ рдкреНрд░рдгрд╛рд▓реА рдпрд╛ рдкреЛрд░реНрдЯрд╢реА рдХрдиреЗрдХреНрдЯ рд╣реЛрдд рдЕрд╕реЗрд▓, рддрд░ рддреБрдореНрд╣реА рддреНрд╡рд░рд┐рдд рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░реВ рд╢рдХрдгрд╛рд░ рдирд╛рд╣реА. рддрд┐рд▓рд╛ рддрд┐рдЪреА рд╕рд┐рд╕реНрдЯреАрдо рд╕рдВрд╕рд╛рдзрдиреЗ рд╡рд╛рдпрд╛ рдШрд╛рд▓рд╡рд╛рд╡реА рд▓рд╛рдЧрддреАрд▓ рдЖрдгрд┐ рдХрдиреЗрдХреНрд╢рди рдХрд╛рд▓рдмрд╛рд╣реНрдп рд╣реЛрдИрдкрд░реНрдпрдВрдд рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓ рдХрд┐рдВрд╡рд╛ рд╡реНрдпрдХреНрддрд┐рдЪрд▓рд┐рддрдкрдгреЗ рд╕рдорд╛рдкреНрдд рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓.
рдмрд░реНрдпрд╛рдЪрджрд╛, tarpits рд╕рдВрд░рдХреНрд╖рдгрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддрд╛рдд. рд╕рдВрдЧрдгрдХрд╛рддреАрд▓ рд╡рд░реНрдореНрд╕рдкрд╛рд╕реВрди рд╕рдВрд░рдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рддрдВрддреНрд░ рдкреНрд░рдердо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реЗ. рдЖрдгрд┐ рдЖрддрд╛ рд╣реЗ рд╕реНрдкреЕрдорд░ рдЖрдгрд┐ рд╕рдВрд╢реЛрдзрдХрд╛рдВрдЪреЗ рдЬреАрд╡рди рдЙрдзреНрд╡рд╕реНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рдЬреЗ рд╕рд▓рдЧ рд╕рд░реНрд╡ IP рдкрддреНрддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╡рд┐рд╕реНрддреГрдд рд╕реНрдХреЕрдирд┐рдВрдЧрдордзреНрдпреЗ рдЧреБрдВрддрд▓реЗрд▓реЗ рдЖрд╣реЗрдд (рд╣реЕрдмреНрд░реЗрд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдгреЗ:
рдЦреНрд░рд┐рд╕ рд╡реЗрд▓рдиреНрд╕ рдирд╛рд╡рд╛рдЪреНрдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХрд╛рдВрдкреИрдХреА рдПрдХ рд╣рд╛ рдЕрдкрдорд╛рди рдкрд╛рд╣реВрди рдХрдВрдЯрд╛рд│рд▓рд╛ - рдЖрдгрд┐ рддреНрдпрд╛рдиреЗ рдПрдХ рдЫреЛрдЯрд╛рд╕рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рд╣рд┐рд▓рд╛
рдпреБрдЯрд┐рд▓рд┐рдЯреАрдЪреА рд╕реНрдерд╛рдкрдирд╛:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реЗрд▓реЗ рдЯрд╛рд░реНрдкрд┐рдЯ рдЖрдХреНрд░рдордгрдХрд░реНрддреНрдпрд╛рдХрдбреВрди рддреБрдордЪреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд╕рдВрд╕рд╛рдзрдиреЗ рдШреЗрдИрд▓. рдкрдг рддреЛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪрд╛рд╣реА рдореБрджреНрджрд╛ рдирд╛рд╣реА. рд▓реЗрдЦрдХ
рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдбрдордзреНрдпреЗ, рдПрдВрдбрд▓реЗрд╢ рд╕рд░реНрд╡реНрд╣рд░рд▓рд╛ рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдкреЛрд░реНрдЯ 22 рд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬреЗрдереЗ рдЧреБрдВрдб рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдареЛрдард╛рд╡рддрд╛рдд. рдорд╛рдирдХ рд╕реБрд░рдХреНрд╖рд╛ рд╢рд┐рдлрд╛рд░рд╢реА рдиреЗрд╣рдореА SSH рд▓рд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдкреЛрд░реНрдЯрд╡рд░ рд╣рд▓рд╡рдгреНрдпрд╛рдЪрд╛ рд╕рд▓реНрд▓рд╛ рджреЗрддрд╛рдд, рдЬреНрдпрд╛рдореБрд│реЗ рд▓реЙрдЧрдЪрд╛ рдЖрдХрд╛рд░ рддреНрд╡рд░рд┐рдд рдХреНрд░рдорд╛рдиреЗ рдХрдореА рд╣реЛрддреЛ.
рдЦреНрд░рд┐рд╕ рд╡реЗрд▓рдиреНрд╕ рдореНрд╣рдгрддрд╛рдд рдХреА рддреНрдпрд╛рдЪрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рддрдкрд╢реАрд▓рд╛рдЪреНрдпрд╛ рдПрдХрд╛ рдкрд░рд┐рдЪреНрдЫреЗрджрд╛рдЪрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЛ SSH-
.
рдПрдВрдбрд▓реЗрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдиреЗрдордХреЗ рд╣реЗрдЪ рдХрд░рддреЛ: рддреЗ рдкрд╛рдард╡рддреЗ рдЕрдВрддрд╣реАрди рдпрд╛рджреГрдЪреНрдЫрд┐рдХрдкрдгреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдЪрд╛ рдкреНрд░рд╡рд╛рд╣, рдЬреЗ RFC 4253 рдЪреЗ рдкрд╛рд▓рди рдХрд░рддрд╛рдд, рдореНрд╣рдгрдЬреЗрдЪ рдкреНрд░рдорд╛рдгреАрдХрд░рдгрд╛рдкреВрд░реНрд╡реА рдкрд╛рдард╡рд╛ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдУрд│ рдпрд╛рд╕рд╣ рд╕реБрд░реВ рд╣реЛрддреЗ SSH-
рдЖрдгрд┐ рдУрд│реАрдЪреНрдпрд╛ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рд╡рд░реНрдгрд╛рд╕рд╣ 255 рд╡рд░реНрдгрд╛рдВрдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдирд╛рд╣реА. рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рд╕рд░реНрд╡ рдХрд╛рд╣реА рдорд╛рдирдХрд╛рдВрдиреБрд╕рд╛рд░ рдЖрд╣реЗ.
рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреЕрдХреЗрдЯ рдкрд╛рдард╡рддрд╛рдирд╛ 10 рд╕реЗрдХрдВрдж рдерд╛рдВрдмрддреЛ. рд╣реЗ рдХреНрд▓рд╛рдпрдВрдЯрд▓рд╛ рдХрд╛рд▓рдмрд╛рд╣реНрдп рд╣реЛрдгреНрдпрд╛рдкрд╛рд╕реВрди рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреЗ, рддреНрдпрд╛рдореБрд│реЗ рдХреНрд▓рд╛рдпрдВрдЯ рдХрд╛рдпрдордЪрд╛ рдЕрдбрдХрд▓рд╛ рдЬрд╛рдИрд▓.
рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА рдбреЗрдЯрд╛ рдкрд╛рдард╡рд┐рд▓рд╛ рдЬрд╛рдд рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЕрддреНрдпрдВрдд рд╕реЛрдкрд╛ рдЖрд╣реЗ. рдпрд╛рд╕ рдХреЛрдгрддреЗрд╣реА рд╕рд┐рдлрд░ рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА рдЖрдгрд┐ рдПрдХрд╛рдзрд┐рдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓рдЪреЗ рд╕рдорд░реНрдерди рдХрд░рддреЗ.
рд▓реЗрдЦрдХрд╛рдиреЗ рд╣реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛ рдХреА рдпреБрдЯрд┐рд▓рд┐рдЯреА рдХрдореАрддрдХрдореА рд╕рдВрд╕рд╛рдзрдиреЗ рд╡рд╛рдкрд░рддреЗ рдЖрдгрд┐ рдорд╢реАрдирд╡рд░ рдкреВрд░реНрдгрдкрдгреЗ рд▓рдХреНрд╖ рди рджреЗрддрд╛ рдХрд╛рд░реНрдп рдХрд░рддреЗ. рдЖрдзреБрдирд┐рдХ рдЕрдБрдЯреАрд╡реНрд╣рд╛рдпрд░рд╕ рдЖрдгрд┐ рдЗрддрд░ "рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рдгрд╛рд▓реА" рдЪреНрдпрд╛ рд╡рд┐рдкрд░реАрдд, рддреЗ рдЖрдкрд▓рд╛ рд╕рдВрдЧрдгрдХ рдзреАрдорд╛ рдХрд░реВ рдирдпреЗ. рдереЛрдбреНрдпрд╛ рдЕрдзрд┐рдХ рдзреВрд░реНрдд рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░рдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдореБрд│реЗ рддреНрдпрд╛рдиреЗ рд░рд╣рджрд╛рд░реА рдЖрдгрд┐ рдореЗрдорд░реА рд╡рд╛рдкрд░ рджреЛрдиреНрд╣реА рдХрдореА рдХрд░рдгреНрдпрд╛рдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ. рдЬрд░ рдпрд╛рдиреЗ рдирд╡реАрди рдХрдиреЗрдХреНрд╢рдирд╡рд░ рдПрдХ рд╡реЗрдЧрд│реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реВ рдХреЗрд▓реА, рддрд░ рд╕рдВрднрд╛рд╡реНрдп рд╣рд▓реНрд▓реЗрдЦреЛрд░ рдорд╢реАрдирд╡рд░реАрд▓ рд╕рдВрд╕рд╛рдзрдиреЗ рд╕рдВрдкрд╡рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХрд╛рдзрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдЙрдШрдбреВрди DDoS рд╣рд▓реНрд▓рд╛ рдХрд░реВ рд╢рдХрддрд╛рдд. рдкреНрд░рддрд┐ рдХрдиреЗрдХреНрд╢рди рдПрдХ рдереНрд░реЗрдб рджреЗрдЦреАрд▓ рд╕рд░реНрд╡реЛрддреНрддрдо рдкрд░реНрдпрд╛рдп рдирд╛рд╣реА, рдХрд╛рд░рдг рдХрд░реНрдирд▓ рдереНрд░реЗрдбреНрд╕ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрд╕рд╛рдзрдиреЗ рд╡рд╛рдпрд╛ рдШрд╛рд▓рд╡реЗрд▓.
рдореНрд╣рдгреВрдирдЪ рдХреНрд░рд┐рд╕ рд╡реЗрд▓рдиреНрд╕рдиреЗ рдПрдВрдбрд▓реЗрд╢рд╕рд╛рдареА рд╕рд░реНрд╡рд╛рдд рд╣рд▓рдХрд╛ рдкрд░реНрдпрд╛рдп рдирд┐рд╡рдбрд▓рд╛: рд╕рд┐рдВрдЧрд▓-рдереНрд░реЗрдбреЗрдб рд╕рд░реНрд╡реНрд╣рд░ poll(2)
, рдЬреЗрдереЗ рдЯреНрд░реЕрдкрдордзреАрд▓ рдХреНрд▓рд╛рдпрдВрдЯ рдЕрдХреНрд╖рд░рд╢рдГ рдХреЛрдгрддреАрд╣реА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЗ рд╡рд╛рдкрд░рдд рдирд╛рд╣реАрдд, рдХрд░реНрдирд▓рдордзреАрд▓ рд╕реЙрдХреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЛрдЬрдд рдирд╛рд╣реАрдд рдЖрдгрд┐ рдПрдВрдбрд▓реЗрд╢рдордзреНрдпреЗ рдЯреНрд░реЕрдХрд┐рдВрдЧрд╕рд╛рдареА рдЖрдгрдЦреА 78 рдмрд╛рдЗрдЯреНрд╕. рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рдпрдВрдЯрд╕рд╛рдареА рд░рд┐рд╕реАрд╡реНрд╣ рдЖрдгрд┐ рд╕реЗрдВрдб рдмрдлрд░ рд╡рд╛рдЯреВ рдирдпреЗ рдореНрд╣рдгреВрди, рдПрдВрдбрд▓реЗрд╢ рдбрд╛рдпрд░реЗрдХреНрдЯ рдНрдХреНрд╕реЗрд╕ рд╕реЙрдХреЗрдЯ рдЙрдШрдбрддреЛ рдЖрдгрд┐ рдЬрд╡рд│рдЬрд╡рд│ рд╕рдВрдкреВрд░реНрдг рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо TCP/IP рд╕реНрдЯреЕрдХрд▓рд╛ рдорд╛рдЧреЗ рдЯрд╛рдХреВрди TCP рдкреЕрдХреЗрдЯреНрд╕рдЪреЗ рдереЗрдЯ рднрд╛рд╖рд╛рдВрддрд░ рдХрд░рддреЛ. рдЗрдирдХрдорд┐рдВрдЧ рдмрдлрд░рдЪреА рдЕрдЬрд┐рдмрд╛рдд рдЧрд░рдЬ рдирд╛рд╣реА, рдХрд╛рд░рдг рдЖрдореНрд╣рд╛рд▓рд╛ рдпреЗрдгрд╛рд░реНтАНрдпрд╛ рдбреЗрдЯрд╛рдордзреНрдпреЗ рд░рд╕ рдирд╛рд╣реА.
рд▓реЗрдЦрдХ рдореНрд╣рдгрддреЛ рдХреА рддреНрдпрд╛рдЪреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдорд╛рдЪреНрдпрд╛ рд╡реЗрд│реА
import asyncio
import random
async def handler(_reader, writer):
try:
while True:
await asyncio.sleep(10)
writer.write(b'%xrn' % random.randint(0, 2**32))
await writer.drain()
except ConnectionResetError:
pass
async def main():
server = await asyncio.start_server(handler, '0.0.0.0', 2222)
async with server:
await server.serve_forever()
asyncio.run(main())
рдЯрд╛рд░реНрдкрд┐рдЯ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕рд╛рдареА Asyncio рдЖрджрд░реНрд╢ рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╣рд╛ рд╣реБрдХ рдлрд╛рдпрд░рдлреЙрдХреНрд╕, рдХреНрд░реЛрдо рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдХреЛрдгрддрд╛рд╣реА рдХреНрд▓рд╛рдпрдВрдЯ рдЧреЛрдард╡реЗрд▓ рдЬреЛ рддреБрдордЪреНрдпрд╛ HTTP рд╕рд░реНрд╡реНрд╣рд░рд╢реА рдЕрдиреЗрдХ рддрд╛рд╕ рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рдЖрд╣реЗ:
import asyncio
import random
async def handler(_reader, writer):
writer.write(b'HTTP/1.1 200 OKrn')
try:
while True:
await asyncio.sleep(5)
header = random.randint(0, 2**32)
value = random.randint(0, 2**32)
writer.write(b'X-%x: %xrn' % (header, value))
await writer.drain()
except ConnectionResetError:
pass
async def main():
server = await asyncio.start_server(handler, '0.0.0.0', 8080)
async with server:
await server.serve_forever()
asyncio.run(main())
рдСрдирд▓рд╛рдЗрди рдЧреБрдВрдбрд╛рдВрдирд╛ рд╢рд┐рдХреНрд╖рд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА Tarpit рд╣реЗ рдПрдХ рдЙрддреНрддрдо рд╕рд╛рдзрди рдЖрд╣реЗ. рддреНрдпрд╛рдЙрд▓рдЯ, рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд░реНрд╡реНрд╣рд░рдЪреНрдпрд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрддрдирд╛рдХрдбреЗ рддреНрдпрд╛рдВрдЪреЗ рд▓рдХреНрд╖ рд╡реЗрдзрдгреНрдпрд╛рдЪрд╛ рдХрд╛рд╣реА рдзреЛрдХрд╛ рдЖрд╣реЗ рд╣реЗ рдЦрд░реЗ рдЖрд╣реЗ. рдХреЛрдгреАрддрд░реА
рд╣рдм:
рдкрд╛рдпрдерди, рдорд╛рд╣рд┐рддреА рд╕реБрд░рдХреНрд╖рд╛, рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░, рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рди
рдЯреЕрдЧреНрдЬ:
SSH, Endless, tarpit, tarpit, trap, asycio
рдЗрдирдХрдорд┐рдВрдЧ рдПрд╕рдПрд╕рдПрдЪ рдХрдиреЗрдХреНрд╢рдирд╕рд╛рдареА рдЯреНрд░реЕрдк (рдЯрд╛рд░реНрдкрд┐рдЯ).
рдЗрдВрдЯрд░рдиреЗрдЯ рд╣реЗ рдЕрддреНрдпрдВрдд рдкреНрд░рддрд┐рдХреВрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдЖрд╣реЗ рд╣реЗ рдЧреБрдкрд┐рдд рдирд╛рд╣реА. рдЖрдкрдг рд╕рд░реНрд╡реНрд╣рд░ рд╡рд╛рдврд╡рддрд╛рдЪ, рддреНрдпрд╛рд╡рд░ рддреНрд╡рд░рд┐рдд рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рд╣рд▓реНрд▓реЗ рдЖрдгрд┐ рдПрдХрд╛рдзрд┐рдХ рд╕реНрдХреЕрди рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде
рдЯрд╛рд░реНрдкрд┐рдЯ рдПрдХ рдЯреНрд░реЕрдк рдкреЛрд░реНрдЯ рдЖрд╣реЗ рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдЗрдирдХрдорд┐рдВрдЧ рдХрдиреЗрдХреНрд╢рди рдХрдореА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдЬрд░ рддреГрддреАрдп-рдкрдХреНрд╖ рдкреНрд░рдгрд╛рд▓реА рдпрд╛ рдкреЛрд░реНрдЯрд╢реА рдХрдиреЗрдХреНрдЯ рд╣реЛрдд рдЕрд╕реЗрд▓, рддрд░ рддреБрдореНрд╣реА рддреНрд╡рд░рд┐рдд рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░реВ рд╢рдХрдгрд╛рд░ рдирд╛рд╣реА. рддрд┐рд▓рд╛ рддрд┐рдЪреА рд╕рд┐рд╕реНрдЯреАрдо рд╕рдВрд╕рд╛рдзрдиреЗ рд╡рд╛рдпрд╛ рдШрд╛рд▓рд╡рд╛рд╡реА рд▓рд╛рдЧрддреАрд▓ рдЖрдгрд┐ рдХрдиреЗрдХреНрд╢рди рдХрд╛рд▓рдмрд╛рд╣реНрдп рд╣реЛрдИрдкрд░реНрдпрдВрдд рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓ рдХрд┐рдВрд╡рд╛ рд╡реНрдпрдХреНрддрд┐рдЪрд▓рд┐рддрдкрдгреЗ рд╕рдорд╛рдкреНрдд рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓.
рдмрд░реНрдпрд╛рдЪрджрд╛, tarpits рд╕рдВрд░рдХреНрд╖рдгрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддрд╛рдд. рд╕рдВрдЧрдгрдХрд╛рддреАрд▓ рд╡рд░реНрдореНрд╕рдкрд╛рд╕реВрди рд╕рдВрд░рдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рддрдВрддреНрд░ рдкреНрд░рдердо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реЗ. рдЖрдгрд┐ рдЖрддрд╛ рд╣реЗ рд╕реНрдкреЕрдорд░ рдЖрдгрд┐ рд╕рдВрд╢реЛрдзрдХрд╛рдВрдЪреЗ рдЬреАрд╡рди рдЙрдзреНрд╡рд╕реНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рдЬреЗ рд╕рд▓рдЧ рд╕рд░реНрд╡ IP рдкрддреНрддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╡рд┐рд╕реНрддреГрдд рд╕реНрдХреЕрдирд┐рдВрдЧрдордзреНрдпреЗ рдЧреБрдВрддрд▓реЗрд▓реЗ рдЖрд╣реЗрдд (рд╣реЕрдмреНрд░реЗрд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдгреЗ:
рдЦреНрд░рд┐рд╕ рд╡реЗрд▓рдиреНрд╕ рдирд╛рд╡рд╛рдЪреНрдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХрд╛рдВрдкреИрдХреА рдПрдХ рд╣рд╛ рдЕрдкрдорд╛рди рдкрд╛рд╣реВрди рдХрдВрдЯрд╛рд│рд▓рд╛ - рдЖрдгрд┐ рддреНрдпрд╛рдиреЗ рдПрдХ рдЫреЛрдЯрд╛рд╕рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рд╣рд┐рд▓рд╛
рдпреБрдЯрд┐рд▓рд┐рдЯреАрдЪреА рд╕реНрдерд╛рдкрдирд╛:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реЗрд▓реЗ рдЯрд╛рд░реНрдкрд┐рдЯ рдЖрдХреНрд░рдордгрдХрд░реНрддреНрдпрд╛рдХрдбреВрди рддреБрдордЪреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд╕рдВрд╕рд╛рдзрдиреЗ рдШреЗрдИрд▓. рдкрдг рддреЛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪрд╛рд╣реА рдореБрджреНрджрд╛ рдирд╛рд╣реА. рд▓реЗрдЦрдХ
рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдбрдордзреНрдпреЗ, рдПрдВрдбрд▓реЗрд╢ рд╕рд░реНрд╡реНрд╣рд░рд▓рд╛ рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдкреЛрд░реНрдЯ 22 рд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬреЗрдереЗ рдЧреБрдВрдб рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдареЛрдард╛рд╡рддрд╛рдд. рдорд╛рдирдХ рд╕реБрд░рдХреНрд╖рд╛ рд╢рд┐рдлрд╛рд░рд╢реА рдиреЗрд╣рдореА SSH рд▓рд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдкреЛрд░реНрдЯрд╡рд░ рд╣рд▓рд╡рдгреНрдпрд╛рдЪрд╛ рд╕рд▓реНрд▓рд╛ рджреЗрддрд╛рдд, рдЬреНрдпрд╛рдореБрд│реЗ рд▓реЙрдЧрдЪрд╛ рдЖрдХрд╛рд░ рддреНрд╡рд░рд┐рдд рдХреНрд░рдорд╛рдиреЗ рдХрдореА рд╣реЛрддреЛ.
рдЦреНрд░рд┐рд╕ рд╡реЗрд▓рдиреНрд╕ рдореНрд╣рдгрддрд╛рдд рдХреА рддреНрдпрд╛рдЪрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рддрдкрд╢реАрд▓рд╛рдЪреНрдпрд╛ рдПрдХрд╛ рдкрд░рд┐рдЪреНрдЫреЗрджрд╛рдЪрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЛ SSH-
.
рдПрдВрдбрд▓реЗрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдиреЗрдордХреЗ рд╣реЗрдЪ рдХрд░рддреЛ: рддреЗ рдкрд╛рдард╡рддреЗ рдЕрдВрддрд╣реАрди рдпрд╛рджреГрдЪреНрдЫрд┐рдХрдкрдгреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдЪрд╛ рдкреНрд░рд╡рд╛рд╣, рдЬреЗ RFC 4253 рдЪреЗ рдкрд╛рд▓рди рдХрд░рддрд╛рдд, рдореНрд╣рдгрдЬреЗрдЪ рдкреНрд░рдорд╛рдгреАрдХрд░рдгрд╛рдкреВрд░реНрд╡реА рдкрд╛рдард╡рд╛ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдУрд│ рдпрд╛рд╕рд╣ рд╕реБрд░реВ рд╣реЛрддреЗ SSH-
рдЖрдгрд┐ рдУрд│реАрдЪреНрдпрд╛ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рд╡рд░реНрдгрд╛рд╕рд╣ 255 рд╡рд░реНрдгрд╛рдВрдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдирд╛рд╣реА. рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рд╕рд░реНрд╡ рдХрд╛рд╣реА рдорд╛рдирдХрд╛рдВрдиреБрд╕рд╛рд░ рдЖрд╣реЗ.
рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреЕрдХреЗрдЯ рдкрд╛рдард╡рддрд╛рдирд╛ 10 рд╕реЗрдХрдВрдж рдерд╛рдВрдмрддреЛ. рд╣реЗ рдХреНрд▓рд╛рдпрдВрдЯрд▓рд╛ рдХрд╛рд▓рдмрд╛рд╣реНрдп рд╣реЛрдгреНрдпрд╛рдкрд╛рд╕реВрди рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреЗ, рддреНрдпрд╛рдореБрд│реЗ рдХреНрд▓рд╛рдпрдВрдЯ рдХрд╛рдпрдордЪрд╛ рдЕрдбрдХрд▓рд╛ рдЬрд╛рдИрд▓.
рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА рдбреЗрдЯрд╛ рдкрд╛рдард╡рд┐рд▓рд╛ рдЬрд╛рдд рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЕрддреНрдпрдВрдд рд╕реЛрдкрд╛ рдЖрд╣реЗ. рдпрд╛рд╕ рдХреЛрдгрддреЗрд╣реА рд╕рд┐рдлрд░ рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА рдЖрдгрд┐ рдПрдХрд╛рдзрд┐рдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓рдЪреЗ рд╕рдорд░реНрдерди рдХрд░рддреЗ.
рд▓реЗрдЦрдХрд╛рдиреЗ рд╣реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛ рдХреА рдпреБрдЯрд┐рд▓рд┐рдЯреА рдХрдореАрддрдХрдореА рд╕рдВрд╕рд╛рдзрдиреЗ рд╡рд╛рдкрд░рддреЗ рдЖрдгрд┐ рдорд╢реАрдирд╡рд░ рдкреВрд░реНрдгрдкрдгреЗ рд▓рдХреНрд╖ рди рджреЗрддрд╛ рдХрд╛рд░реНрдп рдХрд░рддреЗ. рдЖрдзреБрдирд┐рдХ рдЕрдБрдЯреАрд╡реНрд╣рд╛рдпрд░рд╕ рдЖрдгрд┐ рдЗрддрд░ "рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рдгрд╛рд▓реА" рдЪреНрдпрд╛ рд╡рд┐рдкрд░реАрдд, рддреЗ рдЖрдкрд▓рд╛ рд╕рдВрдЧрдгрдХ рдзреАрдорд╛ рдХрд░реВ рдирдпреЗ. рдереЛрдбреНрдпрд╛ рдЕрдзрд┐рдХ рдзреВрд░реНрдд рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░рдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдореБрд│реЗ рддреНрдпрд╛рдиреЗ рд░рд╣рджрд╛рд░реА рдЖрдгрд┐ рдореЗрдорд░реА рд╡рд╛рдкрд░ рджреЛрдиреНрд╣реА рдХрдореА рдХрд░рдгреНрдпрд╛рдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ. рдЬрд░ рдпрд╛рдиреЗ рдирд╡реАрди рдХрдиреЗрдХреНрд╢рдирд╡рд░ рдПрдХ рд╡реЗрдЧрд│реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реВ рдХреЗрд▓реА, рддрд░ рд╕рдВрднрд╛рд╡реНрдп рд╣рд▓реНрд▓реЗрдЦреЛрд░ рдорд╢реАрдирд╡рд░реАрд▓ рд╕рдВрд╕рд╛рдзрдиреЗ рд╕рдВрдкрд╡рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХрд╛рдзрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдЙрдШрдбреВрди DDoS рд╣рд▓реНрд▓рд╛ рдХрд░реВ рд╢рдХрддрд╛рдд. рдкреНрд░рддрд┐ рдХрдиреЗрдХреНрд╢рди рдПрдХ рдереНрд░реЗрдб рджреЗрдЦреАрд▓ рд╕рд░реНрд╡реЛрддреНрддрдо рдкрд░реНрдпрд╛рдп рдирд╛рд╣реА, рдХрд╛рд░рдг рдХрд░реНрдирд▓ рдереНрд░реЗрдбреНрд╕ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрд╕рд╛рдзрдиреЗ рд╡рд╛рдпрд╛ рдШрд╛рд▓рд╡реЗрд▓.
рдореНрд╣рдгреВрдирдЪ рдХреНрд░рд┐рд╕ рд╡реЗрд▓рдиреНрд╕рдиреЗ рдПрдВрдбрд▓реЗрд╢рд╕рд╛рдареА рд╕рд░реНрд╡рд╛рдд рд╣рд▓рдХрд╛ рдкрд░реНрдпрд╛рдп рдирд┐рд╡рдбрд▓рд╛: рд╕рд┐рдВрдЧрд▓-рдереНрд░реЗрдбреЗрдб рд╕рд░реНрд╡реНрд╣рд░ poll(2)
, рдЬреЗрдереЗ рдЯреНрд░реЕрдкрдордзреАрд▓ рдХреНрд▓рд╛рдпрдВрдЯ рдЕрдХреНрд╖рд░рд╢рдГ рдХреЛрдгрддреАрд╣реА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЗ рд╡рд╛рдкрд░рдд рдирд╛рд╣реАрдд, рдХрд░реНрдирд▓рдордзреАрд▓ рд╕реЙрдХреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЛрдЬрдд рдирд╛рд╣реАрдд рдЖрдгрд┐ рдПрдВрдбрд▓реЗрд╢рдордзреНрдпреЗ рдЯреНрд░реЕрдХрд┐рдВрдЧрд╕рд╛рдареА рдЖрдгрдЦреА 78 рдмрд╛рдЗрдЯреНрд╕. рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рдпрдВрдЯрд╕рд╛рдареА рд░рд┐рд╕реАрд╡реНрд╣ рдЖрдгрд┐ рд╕реЗрдВрдб рдмрдлрд░ рд╡рд╛рдЯреВ рдирдпреЗ рдореНрд╣рдгреВрди, рдПрдВрдбрд▓реЗрд╢ рдбрд╛рдпрд░реЗрдХреНрдЯ рдНрдХреНрд╕реЗрд╕ рд╕реЙрдХреЗрдЯ рдЙрдШрдбрддреЛ рдЖрдгрд┐ рдЬрд╡рд│рдЬрд╡рд│ рд╕рдВрдкреВрд░реНрдг рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо TCP/IP рд╕реНрдЯреЕрдХрд▓рд╛ рдорд╛рдЧреЗ рдЯрд╛рдХреВрди TCP рдкреЕрдХреЗрдЯреНрд╕рдЪреЗ рдереЗрдЯ рднрд╛рд╖рд╛рдВрддрд░ рдХрд░рддреЛ. рдЗрдирдХрдорд┐рдВрдЧ рдмрдлрд░рдЪреА рдЕрдЬрд┐рдмрд╛рдд рдЧрд░рдЬ рдирд╛рд╣реА, рдХрд╛рд░рдг рдЖрдореНрд╣рд╛рд▓рд╛ рдпреЗрдгрд╛рд░реНтАНрдпрд╛ рдбреЗрдЯрд╛рдордзреНрдпреЗ рд░рд╕ рдирд╛рд╣реА.
рд▓реЗрдЦрдХ рдореНрд╣рдгрддреЛ рдХреА рддреНрдпрд╛рдЪреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдорд╛рдЪреНрдпрд╛ рд╡реЗрд│реА
import asyncio
import random
async def handler(_reader, writer):
try:
while True:
await asyncio.sleep(10)
writer.write(b'%xrn' % random.randint(0, 2**32))
await writer.drain()
except ConnectionResetError:
pass
async def main():
server = await asyncio.start_server(handler, '0.0.0.0', 2222)
async with server:
await server.serve_forever()
asyncio.run(main())
рдЯрд╛рд░реНрдкрд┐рдЯ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕рд╛рдареА Asyncio рдЖрджрд░реНрд╢ рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╣рд╛ рд╣реБрдХ рдлрд╛рдпрд░рдлреЙрдХреНрд╕, рдХреНрд░реЛрдо рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдХреЛрдгрддрд╛рд╣реА рдХреНрд▓рд╛рдпрдВрдЯ рдЧреЛрдард╡реЗрд▓ рдЬреЛ рддреБрдордЪреНрдпрд╛ HTTP рд╕рд░реНрд╡реНрд╣рд░рд╢реА рдЕрдиреЗрдХ рддрд╛рд╕ рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рдЖрд╣реЗ:
import asyncio
import random
async def handler(_reader, writer):
writer.write(b'HTTP/1.1 200 OKrn')
try:
while True:
await asyncio.sleep(5)
header = random.randint(0, 2**32)
value = random.randint(0, 2**32)
writer.write(b'X-%x: %xrn' % (header, value))
await writer.drain()
except ConnectionResetError:
pass
async def main():
server = await asyncio.start_server(handler, '0.0.0.0', 8080)
async with server:
await server.serve_forever()
asyncio.run(main())
рдСрдирд▓рд╛рдЗрди рдЧреБрдВрдбрд╛рдВрдирд╛ рд╢рд┐рдХреНрд╖рд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА Tarpit рд╣реЗ рдПрдХ рдЙрддреНрддрдо рд╕рд╛рдзрди рдЖрд╣реЗ. рддреНрдпрд╛рдЙрд▓рдЯ, рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд░реНрд╡реНрд╣рд░рдЪреНрдпрд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрддрдирд╛рдХрдбреЗ рддреНрдпрд╛рдВрдЪреЗ рд▓рдХреНрд╖ рд╡реЗрдзрдгреНрдпрд╛рдЪрд╛ рдХрд╛рд╣реА рдзреЛрдХрд╛ рдЖрд╣реЗ рд╣реЗ рдЦрд░реЗ рдЖрд╣реЗ. рдХреЛрдгреАрддрд░реА
рд╕реНрддреНрд░реЛрдд: www.habr.com