• 07-05-2018, 20:26:48
    #1
    Merhabalar. Sürekli olarak sitede olmayan linklere erişim yapılmakta ve sonuçta 404 geri dönü yapılmakta. Cloudflare'da yurtdışındaki neredeyse bütün ülkeler Captcha girerek siteye giriyor (Cloudflare Challenge). Ayrıca NGINX olan serverda CSF ve Modsecurity de yüklü. Modsecurity'ye aşağıdaki "4 kere 404 almış IP yi 14400 saniyeliğine yani 4 saatliğine" banla kuralı ekledim :

    SecAction "phase:2,initcol:ip=%{REMOTE_ADDR},id:'4000',pass,nolog"
    SecRule RESPONSE_STATUS "@streq 404" "phase:5,pass,setvar:ip.block_script=+1,expirevar:ip.block_script=144000,id:'4001'"
    SecRule ip:block_script "@ge 4" "phase:2,deny,status:406,id:'4002'"
    Ayrıca CSF'de de aynı kuralı uyguladım :

    LF_APACHE_404 = "4"
    LF_APACHE_404_PERM = "14400"
    Apache yazmasına rağmen NGINX'te de geçerliymiş tabi.

    Tarayıcıdan test ettiğimde iki yöntem de işe yaramıyor, hala yanlış linkler girerek 404 hatasını üstüste aldığım halde IP numarası banlanmıyor.

    Bu konudaki bilgi ve tecrübelerinizi bekliyorum. Teşekkürler.
  • 07-05-2018, 20:35:48
    #2
    sunucunuz cloudflare iplerini aldığı için oluyor olabilirmi? bu ipler csf de izin verilmiş durumdaysa sorun bundan kaynaklanıyor olabilir.
  • 07-05-2018, 20:46:15
    #3
    Bilisimworld adlı üyeden alıntı: mesajı görüntüle
    sunucunuz cloudflare iplerini aldığı için oluyor olabilirmi? bu ipler csf de izin verilmiş durumdaysa sorun bundan kaynaklanıyor olabilir.
    Sorgular Cloudflare IP'leri dışında yapılıyor. Cloudflare IP'lerini engellemek, kullanıcıların siteye erişiminin önünü kesmez mi?
  • 08-05-2018, 00:21:31
    #4
    Klaus adlı üyeden alıntı: mesajı görüntüle
    Sorgular Cloudflare IP'leri dışında yapılıyor. Cloudflare IP'lerini engellemek, kullanıcıların siteye erişiminin önünü kesmez mi?
    Iptables veya CSF, Cloudflare altındayken işe yaramaz.

    ip banı için Cloudflare apisini kullanmak gerek, biraz baktım, CSF ile beraber çalışan bash scriptler var.
  • 08-05-2018, 14:41:13
    #5
    hoo adlı üyeden alıntı: mesajı görüntüle
    Iptables veya CSF, Cloudflare altındayken işe yaramaz.

    ip banı için Cloudflare apisini kullanmak gerek, biraz baktım, CSF ile beraber çalışan bash scriptler var.
    Bunu nasıl yapabileceğimizle ilgili bilginiz var mı acaba?

    Benim bunun için yaptıklarım bunlar :

    csf.conf'daki

    CF_ENABLE = "1"
    CF_BLOCK = "block"
    CF_TEMP = "14400"
    ayarlarını bu şekilde yaptım. Sonra

    csf.cloudflare'daki

    # CloudFlare client credientials for any domain triggered:
    DOMAIN:any:USER:root:CFACCOUNT:cloudflarehesapmaili@mail.com:CFAPIKEY:cloadflareglobalapi
    burdaki ayarlara da cloudflare ayarlarını girdim.

    Ayarları güncelleyip csf'ye restart çektim.

    Sonuç olarak değişen birşey olmadı. Blockladığım IP, site domainine direk olarak giriş yapabiliyor ama server IP'sine giriş yapamıyor. Ayrıca cloudflare DNS & Proxy'yi devre dışı bıraktığımda siteye yine erişim yapamamakta.

    Yani sorunum yukarıdaki arkadaşın dediği gibi Csf, servere gelen IP sorgularını Cloudflare'dan alıyor gibi göründüğü için gerçek IP üzerinden işlem yapamıyor.

    Bu arada nginx.conf dosyasında bunlar da tanımlı :

    # Cloudflare module cho nginx
    set_real_ip_from 204.93.240.0/24;
    set_real_ip_from 204.93.177.0/24;
    set_real_ip_from 199.27.128.0/21;
    set_real_ip_from 173.245.48.0/20;
    set_real_ip_from 103.21.244.0/22;
    set_real_ip_from 103.22.200.0/22;
    set_real_ip_from 103.31.4.0/22;
    set_real_ip_from 141.101.64.0/18;
    set_real_ip_from 108.162.192.0/18;
    set_real_ip_from 190.93.240.0/20;
    set_real_ip_from 188.114.96.0/20;
    set_real_ip_from 197.234.240.0/22;
    set_real_ip_from 198.41.128.0/17;
    set_real_ip_from 162.158.0.0/15;
    set_real_ip_from 104.16.0.0/12;
    set_real_ip_from 2400:cb00::/32;
    set_real_ip_from 2606:4700::/32;
    set_real_ip_from 2803:f800::/32;
    set_real_ip_from 2405:b500::/32;
    set_real_ip_from 2405:8100::/32;
    real_ip_header CF-Connecting-IP;
    CSF'nin çalışması için Cloudflare'i aradan çıkarmadan, farklı ne türlü işlemler yapabilirim?
  • 08-05-2018, 21:54:53
    #6
    Klaus adlı üyeden alıntı: mesajı görüntüle
    Bunu nasıl yapabileceğimizle ilgili bilginiz var mı acaba?

    Benim bunun için yaptıklarım bunlar :

    csf.conf'daki

    CF_ENABLE = "1"
    CF_BLOCK = "block"
    CF_TEMP = "14400"
    ayarlarını bu şekilde yaptım. Sonra

    csf.cloudflare'daki

    # CloudFlare client credientials for any domain triggered:
    DOMAIN:any:USER:root:CFACCOUNT:cloudflarehesapmaili@mail.com:CFAPIKEY:cloadflareglobalapi
    burdaki ayarlara da cloudflare ayarlarını girdim.

    Ayarları güncelleyip csf'ye restart çektim.

    Sonuç olarak değişen birşey olmadı. Blockladığım IP, site domainine direk olarak giriş yapabiliyor ama server IP'sine giriş yapamıyor. Ayrıca cloudflare DNS & Proxy'yi devre dışı bıraktığımda siteye yine erişim yapamamakta.

    Yani sorunum yukarıdaki arkadaşın dediği gibi Csf, servere gelen IP sorgularını Cloudflare'dan alıyor gibi göründüğü için gerçek IP üzerinden işlem yapamıyor.

    Bu arada nginx.conf dosyasında bunlar da tanımlı :

    # Cloudflare module cho nginx
    set_real_ip_from 204.93.240.0/24;
    set_real_ip_from 204.93.177.0/24;
    set_real_ip_from 199.27.128.0/21;
    set_real_ip_from 173.245.48.0/20;
    set_real_ip_from 103.21.244.0/22;
    set_real_ip_from 103.22.200.0/22;
    set_real_ip_from 103.31.4.0/22;
    set_real_ip_from 141.101.64.0/18;
    set_real_ip_from 108.162.192.0/18;
    set_real_ip_from 190.93.240.0/20;
    set_real_ip_from 188.114.96.0/20;
    set_real_ip_from 197.234.240.0/22;
    set_real_ip_from 198.41.128.0/17;
    set_real_ip_from 162.158.0.0/15;
    set_real_ip_from 104.16.0.0/12;
    set_real_ip_from 2400:cb00::/32;
    set_real_ip_from 2606:4700::/32;
    set_real_ip_from 2803:f800::/32;
    set_real_ip_from 2405:b500::/32;
    set_real_ip_from 2405:8100::/32;
    real_ip_header CF-Connecting-IP;
    CSF'nin çalışması için Cloudflare'i aradan çıkarmadan, farklı ne türlü işlemler yapabilirim?
    Bash scriptten fazla anlamıyorum,Google'dan bulduğum bir kaç şeyi düzenledim.

    Bu script Nginx logunu kontrol ediyor, son 5 bin satırında 10 taneden fazla 404 verdirmiş ipleri Cloudflare api ile blokluyor, denedim bende çalıştı.
    Cronla dakikada 1 falan çalıştırırsan işini görür. Unblock için ayrı script gerekecek.

    APIMAIL=
    APIAUTH=

    Cloudflare'den alınacak.


    #!/bin/bash
    
    APIMAIL=
    APIAUTH=
    LIMIT=10
    SONSATIR=5000
    LOG=/var/log/nginx/access.log
    IPBANLOG=/var/log/cloudflareipban.log
    
    for IP in `tail -n $SONSATIR $LOG| grep "\" 404 " | awk "{print \\$1}" | sort | uniq -c | sort -rn | awk "{if (\\$1 > $LIMIT) print \\$2}"`
    
    do
    
          if ! cat $IPBANLOG -n | grep -q $IP
        then
         
    	 curl -sSX POST "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules" \
         -H "X-Auth-Email: $APIMAIL" \
         -H "X-Auth-Key: $APIAUTH" \
         -H "Content-Type: application/json" \
         --data "{\"mode\":\"block\",\"configuration\":{\"target\":\"ip\",\"value\":\"$IP\"},\"notes\":\"SCRIPTBAN\"}"
    	 
    	 echo "$IP">>$IPBANLOG
    	
        fi
    done
  • 08-05-2018, 23:25:27
    #7
    hoo adlı üyeden alıntı: mesajı görüntüle
    Bash scriptten fazla anlamıyorum,Google'dan bulduğum bir kaç şeyi düzenledim.

    Bu script Nginx logunu kontrol ediyor, son 5 bin satırında 10 taneden fazla 404 verdirmiş ipleri Cloudflare api ile blokluyor, denedim bende çalıştı.
    Cronla dakikada 1 falan çalıştırırsan işini görür. Unblock için ayrı script gerekecek.

    APIMAIL=
    APIAUTH=

    Cloudflare'den alınacak.


    #!/bin/bash
    
    APIMAIL=
    APIAUTH=
    LIMIT=10
    SONSATIR=5000
    LOG=/var/log/nginx/access.log
    IPBANLOG=/var/log/cloudflareipban.log
    
    for IP in `tail -n $SONSATIR $LOG| grep "" 404 " | awk "{print \$1}" | sort | uniq -c | sort -rn | awk "{if (\$1 > $LIMIT) print \$2}"`
    
    do
    
          if ! cat $IPBANLOG -n | grep -q $IP
        then
        
         curl -sSX POST "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules" 
         -H "X-Auth-Email: $APIMAIL" 
         -H "X-Auth-Key: $APIAUTH" 
         -H "Content-Type: application/json" 
         --data "{"mode":"block","configuration":{"target":"ip","value":"$IP"},"notes":"SCRIPTBAN"}"
        
         echo "$IP">>$IPBANLOG
        
        fi
    done
    İlginiz için teşekkürler. Bu script gayet güzel çalışıyor. Dediğiniz gibi Unblock için script lazım bir de. Bununla ilgili bilgi bulamadım. Siz bulursanız ve bilgilendirirseniz çok sevinirim.
  • 08-05-2018, 23:37:50
    #8
    Klaus adlı üyeden alıntı: mesajı görüntüle
    İlginiz için teşekkürler. Bu script gayet güzel çalışıyor. Dediğiniz gibi Unblock için script lazım bir de. Bununla ilgili bilgi bulamadım. Siz bulursanız ve bilgilendirirseniz çok sevinirim.
    Bu scripte benim de ihtiyacım vardı, zaman bulup yapamamıştım, unblock için olanı da yaparsam tekrardan yazarım.

    Bu arada Nginx php bağlantı limitlerini aşanlar arasından ip banı yapsanız daha yüksek koruma sağlar, ben o şekilde kullanacağım.
    Sadece 404 biraz zayıf kalır.



    Klaus adlı üyeden alıntı: mesajı görüntüle
    İlginiz için teşekkürler. Bu script gayet güzel çalışıyor. Dediğiniz gibi Unblock için script lazım bir de. Bununla ilgili bilgi bulamadım. Siz bulursanız ve bilgilendirirseniz çok sevinirim.

    Cronla çalıştırdığınızda tüm blocklu ipler silinecek, debian 9'da çalıştı, jq paketi kurulu olmalı.


    #!/bin/bash
    
    
    APIMAIL=
    APIAUTH=
    
    while read UNBAN || [ -n "$UNBAN" ]; do
    
    
    JSON=$(curl -sSX GET "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules?mode=block&configuration_target=ip&configuration_value=$UNBAN" \
    -H "X-Auth-Email: $APIMAIL" \
    -H "X-Auth-Key: $APIAUTH" \
    -H "Content-Type: application/json")
    
    ID=$(echo $JSON | jq -r '.result[].id')
    
    
    curl -sSX DELETE "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules/$ID" \
    -H "X-Auth-Email: $APIMAIL" \
    -H "X-Auth-Key: $APIAUTH" \
    -H "Content-Type: application/json"
    
    
    done < /var/log/cloudflareipban.log
    
    rm -f /var/log/cloudflareipban.log
  • 10-05-2018, 09:57:03
    #9
    hoo adlı üyeden alıntı: mesajı görüntüle
    Bu scripte benim de ihtiyacım vardı, zaman bulup yapamamıştım, unblock için olanı da yaparsam tekrardan yazarım.

    Bu arada Nginx php bağlantı limitlerini aşanlar arasından ip banı yapsanız daha yüksek koruma sağlar, ben o şekilde kullanacağım.
    Sadece 404 biraz zayıf kalır.






    Cronla çalıştırdığınızda tüm blocklu ipler silinecek, debian 9'da çalıştı, jq paketi kurulu olmalı.


    #!/bin/bash
    
    
    APIMAIL=
    APIAUTH=
    
    while read UNBAN || [ -n "$UNBAN" ]; do
    
    
    JSON=$(curl -sSX GET "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules?mode=block&configuration_target=ip&configuration_value=$UNBAN" 
    -H "X-Auth-Email: $APIMAIL" 
    -H "X-Auth-Key: $APIAUTH" 
    -H "Content-Type: application/json")
    
    ID=$(echo $JSON | jq -r '.result[].id')
    
    
    curl -sSX DELETE "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules/$ID" 
    -H "X-Auth-Email: $APIMAIL" 
    -H "X-Auth-Key: $APIAUTH" 
    -H "Content-Type: application/json"
    
    
    done < /var/log/cloudflareipban.log
    
    rm -f /var/log/cloudflareipban.log

    Cevabınız için teşekkürler. Bunları bir yere not aldım. Şimdilik Unban yapmak istemiyorum. Yapacağım zaman mutlaka kullanacağım.