فایروال UFW در اوبونتو: نصب و تنظیم قدم به قدم

فایروال UFW (Uncomplicated Firewall) رابط ساده‌ای برای مدیریت فایروال اوبونتو است. روش درست استفاده از آن این است: اول سیاست پیش‌فرض را روی «رد کردن ورودی» بگذارید، پیش از فعال کردن، پورت SSH را مجاز کنید و بعد فقط پورت‌هایی را که لازم دارید، مثل ۸۰ و ۴۴۳، باز کنید. اگر ترتیب را برعکس بروید و SSH را مجاز نکرده UFW را فعال کنید، از سرور بیرون می‌مانید.

UFW خودش فایروال جدا نیست؛ قوانین را برای iptables یا nftables می‌نویسد. روی Ubuntu نصب است ولی به‌طور پیش‌فرض غیرفعال است. این راهنما برای Ubuntu 22.04 و 24.04 است. برای تصویر کلی‌تر از ایمن‌سازی سرور، چک لیست امنیت سرور لینوکس را هم ببینید.

مرحله اول: وضعیت فعلی

sudo ufw status verbose

اگر جواب Status: inactive بود، UFW فعال نیست و هنوز هیچ قانونی اعمال نشده است. دستور بالا نشان می‌دهد سیاست‌های پیش‌فرض و قانون‌های موجود چیست.

سیاست پیش‌فرض فایروال UFW

sudo ufw default deny incoming
sudo ufw default allow outgoing

یعنی هر ارتباط ورودی که صریحاً مجاز نشده رد شود و ارتباط‌های خروجی آزاد باشند. این سیاست در بیشتر سرورها درست است.

مرحله سوم: اول SSH را مجاز کنید

مهم‌ترین قدم پیش از فعال کردن UFW این است:

sudo ufw allow OpenSSH

اگر پورت SSH را عوض کرده‌اید، پورت واقعی را بنویسید، مثلاً sudo ufw allow 2222/tcp. اگر این مرحله جا بیفتد، با فعال شدن UFW نشست فعلی ممکن است بماند، ولی اتصال بعدی شما رد می‌شود. در این حالت فقط کنسول سرور از پنل ارائه‌دهنده کمک می‌کند.

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

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

برای Nginx یا Apache پروفایل آماده هم دارید: sudo ufw allow 'Nginx Full'. فهرست پروفایل‌های نصب‌شده را sudo ufw app list نشان می‌دهد. در جدول زیر چند شکل رایج نوشتن قانون آمده است:

هدفدستور
یک پورت TCPsudo ufw allow 443/tcp
یک بازه پورتsudo ufw allow 6000:6010/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 3306 proto tcp
رد کردن یک IPsudo ufw deny from 203.0.113.50

آدرس‌ها در جدول نمونه‌اند. محدود کردن SSH به IP مدیریتی، بهتر از باز گذاشتنش برای همه است. اگر زیرشبکه‌ها را با ماسک می‌نویسید و در محاسبه‌شان شک دارید، ابزار محاسبه ساب نت کمک می‌کند.

مرحله پنجم: فعال کردن UFW

sudo ufw enable
sudo ufw status numbered

پیام هشدار درباره قطع اتصال‌های SSH را می‌بینید؛ اگر مرحله سوم را انجام داده‌اید، با y تأیید کنید. گزینه numbered قانون‌ها را شماره‌دار نشان می‌دهد که برای حذف لازم است.

حذف و تغییر قانون‌ها

sudo ufw delete 3
sudo ufw delete allow 80/tcp
sudo ufw reload

دستور اول قانون شماره ۳ از فهرست numbered را پاک می‌کند. دقت کنید بعد از هر حذف شماره‌ها عوض می‌شوند، پس شماره را دوباره از status numbered بخوانید. دستور sudo ufw disable فایروال را خاموش می‌کند و sudo ufw reset همه قانون‌ها را پاک می‌کند؛ هر دو را فقط وقتی لازم است بزنید.

محدود کردن تلاش‌های ورود با limit

دستور limit برای یک پورت، آدرسی را که در ۳۰ ثانیه ۶ بار یا بیشتر وصل شود موقتاً رد می‌کند:

sudo ufw limit OpenSSH

این روش ساده‌ای برای کند کردن حدس رمز است، ولی انعطاف Fail2ban را ندارد؛ جزئیات آن در نصب و تنظیم Fail2ban آمده است. اگر ورود با رمز را بسته‌اید و فقط کلید قبول می‌شود، هر دو بیشتر نویز لاگ را کم می‌کنند.

لاگ UFW

sudo ufw logging on
sudo tail -f /var/log/ufw.log

لاگ نشان می‌دهد چه ارتباط‌هایی رد شده‌اند و برای فهمیدن اینکه چرا یک سرویس از بیرون در دسترس نیست مفید است. سطح لاگ را با sudo ufw logging medium بالا می‌برند، ولی روی سرور پرترافیک لاگ زیاد می‌شود.

UFW و Docker

Docker قانون‌هایش را مستقیم در iptables می‌نویسد، پس پورتی که با -p منتشر می‌کند، با وجود UFW هم از بیرون باز است. اگر روی سرور از Docker استفاده می‌کنید، پورت‌های داخلی را روی 127.0.0.1 منتشر کنید؛ نکته‌اش در نصب Docker روی اوبونتو آمده است.

بررسی پورت‌های باز

بعد از تنظیم، ببینید از دید بیرون چه چیزی باز است. روی خود سرور:

sudo ss -ltnp

و برای بررسی یک پورت از اینترنت می‌توانید از ابزار تست پورت باز استفاده کنید؛ این ابزار فقط IP خود شما را بررسی می‌کند. سرویسی که به‌جز SSH و وب‌سرور روی همه آدرس‌ها گوش می‌دهد و نیازی به آن نیست، باید متوقف یا محدود شود.

خطاهای رایج

نشانهعلت و راه حل
بعد از enable اتصال SSH قطع شدقانون SSH پیش از فعال کردن نبوده؛ از کنسول سرور ufw allow OpenSSH را بزنید
پورت را باز کرده‌ام ولی از بیرون در دسترس نیستسرویس روی همه آدرس‌ها گوش نمی‌دهد یا فایروال ارائه‌دهنده جلوی آن را می‌گیرد
قانون اضافه می‌شود ولی اثر نداردقانونی با اولویت بالاتر آن را رد می‌کند؛ ufw status numbered را ببینید
IPv6 باز ماندهدر فایل /etc/default/ufw مقدار IPV6=yes باشد تا قانون‌ها برای آن هم اعمال شوند

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

فایروال UFW بهتر است یا iptables؟

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

قانون‌های UFW بعد از ری‌استارت می‌مانند؟

بله. UFW قانون‌ها را ذخیره می‌کند و با بالا آمدن سیستم دوباره اعمال می‌کند، به شرطی که فعال باشد.

روی AlmaLinux هم UFW هست؟

فایروال پیش‌فرض آن firewalld است. می‌توان UFW نصب کرد ولی بهتر است در هر توزیع از ابزار پیش‌فرضش استفاده شود تا دو ابزار با هم تداخل نکنند.

آیا با UFW نیازی به فایروال شبکه هم هست؟

برای محافظت از یک سرور، UFW لایه خوبی است. اگر چند سرور و شبکه داخلی دارید، فایروال شبکه مرکزی کنترل و دید بهتری می‌دهد؛ هر دو لایه کنار هم کار می‌کنند.

منابع