Blokování 10 000+ IP adres na hostingu

Jenda

Co potrebujes je identifikovat, ci ma danu ip cenu testovat. Cize napr. keby si mal 4 bitove polia dlzky 256 bitov a kazdy bit nastavis na 1 ak v danom zozname existuje ip s takou hodnotou oktetu (cize mas ip 10.0.0.2, tak nastavis v prvom 10.bit a vo stvrtom 2.bit) tak uz vies, ze existuje moznost takej kombinacie (a teda grepujes subor s ip, pripadne robis select do db kde mas indexy).
Takhle si snadno brzy nastavíš úplně všechny bity na jedničku a jsi tam, kde jsi začal.

Mnohem lepší by mi přišlo udělat si bitmapu Bčkových (64 Kib) nebo Cčkových (16 Mib) sítí a koukat do toho.


Zkoušel jste, jak "pomalé" bude to blokování přes .htaccess? Já bych odhadoval, že režie spouštění PHP interpretu bude mnohem větší, než použití běžného asociativního pole v PHP pro vyhledávání těch IP adres, a nejspíš i větší, než ten .htaccess. Jinými slovy, pokud vám stačí sdílený webhosting, nemusíte vymýšlet nic speciálního, protože úzké hrdlo vaší aplikace bude mnohem dřív úplně někde jinde, než ve vyhledávání blokovaných IP adres.

Jimm

Já nemohu přijít na to, proč tohle dělat... Může mi někdo prosím vysvětlit, kdy má tohle cenu?

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Já nemohu přijít na to, proč tohle dělat... Může mi někdo prosím vysvětlit, kdy má tohle cenu?

To je proti teroristum. Jedine ti se prece pripojuji pres TOR a proxy.

andy

Co potrebujes je identifikovat, ci ma danu ip cenu testovat. Cize napr. keby si mal 4 bitove polia dlzky 256 bitov a kazdy bit nastavis na 1 ak v danom zozname existuje ip s takou hodnotou oktetu (cize mas ip 10.0.0.2, tak nastavis v prvom 10.bit a vo stvrtom 2.bit) tak uz vies, ze existuje moznost takej kombinacie (a teda grepujes subor s ip, pripadne robis select do db kde mas indexy).
Takhle si snadno brzy nastavíš úplně všechny bity na jedničku a jsi tam, kde jsi začal.

Mnohem lepší by mi přišlo udělat si bitmapu Bčkových (64 Kib) nebo Cčkových (16 Mib) sítí a koukat do toho.

Mozno, ale to bol iba taky nastrel. Treba si spocitat pravdepodobnost false positives a podla toho sa rozhodnut. Moze si niekto spravit ako cvicenie, aby nebolo luto, ze sa ucil matiku a v it to nevyuzije :).

Pri 10000 si to ale nahraj do db a mas to vyriesene. Ten 1 select navyse nikomu nebude vadit...


Jenda

Mozno, ale to bol iba taky nastrel. Treba si spocitat pravdepodobnost false positives a podla toho sa rozhodnut. Moze si niekto spravit ako cvicenie, aby nebolo luto, ze sa ucil matiku a v it to nevyuzije :).
Tvoje bitové pole bude mít 4*256 = 1024 bitů a on chtěl blokovat 10000 počítačů, tedy 10x víc. Tak to tam kolizí asi bude dost :)

Souhlasím, že nejjednodušší bude prostě dotaz do DB. A nezapomenout mít na tom sloupečku index

mulkvisti

Co v databázi ukládat IP adresu jako int(10) unsigned a použít fce INET_NTOA() a INET_ATON()?
Nebude vyhledání čísla rychlejší, nebo je to jedno?

Kód: [Vybrat]
mysql> SELECT INET_ATON('192.0.0.2'), INET_NTOA('3221225474');
+------------------------+-------------------------+
| INET_ATON('192.0.0.2') | INET_NTOA('3221225474') |
+------------------------+-------------------------+
|             3221225474 | 192.0.0.2               |
+------------------------+-------------------------+
1 row in set (0.00 sec)

Kolemjdoucí

Nebude vyhledání čísla rychlejší, nebo je to jedno?
Kód: [Vybrat]

Teoreticky rychlejší bude, prakticky záleží jak se s tím autoři DB poperou. Rozhodně ale musí být na sloupečku index.

Kolemjdoucí

Co v databázi ukládat IP adresu jako int(10) unsigned a použít fce INET_NTOA() a INET_ATON()?

A IPv4 adresa má přesně 32 bitů, tedy bude stačit normální databázový INTEGER 32 bitů.

andy

Re:Blokování 10 000+ IP adres na hostingu
« Odpověď #24 kdy: 20. 10. 2014, 08:36:28 »
Tvoje bitové pole bude mít 4*256 = 1024 bitů a on chtěl blokovat 10000 počítačů, tedy 10x víc. Tak to tam kolizí asi bude dost :)

Souhlasím, že nejjednodušší bude prostě dotaz do DB. A nezapomenout mít na tom sloupečku index
Z tohoto vidiet, ze to nechapes (resp som to zle vysvetlil). Nejde o lookup tabulku ale o pravdepodobnostny algoritmus na zistenie, ci sa oplati pozerat do suboru/databazy. Kolizia s cislom zo zoznamu tam bude vzdy, lebo to chces. Trapit ta budu kolizie s IP ktore tam nie su. Ak tam kolizia nebude, tak urcite tato IP nie je v zozname.
Pozeral som ten bloom a je to +/- toto. Pouziva sa to napr v cassandre na minimalizaciu diskovych pristupov. Chceme vediet, ci je nejaka hodnota v mnozine hodnot. Zobereme k hashov a dostatocne dlhe bitove pole (hash je tu nejaky jednoduchy, ziadne md5, sha..). Zahashujeme kazdu hodnotu k hashmi a nastavime vysledok v poli na 1. Ak teraz pride hodnota a vsetkych k hashov je na 1, tak je pravdepodobnost, ze hodnota je v mnozine. Ak je 1 bit na 0, tak tam prvok urcite nie je. Na toto pozname aj vzorceky pravdepodobnosti (teda ake dlhe musi byt to pole na nejaku p), takze staci iba dosadit..

Co v databázi [myšleno MySQL] ukládat…
Původní dotaz byl, zda použití .htaccess nebo kódu v PHP nebude moc pomalé. Použití MySQL databáze by bylo ještě řádově pomalejší.

Kolemjdoucí

Re:Blokování 10 000+ IP adres na hostingu
« Odpověď #26 kdy: 20. 10. 2014, 09:04:19 »
Zobereme k hashov a dostatocne dlhe bitove pole (hash je tu nejaky jednoduchy, ziadne md5, sha..). Zahashujeme kazdu hodnotu k hashmi a nastavime vysledok v poli na 1.

Kvalita bude růst s délkou hashe, čím víc bitů tím přesnější odhad to bude poskytovat.
1024-bit hash bude fungovat poměrně dobře, 1 bit představuje 4*1024*1024 IP adres.
To znamená že když bude v bitovém poli 0, vím, že tyto 4 miliony IP tam určitě nejsou.


pjoter

Re:Blokování 10 000+ IP adres na hostingu
« Odpověď #27 kdy: 20. 10. 2014, 09:44:13 »
  • .htaccess - zalezi jak maji interne implementovane to hledani, pokud to bude prohledavat vsech 10 000 deny zaznamu, tak to moc rychle nebude
  • SQL a IP jako 32bit cislo - to uz podle mne bude celkem slusne rychle, protoze pujde pouzit index a urcite to pouzije vhodnejsi vyhledavani, nez ciste prochazeni celeho pole
  • primo v PHP - pouzit pole kde bude klic IP jako long (ip2long()), ktere bude serazene a pouzit na to binarni vyhledani - tady bude to vyhledani rychlejsi, nez samotne rozparsovani/nacteni toho pole

Ted uz to jenom zmerit  ;)

j

Já nemohu přijít na to, proč tohle dělat... Může mi někdo prosím vysvětlit, kdy má tohle cenu?

To je proti teroristum. Jedine ti se prece pripojuji pres TOR a proxy.

Tj, takze ocekavam, ze bude prodavat plutonium a dalsi potrebnou vybavu. A co teprv, az mu na to nekdo posle DDOS, to bude vypisovat do .htaccess pulku internetu.

2pjoter: pokud ti jde o DOS, tak je spatne uplne vsechno, protoze vsehcno splni ucel vycucat ti vykon. Naopak, tahle kravovina mi umozni ti ten srv vycucat daleko snaz, nez browsenim po webu.  Na strane utocnika staci generovat dost req a srv tim slozi zcela spolehlive.

By me fakt zajimalo, co to ma bejt za uber web, bezici na nejakym freehostingu, kterej potrebuje zjistovat, z jaky IP tam kdo leze ... lol.

andy

Re:Blokování 10 000+ IP adres na hostingu
« Odpověď #29 kdy: 20. 10. 2014, 13:23:13 »
Neviem preco tu chcete mat silou mocou index. Staci mat tu tabulku utriedenu (kedze je takmer konstantna a mala, tak to nie je problem). Potom sa vam na index vykasle aj samotna db.