فارسی (Farsi)
€EUR

مسدود کردن ترافیک خروجی به شبکه‌های خصوصی با UFW

3 min
سرور مجازی (VPS/VDS)

وقتی یک اسکریپت آلوده یا برنامه‌ای با پیکربندی نادرست شروع به کاوش آدرس‌های 10.x یا 192.168.x می‌کند، این ترافیک از سرور شما خارج می‌شود و اغلب باعث گزارش سوءاستفاده از سوی شبکه می‌شود. مسدود کردن اتصال‌های خروجی به محدوده‌های خصوصی یک اقدام پیشگیرانه ساده روی هر VPS Linux Infrawire است. این راهنما نشان می‌دهد چگونه با UFW این کار را بدون خراب کردن DNS یا اتصال خودتان انجام دهید.

📋 پیش‌نیازها

  • یک VPS با دسترسی SSH به‌عنوان root و سیستم Ubuntu 24.04 یا Debian 12 (UFW روی هر دو موجود است).
  • آشنایی پایه با UFW. اگر هنوز نصب نیست:
Bash
sudo apt update && sudo apt install -y ufw
  • یک نشست SSH دوم که هنگام تغییر فایروال باز بماند.

🧭 کدام محدوده‌ها را مسدود کنیم

محدودهکاربرد
10.0.0.0/8خصوصی طبق RFC1918
172.16.0.0/12خصوصی طبق RFC1918
192.168.0.0/16خصوصی طبق RFC1918
100.64.0.0/10NAT در سطح اپراتور (RFC6598)
169.254.0.0/16link-local در IPv4
192.0.0.0/24تخصیص‌های پروتکلی IETF
198.18.0.0/15آزمون کارایی
fc00::/7آدرس‌های محلی یکتا در IPv6

fe80::/10 را مسدود نکنید: IPv6 برای کشف همسایه و اغلب برای گیتوی پیش‌فرض از آدرس‌های link-local استفاده می‌کند و مسدود کردن آن IPv6 را کاملاً قطع می‌کند.

🔍 ابتدا بررسی کنید VPS واقعاً به چه چیزی نیاز دارد

اگر گیتوی یا حل‌کننده DNS شما در یک محدوده خصوصی باشد، مسدودسازی کلی شبکه‌تان را قطع می‌کند. پیش از افزودن هر قاعده پیکربندی را ببینید:

Bash
ip route ip -6 route cat /etc/resolv.conf resolvectl status | grep -E 'DNS Servers|Link'

اگر حل‌کننده یا سرویسی که به آن وابسته‌اید آدرس خصوصی دارد (PRIVATE_DNS_IP)، آن را صریحاً مجاز کنید و این قاعده را مطابق زیر اول قرار دهید. اگر همه‌چیز عمومی است، این مرحله را رد کنید.

🧱 روش ۱: ufw deny out

مطمئن شوید SSH در دسترس می‌ماند و سپس سیاست‌های پیش‌فرض را تنظیم کنید. پاسخ‌های نشست‌های SSH ورودی تحت تأثیر قواعد خروجی به محدوده‌های خصوصی نیستند.

Bash
sudo ufw allow 22/tcp sudo ufw default deny incoming sudo ufw default allow outgoing

اگر استثنایی لازم دارید، آن را در موقعیت 1 درج کنید تا پیش از قواعد مسدودسازی ارزیابی شود:

Bash
sudo ufw insert 1 allow out to PRIVATE_DNS_IP port 53

حالا قواعد مسدودسازی را اضافه کنید، یکی برای هر محدوده (قواعد UFW به ترتیب ارزیابی می‌شوند و اولین تطابق برنده است):

Bash
sudo ufw deny out to 10.0.0.0/8 sudo ufw deny out to 172.16.0.0/12 sudo ufw deny out to 192.168.0.0/16 sudo ufw deny out to 100.64.0.0/10 sudo ufw deny out to 169.254.0.0/16 sudo ufw deny out to 192.0.0.0/24 sudo ufw deny out to 198.18.0.0/15 sudo ufw deny out to fc00::/7 sudo ufw enable

ممکن است ufw enable هشدار دهد که اتصال‌های SSH را مختل می‌کند؛ چون پورت 22 مجاز است، با y پاسخ دهید. ترتیب را با این دستور مرور کنید:

Bash
sudo ufw status numbered

📄 روش ۲: before.rules

اگر یک بلوک واحد از قواعد را ترجیح می‌دهید که پیش از قواعد کاربر اعمال شود، فایل /etc/ufw/before.rules را ویرایش کنید. ابتدا نسخه پشتیبان بگیرید:

Bash
sudo cp /etc/ufw/before.rules /etc/ufw/before.rules.bak sudo nano /etc/ufw/before.rules

در بخش *filter، بعد از خطوطی که loopback و اتصال‌های برقرارشده را می‌پذیرند، این‌ها را اضافه کنید:

TEXT
1# مسدود کردن ترافیک خروجی به شبکه‌های خصوصی 2-A ufw-before-output -d 10.0.0.0/8 -j REJECT 3-A ufw-before-output -d 172.16.0.0/12 -j REJECT 4-A ufw-before-output -d 192.168.0.0/16 -j REJECT 5-A ufw-before-output -d 100.64.0.0/10 -j REJECT 6-A ufw-before-output -d 169.254.0.0/16 -j REJECT

IPv6 فایل جداگانه‌ای به نام /etc/ufw/before6.rules دارد که زنجیره ufw-before-output در آن است:

TEXT
-A ufw-before-output -d fc00::/7 -j REJECT

استثنای PRIVATE_DNS_IP را درست بالای این خطوط با -A ufw-before-output -d PRIVATE_DNS_IP -j ACCEPT بگذارید. سپس بارگذاری مجدد کنید:

Bash
sudo ufw reload

REJECT بلافاصله با خطا پاسخ می‌دهد، پس برنامه‌ها به‌جای انتظار برای پایان مهلت، سریع شکست می‌خورند. اگر سکوت را ترجیح می‌دهید از -j DROP استفاده کنید.

✅ بررسی

قواعد باید بارگذاری شده باشند و مقصدهای مسدود شکست بخورند، در حالی که مقصدهای عمومی کار کنند:

Bash
sudo ufw status verbose ping -c 1 10.0.0.1 # باید شکست بخورد ping -c 1 192.168.1.1 # باید شکست بخورد curl -m 5 http://10.0.0.1 # باید شکست بخورد ping -c 2 1.1.1.1 # باید موفق شود dig +short example.com # باید حل شود curl -I https://www.debian.org

با ufw deny out ping ناموفق معمولاً Operation not permitted نشان می‌دهد. شمارنده‌های بسته برخوردها را تأیید می‌کنند:

Bash
sudo iptables -L ufw-user-output -n -v sudo iptables -L ufw-before-output -n -v

🛠️ رفع اشکال

DNS از کار افتاد. حل‌کننده شما در محدوده خصوصی است. ترتیب را با sudo ufw status numbered بررسی کنید و سپس sudo ufw insert 1 allow out to PRIVATE_DNS_IP port 53 را اضافه کنید. می‌توانید در پیکربندی شبکه به یک حل‌کننده عمومی هم تغییر دهید.

پس از تغییر IPv6 خراب شد. احتمالاً fe80::/10 یا گیتویی در fc00::/7 را مسدود کرده‌اید. قاعده را با sudo ufw delete deny out to fc00::/7 حذف کنید و فقط آنچه لازم است دوباره اضافه کنید.

به سرویسی در شبکه خصوصی (VPN یا API داخلی) دسترسی ندارید. برای همان آدرس دقیق یک قاعده مجاز با ufw insert 1 allow out to PRIVATE_IP اضافه کنید. اگر دسترسی به خود SSH قطع شد، از هر دسترسی کنسولی به سرور استفاده کنید و sudo ufw disable را اجرا کنید.


🔒 VPS شما دیگر به‌طور تصادفی شبکه‌های خصوصی را اسکن نمی‌کند: گزارش‌های سوءاستفاده از این نوع باید متوقف شوند.

با آخرین پیشنهادها، تخفیف‌ها و تبلیغات ویژه به‌روز بمانید.

مشاهده تخفیف‌ها

ما از کوکی استفاده می‌کنیم

ما از کوکی‌های تحلیلی برای بهبود تجربه شما در سایت خود استفاده می‌کنیم. هیچ داده‌ای به اشخاص ثالث فروخته نمی‌شود. اطلاعات بیشتر در سیاست حفظ حریم خصوصی ما.