рдпреЛ рдХреБрдиреИ рдЧреЛрдкреНрдп рдЫреИрди рдХрд┐ рдЗрдиреНрдЯрд░рдиреЗрдЯ рдПрдХ рдзреЗрд░реИ рдкреНрд░рддрд┐рдХреВрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реЛред рддрдкрд╛рдИрдВрд▓реЗ рд╕рд░реНрднрд░ рдЙрдард╛рдЙрдиреЗ рдмрд┐рддреНрддрд┐рдХреИ, рдпреЛ рддреБрд░реБрдиреНрддреИ рдареВрд▓реЛ рдЖрдХреНрд░рдордг рд░ рдмрд╣реБ тАЛтАЛрд╕реНрдХреНрдпрд╛рдирдХреЛ рдЕрдзреАрдирдорд╛ рд╣реБрдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐
Tarpit рдПрдЙрдЯрд╛ рдЬрд╛рд▓ рдкреЛрд░реНрдЯ рд╣реЛ рдЬреБрди рдЖрдЧрдорди рдЬрдбрд╛рдирд╣рд░реВ рдХрдо рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдпрджрд┐ рддреЗрд╕реНрд░реЛ-рдкрдХреНрд╖ рдкреНрд░рдгрд╛рд▓реА рдпрд╕ рдкреЛрд░реНрдЯрдорд╛ рдЬрдбрд╛рди рд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдИрдБрд▓реЗ рджреНрд░реБрдд рд░реВрдкрдорд╛ рдЬрдбрд╛рди рдмрдиреНрдж рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреБрд╣реБрдиреЗ рдЫреИрдиред рдЙрдирд▓реЗ рдЖрдлреНрдиреЛ рдкреНрд░рдгрд╛рд▓реА рд╕реНрд░реЛрддрд╣рд░реВ рдмрд░реНрдмрд╛рдж рдЧрд░реНрдиреБрдкрд░реНрдиреЗрдЫ рд░ рдЬрдбрд╛рди рдЯрд╛рдЗрдордЖрдЙрдЯ рдирднрдПрд╕рдореНрдо рдкрд░реНрдЦрдиреБ рдкрд░реНрдиреЗрдЫ, рд╡рд╛ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдпрд╕рд▓рд╛рдИ рд╕рдорд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред
рдкреНрд░рд╛рдпрдЬрд╕реЛ, рдЯрд╛рд░реНрдкрд┐рдЯрд╣рд░реВ рд╕реБрд░рдХреНрд╖рд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдпреЛ рдкреНрд░рд╡рд┐рдзрд┐ рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рдХрдореНрдкреНрдпреБрдЯрд░ рдХреАрд░рд╛рд╣рд░реВрдмрд╛рдЯ рдЬреЛрдЧрд╛рдЙрди рд╡рд┐рдХрд╕рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред рд░ рдЕрдм рдпреЛ рд╕реНрдкреНрдпрд╛рдорд░рд╣рд░реВ рд░ рдЕрдиреБрд╕рдиреНрдзрд╛рдирдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рдЬреАрд╡рди рдмрд░реНрдмрд╛рдж рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рдЬреЛ рдкрдЩреНрдХреНрддрд┐рдорд╛ рд╕рдмреИ рдЖрдИрдкреА рдареЗрдЧрд╛рдирд╛рд╣рд░реВрдХреЛ рд╡реНрдпрд╛рдкрдХ рд╕реНрдХреНрдпрд╛рдирд┐рдЩрдорд╛ рд╕рдВрд▓рдЧреНрди рдЫрдиреН (рд╣рдмреНрд░реЗрдорд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ:
рдХреНрд░рд┐рд╕ рд╡реЗрд▓реЛрдиреНрд╕ рдирд╛рдордХ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рд╢рд╛рд╕рдХрд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рдпреЛ рдЕрдкрдорд╛рди рджреЗрдЦреЗрд░ рдердХрд┐рдд рднрдП - рд░ рдЙрдирд▓реЗ рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓реЗрдЦреЗред
рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рд╕реНрдерд╛рдкрдирд╛:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рд▓рд╛рдЧреВ рдЧрд░рд┐рдПрдХреЛ рдЯрд╛рд░реНрдкрд┐рдЯрд▓реЗ рдЖрдХреНрд░рдордгрдХрд╛рд░реАрдмрд╛рдЯ рддрдкрд╛рдИрдмрд╛рдЯ рднрдиреНрджрд╛ рдмрдвреА рд╕реНрд░реЛрддрд╣рд░реВ рд▓рд┐рдиреЗрдЫред рддрд░ рд╕реНрд░реЛрддрд╕рд╛рдзрдирдХреЛ рдХреБрд░рд╛ рдкрдирд┐ рд╣реЛрдЗрди ред рд▓реЗрдЦрдХ
рдЕрдкрд░реЗрдЯрд┐рдЩ рдореЛрдбрдорд╛, Endless рд╕рд░реНрднрд░рд▓рд╛рдИ рд╕рд╛рдорд╛рдиреНрдп рдкреЛрд░реНрдЯ 22 рдорд╛ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдЬрд╣рд╛рдБ рдЧреБрдгреНрдбрд╛рд╣рд░реВрд▓реЗ рд╕рд╛рдореВрд╣рд┐рдХ рд░реВрдкрдорд╛ рджрд╕реНрддрдХ рджрд┐рдиреНрдЫрдиреНред рдорд╛рдирдХ рд╕реБрд░рдХреНрд╖рд╛ рд╕рд┐рдлрд╛рд░рд┐рд╕рд╣рд░реВрд▓реЗ рд╕рдзреИрдВ SSH рд▓рд╛рдИ рдлрд░рдХ рдкреЛрд░реНрдЯрдорд╛ рд╕рд╛рд░реНрди рд╕рд▓реНрд▓рд╛рд╣ рджрд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рддреБрд░реБрдиреНрддреИ рдкрд░рд┐рдорд╛рдгрдХреЛ рдЕрд░реНрдбрд░рджреНрд╡рд╛рд░рд╛ рд▓рдЧрд╣рд░реВрдХреЛ рдЖрдХрд╛рд░ рдШрдЯрд╛рдЙрдБрдЫред
рдХреНрд░рд┐рд╕ рд╡реЗрд▓реЛрдиреНрд╕ рднрдиреНрдЫрдиреН рдХрд┐ рдЙрдирдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдорд▓реЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдХреЛ рдПрдЙрдЯрд╛ рдЕрдиреБрдЪреНрдЫреЗрдж рд╢реЛрд╖рдг рдЧрд░реНрджрдЫ SSH-
.
рдпреЛ рд╡рд╛рд╕реНрддрд╡рдорд╛ Endless рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЧрд░реНрдЫ: рдпреЛ рдкрдард╛рдЙрдБрдЫ рдЕрдиреНрддрд╣реАрди рдЕрдирд┐рдпрдорд┐рдд рд░реВрдкрдорд╛ рдЙрддреНрдкрдиреНрди рдбрд╛рдЯрд╛ рдХреЛ рдкреНрд░рд╡рд╛рд╣, рдЬрд╕рд▓реЗ RFC 4253 рдХреЛ рдкрд╛рд▓рдирд╛ рдЧрд░реНрджрдЫ, рдЕрд░реНрдерд╛рддреН, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЕрдШрд┐ рдкрдард╛рдЙрдиреБрд╣реЛрд╕реН, рд░ рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдЦрд╛ рдмрд╛рдЯ рд╕реБрд░реБ рд╣реБрдиреНрдЫ SSH-
рд░ рд░реЗрдЦрд╛ рд╕рдорд╛рдкреНрдд рд╣реБрдиреЗ рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░ рд╕рд╣рд┐рдд 255 рд╡рд░реНрдгрд╣рд░реВ рднрдиреНрджрд╛ рдмрдвреА рд╣реБрдБрджреИрдиред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рд╕рдмреИ рдХреБрд░рд╛ рдорд╛рдирдХ рдЕрдиреБрд╕рд╛рд░ рдЫред
рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рдХрд╛рд░реНрдпрдХреНрд░рдорд▓реЗ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рдкрдард╛рдЙрдиреЗ рдмреАрдЪрдорд╛ 10 рд╕реЗрдХреЗрдиреНрдб рдкрд░реНрдЦрдиреНрдЫред рдпрд╕рд▓реЗ рдХреНрд▓рд╛рдЗрдиреНрдЯрд▓рд╛рдИ рдЯрд╛рдЗрдо рдЖрдЙрдЯ рд╣реБрдирдмрд╛рдЯ рд░реЛрдХреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рдХреНрд▓рд╛рдЗрдиреНрдЯ рд╕рдзреИрдВрднрд░рд┐ рдлрдБрд╕реНрдиреЗрдЫред
рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рд▓рд╛рдЧреВ рдЧрд░реНрдиреБ рдЕрдШрд┐ рдбрд╛рдЯрд╛ рдкрдард╛рдЗрдПрдХреЛ рд╣реБрдирд╛рд▓реЗ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрддреНрдпрдиреНрдд рд╕рд░рд▓ рдЫред рдпрд╕рд▓реЗ рдХреБрдиреИ рдкрдирд┐ рд╕рд╛рдЗрдлрд░рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрди рд░ рдзреЗрд░реИ рдкреНрд░реЛрдЯреЛрдХрд▓рд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫред
рд▓реЗрдЦрдХрд▓реЗ рдпреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реЗ рдХрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд▓реЗ рдиреНрдпреВрдирддрдо рд╕реНрд░реЛрддрд╣рд░реВ рдЙрдкрднреЛрдЧ рдЧрд░реНрдЫ рд░ рдореЗрд╕рд┐рдирдорд╛ рдкреВрд░реНрдгрддрдпрд╛ рдзреНрдпрд╛рди рдирджрд┐рдИ рдХрд╛рдо рдЧрд░реНрджрдЫред рдЖрдзреБрдирд┐рдХ рдПрдиреНрдЯрд┐рднрд╛рдЗрд░рд╕рд╣рд░реВ рд░ рдЕрдиреНрдп "рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВ" рдХреЛ рд╡рд┐рдкрд░реАрдд, рдпрд╕рд▓реЗ рддрдкрд╛рдЗрдБрдХреЛ рдХрдореНрдкреНрдпреБрдЯрд░рд▓рд╛рдИ рдврд┐рд▓реЛ рдЧрд░реНрдиреБ рд╣реБрдБрджреИрдиред рдЙрд╕рд▓реЗ рдЕрд▓рд┐ рдмрдвреА рдЪрд╛рд▓рд╛рдХ рд╕рдлреНрдЯрд╡реЗрдпрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рдХрд╛рд░рдг рджреБрдмреИ рдЯреНрд░рд╛рдлрд┐рдХ рд░ рдореЗрдореЛрд░реА рдЦрдкрдд рдХрдо рдЧрд░реНрди рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрдпреЛред рдпрджрд┐ рдпрд╕рд▓реЗ рдирдпрд╛рдБ рдЬрдбрд╛рдирдорд╛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реБ рдЧрд░реНрдпреЛ рднрдиреЗ, рд╕рдореНрднрд╛рд╡рд┐рдд рдЖрдХреНрд░рдордгрдХрд╛рд░реАрд╣рд░реВрд▓реЗ рдореЗрд╕рд┐рдирдорд╛ рд╕реНрд░реЛрддрд╣рд░реВ рдирд┐рдХрд╛рд╕ рдЧрд░реНрди рдзреЗрд░реИ рдЬрдбрд╛рдирд╣рд░реВ рдЦреЛрд▓реЗрд░ DDoS рдЖрдХреНрд░рдордг рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред рдкреНрд░рддрд┐ рдЬрдбрд╛рди рдПрдЙрдЯрд╛ рдереНрд░реЗрдб рдкрдирд┐ рдЙрддреНрддрдо рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЗрди, рдХрд┐рдирднрдиреЗ рдХрд░реНрдиреЗрд▓рд▓реЗ рдереНрд░реЗрдбрд╣рд░реВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрдиреЗ рд╕реНрд░реЛрддрд╣рд░реВ рдмрд░реНрдмрд╛рдж рдЧрд░реНрдиреЗрдЫред
рдпрд╕реИрд▓реЗ рдХреНрд░рд┐рд╕ рд╡реЗрд▓реЛрдиреНрд╕рд▓реЗ Endlessh рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИрднрдиреНрджрд╛ рд╣рд▓реНрдХрд╛ рд╡рд┐рдХрд▓реНрдк рд░реЛрдЬреЗ: рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рд╕рд░реНрднрд░ poll(2)
, рдЬрд╣рд╛рдБ рдЬрд╛рд▓рдорд╛ рд░рд╣реЗрдХрд╛ рдЧреНрд░рд╛рд╣рдХрд╣рд░реВрд▓реЗ рдХрд░реНрдиреЗрд▓рдорд╛ рд╕рдХреЗрдЯ рд╡рд╕реНрддреБрдХреЛ рдЧрдгрдирд╛ рдирдЧрд░реНрдиреЗ рд░ Endless рдорд╛ рдЯреНрд░реНрдпрд╛рдХрд┐рдЩрдХрд╛ рд▓рд╛рдЧрд┐ рдЕрд░реНрдХреЛ ренрео рдмрд╛рдЗрдЯрд╣рд░реВ рд╡рд╕реНрддреБрддрдГ рдХреБрдиреИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрд░реЛрддрд╣рд░реВ рдЙрдкрднреЛрдЧ рдЧрд░реНрджреИрдирдиреНред рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рд╣рдХрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рд╛рдкреНрдд рд░ рдкрдард╛рдЙрдиреЗ рдмрдлрд░рд╣рд░реВ рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реНрдирдмрд╛рдЯ рдмрдЪреНрди, Endlessh рд▓реЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдкрд╣реБрдБрдЪ рд╕рдХреЗрдЯ рдЦреЛрд▓реНрдЫ рд░ рд▓рдЧрднрдЧ рд╕рдореНрдкреВрд░реНрдг рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдо 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 tarpits рд▓реЗрдЦреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЖрджрд░реНрд╢ рд╣реЛред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдпреЛ рд╣реБрдХрд▓реЗ рдлрд╛рдпрд░рдлрдХреНрд╕, рдХреНрд░реЛрдо, рд╡рд╛ рдХреБрдиреИ рдЕрдиреНрдп рдХреНрд▓рд╛рдЗрдиреНрдЯрд▓рд╛рдИ рдлреНрд░рд┐рдЬ рдЧрд░реНрдиреЗрдЫ рдЬреБрди рддрдкрд╛рдИрдВрдХреЛ 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, рдЬрд╛рд▓, asycio
рдЖрдЧрдорди SSH рдЬрдбрд╛рдирд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЬрд╛рд▓ (tarpit)
рдпреЛ рдХреБрдиреИ рдЧреЛрдкреНрдп рдЫреИрди рдХрд┐ рдЗрдиреНрдЯрд░рдиреЗрдЯ рдПрдХ рдзреЗрд░реИ рдкреНрд░рддрд┐рдХреВрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реЛред рддрдкрд╛рдИрдВрд▓реЗ рд╕рд░реНрднрд░ рдЙрдард╛рдЙрдиреЗ рдмрд┐рддреНрддрд┐рдХреИ, рдпреЛ рддреБрд░реБрдиреНрддреИ рдареВрд▓реЛ рдЖрдХреНрд░рдордг рд░ рдмрд╣реБ тАЛтАЛрд╕реНрдХреНрдпрд╛рдирдХреЛ рдЕрдзреАрдирдорд╛ рд╣реБрдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐
Tarpit рдПрдЙрдЯрд╛ рдЬрд╛рд▓ рдкреЛрд░реНрдЯ рд╣реЛ рдЬреБрди рдЖрдЧрдорди рдЬрдбрд╛рдирд╣рд░реВ рдХрдо рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдпрджрд┐ рддреЗрд╕реНрд░реЛ-рдкрдХреНрд╖ рдкреНрд░рдгрд╛рд▓реА рдпрд╕ рдкреЛрд░реНрдЯрдорд╛ рдЬрдбрд╛рди рд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдИрдБрд▓реЗ рджреНрд░реБрдд рд░реВрдкрдорд╛ рдЬрдбрд╛рди рдмрдиреНрдж рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреБрд╣реБрдиреЗ рдЫреИрдиред рдЙрдирд▓реЗ рдЖрдлреНрдиреЛ рдкреНрд░рдгрд╛рд▓реА рд╕реНрд░реЛрддрд╣рд░реВ рдмрд░реНрдмрд╛рдж рдЧрд░реНрдиреБрдкрд░реНрдиреЗрдЫ рд░ рдЬрдбрд╛рди рдЯрд╛рдЗрдордЖрдЙрдЯ рдирднрдПрд╕рдореНрдо рдкрд░реНрдЦрдиреБ рдкрд░реНрдиреЗрдЫ, рд╡рд╛ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдпрд╕рд▓рд╛рдИ рд╕рдорд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реНред
рдкреНрд░рд╛рдпрдЬрд╕реЛ, рдЯрд╛рд░реНрдкрд┐рдЯрд╣рд░реВ рд╕реБрд░рдХреНрд╖рд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдпреЛ рдкреНрд░рд╡рд┐рдзрд┐ рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рдХрдореНрдкреНрдпреБрдЯрд░ рдХреАрд░рд╛рд╣рд░реВрдмрд╛рдЯ рдЬреЛрдЧрд╛рдЙрди рд╡рд┐рдХрд╕рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред рд░ рдЕрдм рдпреЛ рд╕реНрдкреНрдпрд╛рдорд░рд╣рд░реВ рд░ рдЕрдиреБрд╕рдиреНрдзрд╛рдирдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рдЬреАрд╡рди рдмрд░реНрдмрд╛рдж рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рдЬреЛ рдкрдЩреНрдХреНрддрд┐рдорд╛ рд╕рдмреИ рдЖрдИрдкреА рдареЗрдЧрд╛рдирд╛рд╣рд░реВрдХреЛ рд╡реНрдпрд╛рдкрдХ рд╕реНрдХреНрдпрд╛рдирд┐рдЩрдорд╛ рд╕рдВрд▓рдЧреНрди рдЫрдиреН (рд╣рдмреНрд░реЗрдорд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ:
рдХреНрд░рд┐рд╕ рд╡реЗрд▓реЛрдиреНрд╕ рдирд╛рдордХ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рд╢рд╛рд╕рдХрд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рдпреЛ рдЕрдкрдорд╛рди рджреЗрдЦреЗрд░ рдердХрд┐рдд рднрдП - рд░ рдЙрдирд▓реЗ рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓реЗрдЦреЗред
рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рд╕реНрдерд╛рдкрдирд╛:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рд▓рд╛рдЧреВ рдЧрд░рд┐рдПрдХреЛ рдЯрд╛рд░реНрдкрд┐рдЯрд▓реЗ рдЖрдХреНрд░рдордгрдХрд╛рд░реАрдмрд╛рдЯ рддрдкрд╛рдИрдмрд╛рдЯ рднрдиреНрджрд╛ рдмрдвреА рд╕реНрд░реЛрддрд╣рд░реВ рд▓рд┐рдиреЗрдЫред рддрд░ рд╕реНрд░реЛрддрд╕рд╛рдзрдирдХреЛ рдХреБрд░рд╛ рдкрдирд┐ рд╣реЛрдЗрди ред рд▓реЗрдЦрдХ
рдЕрдкрд░реЗрдЯрд┐рдЩ рдореЛрдбрдорд╛, Endless рд╕рд░реНрднрд░рд▓рд╛рдИ рд╕рд╛рдорд╛рдиреНрдп рдкреЛрд░реНрдЯ 22 рдорд╛ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдЬрд╣рд╛рдБ рдЧреБрдгреНрдбрд╛рд╣рд░реВрд▓реЗ рд╕рд╛рдореВрд╣рд┐рдХ рд░реВрдкрдорд╛ рджрд╕реНрддрдХ рджрд┐рдиреНрдЫрдиреНред рдорд╛рдирдХ рд╕реБрд░рдХреНрд╖рд╛ рд╕рд┐рдлрд╛рд░рд┐рд╕рд╣рд░реВрд▓реЗ рд╕рдзреИрдВ SSH рд▓рд╛рдИ рдлрд░рдХ рдкреЛрд░реНрдЯрдорд╛ рд╕рд╛рд░реНрди рд╕рд▓реНрд▓рд╛рд╣ рджрд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рддреБрд░реБрдиреНрддреИ рдкрд░рд┐рдорд╛рдгрдХреЛ рдЕрд░реНрдбрд░рджреНрд╡рд╛рд░рд╛ рд▓рдЧрд╣рд░реВрдХреЛ рдЖрдХрд╛рд░ рдШрдЯрд╛рдЙрдБрдЫред
рдХреНрд░рд┐рд╕ рд╡реЗрд▓реЛрдиреНрд╕ рднрдиреНрдЫрдиреН рдХрд┐ рдЙрдирдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдорд▓реЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдХреЛ рдПрдЙрдЯрд╛ рдЕрдиреБрдЪреНрдЫреЗрдж рд╢реЛрд╖рдг рдЧрд░реНрджрдЫ SSH-
.
рдпреЛ рд╡рд╛рд╕реНрддрд╡рдорд╛ Endless рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЧрд░реНрдЫ: рдпреЛ рдкрдард╛рдЙрдБрдЫ рдЕрдиреНрддрд╣реАрди рдЕрдирд┐рдпрдорд┐рдд рд░реВрдкрдорд╛ рдЙрддреНрдкрдиреНрди рдбрд╛рдЯрд╛ рдХреЛ рдкреНрд░рд╡рд╛рд╣, рдЬрд╕рд▓реЗ RFC 4253 рдХреЛ рдкрд╛рд▓рдирд╛ рдЧрд░реНрджрдЫ, рдЕрд░реНрдерд╛рддреН, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЕрдШрд┐ рдкрдард╛рдЙрдиреБрд╣реЛрд╕реН, рд░ рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдЦрд╛ рдмрд╛рдЯ рд╕реБрд░реБ рд╣реБрдиреНрдЫ SSH-
рд░ рд░реЗрдЦрд╛ рд╕рдорд╛рдкреНрдд рд╣реБрдиреЗ рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░ рд╕рд╣рд┐рдд 255 рд╡рд░реНрдгрд╣рд░реВ рднрдиреНрджрд╛ рдмрдвреА рд╣реБрдБрджреИрдиред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рд╕рдмреИ рдХреБрд░рд╛ рдорд╛рдирдХ рдЕрдиреБрд╕рд╛рд░ рдЫред
рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рдХрд╛рд░реНрдпрдХреНрд░рдорд▓реЗ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рдкрдард╛рдЙрдиреЗ рдмреАрдЪрдорд╛ 10 рд╕реЗрдХреЗрдиреНрдб рдкрд░реНрдЦрдиреНрдЫред рдпрд╕рд▓реЗ рдХреНрд▓рд╛рдЗрдиреНрдЯрд▓рд╛рдИ рдЯрд╛рдЗрдо рдЖрдЙрдЯ рд╣реБрдирдмрд╛рдЯ рд░реЛрдХреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рдХреНрд▓рд╛рдЗрдиреНрдЯ рд╕рдзреИрдВрднрд░рд┐ рдлрдБрд╕реНрдиреЗрдЫред
рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рд▓рд╛рдЧреВ рдЧрд░реНрдиреБ рдЕрдШрд┐ рдбрд╛рдЯрд╛ рдкрдард╛рдЗрдПрдХреЛ рд╣реБрдирд╛рд▓реЗ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрддреНрдпрдиреНрдд рд╕рд░рд▓ рдЫред рдпрд╕рд▓реЗ рдХреБрдиреИ рдкрдирд┐ рд╕рд╛рдЗрдлрд░рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрди рд░ рдзреЗрд░реИ рдкреНрд░реЛрдЯреЛрдХрд▓рд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫред
рд▓реЗрдЦрдХрд▓реЗ рдпреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реЗ рдХрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд▓реЗ рдиреНрдпреВрдирддрдо рд╕реНрд░реЛрддрд╣рд░реВ рдЙрдкрднреЛрдЧ рдЧрд░реНрдЫ рд░ рдореЗрд╕рд┐рдирдорд╛ рдкреВрд░реНрдгрддрдпрд╛ рдзреНрдпрд╛рди рдирджрд┐рдИ рдХрд╛рдо рдЧрд░реНрджрдЫред рдЖрдзреБрдирд┐рдХ рдПрдиреНрдЯрд┐рднрд╛рдЗрд░рд╕рд╣рд░реВ рд░ рдЕрдиреНрдп "рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВ" рдХреЛ рд╡рд┐рдкрд░реАрдд, рдпрд╕рд▓реЗ рддрдкрд╛рдЗрдБрдХреЛ рдХрдореНрдкреНрдпреБрдЯрд░рд▓рд╛рдИ рдврд┐рд▓реЛ рдЧрд░реНрдиреБ рд╣реБрдБрджреИрдиред рдЙрд╕рд▓реЗ рдЕрд▓рд┐ рдмрдвреА рдЪрд╛рд▓рд╛рдХ рд╕рдлреНрдЯрд╡реЗрдпрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рдХрд╛рд░рдг рджреБрдмреИ рдЯреНрд░рд╛рдлрд┐рдХ рд░ рдореЗрдореЛрд░реА рдЦрдкрдд рдХрдо рдЧрд░реНрди рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрдпреЛред рдпрджрд┐ рдпрд╕рд▓реЗ рдирдпрд╛рдБ рдЬрдбрд╛рдирдорд╛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реБ рдЧрд░реНрдпреЛ рднрдиреЗ, рд╕рдореНрднрд╛рд╡рд┐рдд рдЖрдХреНрд░рдордгрдХрд╛рд░реАрд╣рд░реВрд▓реЗ рдореЗрд╕рд┐рдирдорд╛ рд╕реНрд░реЛрддрд╣рд░реВ рдирд┐рдХрд╛рд╕ рдЧрд░реНрди рдзреЗрд░реИ рдЬрдбрд╛рдирд╣рд░реВ рдЦреЛрд▓реЗрд░ DDoS рдЖрдХреНрд░рдордг рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред рдкреНрд░рддрд┐ рдЬрдбрд╛рди рдПрдЙрдЯрд╛ рдереНрд░реЗрдб рдкрдирд┐ рдЙрддреНрддрдо рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЗрди, рдХрд┐рдирднрдиреЗ рдХрд░реНрдиреЗрд▓рд▓реЗ рдереНрд░реЗрдбрд╣рд░реВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрдиреЗ рд╕реНрд░реЛрддрд╣рд░реВ рдмрд░реНрдмрд╛рдж рдЧрд░реНрдиреЗрдЫред
рдпрд╕реИрд▓реЗ рдХреНрд░рд┐рд╕ рд╡реЗрд▓реЛрдиреНрд╕рд▓реЗ Endlessh рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИрднрдиреНрджрд╛ рд╣рд▓реНрдХрд╛ рд╡рд┐рдХрд▓реНрдк рд░реЛрдЬреЗ: рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рд╕рд░реНрднрд░ poll(2)
, рдЬрд╣рд╛рдБ рдЬрд╛рд▓рдорд╛ рд░рд╣реЗрдХрд╛ рдЧреНрд░рд╛рд╣рдХрд╣рд░реВрд▓реЗ рдХрд░реНрдиреЗрд▓рдорд╛ рд╕рдХреЗрдЯ рд╡рд╕реНрддреБрдХреЛ рдЧрдгрдирд╛ рдирдЧрд░реНрдиреЗ рд░ Endless рдорд╛ рдЯреНрд░реНрдпрд╛рдХрд┐рдЩрдХрд╛ рд▓рд╛рдЧрд┐ рдЕрд░реНрдХреЛ ренрео рдмрд╛рдЗрдЯрд╣рд░реВ рд╡рд╕реНрддреБрддрдГ рдХреБрдиреИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрд░реЛрддрд╣рд░реВ рдЙрдкрднреЛрдЧ рдЧрд░реНрджреИрдирдиреНред рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рд╣рдХрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рд╛рдкреНрдд рд░ рдкрдард╛рдЙрдиреЗ рдмрдлрд░рд╣рд░реВ рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реНрдирдмрд╛рдЯ рдмрдЪреНрди, Endlessh рд▓реЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдкрд╣реБрдБрдЪ рд╕рдХреЗрдЯ рдЦреЛрд▓реНрдЫ рд░ рд▓рдЧрднрдЧ рд╕рдореНрдкреВрд░реНрдг рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдо 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 tarpits рд▓реЗрдЦреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЖрджрд░реНрд╢ рд╣реЛред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдпреЛ рд╣реБрдХрд▓реЗ рдлрд╛рдпрд░рдлрдХреНрд╕, рдХреНрд░реЛрдо, рд╡рд╛ рдХреБрдиреИ рдЕрдиреНрдп рдХреНрд▓рд╛рдЗрдиреНрдЯрд▓рд╛рдИ рдлреНрд░рд┐рдЬ рдЧрд░реНрдиреЗрдЫ рдЬреБрди рддрдкрд╛рдИрдВрдХреЛ 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