Skip to content

AI Bots aussperren

Linux
  • Ich glaube, wegen @thomas@metalhead.club bin ich über dieses Projekt gestolpert. Es gibt ja private Webprojekte im Netz, wo ich diesen AI-Bot-Besuch nicht so gerne möchte. Da ich gelesen habe, das sich diese Bots nicht an die robots.txt halten, muss man sich halt was einfallen um sie zu ärgern 🙂 Ich denke, das es kein 100%iger Schutz ist, aber evtl. ist es ein Anfang.

    Da ich Nginx nutze, benötige ich dieses File.

    nginx-block-ai-bots.conf
    

    Das muss dann noch in Nginx eingebaut werden und dann sollte es funktionieren. Mein Ansatz um das zu lösen, sieht so aus. Ich habe ein Script 😉

    ai-block.sh

    #!/bin/bash
    # Script um AI-Bots zu blocken
    # https://github.com/ai-robots-txt/ai.robots.txt/tree/main
    
    mkdir /root/AI-test
    cd /root/AI-test
    
    ## Daten holen
    curl -O https://raw.githubusercontent.com/ai-robots-txt/ai.robots.txt/master/nginx-block-ai-bots.conf
    
    ## Daten in nginx einbauen
    mv nginx-block-ai-bots.conf /etc/nginx/blocklists/
    
    ## NGINX neustarten
    systemctl restart nginx.service
    

    Das wird über einen crontab Eintrag jeden Tag aufgerufen.

    0 1 * * * /root/ai-block.sh
    

    Und in Nginx wird die Blocklist so geladen. Nur ein Ausschnitt aus dem Server Block.

    ## Server Block
    server {
       listen       443 ssl;
       listen  [::]:443 ssl;
       server_name  <DOMAIN>;
    
       # AI-Bots blockieren
        include /etc/nginx/blocklists/nginx-block-ai-bots.conf;
    

    Testen kann man das dann so.

      curl -A "ChatGPT-User" <DOMAIN>
      curl -A "Mozilla/5.0" <DOMAIN>
    

    Der erste Test bringt dann einen 403

    <html>
    <head><title>403 Forbidden</title></head>
    <body>
    <center><h1>403 Forbidden</h1></center>
    <hr><center>nginx/1.22.1</center>
    </body>
    </html>
    

    Der zweite Test ist ein erlaubter Zugriff.

    Danke an @thomas@metalhead.club für den Beitrag zu o.g. Projekt.

    Und zum Schluss noch die Frage "Was kann man noch machen?"

    Als Ergänzung noch, ich arbeite gerne mit diesen AI's an meinen Python Projekten, aber trotzdem gibt es private Webseiten von mir, wo ich das nicht möchte.

  • Wir können das noch für eine sanfte Methode erweitern, das ist die Datei robots.txt, wo man sich in alten Zeiten mal dran hielt. Einige Bots machen das, andere nicht. Praktisch, das o.g. Projekt bietet diese Datei auch an. Dann werden wir das kurz mal mit einbauen.

    ai-block.sh

    #!/bin/bash
    # Script um AI-Bots zu blocken
    # https://github.com/ai-robots-txt/ai.robots.txt/tree/main
    
    mkdir /root/AI-test
    cd /root/AI-test
    
    ## Daten holen
    curl -O https://raw.githubusercontent.com/ai-robots-txt/ai.robots.txt/master/nginx-block-ai-bots.conf
    curl -O https://raw.githubusercontent.com/ai-robots-txt/ai.robots.txt/master/robots.txt
    
    ## Daten in nginx einbauen
    mv nginx-block-ai-bots.conf /etc/nginx/blocklists/
    mv robots.txt /var/www/html
    
    ## NGINX neustarten
    systemctl restart nginx.service
    

    Damit das in nginx funktioniert. Den Server Block um folgendes erweitern.

    # Serve robots.txt directly from Nginx
    location = /robots.txt {
        root /var/www/html;
        try_files $uri =404;
    }
    

    Kurzer Test

    https://<DOMAIN>/robots.txt
    

    Ergebnis

    User-agent: AI2Bot
    User-agent: Ai2Bot-Dolma
    User-agent: Amazonbot
    User-agent: anthropic-ai
    User-agent: Applebot
    User-agent: Applebot-Extended
    User-agent: Brightbot 1.0
    User-agent: Bytespider
    User-agent: CCBot
    User-agent: ChatGPT-User
    User-agent: Claude-Web
    User-agent: ClaudeBot
    User-agent: cohere-ai
    User-agent: cohere-training-data-crawler
    User-agent: Crawlspace
    User-agent: Diffbot
    User-agent: DuckAssistBot
    User-agent: FacebookBot
    User-agent: FriendlyCrawler
    User-agent: Google-Extended
    User-agent: GoogleOther
    User-agent: GoogleOther-Image
    User-agent: GoogleOther-Video
    User-agent: GPTBot
    User-agent: iaskspider/2.0
    User-agent: ICC-Crawler
    User-agent: ImagesiftBot
    User-agent: img2dataset
    User-agent: imgproxy
    User-agent: ISSCyberRiskCrawler
    User-agent: Kangaroo Bot
    User-agent: Meta-ExternalAgent
    User-agent: Meta-ExternalFetcher
    User-agent: OAI-SearchBot
    User-agent: omgili
    User-agent: omgilibot
    User-agent: PanguBot
    User-agent: Perplexity-User
    User-agent: PerplexityBot
    User-agent: PetalBot
    User-agent: Scrapy
    User-agent: SemrushBot-OCOB
    User-agent: SemrushBot-SWA
    User-agent: Sidetrade indexer bot
    User-agent: Timpibot
    User-agent: VelenPublicWebCrawler
    User-agent: Webzio-Extended
    User-agent: YouBot
    Disallow: /
    
  • PHP Webseite lokal einhängen mit sshfs

    PHP php linux
    1
    2
    0 Stimmen
    1 Beiträge
    75 Aufrufe
    Niemand hat geantwortet
  • Star64 - Warnung

    Angeheftet Star64 star64 risc-v linux
    1
    0 Stimmen
    1 Beiträge
    101 Aufrufe
    Niemand hat geantwortet
  • NanoPi5 - eMMC

    Verschoben NanoPi R5S openwrt nanopir5s linux
    1
    4
    0 Stimmen
    1 Beiträge
    246 Aufrufe
    Niemand hat geantwortet
  • ZFS - Wichtige Befehle

    Linux zfs linux
    2
    0 Stimmen
    2 Beiträge
    830 Aufrufe
    FrankMF
    Unter dem Beitrag sammel ich mal ein paar Beispiele, für mich zum Nachlesen Den Anfang macht die ZFS-Replication Ich hatte Am Anfang ein wenig Verständnisprobleme, bis es klar war, das diese Replication von Pool zu Pool funktioniert. Also brauchen wir zwei vorhandene ZFS-Pools. root@pbs:/mnt/datastore/datapool/test# zfs list NAME USED AVAIL REFER MOUNTPOINT Backup_Home 222G 677G 222G /mnt/datastore/Backup_Home datapool 2.36G 1.75T 2.36G /mnt/datastore/datapool Wir erzeugen ein Dataset im datapool zfs create datapool/docs -o mountpoint=/docs Wir erzeugen eine Datei mit Inhalt echo "version 1" > /docs/data.txt Wir erzeugen einen Snapshot zfs snapshot datapool/docs@today Kontrolle root@pbs:/mnt/datastore/datapool/test# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT datapool/docs@today 0B - 96K - Wir replizieren den vorhandenen Snapshot zum ZFS-Pool Backup_Home und speichern ihn da im Dataset test. zfs send datapool/docs@today | zfs receive Backup_Home/test Nun befinden sich die Daten in dem anderen ZFS-Pool root@pbs:/mnt/datastore/datapool/test# ls /mnt/datastore/Backup_Home/test/ data.txt Und was mich am meisten interessiert, ist wie man das zu einem anderen Server schickt zfs send datapool/docs@today | ssh otherserver zfs receive backuppool/backup Den Test reiche ich dann später nach. Quelle: https://www.howtoforge.com/tutorial/how-to-use-snapshots-clones-and-replication-in-zfs-on-linux/ ZFS inkrementelle Replication Als, nur die geänderten Daten senden! Wir erzeugen ein paar Dateien root@pbs:/mnt/datastore/datapool/test# echo "data" > /docs/data1.txt root@pbs:/mnt/datastore/datapool/test# echo "data" > /docs/data2.txt root@pbs:/mnt/datastore/datapool/test# echo "data" > /docs/data3.txt root@pbs:/mnt/datastore/datapool/test# echo "data" > /docs/data4.txt Neuer Snapshot zfs snapshot datapool/docs@17:02 Liste der Snapshots root@pbs:/mnt/datastore/datapool/test# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT datapool/docs@today 56K - 96K - datapool/docs@17:02 0B - 112K - Wir senden dieinkrementelle Replication zfs send -vi datapool/docs@today datapool/docs@17:02 | zfs receive Backup_Home/test send from datapool/docs@today to datapool/docs@17:02 estimated size is 38.6K total estimated size is 38.6K cannot receive incremental stream: destination Backup_Home/test has been modified since most recent snapshot Dazu schreibt die Anleitung, die ich unten verlinkt habe, das die Daten verändert wurden. Warum, verstehe ich aktuell noch nicht. Mit -F im send Befehl erzwingt man einen Rollback zum letzten Snapshot. zfs send -vi datapool/docs@today datapool/docs@17:02 | zfs receive -F Backup_Home/test send from datapool/docs@today to datapool/docs@17:02 estimated size is 38.6K total estimated size is 38.6K Und Kontrolle ls /mnt/datastore/Backup_Home/test/ data1.txt data2.txt data3.txt data4.txt data.txt Quelle: https://klarasystems.com/articles/introduction-to-zfs-replication/
  • VSCodium - Nach Umzug die Entwicklungsumgebung wieder aktivieren

    Linux linux vscodium
    1
    2
    0 Stimmen
    1 Beiträge
    197 Aufrufe
    Niemand hat geantwortet
  • Debian 10 Buster 10.5 released

    Linux debian linux
    1
    0 Stimmen
    1 Beiträge
    233 Aufrufe
    Niemand hat geantwortet
  • Wenn dir der Redis-Server flöten geht....

    Verschoben Redis linux redis
    3
    0 Stimmen
    3 Beiträge
    625 Aufrufe
    FrankMF
    So, nach einer kleinen Pause und ein wenig nachdenken ist mir doch noch was eingefallen Backports! Man so einfach! nano /etc/apt/sources.list Das folgende eintragen. # backports deb http://deb.debian.org/debian stretch-backports main Danach ein apt update Und dann schauen wir uns mal die Version an.... apt -t stretch-backports search redis-server Sorting... Done Full Text Search... Done golang-github-stvp-tempredis-dev/stretch-backports 0.0~git20160122.0.83f7aae-1~bpo9+1 all Go package to start and stop temporary redis-server processes libtest-redisserver-perl/oldstable,oldstable 0.20-1 all redis-server runner for tests python-hiredis/oldstable,oldstable 0.2.0-1+b2 amd64 redis protocol reader for Python 2.X using hiredis python3-hiredis/oldstable,oldstable 0.2.0-1+b2 amd64 redis protocol reader for Python using hiredis redis/stretch-backports 5:5.0.3-3~bpo9+2 all Persistent key-value database with network interface (metapackage) redis-server/stretch-backports 5:5.0.3-3~bpo9+2 amd64 [residual-config] Persistent key-value database with network interface Und die habe ich gestern Abend gebaut. 127.0.0.1:6379> INFO # Server redis_version:5.0.5 Ok, das schmerzt jetzt
  • checkmk - Agent installieren

    Verschoben checkmk checkmk linux
    1
    1
    0 Stimmen
    1 Beiträge
    2k Aufrufe
    Niemand hat geantwortet