Skip to content

AI Bots aussperren

Linux
2 1 202
  • 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: /
    
  • Debian - php8.2 security update

    Linux debian linux php
    1
    0 Stimmen
    1 Beiträge
    123 Aufrufe
    Niemand hat geantwortet
  • Debian Bookworm 12.5 released

    Linux linux debian
    3
    0 Stimmen
    3 Beiträge
    254 Aufrufe
    FrankMF
    Und hier taucht es dann auf -> https://www.debian.org/News/2024/20240210
  • Raspberry Pi5 - First Boot

    RaspberryPi raspberrypi linux debian
    1
    2
    0 Stimmen
    1 Beiträge
    288 Aufrufe
    Niemand hat geantwortet
  • Semaphore - Die API

    Verschoben Ansible ansible semaphore linux gitlab
    2
    0 Stimmen
    2 Beiträge
    330 Aufrufe
    FrankMF
    Ich hasse schlecht lesbaren Code, scheint man sich bei Python so anzugewöhnen. Habe da nochmal was mit der langen Zeile getestet. stages: - deploy deploy: stage: deploy script: # $SEMAPHORE_API_TOKEN is stored in gitlab Settings/ CI/CD / Variables - >- curl -v XPOST -H 'Content-Type: application/json' -H 'Accept: application/json' -H "Authorization: Bearer $SEMAPHORE_API_TOKEN " -d '{"template_id": 2}' https://<DOMAIN>/api/project/2/tasks only: - master # Specify the branch to trigger the pipeline (adjust as needed) Hier noch was Dr. ChatGPT dazu schreibt [image: 1692643209159-631de9d4-b04d-4043-bfff-c5f2d1b6eea7-grafik.png] Erledigt - läuft Und verstanden habe ich es auch.
  • Debian 11 - nginx mit Seafile

    NGINX nginx
    3
    0 Stimmen
    3 Beiträge
    259 Aufrufe
    H
    Hi, ja es ist zu Warm Hab mich vielleicht etwas falsch ausgedrückt. Ich suche ne möglichkeit bzw. ein Howto wie ich Seafile für einen bekannten auf ein Shared Hosting Paket installiert bekomme.
  • Mainline 5.13.x

    Images linux rockpro64
    1
    0 Stimmen
    1 Beiträge
    243 Aufrufe
    Niemand hat geantwortet
  • NanoPi R4S - OpenWrt kompilieren

    Angeheftet NanoPi R4S openwrt linux nanopir4s
    2
    2
    0 Stimmen
    2 Beiträge
    491 Aufrufe
    FrankMF
    Ja, ich kann bestätigen, es funktioniert und startet einwandfrei!
  • LUKS verschlüsselte Platte mounten

    Linux linux
    2
    1
    0 Stimmen
    2 Beiträge
    1k Aufrufe
    FrankMF
    So, jetzt das ganze noch einen Ticken komplizierter Ich habe ja heute, für eine Neuinstallation von Ubuntu 20.04 Focal eine zweite NVMe SSD eingebaut. Meinen Bericht zu dem Thema findet ihr hier. Aber, darum soll es jetzt hier nicht gehen. Wir haben jetzt zwei verschlüsselte Ubuntu NVMe SSD Riegel im System. Jetzt klappt die ganze Sache da oben nicht mehr. Es kommt immer einen Fehlermeldung. unbekannter Dateisystemtyp „LVM2_member“. Ok, kurz googlen und dann findet man heraus, das es nicht klappen kann, weil beide LVM Gruppen, den selben Namen benutzen. root@frank-MS-7C37:/mnt/crypthome/root# vgdisplay --- Volume group --- VG Name vgubuntu2 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 1 Max PV 0 Cur PV 1 Act PV 1 VG Size <464,53 GiB PE Size 4,00 MiB Total PE 118919 Alloc PE / Size 118919 / <464,53 GiB Free PE / Size 0 / 0 VG UUID lpZxyv-cNOS-ld2L-XgvG-QILa-caHS-AaIC3A --- Volume group --- VG Name vgubuntu System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size <475,71 GiB PE Size 4,00 MiB Total PE 121781 Alloc PE / Size 121781 / <475,71 GiB Free PE / Size 0 / 0 VG UUID jRYTXL-zjpY-lYr6-KODT-u0LJ-9fYf-YVDna7 Hier oben sieht man das schon mit geändertem Namen. Der VG Name muss unterschiedlich sein. Auch dafür gibt es ein Tool. root@frank-MS-7C37:/mnt/crypthome/root# vgrename --help vgrename - Rename a volume group Rename a VG. vgrename VG VG_new [ COMMON_OPTIONS ] Rename a VG by specifying the VG UUID. vgrename String VG_new [ COMMON_OPTIONS ] Common options for command: [ -A|--autobackup y|n ] [ -f|--force ] [ --reportformat basic|json ] Common options for lvm: [ -d|--debug ] [ -h|--help ] [ -q|--quiet ] [ -v|--verbose ] [ -y|--yes ] [ -t|--test ] [ --commandprofile String ] [ --config String ] [ --driverloaded y|n ] [ --nolocking ] [ --lockopt String ] [ --longhelp ] [ --profile String ] [ --version ] Use --longhelp to show all options and advanced commands. Das muss dann so aussehen! vgrename lpZxyv-cNOS-ld2L-XgvG-QILa-caHS-AaIC3A vgubuntu2 ACHTUNG Es kann zu Datenverlust kommen, also wie immer, Hirn einschalten! Ich weiß, das die erste eingebaute Platte mit der Nummer /dev/nvme0n1 geführt wird. Die zweite, heute verbaute, hört dann auf den Namen /dev/nvme1n1. Die darf ich nicht anpacken, weil sonst das System nicht mehr startet. /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> /dev/mapper/vgubuntu-root / ext4 errors=remount-ro 0 1 # /boot was on /dev/nvme1n1p2 during installation UUID=178c7e51-a1d7-4ead-bbdf-a956eb7b754f /boot ext4 defaults 0 2 # /boot/efi was on /dev/nvme0n1p1 during installation UUID=7416-4553 /boot/efi vfat umask=0077 0 1 /dev/mapper/vgubuntu-swap_1 none swap sw 0 0 Jo, wenn jetzt die Partition /dev/mapper/vgubuntu2-root / anstatt /dev/mapper/vgubuntu-root / heißt läuft nichts mehr. Nur um das zu verdeutlichen, auch das könnte man problemlos reparieren. Aber, ich möchte nur warnen!! Nachdem die Änderung durchgeführt wurde, habe ich den Rechner neugestartet. Puuh, Glück gehabt, richtige NVMe SSD erwischt Festplatte /dev/mapper/vgubuntu2-root: 463,58 GiB, 497754832896 Bytes, 972177408 Sektoren Einheiten: Sektoren von 1 * 512 = 512 Bytes Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes Nun können wir die Platte ganz normal, wie oben beschrieben, mounten. Nun kann ich noch ein paar Dinge kopieren