Cloudflare API’ına Konsoldan Erişmek

Cloudflare neredeyse bütün fonksiyonlarını kontrol edebileceğiniz bir API sunuyor. Bunu PHP, Perl, Java, Python vs. çeşitli dillerde yazdığınız programlarda kullanabilirsiniz. Ayrıntılı döküman şurada: https://www.cloudflare.com/docs/client-api.html

Daha önce Apache loglarını inceleyip XMLRPC saldırısı yapan IP’leri belirleyen bir betik yazmıştım. Tespit ettiği IP’leri bana eposta ile bana gönderiyordu. Şimdi bunu güncelleyip, otomatik olarak Cloudflare Firewall’undan engelleyen bir hale çevirdim. Son hali şöyle oldu:

 

#!/bin/bash
if [ "$#" -ne 1 ];
then
  LIMIT=100
else
  LIMIT=$1
fi
 
MY_EMAIL=""
CLOUDFLARE_API_KEY=""
DATE=`date`
LIST="\nMore than $LIMIT:"
WARNING="\nMore than $LIMIT:\n"
IPTABLES="\niptables command:"
TOTAL=0
 
echo -e "### xmlrpc Attack Detection ###\n$DATE\n"
 
for IP in $(grep "POST /xmlrpc.php" /var/log/apache2/access*log | awk '{print $1}' | awk -F ':' '{print $2}' | sort | uniq)
do
  COUNT=`grep $IP /var/log/apache2/*.log | grep xmlrpc.php | wc -l`
 
  if [[ "$COUNT" -gt $LIMIT ]];
  then
    CLOUDFLARE=`curl -s https://www.cloudflare.com/api_json.html \
      -d 'a=ban' \
      -d 'key='$IP \
      -d 'tkn='$CLOUDFLARE_API_KEY \
      -d 'email='$MY_EMAIL`
 
    echo "IP: $IP count: $COUNT"
    LIST="$LIST\n$IP"
    WARNING="$WARNING\n$IP     => count: $COUNT\n$CLOUDFLARE\n"
    IPTABLES="$IPTABLES\niptables -I INPUT 1 -s $IP -j DROP"
    ((TOTAL=$TOTAL+1))
  fi
done
echo "Total: $TOTAL IP addresses"
 
echo -e $LIST
echo -e $IPTABLES
 
if [[ "$TOTAL" -gt 0 ]];
  then
  echo -e $WARNING |mail -s "xmlrpc attack warning" $MY_EMAIL
fi