Poslao: 20 Avg 2011 23:14
|
offline
- Milan Kragujević
- tzv. Junior PHP Programer
- Pridružio: 20 Avg 2011
- Poruke: 76
- Gde živiš: Klenovnik, Srbija
|
pozdrav!
možda temu nisam stavio na pravo mesto, ali sam nov. Moderatori, premestite temu gde treba da bude, ako ovo mesto ne odgovara.
U svakom slučaju da Vam izložim problem.
Nedavno (pre 5 sati) je jedan "haker" (jednno dete od 13 godina) počeo da pravi ddos na moj sajt (sa 3 kompjutera).
Kako da u php-u zabranim pristup (na 30 minuta) nekome ko napravi više od jednog zahteva ka jednoj stranici u minutu?
Hvala unapred!
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
|
|
Poslao: 21 Avg 2011 00:12
|
offline
- Peca
- Glavni Administrator
- Predrag Damnjanović
- SysAdmin i programer
- Pridružio: 17 Apr 2003
- Poruke: 23211
- Gde živiš: Niš
|
Napisano: 20 Avg 2011 23:59
unosi svaki IP u novu liniju u txt fajlu.
funkcija file() ucitava fajl i svaku liniju smesta kao niz.
onda lepo sa foreach() protrcis kroz taj niz i vidis koliko je puta neka IP adresa napravila konekcija.
onda dodas tom nizu novi IP, i sa foreach opet generises listu od recimo 50 poslednjih IP adresa - i snimis to kao txt.
tako ces uvek imati listu od max 50 unosa.
i obavezno: flock($fp, LOCK_EX)
http://php.net/manual/en/function.flock.php
jer ces bez toga sjebati txt fajl kada dva php-a paralelno krenu da pisu u isti fajl
Dopuna: 21 Avg 2011 0:12
MilanKragujevic ::Može to da se uradi... svaki 30 sekundi pokrećem skriptu koja uz pomoć _exec izvršava naredbu za odbacivanje ip adresa (while loop).
Problem je gde da smeštam te podatke o ip adresama i kako da ih čitam i brišem stare ip adrese
mozes li iz php-a sa _exec da izvrsis ovo:
netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
to ce ti automatski dati koliko koji IP pravi konekcija, onda ne moras u nikakav fajl da belezis IP adrese.
|
|
|
|
Poslao: 21 Avg 2011 00:18
|
offline
- Milan Kragujević
- tzv. Junior PHP Programer
- Pridružio: 20 Avg 2011
- Poruke: 76
- Gde živiš: Klenovnik, Srbija
|
Napisano: 21 Avg 2011 0:14
ovako nešto?
<?php
$fajl = 'ipjevi-aaaaaaa.txt';
function zabelezi() {
global $fajl;
$ip = $_SERVER['REMOTE_ADDR'];
$fp = fopen($fajl, "w+");
if (flock($fp, LOCK_EX)) {
ftruncate($fp, 0);
fwrite($fp, $ip . "\r\n");
flock($fp, LOCK_UN);
} else {
die('ERROR');
}
fclose($fp);
}
function ucitaj() {
global $fajl;
$ucitano = file($fajl, FILE_IGNORE_NEW_LINES);
$brojke = array_count_values($ucitano);
arsort($brojke);
$zlobnik = (key($brojke));
zabrani($zlobnik);
}
function zabrani($ip_adresa) {
exec('iptables -I INPUT -s ' . $ip_adresa . ' -j DROP ');
}
Dopuna: 21 Avg 2011 0:16
Ne, ne mogu da pokrenem tu naredbu..Dobijam praznu stranicu
<?php
exec("netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n");
?>
Dopuna: 21 Avg 2011 0:18
A sa shell_exec dobijam grešku
Citat:
Warning: shell_exec() has been disabled for security reasons in /home/blablablabla/ipjevi.php on line 2
|
|
|
|
Poslao: 21 Avg 2011 00:27
|
offline
- Peca
- Glavni Administrator
- Predrag Damnjanović
- SysAdmin i programer
- Pridružio: 17 Apr 2003
- Poruke: 23211
- Gde živiš: Niš
|
pa onda neces moci ni IPTABLES da izvrsis iz php-a...
mozes samo da exit-ujes iz php skripte, a on ce i dalje da ubija Apache...
|
|
|
|
Poslao: 21 Avg 2011 00:32
|
offline
- Milan Kragujević
- tzv. Junior PHP Programer
- Pridružio: 20 Avg 2011
- Poruke: 76
- Gde živiš: Klenovnik, Srbija
|
da.. znam.. ništa neće sprečiti tog "hakera" da loaduje sajt...
iako sam ja pri vrhu stavio die('Nedostupno zbog zakazanog odrzavanja'); , apache zauzima 40-50% procesora... a na serveru ima 600 sajtova... LOL
|
|
|
|
Poslao: 21 Avg 2011 00:43
|
offline
- Peca
- Glavni Administrator
- Predrag Damnjanović
- SysAdmin i programer
- Pridružio: 17 Apr 2003
- Poruke: 23211
- Gde živiš: Niš
|
pa on moze onda i bilo koji sajt na tom serveru da drnda.
zapravo... on moze i sam IP tvog servera da drnda - http://46.4.27.23/ - tek tu ne mozes nista...
|
|
|
|
Poslao: 21 Avg 2011 00:51
|
offline
- Milan Kragujević
- tzv. Junior PHP Programer
- Pridružio: 20 Avg 2011
- Poruke: 76
- Gde živiš: Klenovnik, Srbija
|
stavljam onaj kod odozgore.. samo što ću umesto exec komande staviti die('Asta la vista');
|
|
|
|
Poslao: 21 Avg 2011 07:46
|
offline
- Pridružio: 16 Feb 2011
- Poruke: 1630
- Gde živiš: Pancevo
|
kolega sa faxa je imao ovakav problem i na isti fazon je i resio samo sto je on redirektovao... kaze da mu je uspelo nije imao vise problema...Sada to je sve meni nekako cudno ali ajde... Mislim da moze i sa htaccess-om da se blokira.
Ajde probaj sa ovom klasom okacio sam je...
https://www.mycity.rs/must-login.png
skini samo ovo .ini da bude samo .php extenzija
Laka je za konfiguraciju.
include "$_SERVER[DOCUMENT_ROOT]/path/to/ddos.php.php";
$ksa = new ksantiddos();
$ksa->doit(10,20); //Dozvoljeno 10 poseta u roku od 20 sekundi)
Све HTTP zahteve iznad broja 10 u 20 sekundi od odredjene IP adrese ce vratiti sledece:
header('HTTP/1.0 503 Service Unavailable');
header('Status: 503 Service Unavailable');
header("Retry-After: 30");
print "<html><meta http-equiv='refresh' content='30'><body><h2>Our server is currently overloaded, your request will be repeated automatically in 30 seconds</h2>";
|
|
|
|