Metahakukone SearXNG:llä
Metahakukone omalla kotipalvelimella: mistä oikein on kyse?
De-Google-kirjoituksessa kerroin vaihtaneeni Google-haun Qwantiin. En ole ollut hakutuloksien laatuun täysin tyytyväinen ja aloin selvittelemään vaihtoehtoja. Kokeilin ensin Brave-hakua, mikä vaikutti lupaavalta. Sitten törmäsin metahakukoneeseen nimeltään SearXNG. Päätin pystyttää sen kotipalvelin Pehtoorille. Pehtoorista ja muusta kotiverkosta kerroin muistiinpanossa kotiverkon yleiskuvassa.
Mikä SearXNG on
SearXNG on avoimen lähdekoodin metahakukone. Se ei ylläpidä omaa hakemistoa verkkosivuista, vaan välittää haun useille hakukoneille, kuten DuckDuckGolle, Bravelle, Qwantille ja Wikipedialle, ja kokoaa niiden tulokset yhdelle sivulle. SearXNG:n asetuksista voidaan valita mitä hakukoneita taustalla käytetään. Hakukoneet näkevät pyynnön tulevan SearXNG:ltä eivätkä minun selaimeltani, joten ne eivät saa evästeitä, selaimen tunnisteita eivätkä tietoa siitä, mitä tulosta klikkaan.
Mitä se suojaa ja mitä ei
Yksityisyyshyöty on pienempi kuin voisi luulla. Kun SearXNG pyörii kotona ja olen sen (melkein) ainoa käyttäjä, kaikki haut lähtevät hakukoneille kotini IP-osoitteesta. Hakukone ei voi yhdistää hakuja Google-tiliin tai mainosprofiiliin, mutta se näkee kyllä, että samasta osoitteesta tulee hakuja. Julkisilla SearXNG-palvelimilla haut sekoittuvat muiden käyttäjien hakuihin, mutta silloin pitää luottaa palvelimen ylläpitäjään.
Hakukoneet eivät myöskään pidä siitä, että niitä käytetään tällä tavalla. Erityisesti Google vastaa välillä CAPTCHA-sivulla tai rajoittaa hakuja, ja yksittäinen hakukone voi lakata toimimasta, kunnes SearXNG:stä tulee korjattu versio. Tulosten laatu riippuu siitä, mitkä hakukoneet ovat milloinkin käytössä.
Asennus
SearXNG on Pehtoorilla oma pinonsa Dockgessa samaan tapaan kuin muutkin palvelut. Pino on hakemistossa /opt/stacks/searxng, joten viikoittainen varmuuskopio ottaa sen mukaan ilman erillisiä asetuksia. docker-compose.yml näyttää tältä:
services:
searxng:
image: docker.io/searxng/searxng:latest
container_name: searxng
restart: unless-stopped
ports:
- "127.0.0.1:8888:8080"
env_file:
- .env
environment:
TZ: "Europe/Helsinki"
SEARXNG_BASE_URL: "https://search.helapino.net/"
volumes:
- ./searxng:/etc/searxng:rw
- ./searxng-cache:/var/cache/searxng:rw
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
logging:
driver: "json-file"
options:
max-size: "1m"
max-file: "1"
Portti on sidottu osoitteeseen 127.0.0.1, joten palveluun pääsee vain samalla koneella toimivan Nginx-web-palvelimen kautta. Kontilta poistetaan kaikki ylimääräiset oikeudet lukuun ottamatta niitä kolmea, joita se tarvitsee käynnistyessään. Asetus on suoraan SearXNG:n omasta esimerkistä.
Asetukset
Asetustiedostoon searxng/settings.yml riittää kirjoittaa ne kohdat, jotka poikkeavat oletuksista:
use_default_settings: true
general:
instance_name: "Helapino-haku"
server:
limiter: false
public_instance: false
image_proxy: true
method: "POST"
search:
default_lang: "fi"
autocomplete: "duckduckgo"
safe_search: 0
ui:
default_locale: "fi"
theme_args:
simple_style: auto
limiter on SearXNG:n suoja botteja vastaan. Julkisessa palvelussa se on välttämätön, mutta minun hakukoneeseeni pääsee vain kotiverkosta tai WireGuard-VPN:n kautta, joten jätin sen pois. Samalla palvelu ei tarvitse rinnalleen Valkey-tietokantaa. image_proxy hakee tulosten kuvat SearXNG:n kautta, jolloin selain ei ota yhteyttä kuvapalvelimiin. POST-pyynnöillä hakusanat eivät näy osoiterivillä eivätkä selaimen historiassa.
Lisäksi instanssi tarvitsee salaisen avaimen. Se luodaan komennolla
openssl rand -hex 32
ja tallennetaan stackin .env-tiedostoon muodossa SEARXNG_SECRET=….
Nginx ja nimipalvelu
Nginx-määritys noudattaa samaa kaavaa kuin muut palvelut, ja salaukseen riittää valmiiksi haettu *.helapino.net-varmenne. Tavallisen HTTP-osoitteen uudelleenohjaus on jätetty tästä pois:
server {
listen 443 ssl;
server_name search.helapino.net;
ssl_certificate /etc/letsencrypt/live/helapino.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/helapino.net/privkey.pem;
access_log off;
location / {
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Yksi poikkeus muihin palveluihin on access_log off. Hakuehdotukset ja selaimen kautta tehdyt haut kulkevat osoitteessa, joten muuten hakusanat tallentuisivat Nginx:n lokiin. Technitium DNS:ään lisätään A-tietue, joka ohjaa osoitteen search.helapino.net Pehtoorille.
Oletushakukoneeksi
SearXNG kertoo itsestään selaimelle OpenSearch-kuvauksen, joten sen voi lisätä hakukoneeksi selaimen asetuksista ja valita oletukseksi. Puhelimessa haku toimii kodin ulkopuolella vain, kun WireGuard on päällä. Jos hakukoneesta haluaa puhelimen oletuksen, VPN-yhteys kannattaa pitää aina päällä.
Ylläpito
SearXNG:stä tulee uusia versioita tiheään, koska hakukoneet muuttavat sivujaan ja SearXNG:n pitää pysyä perässä. Päivitys on Dockgessa yksi napin painallus. Jos jokin hakukone lakkaa toimimasta, sen näkee asetusten Hakukoneet-välilehdeltä, ja sen voi poistaa käytöstä seuraavaan päivitykseen asti.