├── README.md └── hetzner_anti_abuse.sh /README.md: -------------------------------------------------------------------------------- 1 | # اسکریپت پیکربندی فایروال UFW 2 | 3 | 4 | 5 | یک اسکریپت هوشمند برای پیکربندی خودکار فایروال UFW در سیستم‌های اوبونتو با قابلیت جلوگیری از دریافت ابیوز نت اسکن. 6 | 7 | ## ✨ ویژگی‌های کلیدی 8 | 9 | - **تشخیص خودکار** پورت SSH از فایل پیکربندی 10 | - **قوانین امنیتی** پیشرفته برای مسدودسازی ترافیک خروجی 11 | - **محاوره تعاملی** با کاربر برای دریافت تنظیمات 12 | - **پشتیبانی از پروتکل‌های** TCP و UDP 13 | - **محدودسازی اتصالات** SSH برای جلوگیری از حملات brute-force 14 | - **اعتبارسنجی ورودی‌ها** برای جلوگیری از خطا 15 | - **نصب اتوماتیک ufw** در صورت نصب نبودن 16 | - **تشخیص اتوماتیک پورتهای مورد استفاده** و باز کردن آنها در فایروال با تائید کاربر 17 | 18 | ## 🚀 نحوه استفاده 19 | 20 | 1. دریافت اسکریپت: 21 | ``` 22 | bash <(curl -s https://raw.githubusercontent.com/aliamg1356/ufw_config-for-anti-abuse/refs/heads/main/hetzner_anti_abuse.sh --ipv4) 23 | ``` 24 | 25 | ## 🖥️ راهنمای تعاملی 26 | 27 | اسکریپت به صورت مرحله‌به‌مرحله از شما سوال می‌پرسد: 28 | 29 | 1. **نوع پروتکل** برای پورت SSH (پیش‌فرض: TCP) 30 | 2. **محدودسازی اتصالات** SSH (برای افزایش امنیت) 31 | 3. **افزودن پورت‌های** جدید با انتخاب پروتکل 32 | 33 | ## 🔒 قوانین امنیتی پیش‌فرض 34 | 35 | به طور خودکار این محدودیت‌ها اعمال می‌شود: 36 | 37 | - مسدودسازی محدوده IPهای خصوصی 38 | - مسدودسازی شبکه‌های تست و مستنداتی 39 | - مسدودسازی آدرس‌های multicast 40 | - مسدودسازی محدوده‌های خاص دیگر 41 | 42 | ## ⚠️ نکات ایمنی 43 | 44 | - این اسکریپت در نهایت فایروال UFW را فعال می‌کند 45 | - قبل از اجرا مطمئن شوید دسترسی جایگزین دارید 46 | - توصیه می‌شود در یک نشست SSH جدید اجرا شود 47 | 48 | -------------------------------------------------------------------------------- /hetzner_anti_abuse.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # UFW Configuration Script for Ubuntu 4 | 5 | if [ "$(id -u)" -ne 0 ]; then 6 | echo "This script must be run as root." 7 | exit 1 8 | fi 9 | 10 | # Check if UFW is installed 11 | if ! command -v ufw &> /dev/null; then 12 | echo "UFW is not installed. Installing ufw..." 13 | apt update && apt install -y ufw || { echo "Failed to install UFW. Exiting."; exit 1; } 14 | else 15 | echo "UFW is already installed." 16 | fi 17 | 18 | # Get SSH port 19 | ssh_port=$(grep -E "^Port" /etc/ssh/sshd_config | awk '{print $2}') 20 | ssh_port=${ssh_port:-22} 21 | echo "SSH Port: $ssh_port" 22 | 23 | # Ask SSH protocol 24 | read -p "Is the SSH port TCP or UDP? [tcp/udp] (default: tcp): " port_type 25 | port_type=${port_type:-tcp} 26 | port_type=$(echo "$port_type" | tr '[:upper:]' '[:lower:]') 27 | [[ "$port_type" != "tcp" && "$port_type" != "udp" ]] && port_type="tcp" 28 | 29 | ufw allow $ssh_port/$port_type 30 | read -p "Do you want to limit the number of SSH connections? [y/n] (default: n): " limit_ssh 31 | limit_ssh=${limit_ssh:-n} 32 | [[ "$limit_ssh" =~ ^[Yy]$ ]] && ufw limit $ssh_port/$port_type 33 | 34 | # Block outbound private IP ranges 35 | echo "Adding outbound blocking rules..." 36 | private_ips=( 37 | "10.0.0.0/8" "172.16.0.0/12" "192.168.0.0/16" "100.64.0.0/10" 38 | "198.18.0.0/15" "169.254.0.0/16" "141.101.78.0/23" "173.245.48.0/20" 39 | "0.0.0.0/8" "127.0.0.0/8" "127.0.53.53" "192.0.0.0/24" "192.0.2.0/24" 40 | "192.88.99.0/24" "198.51.100.0/24" "203.0.113.0/24" "224.0.0.0/3" 41 | "240.0.0.0/4" "255.255.255.255" "102.230.9.0/24" "102.233.71.0/24" "102.236.0.0/16" 42 | ) 43 | 44 | for ip in "${private_ips[@]}"; do 45 | ufw deny out from any to $ip 46 | done 47 | 48 | # 🔍 Detect and display open ports 49 | echo -e "\nDetecting currently listening ports..." 50 | 51 | mapfile -t open_ports < <(ss -tuln | awk 'NR>1 {split($5,a,":"); if(a[2]!="") print a[2] "/" ($1=="tcp"?"tcp":"udp")}' | sort -u) 52 | 53 | if [ ${#open_ports[@]} -eq 0 ]; then 54 | echo "No open ports detected." 55 | else 56 | echo -e "\nThe following ports are currently in use:\n" 57 | printf "%-10s %-10s %-20s\n" "Port" "Protocol" "Service" 58 | echo "-----------------------------------------------" 59 | for entry in "${open_ports[@]}"; do 60 | port="${entry%%/*}" 61 | proto="${entry##*/}" 62 | service=$(getent services "$port/$proto" | awk '{print $1}' | head -n1) 63 | service=${service:-unknown} 64 | printf "%-10s %-10s %-20s\n" "$port" "$proto" "$service" 65 | done 66 | 67 | echo -e "\nDo you want to allow these ports through UFW? [y/n]: " 68 | read allow_ports 69 | if [[ "$allow_ports" =~ ^[Yy]$ ]]; then 70 | echo "Allowing detected ports..." 71 | for entry in "${open_ports[@]}"; do 72 | ufw allow "$entry" 73 | done 74 | else 75 | echo "Skipping opening detected ports." 76 | fi 77 | fi 78 | 79 | # Allow additional manual ports 80 | echo "Do you want to open additional ports? (y/n)" 81 | read answer 82 | while [[ "$answer" =~ ^[Yy]$ ]]; do 83 | read -p "Enter port number (1-65535): " port 84 | if [[ $port =~ ^[0-9]+$ ]] && [ "$port" -ge 1 ] && [ "$port" -le 65535 ]; then 85 | read -p "Protocol for port $port [tcp/udp] (default: tcp): " ptype 86 | ptype=${ptype:-tcp} 87 | [[ "$ptype" != "tcp" && "$ptype" != "udp" ]] && ptype="tcp" 88 | ufw allow "$port/$ptype" 89 | else 90 | echo "Invalid port." 91 | fi 92 | echo "Do you want to open another port? (y/n)" 93 | read answer 94 | done 95 | 96 | # Enable firewall 97 | echo "Enabling UFW firewall..." 98 | ufw --force enable 99 | 100 | # Show status 101 | echo "Current UFW rules:" 102 | ufw status verbose 103 | 104 | echo "Script completed successfully." 105 | --------------------------------------------------------------------------------