مشاكل الوصول إلى المنافذ: فحص جدار الحماية والخدمات
دليل لتشخيص مشاكل الوصول إلى المنافذ باستخدام netstat وss وiptables وufw وفحص استماع الخدمات.
جدول المحتويات
مقدمة
عدم القدرة على الوصول إلى خدمة تعمل على خادمك من الخارج يكون عادةً بسبب مشاكل الوصول إلى المنافذ. في هذا الدليل، سنشرح بالتفصيل الأدوات والطرق التي يمكنك استخدامها لتشخيص وحل مشاكل الوصول إلى المنافذ بشكل منهجي.
فحص حالة المنافذ
فحص المنافذ بأمر ss
يُستخدم أمر ss في أنظمة Linux الحديثة لعرض إحصائيات المقابس:
# قائمة جميع منافذ TCP المستمعة
ss -tlnp
# قائمة جميع منافذ UDP المستمعة
ss -ulnp
# فحص منفذ محدد
ss -tlnp | grep :80
ss -tlnp | grep :443
ss -tlnp | grep :3306
# عرض جميع الاتصالات (مستمعة + متصلة)
ss -tanp
# معلومات مفصلة عن المقابس
ss -tlnp -e
تفسير مخرجات ss
# مثال على المخرجات:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=5678,fd=6))
LISTEN 0 128 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=9012,fd=22))
| الحقل | الوصف |
|---|---|
| State LISTEN | المنفذ يستمع بنشاط |
| 0.0.0.0:port | قابل للوصول من جميع الواجهات |
| 127.0.0.1:port | قابل للوصول فقط من localhost |
| Process | معلومات العملية المستمعة على المنفذ |
إذا كانت الخدمة تستمع على 127.0.0.1، فلا يمكن الوصول إليها من الخارج. تحتاج إلى تغيير توجيه bind-address أو listen إلى 0.0.0.0 في تكوين الخدمة.
أمر netstat (الأنظمة القديمة)
# قائمة جميع المنافذ المستمعة
netstat -tlnp
# جميع المنافذ بما في ذلك UDP
netstat -tulnp
# فحص منفذ محدد
netstat -tlnp | grep :8080
# عرض عدد الاتصالات
netstat -an | grep :80 | wc -l
فحص جدار الحماية
الفحص باستخدام iptables
# قائمة جميع القواعد
sudo iptables -L -n -v
# فحص سلسلة INPUT
sudo iptables -L INPUT -n -v --line-numbers
# فحص جدول NAT
sudo iptables -t nat -L -n -v
# البحث عن قواعد لمنفذ محدد
sudo iptables -L -n -v | grep 80
فتح المنافذ باستخدام iptables
# فتح منفذ TCP 80
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# فتح منفذ TCP 443
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# الوصول إلى المنفذ من IP محدد
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 3306 -j ACCEPT
# فتح نطاق منافذ
sudo iptables -A INPUT -p tcp --dport 8000:9000 -j ACCEPT
# حفظ القواعد
sudo iptables-save > /etc/iptables/rules.v4
sudo netfilter-persistent save
UFW (Uncomplicated Firewall)
# فحص حالة UFW
sudo ufw status verbose
# قائمة القواعد المرقمة
sudo ufw status numbered
# فتح المنافذ
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8080/tcp
# الوصول إلى المنفذ من IP محدد
sudo ufw allow from 192.168.1.100 to any port 3306
# فتح نطاق منافذ
sudo ufw allow 8000:9000/tcp
# حذف قاعدة
sudo ufw delete allow 8080/tcp
# تفعيل UFW
sudo ufw enable
# إعادة تحميل UFW
sudo ufw reload
firewalld
# فحص المنطقة النشطة
sudo firewall-cmd --get-active-zones
# قائمة جميع القواعد
sudo firewall-cmd --list-all
# فتح منفذ (مؤقت)
sudo firewall-cmd --add-port=80/tcp
# فتح منفذ (دائم)
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
تكوين استماع الخدمات
Nginx
server {
listen 80; # الاستماع على جميع الواجهات
listen [::]:80; # بما في ذلك IPv6
server_name example.com;
}
MySQL/MariaDB
[mysqld]
bind-address = 0.0.0.0 # الاستماع على جميع الواجهات
# bind-address = 127.0.0.1 # localhost فقط (افتراضي، آمن)
port = 3306
PostgreSQL
listen_addresses = '*' # جميع الواجهات
port = 5432
Redis
bind 0.0.0.0
port 6379
protected-mode yes
requirepass كلمة_مرور_قوية
عند فتح خدمات قواعد البيانات والتخزين المؤقت للخارج، استخدم دائماً كلمات مرور قوية وقيود IP.
اختبار المنافذ الخارجي
# اختبار المنفذ البعيد من الجهاز المحلي
nc -zv IP_الخادم 80
nc -zv IP_الخادم 443
# مسح منافذ مفصل باستخدام nmap
nmap -p 80,443,3306,5432,6379 IP_الخادم
# كشف إصدار الخدمة
nmap -sV -p 80,443 IP_الخادم
# اختبار منفذ HTTP باستخدام curl
curl -I http://IP_الخادم:80
تكامل REXE Path Panel
في خوادم REXE، عندما لا توجد أي قاعدة على عنوان IP تكون جميع المنافذ مفتوحة. أما عند وجود قاعدة واحدة على الأقل على عنوان IP فيدخل Default Block التلقائي حيز التنفيذ ولا تبقى مفتوحة سوى المنافذ المسموح بها. للسماح بالوصول الخارجي إلى خدمتك، تحتاج إلى إنشاء قاعدة تصفية للمنفذ المعني في Path Panel:
1. سجل الدخول إلى Path Panel (x.rexe.tr)
2. انقر على عنوان IP المعني
3. انقر على "إضافة قاعدة جديدة"
4. البروتوكول: TCP (أو UDP)
5. الاتجاه: Symmetric (ثنائي الاتجاه)
6. منفذ الوجهة: المنفذ الذي تريد فتحه
7. الإجراء: Allow
8. احفظ القاعدة وانتظر حالة propagated
حتى إذا ظهرت القاعدة في اللوحة على أنها لم تُنشر بعد (لم تُحدَّث)، فمن المرجّح أن القاعدة قد تم نشرها بالفعل خلال 2-5 دقائق. قد تتأخر حالة التحديث بسبب فترة فحص الحالة في اللوحة أو الوقت اللازم لتطبيق القاعدة على جميع العُقد في جانب Path (باستثناء جانبنا). هذا مجرد تأخير مرئي في اللوحة؛ أما المنفذ فقد تم فتحه فعليًا في النظام.
سكريبت التشخيص
#!/bin/bash
PORT=$1
SERVER_IP=$2
if [ -z "$PORT" ] || [ -z "$SERVER_IP" ]; then
echo "الاستخدام: $0 <المنفذ> <ip_الخادم>"
exit 1
fi
echo "=== فحص الوصول إلى المنفذ $PORT ==="
echo -e "\n[1] فحص استماع الخدمة:"
ss -tlnp | grep ":$PORT" || echo "المنفذ $PORT لا يستمع!"
echo -e "\n[2] فحص جدار الحماية:"
if command -v ufw &> /dev/null; then
sudo ufw status | grep "$PORT"
else
sudo iptables -L -n | grep "$PORT"
fi
echo -e "\n[3] اختبار الوصول الخارجي:"
nc -zv -w 5 $SERVER_IP $PORT 2>&1
echo -e "\n=== اكتمل الفحص ==="
المشاكل الشائعة والحلول
| المشكلة | السبب | الحل |
|---|---|---|
| المنفذ لا يستمع | الخدمة لا تعمل | systemctl start اسم_الخدمة |
| يستمع على 127.0.0.1 | عنوان الربط هو localhost | تغيير إلى 0.0.0.0 في التكوين |
| جدار الحماية يحظر | لا توجد قاعدة للمنفذ | فتح المنفذ عبر iptables/ufw/firewalld |
| Path Panel يحظر | لا توجد قاعدة تصفية | إنشاء قاعدة في Path Panel |
| Connection refused | تم تغيير منفذ الخدمة | فحص تكوين الخدمة |
الخلاصة
لحل مشاكل الوصول إلى المنافذ، تحتاج إلى إجراء فحص ثلاثي المستويات: حالة استماع الخدمة، قواعد جدار حماية الخادم، وقواعد REXE Path Panel. تأكد أولاً من أن الخدمة تستمع على المنفذ والواجهة الصحيحة، ثم تحقق من قواعد جدار الحماية، وأخيراً أنشئ القواعد اللازمة في Path Panel.
مقالات ذات صلة
مشكلة اتصال SSH: لا يمكن الاتصال بالخادم — الحل
دليل حل مشاكل اتصال SSH: قواعد جدار حماية Path.net، Default Block، إنشاء قاعدة تصفية لمنفذ SSH وخطوات استكشاف الأخطاء وإصلاحها.
مشكلة اتصال RDP: لا يمكن الاتصال بـ Windows Server
دليل حل مشاكل اتصال RDP: قواعد جدار حماية Path.net، Default Block، إنشاء قاعدة تصفية لمنفذ RDP وخطوات استكشاف الأخطاء وإصلاحها.
كيفية إجراء اختبار MTR وإرسال النتائج للدعم
دليل اختبار الشبكة باستخدام WinMTR وLinux MTR، إنشاء قاعدة فلترة ICMP وإرسال النتائج لفريق الدعم. تشخيص فقدان الحزم والتأخير في الشبكة.