83 lines
2.6 KiB
Bash
Executable File
83 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# ============================================
|
|
# WEVADS IP Rotation Manager
|
|
# Rotation automatique si réputation baisse
|
|
# ============================================
|
|
|
|
BOT_TOKEN="8544624912:AAEm9ttXK6JeFqAL-gcvB5sreCBhXzzQwrs"
|
|
CHAT_ID="7605775322"
|
|
LOG_FILE="/opt/wevads/logs/ip_rotation.log"
|
|
|
|
# Seuils
|
|
BOUNCE_THRESHOLD=10 # % bounce max
|
|
COMPLAINT_THRESHOLD=1 # % complaints max
|
|
|
|
send_telegram() {
|
|
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
|
|
-d "chat_id=${CHAT_ID}" \
|
|
-d "text=$1" > /dev/null 2>&1
|
|
}
|
|
|
|
log() {
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
|
|
}
|
|
|
|
# Créer table rotation si n'existe pas
|
|
psql -U postgres -d adx_system << 'SQLEOF' 2>/dev/null
|
|
CREATE TABLE IF NOT EXISTS mta.ip_rotation (
|
|
id SERIAL PRIMARY KEY,
|
|
ip_address VARCHAR(45) NOT NULL,
|
|
server_id INTEGER,
|
|
rotation_reason VARCHAR(100),
|
|
old_status VARCHAR(20),
|
|
new_status VARCHAR(20),
|
|
rotated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS mta.ip_reputation (
|
|
id SERIAL PRIMARY KEY,
|
|
ip_address VARCHAR(45) NOT NULL,
|
|
bounce_rate DECIMAL(5,2) DEFAULT 0,
|
|
complaint_rate DECIMAL(5,2) DEFAULT 0,
|
|
sent_count INTEGER DEFAULT 0,
|
|
last_check TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
status VARCHAR(20) DEFAULT 'good',
|
|
UNIQUE(ip_address)
|
|
);
|
|
SQLEOF
|
|
|
|
# Vérifier les réputations
|
|
REPUTATIONS=$(psql -U postgres -d adx_system -t -c "
|
|
SELECT ip_address, bounce_rate, complaint_rate
|
|
FROM mta.ip_reputation
|
|
WHERE status = 'good' AND (bounce_rate > $BOUNCE_THRESHOLD OR complaint_rate > $COMPLAINT_THRESHOLD)
|
|
" 2>/dev/null)
|
|
|
|
while IFS='|' read -r IP BOUNCE COMPLAINT; do
|
|
IP=$(echo "$IP" | xargs)
|
|
BOUNCE=$(echo "$BOUNCE" | xargs)
|
|
COMPLAINT=$(echo "$COMPLAINT" | xargs)
|
|
|
|
[ -z "$IP" ] && continue
|
|
|
|
REASON=""
|
|
[ $(echo "$BOUNCE > $BOUNCE_THRESHOLD" | bc -l) -eq 1 ] && REASON="High bounce: ${BOUNCE}%"
|
|
[ $(echo "$COMPLAINT > $COMPLAINT_THRESHOLD" | bc -l) -eq 1 ] && REASON="$REASON High complaints: ${COMPLAINT}%"
|
|
|
|
log "ROTATION: $IP - $REASON"
|
|
|
|
# Marquer IP comme "rotating"
|
|
psql -U postgres -d adx_system -c "UPDATE mta.ip_reputation SET status = 'rotating' WHERE ip_address = '$IP'" 2>/dev/null
|
|
|
|
# Enregistrer rotation
|
|
psql -U postgres -d adx_system -c "INSERT INTO mta.ip_rotation (ip_address, rotation_reason, old_status, new_status) VALUES ('$IP', '$REASON', 'good', 'rotating')" 2>/dev/null
|
|
|
|
# Alerte
|
|
send_telegram "🔄 ROTATION IP: $IP
|
|
Raison: $REASON
|
|
L'IP sera mise en pause et remplacée."
|
|
|
|
done <<< "$REPUTATIONS"
|
|
|
|
log "IP rotation check completed"
|