рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдмреЙрдЯ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдХрд▓ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдмреЙрдЯ рдкреЗрдЬ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
habrahabr.ru/search ред рдмреЙрдЯ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреЗрдЬ рдХреЗ рд╕рд╛рде рдЫрд╡рд┐рдпреЛрдВ, рд▓рд┐рдкрд┐рдпреЛрдВ, рд╕реАрдПрд╕рдПрд╕, рдЖрджрд┐ рдХреЛ рдХреИрд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд▓реЙрдЧ / рдФрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд / рдЦреЛрдЬ / рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдХреЛрдИ рдЬреАрд╡рд┐рдд рд╡реНрдпрдХреНрддрд┐ рдХрд┐рд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
habrahabr.ru/search рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ / рдЦреЛрдЬ / рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЪрд┐рддреНрд░, рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд╕реАрдПрд╕рдПрд╕, рдЖрджрд┐ рдХреЗ рд╕рд╛рде рд▓реЙрдЧ рдореЗрдВ рдорд┐рд▓реЗрдЧрд╛ред
рд╕рдорд╛рдпреЛрдЬрди
mysql
/etc/my.cnf
[mysqld] local-infile=1
рдореВрд▓ рдХреЗ рддрд╣рдд:
UPDATE `mysql`.`user` SET `File_priv` = 'Y' WHERE `user`.`Host` = 'localhost' AND `user`.`User` = '__'; flush privileges;
sysctl
рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде sysctl.conf рд╡рд┐рд╕реНрддрд╛рд░ (рд▓рд┐рдирдХреНрд╕)рд░рд╛рдо рдбреНрд░рд╛рдЗрд╡
рдирдЧреАрди рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП
рд░рд╛рдо рдбреНрд░рд╛рдЗрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдлрд╝рд╛рдЗрд▓ / etc / fstab рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
tmpfs /var/log/ram_disk tmpfs size=1024m 0 0
рддреЛ
mkdir /var/log/ram_disk mount -t tmpfs -o size=1024m tmpfs /var/log/ram_disk
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
1. рдЯреНрд░реИрдк рдЪрдпрди
рдЬрдм рдЖрдк рд╕реНрдкреАрдХрд░ рдХреЗ рдХрд┐рд╕реА рднреА рдкреГрд╖реНрда рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рд╛рдЗрдЯ рдкрд░ рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рд░ рдФрд░ рд╡рд┐рдиреАрдд рдлрд╝рд╛рдЗрд▓ (рдЪрд┐рддреНрд░, css, js, рдЖрджрд┐) рдХреЛ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
habrahabr.ru/styles/fontello/css/habr.cssрдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЧреИрд░-рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд <? php echo '/styles/fontello/css/habr.css?? рд░реИрдВрдб (99999999)?> рдЬреИрд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВред
рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдУрдкреЗрд░рд╛ 1 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рдХреИрд╢ рдореЗрдВ рдЪрд┐рддреНрд░ рдбрд╛рд▓рддрд╛ рд╣реИ, 5 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рд╕реАрдПрд╕рдПрд╕ / рдЬреЗрдПрд╕ред
2. рд╣рдо nginx рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЛ рд╕рд╣реА рдХрд░рддреЗ рд╣реИрдВ
3. рд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдЯреЗрдмрд▓ рдмрдирд╛рдПрдВ
рдЗрдВрдЬрди = рдореЗрдореЛрд░реА - рдЗрд╕реЗ рддреЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
CREATE TABLE `dinamic_log` ( `inc` bigint(20) NOT NULL AUTO_INCREMENT, `remote_addr` varchar(20) NOT NULL DEFAULT '0', `time_local` int(20) NOT NULL DEFAULT '0', `status` int(4) NOT NULL DEFAULT '0', PRIMARY KEY (`inc`), KEY `remote_addr` (`remote_addr`), KEY `time_local` (`time_local`) ) ENGINE=MEMORY AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
CREATE TABLE `hook_log` ( `inc` bigint(20) NOT NULL AUTO_INCREMENT, `remote_addr` varchar(20) NOT NULL DEFAULT '0', `time_local` int(20) NOT NULL DEFAULT '0', `status` int(4) NOT NULL DEFAULT '0', PRIMARY KEY (`inc`), KEY `remote_addr` (`remote_addr`), KEY `time_local` (`time_local`) ) ENGINE=MEMORY AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
рд╡рд╣ рддрд╛рд▓рд┐рдХрд╛ рдЬрд╣рд╛рдБ рд╣рдо рдЦреЛрдЬ рдмреЙрдЯреНрд╕ рдХрд╛ рдЖрдИрдкреА рдбрд╛рд▓рддреЗ рд╣реИрдВ
CREATE TABLE `white` ( `remote_addr` bigint(20) NOT NULL, PRIMARY KEY (`remote_addr`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1
рдЯреЗрдмрд▓ рд▓реЙрдХ рдХреА рдЧрдИ
CREATE TABLE `black` ( `remote_addr` bigint(20) NOT NULL, `time_local` int(20) NOT NULL DEFAULT '0', PRIMARY KEY (`remote_addr`), KEY `time_local` (`time_local`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1
4. рдореБрдЦреНрдп рд▓рд┐рдкрд┐
рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рдпрд╣ php рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рднрд╛рд╖рд╛ рдХреЛ рд▓рдЧрднрдЧ рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИред рдФрд░ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдПред
рд╣рдо рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ:
php ddoshook.php /var/log/ram_disk/dynamic_access.log /var/log/ram_disk/hook_access.log 5 300 3
5. рдЕрдирдмрди
$block_time = $argv[1];
рд╣рдо рддрд╛рдЬ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ
* * * * * /usr/bin/php unban.php 86400
рдмрд╕, рдмреЙрдЯреНрд╕ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИ, рд▓реЛрдЧреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореБрджреНрджреЛрдВ рдореЗрдВ:
- рд╕рд░реНрд╡рд░ рдФрд░ рдЪреИрдирд▓ рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд╕рд┐рдВрдХ / udp / icmp рдмрд╛рдврд╝ рдХрд╛ рд╕рд╛рдордирд╛ рдХреИрд╕реЗ рдХрд░реЗрдВред
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдЬреЗрдВрдЯреЛрдВ рдкрд░ рдзреНрдпрд╛рди рди рджреЗрддреЗ рд╣реБрдП, рдЦреЛрдЬ рдмреЙрдЯ рдХреА рд╕рд╣реА рдкрд╣рдЪрд╛рди рдХреИрд╕реЗ рдХрд░реЗрдВред
- 7 рддрд░реАрдХреЗ рдЬреЛ 1000 рд╕реЗ рдЕрдзрд┐рдХ http ddos тАЛтАЛрд╣рдорд▓реЛрдВ рд╕реЗ рд▓рдбрд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред
- рдХреЗрд╡рд▓ $ 5 рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░рдХреЗ ddos тАЛтАЛрд╣рдорд▓реЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкреЗрд╢реЗрд╡рд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
updрдЦреЛрдЬ рдмреЙрдЯ рдХрд╛ рдЖрдИрдкреА рдХреИрд╕реЗ рдЦреЛрдЬреЗрдВ?
- рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рдЦреЛрдЬ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдПрдПрд╕ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ: bgp.potaroo.net/cidr/autnums.html
- AS рдХреЗ рд▓рд┐рдП IP рдкрддреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛: stat.ripe.net/data/annulate-prefixes/data.json?resource=AS15169
рдПрдПрд╕ рдФрд░ рдЖрдИрдкреА рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдкрдбреЗрдЯ 2OS: FreeBSD 8.3
CPU: E5-2620 2.00GHz
рдкрд░реАрдХреНрд╖рдг 1
рдкрдВрдХреНрддрд┐рдпрд╛рдБ (dinamic_log): 100,000 (100,000 HTTP-рдЕрдиреБрд░реЛрдз рд╕рд╛рдЗрдЯ рдХреА рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЗ рд▓рд┐рдП 3 рд╕реЗрдХрдВрдб рдореЗрдВ)
рдкрдВрдХреНрддрд┐рдпрд╛рдБ (рд╣реБрдХ_рд▓реЙрдЧ): 1000 (3 рд╕реЗрдХрдВрдб рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ 1000 рд╡реИрдз рдЕрдиреБрд░реЛрдз)
# php /root/scripts/php/imgtest/ddos_hook.php/tmp/d20.log/tmp/h20.log 5 300 3
рд▓реЛрдб рдбреЗрдЯрд╛ рдХрд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛: 0.29 рд╕реЗрдХрдВрдбред
рд▓реЛрдб рдбреЗрдЯрд╛ рдХрд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛: 0.003 рд╕реЗрдХрдВрдбред
рдЪрдпрдирд┐рдд рд╕рдордп рдмреАрдд рдЧрдпрд╛: 0.017 рд╕реЗрдХрдВрдбред
рдкрдВрдХреНрддрд┐рдпрд╛рдБ (рдкреНрд░рддрд┐рдмрдВрдз): рез 1800режреж
рдкреВрд░реНрдг рдкреБрдЯреА рд╕рдордп рдмреАрдд рдЧрдпрд╛: 0.313 рд╕реЗрдХрдВрдбред
рдкрд░реАрдХреНрд╖рдг реи
рдкрдВрдХреНрддрд┐рдпрд╛рдБ (dinamic_log): 1,000,000 (3 рд╕реЗрдХрдВрдб рдореЗрдВ рд╕рд╛рдЗрдЯ рдХреА рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЗ рд▓рд┐рдП 1 рдорд┐рд▓рд┐рдпрди http-request)
рдкрдВрдХреНрддрд┐рдпрд╛рдБ (рд╣реБрдХ_рд▓реЙрдЧ): 10,000 (3 рд╕реЗрдХрдВрдб рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ 10,000 рд╡реИрдз рдЕрдиреБрд░реЛрдз)
# php /root/scripts/php/imgtest/ddos_hook.php/tmp/d2.log/tmp/h2.log 5 300 3
рд▓реЛрдб рдбреЗрдЯрд╛ рдХрд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛: 2.878 рд╕реЗрдХрдВрдбред
рд▓реЛрдб рдбреЗрдЯрд╛ рдХрд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛: 0.023 рд╕реЗрдХрдВрдбред
рдЪрдпрдирд┐рдд рд╕рдордп рдмреАрдд рдЧрдпрд╛: 0.501 рд╕реЗрдХрдВрдбред
рдкрдВрдХреНрддрд┐рдпрд╛рдБ (рдкреНрд░рддрд┐рдмрдВрдз): 12402
рдкреВрд░реНрдг рдкреБрдЯреА рд╕рдордп рдмреАрдд рдЧрдпрд╛: 3.54 рд╕реЗрдХрдВрдбред
рдкреБрдирд╢реНрдЪрд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдорд╛рдзрд╛рди рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╣реИред рдЕрдкрдиреЗ рдЬреЛрдЦрд┐рдо рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ