рдЗрд╕ рддрдереНрдп рдХреЗ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ рдХрд┐ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╡рд┐рд╖рдп рдЕрдХреНрд╕рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкрдиреНрдиреЛрдВ рдкрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИ, рдореИрдВ рдХрд╛рд░реНрдп рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдХрд┐ рдХрд╛рдлреА рд╕рдордп рд╕реЗ рд╣рдо рдиреМрдХрд░реА рдЪрд╛рд╣рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдореЗрдВ php рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдкрдж рдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рддреЛ, рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ: рд╡реЗрдм рд╕рд░реНрд╡рд░ рдкрд░ рдХреЙрд▓ рдХрд╛ рд▓реЙрдЧ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдЕрдкрд╛рдЪреЗ рдпрд╛ рдирдЧрдиреЗрдХреНрд╕ (рдпрд╣ рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ) рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛, рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЙрдЧ рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рд╕рд░реНрд╡рд░ ddos тАЛтАЛрд╣рдорд▓реЗ рдХреЗ рддрд╣рдд рдерд╛ред рдпрд╣ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдФрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдиреА рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд▓рд╛рд╡рд░ рдиреЛрдб рдХреЗ рдкрддреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ред
рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрджрд╛ рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реБрджреНрдз Google, рдПрдХ рдмрдбрд╝реА рдЖрдкрджрд╛ рдирд╣реАрдВ рд╣реИред рдЦреЛрдЬ рдЗрдВрдЬрдиреЛрдВ рдХреА рд╕реВрдЪреА рд▓реЗрдирд╛ рдФрд░ рдЙрдЪрд┐рдд рд╕рдВрд╢реЛрдзрди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдмреЗрд╢рдХ, рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдзрд╛рд░рдг рдХреА рд╕рдЯреАрдХрддрд╛ рдФрд░ рдЧрддрд┐, рд╣рдорд▓реЗ рдХреА рддрд╛рдХрдд (рдЖрд╡рдзрд┐рдХрддрд╛, рд╢рд╛рдорд┐рд▓ рдиреЛрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИред
рдореИрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╕рдВрд▓рдЧреНрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдореИрдВрдиреЗ рд╕реНрд╡рдпрдВ рд╕рдорд╕реНрдпрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рдж рд▓рд┐рдЦрд╛ рдерд╛, рдЙрд╕ рд╕рдордп рдЬрдм рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ "рдЕрдзреАрд░" рдерд╛ред рд╕рдорд╛рдзрд╛рди рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рдореЛрдЯрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдкреНрд░рднрд╛рд╡реА (20 рд╕реЗрдХрдВрдб рдореЗрдВ рд▓реЙрдЧ рдХреЗ 80 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ)ред рдпрд╣ рд╡рд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдереА рдЬрд┐рд╕рдиреЗ 1,500 рд▓реЛрдлрд░реНрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдЯреВрдЯрдиреЗ рдкрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдПрдХ рд╣рдорд▓реЗ рд╕реЗ рдмрдЪрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХреА рдереАред
рд╕рдордп рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдПрдХ рд╣рдорд▓реЗ рдореЗрдВ рдпрд╛рддрд╛рдпрд╛рдд рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реИ (рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдФрд░ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдЬреЛ рдХреЛрдИ рднреА рдЕрдзрд┐рдХ рдмрд╛рд░ рдЖрдпрд╛ - рдпрд╣ рдХрд░рддрд╛ рд╣реИ): рдкреИрдХреЗрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА, рд╣реЗрдбрд░, рд▓реЗрдХрд┐рди, рдлрд┐рд░ рднреА, рдЕрдиреБрднрд╡ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯрддрд╛ рджреЗрддрд╛ рд╣реИ рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдХреЗ рд╕реНрддрд░ рдХрд╛ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдЬреЛ рдПрдХ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡реЗрдм рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ "рдПрдХ рдХреБрддреНрддреЗ рдХреЛ рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ"ред
рдирд┐рд░реНрдгрдп рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рджреЛ рдмрд╛рд░ (рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рдХреЛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЗрд╕реЗ 1 рдорд┐рдирдЯ 20 рдорд┐рдирдЯ рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд▓рдЧрднрдЧ 10% рдЖрд╡реЗрджрдХреЛрдВ рдиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдХрд╛рдо рд╣реЛрдЧрд╛ред
рд╕реНрд░реЛрдд рдХреЛрдб: рд▓реЙрдЧ рд╕реНрдЯреНрд░реАрдо рдпрд╛ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдкрд░ рдЕрд╡рд░реБрджреНрдз рдирд┐рдпрдо рдЬреЛрдбрд╝реЗрдВред рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡реГрджреНрдзрд┐ рджреЗрддреА рд╣реИред рдЖрдХрд╛рд░ рдореЗрдВ 500 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рддрдХ рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдмреЗрд╢рдХ, рдпрд╣ рд╕рдм рдореЛрддреА рдкрд░ рдереЛрдбрд╝рд╛ рдЫреЛрдЯрд╛ рдФрд░ рд╕реБрдВрджрд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ php рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХреБрдЫ рд╣рд▓ рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
#! / usr / рд╕реНрдерд╛рдиреАрдп / рдмрд┐рди / php
<? php
рдЕрдЧрд░ (рдЦрд╛рд▓реА ($ argv [1])) $ fname = $ argv [1]; $ $ fname = 'access.log';
$ fh = fopen ($ fname, 'r');
# $ fh = fopen ('php: // stdin', 'r');
$ timeLimit = 1;
$ рдЙрд▓рдЯреА рдЧрд┐рдирддреА = 50;
$ рд╕реНрдерд┐рддрд┐ = рд╕рд░рдгреА ();
рдЬрдмрдХрд┐ ($ рд╕реНрдЯреНрд░рд┐рдВрдЧ = рдлрд╝рд┐рдЬрд╝ ($ fh)) {
$ рдЖрдИрдкреА = рдкрджрд╛рд░реНрде ($ рд╕реНрдЯреНрд░рд┐рдВрдЧ, 0, рд╕реНрдЯреНрд░реИрдкреНрд╕ ($ рд╕реНрдЯреНрд░рд┐рдВрдЧ, ''));
рдЕрдЧрд░ (рдЦрд╛рд▓реА ($ рд╕реНрдерд┐рддрд┐ [$ ip] ['рдЕрд╡рд░реБрджреНрдз')) рдЬрд╛рд░реА рд╣реИ;
$ st = strpos ($ string, '[') + 1;
$ рд╕рдордп = рд╕реНрдЯреНрд░реЗрдЯреЛрдЯрд╛рдЗрдо (рдкрджрд╛рд░реНрде ($ рд╕реНрдЯреНрд░рд┐рдВрдЧ, $ рд╕реЗрдВрдЯ, рд╕реНрдЯреНрд░реИрдкреНрд╕ ($ рд╕реНрдЯреНрд░рд┐рдВрдЧ, ']), $ рд╕реЗрдВрдЯ + 1) - $ рд╕реЗрдВрдЯ);
$ st = strpos ($ string, '"') + 1;
$ req = root ($ рд╕реНрдЯреНрд░рд┐рдВрдЧ, $ st, strpos ($ string, '"', $ st + 1) - $ st);
$ st = strpos ($ req, "") + 1;
$ doc = root ($ req, $ st, strpos ($ req, "", $ st) - $ st);
$ dot = strrpos ($ doc, "");
$ рдбреЙрдЯ = $ рдбреЙрдЯ? strlen ($ doc) - $ dot: 0;
рдЕрдЧрд░ ($ рдбреЙрдЯ !! $ рдбреЙрдЯ> 5) {
рдЕрдЧрд░ (рдЦрд╛рд▓реА ($ рд╕реНрдерд┐рддрд┐ [$ ip])) $ рд╕реНрдерд┐рддрд┐ [$ ip] = рд╕рд░рдгреА ('рдЧрд┐рдирддреА' => 0);
рдЕрдЧрд░ (рдЦрд╛рд▓реА ($ рд╕реНрдерд┐рддрд┐ [$ ip] ['рд╕рдордп') && $ рд╕рдордп - $ рд╕реНрдерд┐рддрд┐ [$ ip] ['рд╕рдордп'] <= $ timeLimit) {
$ рд╕реНрдерд┐рддрд┐ [$ ip] ['рдЧрд┐рдирддреА'] ++;
рдЕрдЧрд░ ($ рд╕реНрдерд┐рддрд┐ [$ ip] ['рдЧрд┐рдирддреА']> = $ countLimit) {
рдЗрдХреЛ "$ ip: $ doc \ n";
# рд╕рд┐рд╕реНрдЯрдо ("ipfw рддрд╛рд▓рд┐рдХрд╛ 1 рдореЗрдВ $ ip рдЬреЛрдбрд╝реЗрдВ");
#echo "$ ip \ n";
$ рд╕реНрдерд┐рддрд┐ [$ ip] ['рдЕрд╡рд░реБрджреНрдз'] = рез;
}
}
$ рд╕реНрдерд┐рддрд┐ [$ ip] ['рд╕рдордп'] = $ рд╕рдордп;
$ рд╕реНрдерд┐рддрд┐ [$ ip] ['doc'] = $ doc;
}
}
?>