ddos napad i spam

1

ddos napad i spam

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! Ziveli



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Peca  Male
  • Glavni Administrator
  • Predrag Damnjanović
  • SysAdmin i programer
  • Pridružio: 17 Apr 2003
  • Poruke: 23211
  • Gde živiš: Niš

u teoriji - napravi mysql tabelu u kojoj ces da INSERT-ujes IP posetioca svaki put kad se otvori neka strana na tvom sajtu.
zatim [odmah posle INSERT-ovanja] sa SELECT proveri da li je dati IP u zadnjih 10 sekundi otvorio vise od 3 stranice recimo... ako jeste - exit;

u praksi - ovo nece da radi - ako krene DDoS php ce previse konekcija ka mysql-u da napravi - i opet ode sve u andrak.

resenje = imati SSH pristup serveru i sa IPTABLES uraditi -j DROP za IP sa kog dolazi flood.
primer:
iptables -I INPUT -s 195.113.21.55 -j DROP
ili
iptables -I INPUT -s 195.113.21.0/24 -j DROP
ako hoces ceo opseg 195.113.21.xxx da blokiras

u SSH je takodje veoma korisna komanda
netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
pokaze ti koliko konekcija koja IP pravi [pa onda lepo blokiras IP adrese koje ti prave najvise konekcija]

e sad - ako si vešt sa linuxom... mozes napraviti PHP skriptu koja bi se izvrsavala recimo na svaki minut [uz pomoc CRONJOB], i koja bi sama uradila ovaj netstat, i sama izvrsila IPTABLES -j DROP za sve IP adrese koje naprave recimo vise od 30 konekcija smešak
Ziveli



offline
  • Milan Kragujević
  • tzv. Junior PHP Programer
  • Pridružio: 20 Avg 2011
  • Poruke: 76
  • Gde živiš: Klenovnik, Srbija

Napisano: 20 Avg 2011 23:45

Ne odgovara mi prvo iz poznatih razloga Laughing
Što se tiče drugog rešenja- nemam ssh..
Meni bi više trebala varijanta sa .txt fajlom
jer je brža i manje "troši" Razz
Ali ne znam kako da napravim sve to...
mislim, najviše mi je pretraga problem..
i brisanje unosa koji su stariji od 60 sekundi
UUUPPPPOOOMOĆĆĆ!!! PRAVI 980 zahteva u 5 sekundi (ima više računara) SAJT NEĆE IZDRŽATI

Dopuna: 20 Avg 2011 23:55

Peca ::
e sad - ako si vešt sa linuxom... mozes napraviti PHP skriptu koja bi se izvrsavala recimo na svaki minut [uz pomoc CRONJOB], i koja bi sama uradila ovaj netstat, i sama izvrsila IPTABLES -j DROP za sve IP adrese koje naprave recimo vise od 30 konekcija smešak
Ziveli


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

offline
  • Peca  Male
  • 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 smešak

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.

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

offline
  • Peca  Male
  • 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... Sad
mozes samo da exit-ujes iz php skripte, a on ce i dalje da ubija Apache...

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

offline
  • Peca  Male
  • 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...

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'); Laughing

offline
  • C# and PHP Developer
  • 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>";

Ko je trenutno na forumu
 

Ukupno su 654 korisnika na forumu :: 10 registrovanih, 0 sakrivenih i 644 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: Battlehammer, bojank, DPera, dragoljub11987, gorantrojka, hyla, Krvava Devetka, Lord Nem, nemkea71, opt1