Já jsem jenom vyvracel to o nemožnosti těch lookupů při miliónech záznamů...
Nebo taky LMDB:
TL;DR: 2.500.000 reads/s při 100mio záznamů v DB
a
http://symas.com/mdb/inmem/large.html
TL;DR: 1.800.000 reads/s při biliónu záznamů v DB
na hardware, který má akorát dost paměti (128GB RAM), ale jinak to není nic speciálního.
S implementaci jako bitmapa je problem v tom, ze to clovek chce idealne delat v kernelspace (ie. jako match modul pro iptables) kde alokovat spojitych 512MB neni uplne rozumny napad.
Nicmene nekde jsem videl reseni s RLE komprimovanou bitmapou, coz me az prekvapilo tim jak to bylo rychle.
Jinak pár údaju jsem si teď vytáhl z jedné služby, kterou provozuju (nebudu jmenovat). Mám bohužel jen unikátní denní přístupy za 2 měsíce, takže největší počet přístupů je tam 63.
celkem
3483 IP adres k nám chodí aspoň jednou denně
36046 IP adres aspoň obden.
295692 IP adres minimálně jednou týdně
671561 IP adres minimálně jednou měsíčně
982391 IP adres má aspoň jeden záznam
Myslím, že vzít dvojměsíční filtr a tím filtrovat DDoS útok, tak tím moc uživatelů neohrozím, ale mám vysokou šanci, že odříznu botnet.
Pokud by to nepomohlo, tak by se to dalo snížit na IP adresy chodící jednou za měsíc a kdyby o ani nepomohlo, tak se dá postupovat dál...
PS: Jedná se o velice známou službu, dat mám obrovské množství z logů, argument, že jde o nějaký lokální problém tedy neberu. Dokonce bych řekl, že bude větší než root.cz
Kolko ich ma prave jeden zaznam? Ti by asi boli zakazani.
Vo vseobecnosti by to asi odpisalo ludi s dynamickymi IP. Napriklad najvacsi slovensky poskytovatel DSL do domacnosti (T-Com) ma na tento ucel 3 rozsahy /15 a jeden /16, pricom meni IP kazdu noc.
Ked je takych poskytovatelov viac, tak je asi skoro nemozne, aby sa ludia trafili do tych spravnych IP a boli by zakazani. To by odpisalo nezanedbatelne vela uzivatelov.
>celkem
>3483 IP adres k nám chodí aspoň jednou denně
>36046 IP adres aspoň obden.
>295692 IP adres minimálně jednou týdně
To povede jen k tomu, že se bude DDOS útok opakovat víckrát po sobě na krátký čas a pak už bude zapsaný v tabulce :-(
Spíš to filtrovat tak, že pokud to daná IP adresa zkouší déle než 5 minut tak jí odříznout na následujících N minut.
No, já na IPv4 adresu potřebuji 4 byty, takže bych potřeboval na všechny dohromady 16GB. Ale i to už je dneska velmi dobře dostupné.
Problém je v NATech. Pokud nechci odstřelit stovky lidí za NATem najednou, tak musím přidat i port. A to jsme zaprvé s účinností blízké nule (porty se mění) a zároveň potřebuji dalších 8GB RAM.
Tak jdeme na IPv6 a to už je jiná legrace.
Port je dynamická záležitost, s tím se nic udělat nedá.
Nevím jaké údaje chcete ukládat v mapě IP adres, když potřebujete na výdeji znát jen blokovat / pustit dál
Lidi za NATem neodstřihnete, pokud aspoň jeden uživatel chodí na Root. Jen akorát vpustíte i pár počítačů z botnetů, pokud za tím NATem budou. S tím se samozřejmě počítá, prostě úplnému oddělení botnetu od legálních uživatelů nezajistíte, tenhle systém má ale podstatnou výhodu, že spíš generuje false negative, než false positive
Moc nechápu argument. Ta databáze se dá sestavovat během dne, třeba offline z logu. Je tam prostor na sestavování databáze na úrovni známých podsítí. Lze tam přidat i nějaký mechanismus hodnocení pravděpodobnosti, že z dané adresy přijde útok. adresy, ze kterých chodí běžní uživatelé pravděpodobně útočit nebudou, z některých adres třeba už nějakou dobu nikdo nepřišel, takže i ta je potencionální zdrojem DOSu.
Nakonec databáze IP adres se uplatní jen při detekci DDoSu, v běžným provozu nikoliv. Podle síly útoku lze vybrat jen omezený okruh IP adres nebo rozsahů a cokoliv mimo prostě zahazovat. Rozsah IP adres by bylo možné volit podle předem spočítané priority tak, aby to stroje ještě zvládaly.
Pro IPv4 to znamená, že stačí hledat v tabulce, která má 512MB (každá IP adresa má 1 bit). Pokud bych to omezil na /24 rozsahy, pak jen 2MB.
U IPv6 se asi člověk nevyhne blokováním celých rozsahů.Ale dnes si ještě můžeme dovolit, pokud přišel útok po IPv6, prostě podporu IPv6 dočasně vypnout.
Otázka je, na čem to implementovat