Şu sırala ve bot davranışı sergileyen iplerin banlanması üstüne uğraşıyorum.

Yazılımını yaptığım bir haber sitesi var. İlk başlarda %15 civarı olan bot trafiği şu an yüzde 55 düzeyine yükselmiş durumda. Bunu engellemek için farklı şeyler denedim.

İlk önce Apache Bad Blocker kurduk ve verimsizlik yaşadık. Çünkü eklentinin doğasında olan RequireAny değerini gördüğü anda Apache İp adreslerini DNS ile çözümleyip doğrulamaya başlıyordu. Özellikle Uydu Net üstünden gelen isteklerde çözümleme işlemi 15 saniye kadar uzun sürmesi sebebiyle aşırı şikayet oluşmuştu. Eklentinin bu kısmını kullanmaktan vazgeçtik. Eklentinin Mod Rewrite versiyonunu özelleştirip, referans kısmı olmadan kullanmaya başladık.

Buna rağmen şöyle bir durum oluştu, Cpanel üstünden İp engellediğimiz anda Apache yeniden kasılmaya ve gelen her isteği DNS sorgusuna sokmaya başlıyordu. Cpanel üstünden Ip engellemeye son verdik.

WHM üstünden Mod Security kuruluydu ve aktif edilmişti. Lakin sunucuya gelen saldırılar konusunda otomatik yasaklama yapmasına rağmen siteye gelen bot trafiğinde bir düşüş sağlamadı.

Cloud Flare kullanmayı düşündük ama, vardığımız karar SEO değerlerini ve sitenin açılış süresini daha da yavaşlatacağı yönündeydi. Bir de arama motorlarının Cloud Flare hakkındaki davranışı içimize sinmemişti. Alternatif aradık ve Distil Network‘u bulduk. Firma demo talebimizi geri çevirmedi, lakin fiyat konusunda henüz fiyat alamadık. Networklerinde yeterince büyük ve paralı firmalar yer alıyor ki Türkiye referansları konusunda da firmanın sitesinde yazmadığı için söyledikleri gururumuz firmanın adını burada anmayacağım. Yine de izlemek isteyen olursa firmanın yönetim paneli demosu ortada.

Neyse, tanımlı botları Bad Bot Blocker ile yasakladık ama listede tanımlanmayan bir çok bot trafiğini de kendi loglarımızı analiz ederek görüyorduk. O sebeple onlar için ek bir liste daha yapıp, onları da yasakladık. Kendi yasakladığımız bot ve tarayıcı imzası sayısı 70, Bad Bot tarafından yasaklanan bot sayısı 513 adet olarak kayıtlara geçti.

Bunlara rağmen çok küçük bir trafiği engelleyebildik. Bunun üzerine WordPress siteler için 2 eklenti kurduk:

İlk kurduğumuz eklenti: Stop Bad Bots eklentisi oldu. Biz kurduktan 2 gün sonra eklentinin Premium sürümü çıktı! Çok yakın bir gelecekte Free versiyonun fişini de çekerlerse şaşırmam.

İkinci kurduğumuz eklenti: WordFence oldu. Bu eklentinin de ücretsiz ve Premium versiyonu var. Ülke yasaklama gibi kritik kimi özellikler tamamen paralı halde. Yine de wp-login.php sayfasına Kaba Kuvvet (Brute Force) saldırısı yapanlara güzel karşılık veriyor.

Bu iki eklenti sayesinde gördük ki, PHP dosyayı çalıştırmayan bir isteğin sunucuya ulaşmasında iki eklenti de işe yaramıyor! Yine de API paylaşımını kabul ederse Stop Bad Bots eklentisinin saf PHP ve diğer hazır scriptler için uyarlanmış bir versiyonunu yapmak hala daha mümkün.

Apache erişim logları üstüne geçen bir aylık uğraştan sonra arama motorlarına ve çeşitli botlara ait ip adreslerini tek bir havuzda toplayıp bunu basit bir uygulama ile sorgulamayı çözdüm ve özgür yazılım olarak yayınladım.

Yayınladığımı ve elimdeki ip havuzunda milyonlarca ip adresine denk gelen IP ve alt ağ adresleri, yani CIDR değerleri bulunuyor.

Siteyi çok ziyaret eden ve henüz havuzda yer almayan adresleri whois ile sorgulayıp, bir sunucuya denk geldikçe yasaklıyorum. Bu yasaklama kurallarında da şu an 300+ yasaklama kuralına ulaştım ve şurada paylaştım.

Verimlilik testi yaptığımda hala daha inanılmaz sayıda şüpheli isteğin (mesela tek ip adresinden gelen 27 bin tekil isteğin) sunucuya eriştiğini ve bu ip adresinin bir kişi mi veya bot mu olduğunu çözemediğimi itiraf etmek durumundayım.

Sonuç olarak: Gün geçtikçe botlar çok daha fazla akıllanıyor. Curl ile istek gönderip içeriği kopyalamak çok yakında geride kalacak. Çünkü botlar sitelerdeki javascript kodlarını çalıştırıp, çerezleri gelecek oturumlar için saklamaya, düzenli yerine dağıtık zaman dilimleri ile gelmeye başladılar bile diyor şu haber.

Maalesef bizim bu konuda yerli bir alternatifimiz bulunmuyor.

Herkese iyi çalışmalar.

imagemagick nasıl kurdum: https://grepitout.com/install-imagemagick-cpanel-easyapache4/

yum install ImageMagick-devel ImageMagick-c++-devel ImageMagick-perl

pecl eklentilerine gelip imagick diye aratınız ve çıkan sonucu install deyiniz

/opt/cpanel/ea-php70/root/etc/php.ini dosyası sonuna şu kaydı ekleyiniz extension=imagick.so

/opt/cpanel/ea-php70/root/usr/bin/php -m | grep imagick

memcached nasıl kurdum: https://www.liquidweb.com/kb/how-to-install-memcached-on-centos-7/

Sonra servisi çalıştırdım service memcached restart

Sonra şu makaleye bakarak http://serverfault.com/questions/201981/launch-memcached-on-server-boot boot işlemi sırasına memcache i de ekledim.

chkconfig –add memcached
chkconfig memcached on

En son, sistemde kurulu gelmeyen Memcache PECL eklentisini kurdum: https://duvien.com/blog/installing-memcache-easyapache-4-php-7

MySQL veritabanı tablomuzu content_id temelli olarak 10 partition a böler.

SQL sorgularında hızlanmaya sebep olur.

Kate, KDE masaüstü ortamıyla gelen ve gelişmiş özellikler barındıran bir yazılım geliştirme aracı.

Yaklaşık 3 yıldır tüm kodlama işlemlerimi KATE ile yapıyorum. Lakin kimi isteklerimiz için her daim çözüm yolu bulmak mümkün olmuyor.

Mesela twig template engine renklendirmesi için kendi yolumu bulmam gerekmişti (https://github.com/yakusha/kate-twig)

Yeni gelen sürüm ile ise şikayetçi olduğum folding konusuna ve minimap konusuna biraz daha eğilmişler

Ubuntu Gnome LTS sürüm içinde Kate zaten harici depoyla geldiği için Kubuntu Backports (https://launchpad.net/~kubuntu-ppa/+archive/ubuntu/backports) deposunu eklemekte de bir sakınca görmedim.

Sonuç: Yeni Kate

Firefox 44 sürümüyle galiba Web Notification diye bir hizmet desteği daha eklendi.

Haber sitesi veya belki borsa sitesi gibi sık içerik girilen ve takip edilmesi gereken siteler için elzem olabilecek bu özellik girdiğimiz her siteye eklenmeye başlayınca açılışta her sitenin defalarca açtığı saçma bir splash screen haline dönüşüyor.

Biz de madem kullanmıyoruz, kapatalım gitsin.

about:config yazıp yesledikten sonra

dom.webnotifications.enabled değerini arayıp false yapıyoruz ve bitti elveda web notification.

Muhtemelen tarayıcıyı yeniden başlatınca bu ayar aktif olacaktır.

Kaynakça: http://techdows.com/2015/12/disable-firefox-push-notifications.html

Not: Genel olarak web notification’ı kapatmak twitter’ın tweet atmak, retweet ve like gibi temel özelliklerini bozuyor.

Bir buçuk yılda yaptığımız işlerden geriye kalan repostory yığını: 22 adet!

Arada yapıp da repolara almadığımız veya yayına geçmediği için silip attıklarımızla 1,5 yılda neredeyse 30 farklı projeyle uğraşmışım…

Maşallah fena uğraşmışım 🙂

Bir sitenin namaz vakitleri sayfaasında (http://www.haberiyakala.com/istanbul-namaz-vakitleri) rastgele ayet göstermemiz gereken bir alan yer alıyor.

Lakin anlam bütünlüğünü bozmadan, sağlam bir kaynaktan ve rastgele nasıl ayet gösterebiliriz.

Bunun için önce elimizde bir ayet havuzu / ayet arşivi olması gerekiyordu. Birkaç ayet seçkisi bulduk ama onlar da hangi mealden alındığı belli olmadığı için kullanmakta çekindik.

Bu durumda iş başa düştü ve Diyanet İşleri Başkanlığı’nın şu sayfasından (http://mushaf.diyanet.gov.tr) girip konu fihristinden ahlak kısmından ayetleri seçtik.

Bir ayet birden çok alt konuda listelendiği için tekrar edenleri tek sefer kayıt ettik ve elimizde 100 ayet’in Meali oluştu.

işin php tarafına gelirsek.

Okumaya devam et

dediğim andan itibaren başıma gelenler.

a) Parola tanımlı değil ve tanımlanması gerekiyor…

Sonra asıl çile başlıyor; data yolunu değiştirmek. Veritabanlarını ayrı bir bölüm olarak bağladığım /c/www-db altında tutmayı tercih ettiğim için, benim için zorunluluk oluyor.

Dönersek, data yolunu nasıl değiştireceğiz!

Önce mysql servisini durduruyoruz.

Sonra datalarımızı taşıyacağımız hedef klasörü oluşturuyoruz. (Hedef klasör zaten varsa es geçebilirsiniz.) ve veritabanı dosyalarımızı hedef dizine taşıyoruz ve en son hedef dizindeki dosyaları listeliyoruz.

Şimdi datayolumuzu değiştirmek için conf dosyamızı açabiliriz.

datadir değerini /c/www-db olarak değiştiriyoruz. bind-address = 127.0.0.1 önüne # işareti koyup yorum haline getiriyoruz.

Sonra servisi tekrar başlatıyoruz.

gnome-system-monitor ile açıp mysql’in yeni verdiğimiz data yolunu okuyup okumadığını kontrol etmekte fayda var.

Kaynaklar:
* http://www.liberiangeek.net/2014/10/reset-root-password-mariadb-centos-7/
* http://ubuntuforums.org/showthread.php?t=2275033
* http://stackoverflow.com/questions/26474222/mariadb-10-centos-7-moving-datadir-woes