Skip to main content

در برخی سناریوها، قطع دسترسی اینترنت روی سرور می‌تواند باعث بروز خطا یا کندی در پنل مدیریت وردپرس شود. این موضوع معمولاً زمانی رخ می‌دهد که برخی افزونه‌ها در داشبورد مدیریت، درخواست‌های HTTP به سرویس‌های خارجی ارسال می‌کنند. در صورتی که دامنه مقصد قابل Resolve نباشد، این درخواست‌ها باعث تأخیر و کندی در بارگذاری پنل ادمین خواهند شد.


چرا این مشکل رخ می‌دهد؟

وردپرس و بسیاری از افزونه‌های آن از درخواست‌های HTTP برای ارتباط با سرویس‌های خارجی استفاده می‌کنند. این درخواست‌ها معمولاً از طریق توابع داخلی وردپرس مانند wp_remote_post یا wp_remote_get انجام می‌شوند.

در شرایطی که اینترنت سرور قطع باشد یا دسترسی به برخی دامنه‌ها محدود شده باشد، این درخواست‌ها می‌توانند باعث:

  • کندی در لود پنل مدیریت
  • Timeout شدن درخواست‌ها
  • ایجاد خطا در افزونه‌ها

روش‌های محدودسازی درخواست‌های خارجی در وردپرس

یکی از روش‌های اولیه، محدود کردن درخواست‌های خارجی از طریق تنظیمات وردپرس است:

define('WP_HTTP_BLOCK_EXTERNAL', true);
define('WP_ACCESSIBLE_HOSTS', '*.zarinpal.com');

همچنین می‌توان از فیلتر pre_http_request برای کنترل درخواست‌ها استفاده کرد.

محدودیت این روش‌ها

این روش‌ها فقط روی HTTP API داخلی وردپرس تأثیر دارند. در صورتی که یک افزونه به‌صورت مستقیم از curl استفاده کند، این محدودیت‌ها بی‌اثر خواهند بود.


مشکل افزونه‌های غیرشفاف (Obfuscated Plugins)

در شرایطی که افزونه‌ها به صورت کد شده (مثلاً با ionCube یا SourceGuardian) منتشر شده باشند:

  • امکان بررسی دقیق درخواست‌های خروجی وجود ندارد
  • نمی‌توان دامنه‌های هدف را به‌سادگی شناسایی کرد
  • کنترل دستی روی رفتار شبکه‌ای آن‌ها بسیار محدود می‌شود

راه‌حل سطح سیستم: قطع DNS خارجی

برای کنترل کامل ارتباطات شبکه‌ای، می‌توان سطح DNS سیستم را محدود یا قطع کرد. این روش در Ubuntu تست شده است.

مرحله 1: تغییر تنظیمات NSS

فایل زیر را ویرایش کنید:

sudo nano /etc/nsswitch.conf

مقدار زیر:

hosts: files dns

به شکل زیر تغییر داده شود:

hosts: files

مرحله 2: غیرفعال کردن systemd-resolved

sudo systemctl disable --now systemd-resolved

مرحله 3: بازسازی resolv.conf

sudo rm /etc/resolv.conf
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf

مدیریت دستی دامنه‌ها

در صورتی که نیاز باشد برخی سرویس‌ها همچنان در دسترس باشند (مثلاً درگاه پرداخت)، باید آن‌ها را به صورت دستی در فایل hosts تعریف کنید:

/etc/hosts

مثال:

185.143.234.1 payment.zarinpal.com

استفاده در Docker Compose

اگر از Docker استفاده می‌کنید، می‌توانید از extra_hosts استفاده کنید:
extra_hosts:
- "payment.zarinpal.com:185.143.234.1"

اگر روش بالا جواب نداد داخل کانتینری که ودپرس رو ران میکنه این رو بزنید


echo "46.245.77.196 api.payamak-panel.com" >> /etc/hosts


جمع‌بندی

محدود کردن درخواست‌های خارجی در وردپرس در سطح اپلیکیشن معمولاً کافی نیست، زیرا:

  • برخی افزونه‌ها از روش‌های مستقیم (مثل curl) استفاده می‌کنند
  • برخی افزونه‌ها کد شده و غیرقابل بررسی هستند

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

Author dariush

More posts by dariush

Leave a Reply