ceskaexpedice / kramerius

System Kramerius
GNU General Public License v3.0
45 stars 26 forks source link

Stahování celého obrázku #839

Open zabak opened 3 years ago

zabak commented 3 years ago

Podle dohody na schůzce k admin rozhraní zakládám toto issue k prodiskutování problematiky stahování celého obrázku uživatelem.

Diskutované body:

  1. banování robotů - sdílení konfigurací přes github NK
  2. nechceme blokovat IIIF image API, je to proti jeho smyslu
  3. problematické může být tlačítko na stažení celé stránky ve formátu jpeg - jeho časté používání by mohlo vést k přetížení serveru. Mohlo by se po kliknutí na ně přidat menu kde by uživatel zvolil rozlišení v jakém chce dokument stáhnout a mohla by tam být i nějaké interakce se serverem, kdy by se tyto požadavky řadily do fronty a vyřizovaly se zpožděním, když by byl server přetížený.
mduda100871 commented 3 years ago

Zdravím,

poznámky k bodu 1.

V základu používám na serveru několik stupňů ochrany proti botům a jiným škůdcům. Bavíme se samozřejmě o nasazení v Linuxovém prostředí a opensource prostředcích - žádná komerce.

  1. na úrovni tcp/ip protokolu, tedy ve firewallu hlídám, aby každé nové spojení bylo korektně zahájeno (handshaking) SYN+NEW,
  2. pakety ve stavu INVALID bez milosti zahazuji,
  3. testuji další nevalidní kombinace příznaků v tcp hlavičkách a případně opět bez milosti zahazuji,
  4. reguluji globálně počet příchozích SYN paketů bez ohledu na zdrojovou IP - hranice je nastavena výše, abych to celé "nezabil", je to tedy otázka konkrétního prostředí nasazení (rychlost přípojky, výkon serveru apod.) a ladění,
  5. reguluji samotný přístup na http/https porty u zahajovacích paketů (SYN), zde již i na základě zdrojové IP adresy příchozího požadavku, zde je hranice počtu příchozích spojení nastavena výrazně níže - je to v podstatě taková základní ochrana první linie proti dos útokům a zároveň proti příliš chtivým botům nebo slovníkovým/bruteforce útokům, opět je to záležitost ladění podle daných podmínek nasazení,
  6. v aplikační úrovni pak používám nástroj fail2ban, který parsuje průběžně logy webserveru a na základě toho pak rozdává banány na jednotlivé zdrojové IP adresy, ze kterých šel podezřelý traffic - fail2ban má v již v základu poměrně bohatou škálu filtrů na různé typy útoků, ale také i na detekci botů, lze vřele doporučit v kombinaci s firewallem (iptables/nftables),
  7. jako webserver používám Apache spolu s dodávaný modulem mod_evasive jako dalším stupněm ochrany,
  8. zkoušel jsem rovněž modul mod_defensible v kombinaci s modulem mod_geoip a využitím veřejných DNS blacklistů, ale toto se mi moc neosvědčilo, protože to generovalo příliš mnoho falešných banů i validním uživatelům,
  9. zajímavým se jeví také modul mod_security, ale jeho konfigurace a ladění je tak trochu "noční můra" (alespoň pro mě), takže zatím ho nemám nasazený - možná časem.

Našlo by se jistě i více různých kombinací či nástrojů pro detekci, samozřejmě i komerčních, ale to je již mimo záběr.

MD