سطح: مقدماتی تا متوسط  |  مناسب برای: مدیران سرور لینوکس، کاربران سرور مجازی، مدیران سایت، DevOpsها و افرادی که می‌خواهند دسترسی سرویس‌ها را در Ubuntu Firewall مدیریت کنند

اگر روی سرور اوبونتو سرویس‌هایی مثل SSH، وب‌سرور، دیتابیس، کنترل پنل، مانیتورینگ یا اپلیکیشن اختصاصی اجرا می‌کنید، باید بدانید کدام پورت‌ها باز هستند و چه کسانی اجازه اتصال به آن‌ها را دارند. باز کردن اشتباه یک پورت می‌تواند امنیت سرور را کاهش دهد، اما بسته بودن پورت موردنیاز هم باعث می‌شود سرویس شما از بیرون در دسترس نباشد.

در اوبونتو، یکی از ساده‌ترین ابزارها برای مدیریت فایروال، UFW است. UFW مخفف Uncomplicated Firewall است و یک رابط ساده‌تر برای مدیریت قوانین فایروال لینوکس فراهم می‌کند. با UFW می‌توانید پورت‌های TCP و UDP را باز کنید، دسترسی را فقط به یک IP خاص محدود کنید، پورت‌ها را برای یک شبکه مشخص باز کنید، رول‌ها را حذف کنید و وضعیت فایروال را بررسی کنید.

در این آموزش، به‌صورت کامل و کاربردی یاد می‌گیرید چطور در فایروال اوبونتو پورت باز کنید، چطور پروتکل TCP یا UDP را مشخص کنید، چطور پورت SSH را امن‌تر مدیریت کنید، چطور دسترسی را محدود کنید و در نهایت چطور خطاهای رایج بعد از باز کردن پورت را بررسی کنید.

اگر این تنظیمات را روی سرور مجازی انجام می‌دهید، پیشنهاد می‌کنیم مقاله سرور مجازی چیست؟ را هم بخوانید. همچنین برای انتخاب زیرساخت مناسب می‌توانید صفحه سرور مجازی و اختصاصی پویاسازان را بررسی کنید.

فهرست مطالب

UFW چیست و چه کاربردی دارد؟

UFW ابزار ساده مدیریت فایروال در اوبونتو است. این ابزار به شما اجازه می‌دهد بدون درگیر شدن مستقیم با قوانین پیچیده iptables یا nftables، دسترسی شبکه به سرور را کنترل کنید.

با UFW می‌توانید مشخص کنید کدام پورت‌ها باز باشند، کدام سرویس‌ها از بیرون قابل دسترسی باشند و چه IPهایی اجازه اتصال داشته باشند. برای مثال، می‌توانید پورت ۲۲ برای SSH، پورت ۸۰ برای HTTP، پورت ۴۴۳ برای HTTPS یا پورت یک اپلیکیشن اختصاصی را باز کنید.

مدیریت درست فایروال برای هر سرور لینوکسی مهم است؛ مخصوصاً اگر سرور شما روی اینترنت عمومی قرار دارد. اگر هنوز با مفاهیم پایه سرور آشنا نیستید، مقاله سرور مجازی چیست؟ و مقاله هاست چیست؟ می‌توانند دید بهتری بدهند.

قبل از باز کردن پورت چه چیزهایی را بررسی کنیم؟

قبل از اینکه یک پورت را در فایروال باز کنید، بهتر است چند سؤال مهم را از خودتان بپرسید:

  • این پورت مربوط به چه سرویسی است؟
  • آیا لازم است این پورت برای همه اینترنت باز باشد؟
  • می‌توان دسترسی را فقط به IP مشخص محدود کرد؟
  • سرویس موردنظر واقعاً روی همان پورت در حال اجراست؟
  • پروتکل سرویس TCP است یا UDP؟
  • آیا باز کردن این پورت ریسک امنیتی ایجاد می‌کند؟

مثلاً باز کردن پورت ۸۰ و ۴۴۳ برای وب‌سایت عمومی طبیعی است؛ اما باز کردن پورت دیتابیس مثل 3306 یا 5432 برای همه اینترنت معمولاً کار خطرناکی است و باید فقط برای IPهای مشخص انجام شود.

بررسی وضعیت فایروال UFW

قبل از اضافه کردن هر رول، وضعیت UFW را بررسی کنید:

sudo ufw status

اگر UFW فعال باشد، خروجی شبیه این می‌بینید:

Status: active

برای نمایش جزئی‌تر قوانین، این دستور مفیدتر است:

sudo ufw status verbose

و برای دیدن رول‌ها همراه با شماره، از این دستور استفاده کنید:

sudo ufw status numbered

نمایش شماره رول‌ها هنگام حذف قوانین بسیار کاربردی است.

باز کردن یک پورت در فایروال اوبونتو

ساختار ساده برای باز کردن یک پورت با UFW به این شکل است:

sudo ufw allow PORT

برای مثال، اگر بخواهید پورت ۸۰ را برای وب‌سرور باز کنید:

sudo ufw allow 80

اگر پروتکل را مشخص نکنید، در بسیاری از حالت‌ها UFW اجازه دسترسی را برای هر دو پروتکل TCP و UDP در نظر می‌گیرد. اما بهتر است در سرورهای واقعی، پروتکل را دقیق مشخص کنید تا فقط همان چیزی که لازم است باز شود.

باز کردن پورت TCP یا UDP

بیشتر سرویس‌های وب مثل HTTP، HTTPS و SSH از TCP استفاده می‌کنند. برای باز کردن پورت با پروتکل مشخص، از این ساختار استفاده کنید:

sudo ufw allow PORT/PROTOCOL

برای باز کردن پورت SSH روی TCP:

sudo ufw allow 22/tcp

برای باز کردن پورت DNS روی UDP:

sudo ufw allow 53/udp

اگر بخواهید پورت ۵۳ را برای هر دو پروتکل TCP و UDP باز کنید، می‌توانید جداگانه دو رول تعریف کنید:

sudo ufw allow 53/tcp
sudo ufw allow 53/udp

مشخص کردن پروتکل باعث می‌شود سطح دسترسی غیرضروری کمتر شود و فایروال دقیق‌تر عمل کند.

باز کردن پورت با نام سرویس

UFW امکان باز کردن برخی سرویس‌ها را با نام آن‌ها هم فراهم می‌کند. مثلاً برای SSH می‌توانید به‌جای پورت ۲۲ از نام OpenSSH استفاده کنید:

sudo ufw allow OpenSSH

برای وب‌سرور Apache، بسته به profileهای موجود، ممکن است بتوانید از دستورهایی مثل این استفاده کنید:

sudo ufw allow "Apache Full"

برای دیدن لیست application profileهای موجود:

sudo ufw app list

و برای مشاهده جزئیات یک profile:

sudo ufw app info "Apache Full"

استفاده از نام سرویس خوانایی بیشتری دارد، اما در محیط‌های حساس بهتر است دقیق بدانید آن profile چه پورت‌هایی را باز می‌کند.

باز کردن پورت فقط برای یک IP خاص

گاهی نمی‌خواهید یک پورت برای همه باز باشد. مثلاً پورت SSH، دیتابیس یا پنل مدیریتی بهتر است فقط از IP مشخصی قابل دسترسی باشد.

برای باز کردن پورت ۲۲ فقط برای یک IP خاص:

sudo ufw allow from 192.168.1.50 to any port 22 proto tcp

در این مثال، فقط IP زیر اجازه اتصال به پورت ۲۲ را دارد:

192.168.1.50

این روش برای افزایش امنیت بسیار مهم است، مخصوصاً برای پورت‌های مدیریتی مثل SSH. اگر IP ثابت دارید، بهتر است به‌جای باز گذاشتن پورت SSH برای همه اینترنت، آن را فقط برای IP خودتان باز کنید.

باز کردن پورت برای یک شبکه یا رنج IP

اگر می‌خواهید یک پورت را برای یک شبکه مشخص باز کنید، می‌توانید از CIDR استفاده کنید. برای مثال، باز کردن پورت ۲۲ برای کل شبکه 192.168.1.0/24:

sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcp

این دستور به همه IPهای داخل این رنج اجازه می‌دهد به پورت ۲۲ متصل شوند.

اگر سرور چند IP دارد و می‌خواهید دسترسی فقط روی یک IP خاص از سرور برقرار شود، می‌توانید مقصد را هم مشخص کنید:

sudo ufw allow from 192.168.1.50 to 192.168.1.200 port 22 proto tcp

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

باز کردن چند پورت یا محدوده پورت

برای باز کردن چند پورت، می‌توانید از چند رول جداگانه استفاده کنید:

sudo ufw allow 21/tcp
sudo ufw allow 22/tcp

یا در بعضی حالت‌ها چند پورت را با هم تعریف کنید:

sudo ufw allow from any to any proto tcp port 21,22

برای باز کردن یک محدوده پورت، از علامت : استفاده می‌شود. مثلاً باز کردن پورت‌های 8080 تا 8090 روی TCP:

sudo ufw allow 8080:8090/tcp

یا با ساختار کامل‌تر:

sudo ufw allow from any to any proto tcp port 8080:8090

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

حذف رول یا بستن پورت در UFW

اگر رولی را اشتباه اضافه کردید یا دیگر به آن نیاز ندارید، می‌توانید آن را حذف کنید. ساده‌ترین حالت حذف همان رولی است که قبلاً اضافه کرده‌اید:

sudo ufw delete allow 22/tcp

روش دقیق‌تر، حذف بر اساس شماره رول است. ابتدا شماره رول‌ها را ببینید:

sudo ufw status numbered

خروجی ممکن است شبیه این باشد:

[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere

برای حذف رول شماره ۱:

sudo ufw delete 1

بعد از حذف رول، دوباره وضعیت فایروال را بررسی کنید:

sudo ufw status numbered

بستن یا deny کردن یک پورت

اگر می‌خواهید صراحتاً دسترسی به یک پورت را deny کنید، می‌توانید از دستور زیر استفاده کنید:

sudo ufw deny 3306/tcp

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

برای حذف این deny rule هم می‌توانید از دستور delete استفاده کنید:

sudo ufw delete deny 3306/tcp

نکته بسیار مهم درباره پورت SSH

قبل از فعال کردن UFW روی سرور ریموت، حتماً مطمئن شوید دسترسی SSH باز است. اگر فایروال را فعال کنید و پورت SSH باز نباشد، ممکن است دسترسی شما به سرور قطع شود.

قبل از فعال کردن UFW، این دستور را اجرا کنید:

sudo ufw allow OpenSSH

یا اگر SSH شما روی پورت ۲۲ است:

sudo ufw allow 22/tcp

اگر پورت SSH را تغییر داده‌اید، همان پورت جدید را باز کنید. مثلاً:

sudo ufw allow 2222/tcp

بعد از اطمینان از باز بودن SSH، می‌توانید UFW را فعال کنید:

sudo ufw enable

اگر از سرور مجازی آلمان یا هر VPS دیگری استفاده می‌کنید، قبل از اعمال تغییرات فایروال مطمئن شوید از طریق کنسول اضطراری یا پنل مدیریت سرور هم امکان دسترسی دارید.

چطور مطمئن شویم پورت باز شده است؟

بعد از اضافه کردن رول، فقط دیدن آن در UFW کافی نیست. باید مطمئن شوید سرویس مربوطه هم روی همان پورت در حال گوش دادن است.

برای بررسی رول‌های UFW:

sudo ufw status verbose

برای بررسی اینکه سرویس روی پورت موردنظر listen می‌کند:

sudo ss -tulpen

یا برای بررسی یک پورت خاص، مثلاً ۸۰:

sudo ss -tulpen | grep ':80'

از بیرون سرور هم می‌توانید با ابزارهایی مثل nc یا telnet تست کنید:

nc -vz SERVER_IP 80

اگر پورت در UFW باز است اما اتصال برقرار نمی‌شود، ممکن است سرویس اجرا نشده باشد، روی IP دیگری bind شده باشد، فایروال دیتاسنتر فعال باشد یا تنظیمات سرویس مشکل داشته باشد.

مثال‌های کاربردی باز کردن پورت در اوبونتو

کاربرددستور
باز کردن SSHsudo ufw allow OpenSSH
باز کردن پورت 22 TCPsudo ufw allow 22/tcp
باز کردن HTTPsudo ufw allow 80/tcp
باز کردن HTTPSsudo ufw allow 443/tcp
باز کردن HTTP و HTTPS برای Nginxsudo ufw allow 'Nginx Full'
باز کردن HTTP و HTTPS برای Apachesudo ufw allow 'Apache Full'
باز کردن پورت 8080 TCPsudo ufw allow 8080/tcp
باز کردن پورت فقط برای یک IPsudo ufw allow from 203.0.113.10 to any port 22 proto tcp
باز کردن پورت برای یک شبکهsudo ufw allow from 192.168.1.0/24 to any port 22 proto tcp
حذف رول پورت 22sudo ufw delete allow 22/tcp

خطاها و مشکلات رایج

پورت را باز کردم اما سرویس در دسترس نیست

باز بودن پورت در فایروال فقط یک بخش ماجراست. باید مطمئن شوید سرویس مربوطه هم اجرا شده و روی همان پورت listen می‌کند. دستور زیر را بررسی کنید:

sudo ss -tulpen

بعد از فعال کردن UFW اتصال SSH قطع شد

احتمالاً قبل از فعال کردن فایروال، پورت SSH را باز نکرده‌اید یا SSH روی پورت دیگری اجرا می‌شود. اگر دسترسی قطع شده، باید از کنسول سرور یا پنل ارائه‌دهنده VPS وارد شوید و رول SSH را اصلاح کنید.

UFW فعال است اما پورت از بیرون بسته دیده می‌شود

ممکن است فایروال دیگری در سطح دیتاسنتر، پنل ابری، Docker، iptables/nftables یا نرم‌افزار امنیتی فعال باشد. همچنین ممکن است سرویس فقط روی localhost bind شده باشد.

دستور ufw allow اجرا می‌شود اما تغییری نمی‌بینم

بعد از اجرای دستور، وضعیت را با این دستور بررسی کنید:

sudo ufw status numbered

اگر UFW غیرفعال است، رول اضافه می‌شود اما اعمال عملی آن بعد از فعال شدن UFW اتفاق می‌افتد.

پورت دیتابیس را باز کرده‌ام اما اتصال برقرار نمی‌شود

برای سرویس‌هایی مثل MySQL یا PostgreSQL علاوه بر فایروال، باید تنظیمات خود سرویس مثل bind-address، فایل‌های config و مجوز کاربران دیتابیس هم بررسی شود. باز کردن پورت به‌تنهایی کافی نیست.

نکات امنیتی مهم هنگام باز کردن پورت

  • فقط پورت‌هایی را باز کنید که واقعاً لازم هستند.
  • پورت‌های مدیریتی مثل SSH را در صورت امکان فقط برای IP مشخص باز کنید.
  • پورت دیتابیس را برای همه اینترنت باز نکنید.
  • بعد از هر تغییر، وضعیت UFW را بررسی کنید.
  • برای SSH از رمز قوی یا بهتر از آن SSH Key استفاده کنید.
  • در صورت نیاز، Fail2Ban را برای محافظت از SSH فعال کنید.
  • اگر Docker استفاده می‌کنید، تأثیر Docker روی iptables و expose شدن پورت‌ها را بررسی کنید.
  • برای سرویس‌های عمومی مثل وب‌سایت، SSL را فعال کنید.
  • رول‌های قدیمی و بی‌استفاده را حذف کنید.

برای آشنایی بیشتر با امنیت و زیرساخت سرور، می‌توانید مطالب مرتبط در دسته امنیت سایت و سرور و لینوکس و مدیریت سرور را دنبال کنید. اگر روی سرور وب‌سایت میزبانی می‌کنید، مقاله SSL چیست؟ هم برای درک بهتر امنیت ارتباط کاربران مفید است.

جمع‌بندی

باز کردن پورت در فایروال اوبونتو با UFW کار ساده‌ای است، اما باید با دقت انجام شود. برای باز کردن یک پورت می‌توانید از دستور sudo ufw allow استفاده کنید و در صورت نیاز پروتکل TCP یا UDP را مشخص کنید. همچنین می‌توانید دسترسی را فقط به یک IP یا یک شبکه خاص محدود کنید.

مهم‌ترین نکته این است که هر پورتی که باز می‌کنید، سطح دسترسی سرور را تغییر می‌دهد. بنابراین پورت‌های مدیریتی، دیتابیس و سرویس‌های حساس را برای همه اینترنت باز نگذارید. همیشه بعد از اعمال تغییرات، وضعیت UFW و وضعیت listen بودن سرویس را بررسی کنید.

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

سوالات متداول

چطور یک پورت را در فایروال اوبونتو باز کنم؟

برای باز کردن یک پورت از دستور sudo ufw allow PORT/protocol استفاده کنید. مثلاً برای باز کردن پورت SSH روی TCP: sudo ufw allow 22/tcp.

چطور وضعیت UFW را ببینم؟

با دستور sudo ufw status می‌توانید وضعیت فایروال را ببینید. برای نمایش جزئی‌تر از sudo ufw status verbose و برای نمایش شماره رول‌ها از sudo ufw status numbered استفاده کنید.

چطور پورت 80 و 443 را باز کنم؟

برای HTTP و HTTPS این دستورات را اجرا کنید: sudo ufw allow 80/tcp و sudo ufw allow 443/tcp.

چطور پورت را فقط برای یک IP خاص باز کنم؟

از دستور زیر استفاده کنید و IP و پورت را تغییر دهید: sudo ufw allow from 203.0.113.10 to any port 22 proto tcp.

چطور یک رول را در UFW حذف کنم؟

می‌توانید همان رول را با delete حذف کنید؛ مثلاً sudo ufw delete allow 22/tcp. همچنین می‌توانید با sudo ufw status numbered شماره رول را ببینید و با sudo ufw delete NUMBER آن را حذف کنید.

اگر پروتکل TCP یا UDP را مشخص نکنم چه می‌شود؟

در بسیاری از حالت‌ها UFW رول را برای هر دو پروتکل در نظر می‌گیرد. اما برای امنیت و دقت بهتر، توصیه می‌شود پروتکل موردنیاز را مشخص کنید.

آیا باز کردن پورت یعنی سرویس حتماً کار می‌کند؟

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

چرا با وجود باز کردن پورت، اتصال برقرار نمی‌شود؟

ممکن است سرویس اجرا نشده باشد، روی localhost bind شده باشد، فایروال دیتاسنتر فعال باشد، پورت اشتباه باشد یا سرویس به تنظیمات دیگری نیاز داشته باشد.

آیا باز کردن پورت SSH برای همه خطرناک است؟

باز بودن SSH برای همه اینترنت ریسک حملات brute force را افزایش می‌دهد. بهتر است از SSH Key، رمز قوی، Fail2Ban و در صورت امکان محدودسازی IP استفاده کنید.

برای سرور وب معمولاً چه پورت‌هایی باید باز باشند؟

برای وب‌سایت عمومی معمولاً پورت‌های 80/tcp و 443/tcp لازم هستند. برای مدیریت سرور هم پورت SSH لازم است، اما بهتر است دسترسی SSH محدودتر و امن‌تر باشد.