סקריפט לתזמון עדכון שבועי של הIP של Cloudflare
-
עריכה: כאן יש משהו דומה.
#!/bin/bash # ============================================== # ONLYCF - Cloudflare IP Firewall Manager # ============================================== # תיאור: סקריפט לעדכון אוטומטי של חומת האש # כך שרק תעבורה משרתי Cloudflare תתקבל. # תומך ב- UFW ו- iptables. # ============================================== # צבעים לפלט RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # משתני ברירת מחדל FIREWALL="ufw" # או iptables PORTS="80,443" IPV4_URL="https://www.cloudflare.com/ips-v4" IPV6_URL="https://www.cloudflare.com/ips-v6" # ============================================== # פונקציות עזר # ============================================== print_info() { echo -e "${BLUE}[INFO]${NC} $1" } print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } # בדיקת הרשאות root check_root() { if [[ $EUID -ne 0 ]]; then print_error "יש להריץ את הסקריפט עם הרשאות root (sudo)" exit 1 fi } # בדיקת תלות check_dependencies() { local deps=("curl" "grep" "awk") for dep in "${deps[@]}"; do if ! command -v $dep &> /dev/null; then print_error "הפקודה $dep לא נמצאה. אנא התקן אותה." exit 1 fi done if [[ "$FIREWALL" == "ufw" ]] && ! command -v ufw &> /dev/null; then print_error "UFW לא נמצא. התקן עם: apt install ufw" exit 1 fi if [[ "$FIREWALL" == "iptables" ]] && ! command -v iptables &> /dev/null; then print_error "iptables לא נמצא." exit 1 fi } # ============================================== # פונקציות עיקריות # ============================================== # הורדת רשימת ה-IP fetch_cloudflare_ips() { local temp_dir=$(mktemp -d) local ipv4_file="$temp_dir/ips-v4" local ipv6_file="$temp_dir/ips-v6" print_info "מוריד רשימות IP מ-Cloudflare..." if ! curl -s "$IPV4_URL" -o "$ipv4_file"; then print_error "נכשל בהורדת רשימת IPv4" rm -rf "$temp_dir" exit 1 fi if ! curl -s "$IPV6_URL" -o "$ipv6_file"; then print_error "נכשל בהורדת רשימת IPv6" rm -rf "$temp_dir" exit 1 fi echo "$ipv4_file" echo "$ipv6_file" echo "$temp_dir" } # הסרת חוקים ישנים (UFW) remove_old_rules_ufw() { print_info "מסיר חוקי Cloudflare ישנים..." local old_rules=$(ufw status numbered 2>/dev/null | grep -E 'Cloudflare' | awk -F'[][]' '{print $2}' | tac) for rule_num in $old_rules; do echo "y" | ufw delete "$rule_num" > /dev/null 2>&1 print_info "חוק מספר $rule_num הוסר" done } # הסרת חוקים ישנים (iptables) remove_old_rules_iptables() { print_info "מסיר חוקי Cloudflare ישנים..." # IPv4 local chains=$(iptables -L INPUT -n --line-numbers 2>/dev/null | grep -E 'Cloudflare' | awk '{print $1}' | tac) for rule_num in $chains; do iptables -D INPUT "$rule_num" 2>/dev/null print_info "חוק IPv4 מספר $rule_num הוסר" done # IPv6 chains=$(ip6tables -L INPUT -n --line-numbers 2>/dev/null | grep -E 'Cloudflare' | awk '{print $1}' | tac) for rule_num in $chains; do ip6tables -D INPUT "$rule_num" 2>/dev/null print_info "חוק IPv6 מספר $rule_num הוסר" done } # הוספת חוקים חדשים (UFW) add_rules_ufw() { local ipv4_file=$1 local ipv6_file=$2 local timestamp=$(date '+%Y-%m-%d %H:%M:%S') print_info "מוסיף חוקי IPv4..." while read -r ip; do [[ -z "$ip" ]] && continue ufw allow proto tcp from "$ip" to any port "$PORTS" comment "Cloudflare IPv4 - $timestamp" > /dev/null 2>&1 done < "$ipv4_file" print_success "חוקי IPv4 נוספו" print_info "מוסיף חוקי IPv6..." while read -r ip; do [[ -z "$ip" ]] && continue ufw allow proto tcp from "$ip" to any port "$PORTS" comment "Cloudflare IPv6 - $timestamp" > /dev/null 2>&1 done < "$ipv6_file" print_success "חוקי IPv6 נוספו" } # הוספת חוקים חדשים (iptables) add_rules_iptables() { local ipv4_file=$1 local ipv6_file=$2 local timestamp=$(date '+%Y-%m-%d %H:%M:%S') local ports_array=(${PORTS//,/ }) print_info "מוסיף חוקי IPv4..." while read -r ip; do [[ -z "$ip" ]] && continue for port in "${ports_array[@]}"; do iptables -A INPUT -p tcp -s "$ip" --dport "$port" -j ACCEPT -m comment --comment "Cloudflare IPv4 - $timestamp" 2>/dev/null done done < "$ipv4_file" print_success "חוקי IPv4 נוספו" print_info "מוסיף חוקי IPv6..." while read -r ip; do [[ -z "$ip" ]] && continue for port in "${ports_array[@]}"; do ip6tables -A INPUT -p tcp -s "$ip" --dport "$port" -j ACCEPT -m comment --comment "Cloudflare IPv6 - $timestamp" 2>/dev/null done done < "$ipv6_file" print_success "חוקי IPv6 נוספו" } # ============================================== # פונקציה ראשית # ============================================== main() { echo "==============================================" echo " ONLYCF - Cloudflare IP Firewall Manager" echo "==============================================" echo "" check_root check_dependencies # הורדת IP local ipv4_file ipv6_file temp_dir ipv4_file=$(fetch_cloudflare_ips | sed -n '1p') ipv6_file=$(fetch_cloudflare_ips | sed -n '2p') temp_dir=$(fetch_cloudflare_ips | sed -n '3p') print_info "רשימת IPv4: $(wc -l < "$ipv4_file") כתובות" print_info "רשימת IPv6: $(wc -l < "$ipv6_file") כתובות" # הסרת חוקים ישנים if [[ "$FIREWALL" == "ufw" ]]; then remove_old_rules_ufw else remove_old_rules_iptables fi # הוספת חוקים חדשים if [[ "$FIREWALL" == "ufw" ]]; then add_rules_ufw "$ipv4_file" "$ipv6_file" ufw reload > /dev/null 2>&1 print_success "UFW הוטען מחדש" else add_rules_iptables "$ipv4_file" "$ipv6_file" print_success "iptables עודכן" fi # ניקוי rm -rf "$temp_dir" echo "" print_success "✅ Cloudflare IPs עודכנו בהצלחה!" # הצגת מצב if [[ "$FIREWALL" == "ufw" ]]; then print_info "מצב UFW:" ufw status | grep -E "Cloudflare|Status" else print_info "מצב iptables:" iptables -L INPUT -n | grep -E "Cloudflare|Chain" | head -5 fi echo "" print_info "להרצה אוטומטית, הוסף ל-crontab:" echo " 0 3 * * * root $(realpath $0) >> /var/log/cloudflare-ip-update.log 2>&1" } # ============================================== # בדיקת פרמטרים # ============================================== while [[ $# -gt 0 ]]; do case $1 in -p|--ports) PORTS="$2" shift 2 ;; -f|--firewall) FIREWALL="$2" shift 2 ;; -h|--help) echo "שימוש: $0 [אפשרויות]" echo "" echo "אפשרויות:" echo " -p, --ports PORT1,PORT2 פורטים להגנה (ברירת מחדל: 80,443)" echo " -f, --firewall TYPE ufw או iptables (ברירת מחדל: ufw)" echo " -h, --help הצגת עזרה" exit 0 ;; *) print_error "פרמטר לא ידוע: $1" exit 1 ;; esac done # הרצת הסקריפט mainיכול להיות שזה הפתרון לכאן: פעולה בתשובת error code: 502 משרת api
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות