21x9.org | System Administration | Home Automation | Smart Home
28.02.2018

Metasuche selbst gemacht

Searx ist eine Metasuchmaschine, die jeder auf seinem eigenen Server selbst betreiben kann. Tut man dies öffentlich, sollte man jedoch noch ein paar zusätzliche Vorkehrungen treffen und z.B. Suchanfragen mittels Filtron filtern. Sonst wird man von den angefragten Suchmaschinen schnell ausgesperrt.

Ich betreibe seit einiger Zeit die öffentliche Searx-Instanz unter https://searx.xyz. Das hat auch lange sehr gut funktioniert, bis einige Bots die Seite mit Anfragen bombardiert haben. Die Seite selbst hat das Problemlos weggesteckt. Allerdings funktioniert searx so, dass die eingegebene Suchanfrage an bis zu 70 Suchmaschinen weitergereicht wird. Diese mögen es in der Regel nicht, wenn eine einzelne IP zu viele Anfragen (ggf. auch noch mit seltsamen Inhalten) anstellt. Google verweigerte mir daraufhin Antworten und wollte stattdessen ein Captcha ausgefüllt bekommen.

Glücklicherweise haben die searx Entwickler aber das Tool filtron im Gepäck. Filtron ist im Grunde ein vor searx geschalteter Proxy, der die Anfragen filtern kann. Hierzu benötigt man ein Ruleset (rules.json):

Der erste Abschnitt (name: search request) sorgt dafür dass nur Suchanfragen beachtet werden. Die eigentliche Filterarbeit findet in den subrules statt. Die Regel roboagent limit sperrt Tools wie curl und wget aus (limit: 0), mit denen gerne Abfragen von Websites automatisiert werden. Sicher ist das nicht, da man den Agent einfach maskieren kann. Dasselbe gilt für bekannte Bots, z.B. von Suchmaschinen (botlimit). Die Regel IP limit sorgt dafür dass von einer bestimmten IP “nur” 256 Abfragen in 300 Sekunden möglich sind. Werden in dieser Zeit mehr Anfragen gestellt wird die Meldung Rate limit exceeded, try again later. ausgegeben. Die Regel rss/json limit schränkt den Abruf von Suchergebnissen in den Formaten csv, json und rss auf 4 in 600 Sekunden ein, diese Abfragen werden hauptsächlich von Bots gestellt und waren der Hauptgrund warum Google mir nicht mehr antworten wollte, daher ist die Regel sehr strikt. Die Regel useragent limit sollte nun selbsterklärend sein.

Ich betreibe searx als Docker-Container und natürlich bot es sich hier an filtron ebenfalls in einem Docker-Container zu verpacken. Hier nutze ich folgendes Dockerfile:

Das Dockerfile von searx selbst sieht wie folgt aus:

Mittels der beiden Dockerfiles erstelle ich mit docker build . -t localhost:5000/filtron respektive docker build . -t localhost:5000/searx lokale Images, die ich mittels docker push localhost:5000/filtron bzw. docker push localhost:5000/searx in mein lokales Docker-Repository lade (das ist nicht nötig, erleichtert mir aber ein paar interne Prozesse).

Damit searx und filtron problemlos miteinander kommunizieren können kombiniere ich beide Container mit docker-compose:

Da ich die beiden nötigen Images im lokalen Repo verwalte kann ich einfach die fertigen Images von dort herunterladen. Alternativ könnte ich image durch ein Buildverzeichnis mit den jeweiligen Dockerfiles von searx und filtron ersetzen, dann erzeugt docker-compose die nötigen Images on-the-fly.

Mittels docker-compose up bzw. docker-compose create && docker-compose start können die beiden Container nun gestartet werden. filtron steht daraufhin unter der Adresse 127.0.0.1:8888 zur Verfügung und leitet Anfragen an searx weiter.

Tags: linux howto docker searx docker-compose filtron

Tags

linux howto docker searx docker-compose filtron

Feeds

Atom 1.0 RSS JSON
  • Datenschutz
  • Impressum
  • Archiv