DDoS рд╣рдорд▓реЛрдВ рдкрд░ рддреЗрдЬреА рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛

рдЬрд┐рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ, рдЕрдЪрд╛рдирдХ рдЕрдЪреНрдЫреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдмреБрд░реЗ рд▓реЛрдЧреЛрдВ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рдЧрдпрд╛ред рд╢рдХреНрддрд┐рд╢рд╛рд▓реА, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рд▓реЛрд╣реЗ рдХреЛ рд▓реЛрдб рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдкрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рдмрд╕реЗ рдЖрдо рд╣реИ - рд▓рд┐рдирдХреНрд╕, рдирдЧреНрдиреЗрдХреНрд╕, PHP-FPM (+ APC), MySQL, рд╕рдВрд╕реНрдХрд░рдг рд╕рдмрд╕реЗ рд╣рд╛рд▓ рдХреЗ рд╣реИрдВред рд╕рд╛рдЗрдЯреНрд╕ Drupal рдФрд░ phpBB рдХреЛ рд╕реНрдкрд┐рди рдХрд░рддреА рд╣реИрдВред рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕реНрддрд░ рдкрд░ рдЕрдиреБрдХреВрд▓рди (рдореЗрдореЗрдХреИрдЪреНрдб, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдЬрд╣рд╛рдВ рд╡реЗ рдЧрд╛рдпрдм рдереЗ) рдиреЗ рдереЛрдбрд╝реА рдорджрдж рдХреА, рд▓реЗрдХрд┐рди рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реБрдЖред рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕, рдбрд╛рдпрдирд╛рдорд┐рдХреНрд╕ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░рд╢реНрди рд╣реИрдВред Nginx рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реАрдорд╛рдПрдБ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ:

рдХрдиреЗрдХреНрд╢рди рдкрд░
limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn perip 100; 

рдФрд░ рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЧрддрд┐ (phpgi -pass рдкрд░ php-fpm)
 limit_req_zone $binary_remote_addr zone=dynamic:10m rate=2r/s; limit_req zone=dynamic burst=10 nodelay; 

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

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

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

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

рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдХрд┐ рдХрд╛рд▓реА рд╕реВрдЪреА рдореЗрдВ рдЙрд▓реНрд▓рдВрдШрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред рдкрд╣рд▓реЗ Nginx + рдбреЗрдорди рдХреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдиреЗ / рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛ рдЬреЛ рдХрд┐ ipsets рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдПрдХ рджрд╛рдирд╡ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдкрдХреЛ рдирдВрдЧреЗрдХреНрд╕ рдХреЛ рдЬрдбрд╝ рд╕реЗ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд▓рд┐рдЦрдирд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдЗрддрдирд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рдорд┐рд▓рд╛ (рд╢рд╛рдпрдж рдореИрдВ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рдерд╛?), рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ред

рдЬрдм рд╕реАрдорд╛ рдкрд╛рд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ Nginx 503 рд╡реАрдВ рд╕реЗрд╡рд╛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЕрдиреБрдкрд▓рдмреНрдз рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рд╣реБрдХ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛!

рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкреГрд╖реНрда рдмрдирд╛рддреЗ рд╣реИрдВ
 error_page 503 =429 @blacklist; 

рдФрд░ рд╕рдВрдЧрдд рдирд╛рдо рд╕реНрдерд╛рди
 location @blacklist { fastcgi_pass localhost:1234; fastcgi_param SCRIPT_FILENAME /data/web/cgi/blacklist.sh; include fastcgi_params; } 

рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред
рд╣рдореЗрдВ CGI рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рд╕реНрдкреЙрди-fcgi рдФрд░ fcgiwrap рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ рд╕рд╛рдореВрд╣рд┐рдХ рд░реВрдк рд╕реЗ рддреИрдпрд╛рд░ рд╣реИред

рд╕реНрд╡рдпрдВ рд╕реАрдЬреАрдЖрдИ рд▓рд┐рдкрд┐
 #!/bin/bash BAN_TIME=5 DB_NAME="web_black_list" SQLITE_DB="/data/web/cgi/${DB_NAME}.sqlite3" CREATE_TABLE_SQL="\ CREATE TABLE $DB_NAME (\ ip varchar(16) NOT NULL PRIMARY KEY,\ added DATETIME NOT NULL DEFAULT (DATETIME()),\ updated DATETIME NOT NULL DEFAULT (DATETIME()),\ counter INTEGER NOT NULL DEFAULT 0 )" ADD_ENTRY_SQL="INSERT OR IGNORE INTO $DB_NAME (ip) VALUES (\"$REMOTE_ADDR\")" UPD_ENTRY_SQL="UPDATE $DB_NAME SET updated=DATETIME(), counter=(counter+1) WHERE ip=\"$REMOTE_ADDR\"" SQLITE_CMD="/usr/bin/sqlite3 $SQLITE_DB" IPSET_CMD="/usr/sbin/ipset" $IPSET_CMD add $DB_NAME $REMOTE_ADDR > /dev/null 2>&1 if [ ! -f $SQLITE_DB ]; then $SQLITE_CMD "$CREATE_TABLE_SQL" fi $SQLITE_CMD "$ADD_ENTRY_SQL" $SQLITE_CMD "$UPD_ENTRY_SQL" echo "Content-type: text/html" echo "" echo "<html>" echo "<head><title>429 Too Many Requests</title></head>" echo "<body bgcolor=\"white\">" echo "<center><h1>429 Too Many Requests</h1></center>" echo "<center><small><p>Your address ($REMOTE_ADDR) is blacklisted for $BAN_TIME minutes</p></small></center>" echo "<hr><center>$SERVER_SOFTWARE</center>" echo "</body>" echo "</html>" 

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

рдмреНрд▓реИрдХ рд▓рд┐рд╕реНрдЯ рдЗрд╕ рддрд░рд╣ рдмрдирд╛рдИ рдЧрдИ рдереА
 ipset create web_black_list hash:ip 

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдХрд▓реНрдкрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ iptables рдирд┐рдпрдо рдХрд╛ рдЕрдкрдирд╛ рдирд┐рдпрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

ZY: рдордВрдЪ рдкрд░ рдПрдХ "рд╣реИрдХрд░" рдХрд╛ рд╕рдВрджреЗрд╢ рдореБрд╕реНрдХреБрд░рд╛рдпрд╛ рдХрд┐ рдЙрд╕рдиреЗ рдХрд┐рддрдиреА рдЬрд▓реНрджреА рд╕рд░реНрд╡рд░ рдХреЛ рдиреАрдЪреЗ рд░рдЦрд╛ред рдЙрд╕реЗ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ рдХрд┐ рд╕рд░реНрд╡рд░ рдиреЗ рдЙрд╕ рдкрд░ рдХреНрдпрд╛ рдбрд╛рд▓рд╛ рдерд╛ред

рдЕрддрд┐рд░рд┐рдХреНрдд:
рдмреНрд▓реИрдХ рд▓рд┐рд╕реНрдЯ рдмрдирд╛рддреЗ рд╕рдордп рдЯрд╛рдЗрдордЖрдЙрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдП рдХреЙрдорд░реЗрдб рдореЗрдЧрд╛рдмреВрдм рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж - рдХреНрд░реЛрди рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд╕рд╛рдл рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдм 5 рдорд┐рдирдЯ рдХреЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдХрдорд╛рди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
 ipset create web_black_list hash:ip timeout 300 

рдореИрдВ рд╕реБрд░рдХреНрд╖рд╛ рдЪрд┐рдВрддрд╛рдУрдВ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓реЗрдХреНрд╕рд╛ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрддрд╛ рд╣реВрдВ ред рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡рд░ рдкрд░, Fastcgi рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЗрд╡рд▓ nginx рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдпреВрдирд┐рдХреНрд╕-рд╕реЙрдХреЗрдЯ рдкрд░ рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрд┐рд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
 error_page 503 =429 @blacklist; location @blacklist { fastcgi_pass unix:/var/run/blacklist-wrap.sock-1; fastcgi_param SCRIPT_FILENAME /data/web/cgi/blacklist.sh; include fastcgi_params; } 
рд╕реНрдкреЙрди- fcgi.wrap рдХреЗ рд▓рд┐рдП:
 FCGI_SOCKET=/var/run/blacklist-wrap.sock FCGI_PROGRAM=/usr/sbin/fcgiwrap FCGI_EXTRA_OPTIONS="-M 0700 -U nginx -G nginx" 

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


All Articles