linux sunucu için sh dosyası oluşturun.
#!/bin/bash
# Config
API_TOKEN="YOUR_CLOUDFLARE_API_TOKEN"
ZONES=("ZONE_ID_1" "ZONE_ID_2")
THRESHOLD_HIGH=10
THRESHOLD_LOW=5
STATE_FILE="/var/tmp/loadcheck_state"
# Load average 1 dakikalık
LOAD=$(awk '{print $1}' /proc/loadavg)
echo "$(date) - Current load: $LOAD"
# Önceki durumu oku
PREV_STATE="normal"
if [ -f "$STATE_FILE" ]; then
PREV_STATE=$(cat "$STATE_FILE")
fi
# Yeni durum belirle
NEW_STATE="$PREV_STATE"
if (( $(echo "$LOAD > $THRESHOLD_HIGH" | bc -l) )); then
NEW_STATE="high"
elif (( $(echo "$LOAD < $THRESHOLD_LOW" | bc -l) )); then
NEW_STATE="normal"
fi
# Durum değiştiyse işlem yap
if [ "$NEW_STATE" != "$PREV_STATE" ]; then
for ZONE in "${ZONES[@]}"; do
if [ "$NEW_STATE" == "high" ]; then
VALUE="under_attack"
ACTION="enabled"
else
VALUE="essentially_off"
ACTION="disabled"
fi
RESPONSE=$(curl -s -X PATCH "https://api.cloudflare.com/client/v4/zones/$ZONE/settings/security_level" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
--data "{\"value\":\"$VALUE\"}")
SUCCESS=$(echo "$RESPONSE" | grep -o '"success":true')
if [ "$SUCCESS" == '"success":true' ]; then
echo "$(date) - Zone $ZONE: Under Attack Mode $ACTION."
else
echo "$(date) - Zone $ZONE: Failed to change mode. Response: $RESPONSE"
fi
done
echo "$NEW_STATE" > "$STATE_FILE"
else
echo "$(date) - Load state unchanged ($NEW_STATE). No action."
fiScript’i örneğin /usr/local/bin/loadcheck.sh olarak kaydedin ve çalıştırılabilir yapın:
chmod +x /usr/local/bin/loadcheck.sh
Her dakika çalışması için cron’a ekleyin:
* * * * * /usr/local/bin/loadcheck.sh >> /var/log/loadcheck.log 2>&1
Bu işlemleri uygulayın işinizi görecektir.
Aşağıdaki kısımda her domaine ait "ZONE_ID_1 " numaralarını 1 seferlik yazmam mı lazım? Yani böyle böyle 500 domainin de zone id kodu girilecek?
# Config
API_TOKEN="YOUR_CLOUDFLARE_API_TOKEN"
ZONES=("ZONE_ID_1" "ZONE_ID_2")
THRESHOLD_HIGH=10
THRESHOLD_LOW=5
STATE_FILE="/var/tmp/loadcheck_state"