انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

مشاكل الوصول إلى المنافذ: فحص جدار الحماية والخدمات

دليل لتشخيص مشاكل الوصول إلى المنافذ باستخدام netstat وss وiptables وufw وفحص استماع الخدمات.

وقت القراءة: 13 دقيقة استكشاف الأخطاء وإصلاحها
منفذجدار حمايةnetstatssiptablesufwخدمة

جدول المحتويات

مقدمة

عدم القدرة على الوصول إلى خدمة تعمل على خادمك من الخارج يكون عادةً بسبب مشاكل الوصول إلى المنافذ. في هذا الدليل، سنشرح بالتفصيل الأدوات والطرق التي يمكنك استخدامها لتشخيص وحل مشاكل الوصول إلى المنافذ بشكل منهجي.

فحص حالة المنافذ

فحص المنافذ بأمر ss

يُستخدم أمر ss في أنظمة Linux الحديثة لعرض إحصائيات المقابس:

hljs bash
# قائمة جميع منافذ TCP المستمعة
ss -tlnp

# قائمة جميع منافذ UDP المستمعة
ss -ulnp

# فحص منفذ محدد
ss -tlnp | grep :80
ss -tlnp | grep :443
ss -tlnp | grep :3306

# عرض جميع الاتصالات (مستمعة + متصلة)
ss -tanp

# معلومات مفصلة عن المقابس
ss -tlnp -e

تفسير مخرجات ss

hljs bash
# مثال على المخرجات:
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 (الأنظمة القديمة)

hljs bash
# قائمة جميع المنافذ المستمعة
netstat -tlnp

# جميع المنافذ بما في ذلك UDP
netstat -tulnp

# فحص منفذ محدد
netstat -tlnp | grep :8080

# عرض عدد الاتصالات
netstat -an | grep :80 | wc -l

فحص جدار الحماية

الفحص باستخدام iptables

hljs bash
# قائمة جميع القواعد
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

hljs bash
# فتح منفذ 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)

hljs bash
# فحص حالة 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

hljs bash
# فحص المنطقة النشطة
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

hljs nginx
server {
    listen 80;              # الاستماع على جميع الواجهات
    listen [::]:80;         # بما في ذلك IPv6
    server_name example.com;
}

MySQL/MariaDB

hljs ini
[mysqld]
bind-address = 0.0.0.0    # الاستماع على جميع الواجهات
# bind-address = 127.0.0.1  # localhost فقط (افتراضي، آمن)
port = 3306

PostgreSQL

hljs ini
listen_addresses = '*'    # جميع الواجهات
port = 5432

Redis

hljs ini
bind 0.0.0.0
port 6379
protected-mode yes
requirepass كلمة_مرور_قوية

عند فتح خدمات قواعد البيانات والتخزين المؤقت للخارج، استخدم دائماً كلمات مرور قوية وقيود IP.

اختبار المنافذ الخارجي

hljs bash
# اختبار المنفذ البعيد من الجهاز المحلي
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 (باستثناء جانبنا). هذا مجرد تأخير مرئي في اللوحة؛ أما المنفذ فقد تم فتحه فعليًا في النظام.

سكريبت التشخيص

hljs bash
#!/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.