Ana içeriğe geç

Sunucu kaynaklarınızı boşa harcamayın: Nginx kullanarak istenmeyen botları engelleyin

· 3 dakikalık okuma
Customer Care Engineer

block-unwanted-bots-using-nginx

Arama motoru botları (tarayıcılar), İnternet'teki web sitelerini tarayan özel programlardır. Arama motorlarının sayfaları bulması, dizine eklemesi ve arama sonuçlarında göstermesi için bunlara ihtiyacı vardır. Ancak tüm botlar kullanışlı değildir!

Bazen siteniz istenmeyen botlar tarafından ziyaret edilebilir:

  • İzniniz olmadan veri toplar.
  • Sunucu kaynaklarını tüketir ve yavaşlatır.
  • Güvenlik açıklarını aramak için kullanılır.

Sitenizi bu tür botlardan korumak istiyorsanız, Nginx'i yapılandırmanın zamanı gelmiş demektir! Bu makalede, özel bir yapılandırma dosyası kullanarak bunları nasıl kolay ve hızlı bir şekilde engelleyeceğinizi göstereceğiz.


Neden robots.txt yerine Nginx yapılandırması?

Robots.txt dosyası, arama botlarının davranışlarını yönetmek için kullanılan bir araçtır. Onlara sitenin hangi bölümlerinin taranmaması gerektiğini söyler. Bu dosyayı kullanmak çok kolaydır: site dizininin köküne bir tane eklemeniz yeterlidir, örneğin:

User-agent: BadBot  

Disallow: /  

Ancak bir sorun var: robots.txt'deki talimatlar zorunlu bir kuraldan ziyade bir öneridir. Ödevine bağlı botlar bu dosyanın talimatlarına uyar, ancak çoğu bot bunu basitçe görmezden gelir.

Buna karşılık, Nginx'i yapılandırmak, istenmeyen botlar için erişimi fiziksel olarak engellemenizi sağlayarak %100 etkili bir sonuç garanti eder.


Nginx'in İstenmeyen Botları Engellemesi: 444 Yanıtı Kullanarak

Botlara yalnızca öneriler sunan robots.txt'nin aksine, Nginx erişimlerini fiziksel olarak engeller. Bunu başarmanın bir yolu, 444 kodlu özel bir sunucu yanıtı kullanmaktır.

Nginx'te 444 yanıt kodu, istemciye herhangi bir yanıt göndermeden bağlantıyı sonlandırmanın dahili bir yöntemidir. Bu, istenmeyen istekleri yoksaymak ve sunucu yükünü en aza indirmek için etkili bir yaklaşımdır.


Engelleme Kurulumu

Adım 1: İstenmeyen Botlar Nasıl Tanımlanır?

İstenmeyen botlar, sitenizi ziyaret ederken tüm istemciler tarafından gönderilen bir parametre olan User-Agent'ları ile tanımlanabilir. Örneğin, bazı User-Agent'lar şöyle görünebilir:

    AhrefsBot     SemrushBot     MJ12bot

Şüpheli User-Agent değerlerini Nginx erişim günlüğünde bulabilirsiniz (siteniz PHP-FPM kullanıyorsa):

sudo grep -i bot /var/log/nginx/access.log

Veya Apache erişim günlüğünde (siteniz Apache modülünü veya FastCGI'yi PHP işleyicisi olarak kullanıyorsa):

  • Ubuntu/Debian için:
sudo grep -i bot /var/log/apache2/access.log
  • CentOS/AlmaLinux/RockyLinux için:
sudo grep -i bot /var/log/httpd/access.log

FASTPANEL gibi bir kontrol paneli kullanıyorsanız, her sitenin kendi ayrı günlük dosyası olacaktır. Bunları tek tek veya tek bir komutla toplu olarak analiz edebilirsiniz:

  • Siteniz Apache modülünü veya FastCGI'yi PHP işleyicisi olarak kullanıyorsa:
sudo cat /var/www/*/data/logs/*-backend.access.log |  grep -i bot | tail -500
  • Siteniz PHP-FPM kullanıyorsa:
sudo cat /var/www/*/data/logs/*-frontend.access.log |  grep -i bot | tail -500

Bu komut, User-Agent parametresinin "bot" kelimesini içerdiği tüm sitelerinize yapılan son 500 isteği gösterecektir. Bir satırın örneği (sitenize bir istek) şöyle görünebilir:

IP - [03/Kas/2022:10:25:52 +0300] "GET link HTTP/1.0" 301 811 "-" "Mozilla/5.0 (compatible; DotBot/1.2; +https://opensiteexplorer.org/dotbot; [email protected])"

veya

IP - [24/Eki/2022:17:32:37 +0300] "GET link HTTP/1.0" 404 469 "-" "Mozilla/5.0 (compatible; BLEXBot/1.0; +http://webmeup-crawler.com/)"

Botun User-Agent'ı, isteğin sonundaki "uyumlu;" ve "/sürüm.numarası" segmentleri arasında parantez içinde bulunur. Bu nedenle, yukarıdaki örneklerde User-agent'lar şunlardır: BLEXBot ve DotBot.

Topladığınız bilgileri analiz edin ve yapılandırmanın bir sonraki adımı için en aktif botların User-Agent dizelerini not alın.

Adım 2: Botları Engellemek İçin Bir Dosya Oluşturun

  1. Sunucunuza SSH ile bağlanın.
  2. Değişiklik yapmadan önce, mevcut Nginx yapılandırmanızda hata olmadığından emin olun:
nginx -t

Her şey yolundaysa, şunu göreceksiniz:

nginx: yapılandırma dosyası /etc/nginx/nginx.conf sözdizimi doğru

nginx: yapılandırma dosyası /etc/nginx/nginx.conf testi başarılı

Herhangi bir hata varsa, bunları inceleyin ve hata mesajlarında belirtilen dosyada düzeltin.

  1. Engellenecek botların bir listesini içeren ayrı bir dosya oluşturun:
sudo nano /etc/nginx/conf.d/block_bots.conf

Dosyaya aşağıdaki kodu ekleyin:

    map $http_user_agent $block_bot {

        default 0;

        ~*AhrefsBot 1;

        ~*SemrushBot 1;

        ~*MJ12bot 1;

    }



    server {

        if ($block_bot) {

            return 444;

        }
    }

Burada hangi botların engellenmesi gerektiğini belirleyen bir eşleme oluşturuyoruz.

Bu deseni takip ederek, engellemek istediğiniz botların User-Agent dizelerini listeleyin. Her botu yeni bir satıra listelemeli ve her satırın sonuna ayırıcı olarak noktalı virgül ; koymalısınız.

Listeyi oluşturmayı bitirdikten sonra, dosyayı kaydetmek için klavyenizde "Ctrl + O" tuşlarına basın, ardından nano düzenleyicisinden çıkmak için "Ctrl + X" tuşlarına basın.

Adım 3: Değişiklikleri Uygulayın

Değişikliklerinizi yaptıktan sonra, sözdizimi hataları olmadığından emin olmak için Nginx yapılandırmasını her zaman doğruluk için test edin:

sudo nginx -t

Her şey yolundaysa, şunu göreceksiniz:

nginx: yapılandırma dosyası /etc/nginx/nginx.conf sözdizimi doğru

nginx: yapılandırma dosyası /etc/nginx/nginx.conf testi başarılı

Hatalar varsa, çıktıyı inceleyerek belirtilen dosyada bunları belirleyin ve düzeltin.

Ardından, değişiklikleri uygulamak için Nginx yapılandırmasını yeniden yükleyin:

sudo systemctl reload nginx

Gelecekte, block_bots.conf dosyasına daha fazla bot eklemeniz gerekirse, bu adımı her seferinde tekrarlamalısınız.


Sonuç

Artık Nginx kullanarak sunucunuzdaki istenmeyen arama botlarını nasıl kolayca engelleyeceğinizi biliyorsunuz! Günlüklerinizi takip edin ve gerektiğinde block_bots.conf yapılandırma dosyasına yeni satırlar ekleyin.

Google veya Bing gibi faydalı arama motorlarının sitenizi indekslemesini engellemediğinizden emin olmak için yalnızca kötü amaçlı botları engellediğinizden emin olun.