اصول UFW: قوانین و دستورات رایج فایروال برای امنیت لینوکس

مقدمه
UFW (فایروال بدون پیچیدگی) یک ابزار خط فرمان است که برای ساده کردن مدیریت فایروال روی سیستمهای لینوکسی—بهویژه مبتنی بر اوبونتو—طراحی شده. ساختهشده روی iptables، روشی کاربرپسند برای تعریف قوانین کنترل ترافیک شبکه فراهم میکند؛ مانند اجازه یا بلاک کردن پورتها، آدرسهای IP یا سرویسهای خاص. UFW برای مدیران سیستم و توسعهدهندگانی که لازم است سرورها را بدون درگیر شدن با پیچیدگی دستورات خام iptables امن کنند مفید است؛ و رویکردی سرراست برای مدیریت هر دو ترافیک IPv4 و IPv6 ارائه میدهد.
این راهنما به سبک برگه-تقلب (Cheat Sheet)، مرجعی سریع به موارد استفاده و دستورات رایج UFW فراهم میکند؛ شامل مثالهایی از نحوه اجازه و بلاک کردن سرویسها بر اساس پورت، اینترفیس شبکه و آدرس IP مبدأ. همچنین سیاستهای پیشفرض، پروفایلهای اپلیکیشن، دسترسی SSH و سناریوهای استفاده پیشرفته را پوشش میدهد؛ و منبعی عملی برای مدیریت امن قوانین فایروال روی سیستمهای اوبونتویی میسازد.
نکات کلیدی
- UFW مدیریت فایروال را ساده میکند: UFW یک رابط کاربرپسند برای مدیریت iptables است؛ طراحیشده برای ساده کردن پیکربندی فایروال روی سیستمهای مبتنی بر اوبونتو.
- سیاستهای پیشفرض بهصورت طراحی امناند: بهطور پیشفرض، UFW همه اتصالات ورودی را رد و همه اتصالات خروجی را مجاز میکند؛ که خط پایه امنی برای بیشتر سرورها میسازد.
- همیشه قبل از فعال کردن UFW اجازه SSH بدهید: اگر با SSH وصل هستید، قبل از فعالسازی UFW دسترسی SSH را با
sudo ufw allow OpenSSHمجاز کنید تا از دست رفتن دسترسی ریموت جلوگیری شود. - از پروفایلهای اپلیکیشن وقتی موجودند استفاده کنید: UFW با پروفایلهای اپلیکیشن (مثل Nginx Full و OpenSSH) یکپارچه است؛ که ساخت قوانین را بدون تعیین دستی شماره پورتها آسانتر میکند.
- پشتیبانی از قوانین مبتنی بر IP: میتوانید ترافیک از آدرسهای IP یا زیرشبکههای خاص را با دستورات سادهای مثل
ufw allow from IPیاufw deny from subnetمجاز یا بلاک کنید. - قوانین خاص-اینترفیس کنترل ریزبینانه میدهند: UFW هدفگیری قانون به ازای اینترفیس شبکه را ممکن میکند؛ که برای سیستمهای چند-اینترفیسی و محیطهای مجازیسازیشده مفید است.
- UFW با هر دو IPv4 و IPv6 یکپارچه است: قوانین به هر دو نسخه IP اعمال میشوند مگر صریحاً غیرفعال شوند. ورودیهای (v6) را در خروجی status برای قوانین IPv6 میبینید.
- داکر میتواند با UFW تداخل کند: داکر مستقیماً iptables را تغییر میدهد و بهطور بالقوه از قوانین UFW عبور میکند؛ مگر اینکه پیکربندی اضافی اعمال شود.
- قوانین UFW را میتوان بهراحتی ریست یا حذف کرد: از
ufw resetبرای پاک کردن همه قوانین یاufw deleteبرای حذف موارد خاص—including با شماره قانون برای دقت—استفاده کنید. - بهترین روشها امنیت و نگهداریپذیری را ارتقا میبخشند: راهنما بر روشهای شفاف تأکید دارد: تنظیم زودهنگام سیاستهای پیشفرض، بکاپ گرفتن مجموعه قوانین، استفاده از لاگینگ و پرهیز از استفاده از firewalld همراه UFW.
نحوه استفاده از این راهنما
این راهنما به قالب برگه تقلب با قطعات خط فرمانِ خودکفاست.
- به هر بخشی که با کاری که سعی در انجامش دارید مرتبط است بپرید.
- وقتی متن هایلایتشده در دستورات این راهنما میبینید، در نظر داشته باشید این متن باید به آدرسهای IP از شبکه شما اشاره کند.
- یادتان باشد میتوانید مجموعه قوانین فعلی UFW را با
sudo ufw statusیاsudo ufw status verboseچک کنید.
اپلیکیشنهای فرانتاند خود را از گیتهاب روی زیرساخت ابری پارمین کلود دیپلوی کنید و مقیاسپذیری و مدیریت زیرساخت را به پارمین کلود بسپارید.
نحوه تأیید وضعیت UFW
برای چک اینکه آیا ufw فعال است، اجرا کنید:
sudo ufw status
Output
Status: inactive
خروجی نشان میدهد فایروال فعال است یا نه.
نحوه فعال کردن UFW
اگر هنگام اجرای ufw status پیام Status: inactive گرفتید، یعنی فایروال هنوز روی سیستم فعال نشده. باید دستوری اجرا کنید تا فعالش کنید.
نکته: بهطور پیشفرض، وقتی فعال شود UFW دسترسی خارجی به همه پورتهای سرور را بلاک میکند. در عمل، یعنی اگر با SSH به سروری وصل هستید و UFW را قبل از اجازه دسترسی از طریق پورت SSH فعال کنید، قطع میشوید. اگر مورد شما این است، مطمئن شوید قبل از فعال کردن فایروال، بخش مربوط به نحوه فعالسازی دسترسی SSH در این راهنما را دنبال کنید.
برای فعال کردن UFW روی سیستمتان، اجرا کنید:
sudo ufw enable
خروجیای شبیه این میبینید:
Output
Firewall is active and enabled on system startup
سیاستهای پیشفرض UFW
وقتی UFW را برای اولین بار فعال میکنید، مجموعهای از سیاستهای پیشفرض را اعمال میکند که تعریف میکنند فایروال چگونه با اتصالات ورودی و خروجی رفتار کند. بهطور پیشفرض، UFW طوری پیکربندی شده که:
- همه اتصالات ورودی را رد کند
- همه اتصالات خروجی را مجاز بداند
میتوانید تنظیمات سیاست پیشفرض فعلی را با دستور زیر تأیید کنید:
sudo ufw status verbose
Output
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
اگر میخواهید رفتار پیشفرض را تغییر دهید، میتوانید سیاستهای پیشفرض را با دستورات زیر بهروزرسانی کنید:
برای رد همه اتصالات ورودی (برای بیشتر سرورها توصیهشده):
sudo ufw default deny incoming
برای مجاز دانستن همه اتصالات خروجی (پیشفرض):
sudo ufw default allow outgoing
برای رد همه ترافیک Forward شده (مرتبط با روترها و دروازهها):
sudo ufw default deny routed
این قوانین پیشفرض بهعنوان خط پایه عمل میکنند. وقتی تنظیم شدند، میتوانید اتصالات مورد اعتماد را صریحاً با قوانین ufw allow—طبق توضیح بخشهای دیگر این راهنما—مجاز کنید.
میتوانید همیشه سیاستهای پیشفرض را در صورت نیاز دوباره اعمال یا ریست کنید؛ بسته به اینکه میخواهید فایروالتان چقدر محدودکننده یا باز باشد.
نحوه غیرفعال کردن UFW
اگر به هر دلیلی لازم است UFW را غیرفعال کنید، میتوانید با دستور زیر این کار را بکنید:
sudo ufw disable
آگاه باشید که این دستور سرویس فایروال را روی سیستمتان کاملاً غیرفعال میکند.
UFW چگونه با iptables یکپارچه میشود
UFW یک رابط کاربرپسند برای مدیریت iptables است؛ چارچوب فیلترینگ بسته زیرین که بیشتر سیستمهای لینوکسی استفاده میکنند. وقتی قوانین فایروال را با UFW پیکربندی میکنید، آن قوانین را در پسزمینه به سینتکس iptables ترجمه میکند.
این یعنی:
- نیازی به نوشتن دستی قوانین iptables ندارید.
- تغییرات دادهشده از طریق UFW بهطور خودکار از طریق iptables اعمال میشوند.
- هر دو قانون IPv4 و IPv6 مدیریت میشوند؛ مگر پشتیبانی IPv6 صریحاً در پیکربندی UFW غیرفعال شده باشد.
برای چک کردن اینکه آیا UFW قوانین iptables شما را مدیریت میکند، میتوانید خروجی خام iptables را بازرسی کنید:
sudo iptables -L
زنجیرهایی (Chain) مثل ufw-before-input، ufw-user-input و موارد دیگر را میبینید؛ که بهطور خودکار توسط UFW ساخته و مدیریت میشوند تا سیاستهایش را الزامی کنند.
UFW تعاریف قانون ماندگارش را در فایلهای پیکربندی—معمولاً زیر:
Output
/etc/ufw/
ذخیره میکند. بیشتر کاربران هرگز لازم نیست این فایلها را مستقیم ویرایش کنند. اما اگر قوانین iptables را هم دستی یا از طریق ابزارهای دیگر (مثل داکر یا اسکریپتهای سفارشی) مدیریت میکنید، باید آگاه باشید که UFW ممکن است آن قوانین را بازنویسی یا با آنها تداخل کند.
نکته: اگر UFW را اجرا میکنید و هم قوانین دستی iptables اعمال میکنید، بهتر است قوانین سفارشی را از طریق UFW اعمال یا از فایلهای پیکربندی before.rules و after.rules مربوط به UFW استفاده کنید تا سازگاری تضمین شود.
در حالی که UFW مدیریت قانون را ساده میکند، iptables همچنان فیلترینگ واقعی بستهها را در سطح کرنل انجام میدهد. UFW را بهعنوان دستیار خط فرمانی در نظر بگیرید که iptables را روان صحبت میکند؛ پس شما مجبور نیستید.
نحوه بلاک کردن یک آدرس IP
برای بلاک کردن همه اتصالات شبکهای که از آدرس IP خاصی منشأ میگیرند، دستور زیر را اجرا کنید؛ و IP هایلایتشده را با آدرس IPای که میخواهید بلاک کنید جایگزین نمایید:
sudo ufw deny from 203.0.113.100
Output
Rule added
در این مثال، from 203.0.113.100 آدرس IP مبدأِ «203.0.113.100» را مشخص میکند.
اگر الان sudo ufw status را اجرا کنید، آدرس IP مشخصشده را بهعنوان denied فهرستشده میبینید:
Output
Status: active
To Action From
-- ------ ----
Anywhere DENY 203.0.113.100
همه اتصالات—ورودی یا خروجی—برای آدرس IP مشخصشده بلاک میشوند.
نحوه بلاک کردن یک زیرشبکه
اگر لازم است کل زیرشبکهای را بلاک کنید، میتوانید از آدرس زیرشبکه با پارامتر from در دستور ufw deny استفاده کنید. این همه آدرسهای IP در زیرشبکه نمونه 203.0.113.0/24 را بلاک میکند:
sudo ufw deny from 203.0.113.0/24
Output
Rule added
نحوه بلاک کردن اتصالات ورودی به یک اینترفیس شبکه
برای بلاک کردن اتصالات ورودی از آدرس IP خاصی به اینترفیس شبکه مشخص، دستور زیر را اجرا کنید؛ و IP هایلایتشده را با آدرسی که میخواهید بلاک کنید جایگزین کنید:
sudo ufw deny in on eth0 from 203.0.113.100
Output
Rule added
پارامتر in به ufw میگوید قانون را فقط برای اتصالات ورودی اعمال کند؛ و پارامتر on eth0 مشخص میکند قانون فقط برای اینترفیس eth0 اعمال میشود. این ممکن است مفید باشد اگر سیستمی با چندین اینترفیس شبکه (شامل مجازیها) دارید و لازم است دسترسی خارجی به برخی از این اینترفیسها را—نه همه—بلاک کنید.
نحوه مجاز کردن یک آدرس IP
برای مجاز کردن همه اتصالات شبکهای که از آدرس IP خاصی منشأ میگیرند، دستور زیر را اجرا کنید؛ و IP هایلایتشده را با آدرسی که میخواهید مجاز کنید جایگزین کنید:
sudo ufw allow from 203.0.113.101
Output
Rule added
اگر الان sudo ufw status را اجرا کنید، خروجیای شبیه این میبینید؛ که کلمه ALLOW را کنار IPای که الان اضافه کردید نشان میدهد:
Output
Status: active
To Action From
-- ------ ----
...
Anywhere ALLOW 203.0.113.101
همچنین میتوانید با ارائه ماسک زیرشبکه متناظر—مثل 203.0.113.0/24—اتصالات از کل زیرشبکه را مجاز کنید.
نحوه مجاز کردن اتصالات ورودی به یک اینترفیس شبکه
برای مجاز کردن اتصالات ورودی از آدرس IP خاصی به اینترفیس شبکه مشخص، دستور زیر را اجرا کنید؛ و IP هایلایتشده را با آدرسی که میخواهید مجاز کنید جایگزین کنید:
sudo ufw allow in on eth0 from 203.0.113.102
Output
Rule added
پارامتر in به ufw میگوید قانون را فقط برای اتصالات ورودی اعمال کند؛ و پارامتر on eth0 مشخص میکند قانون فقط برای اینترفیس eth0 اعمال میشود.
اگر الان sudo ufw status را اجرا کنید، خروجیای شبیه این میبینید:
Output
Status: active
To Action From
-- ------ ----
...
Anywhere on eth0 ALLOW 203.0.113.102
نحوه حذف قانون UFW
برای حذف قانونی که قبلاً در UFW تنظیم کردهاید، از ufw delete بهدنبالش قانون (allow یا deny) و مشخصه هدف استفاده کنید. مثال زیر قانونِ قبلاً تنظیمشده برای مجاز کردن همه اتصالات از IP 203.0.113.101 را حذف میکند:
sudo ufw delete allow from 203.0.113.101
Output
Rule deleted
راه دیگر مشخص کردن کدام قانون را میخواهید حذف کنید، ارائه شناسه قانون (ID) است. این اطلاعات را میتوان با دستور زیر به دست آورد:
sudo ufw status numbered
Output
Status: active
To Action From
-- ------ ----
[ 1] Anywhere DENY IN 203.0.113.100
[ 2] Anywhere on eth0 ALLOW IN 203.0.113.102
از خروجی میتوانید ببینید دو قانون فعال وجود دارد. قانون اول، با مقادیر هایلایتشده، همه اتصالاتِ آینده از IP 203.0.113.100 را رد میکند. قانون دوم، اتصالات روی اینترفیس eth0ِ آینده از IP 203.0.113.102 را مجاز میداند.
چون سیاست پیشفرض UFW همه ترافیک ورودی را رد میکند، قانون DENY خاص فقط برای بازنویسی قانون ALLOW آسانگیرانهتر لازم است. اگر هیچ قانون ALLOW متناقضی برای آن مبدأ ندارید، میتوانید این قانون را حذف کنید.
برای حذف قانون با شناسهاش، اجرا کنید:
sudo ufw delete 1
از شما برای تأیید عملیات و مطمئن شدن اینکه شناسهای که ارائه میکنید به قانون درستِ موردنظر اشاره دارد، پرامپت گرفته میشود:
Output
Deleting:
deny from 203.0.113.100
Proceed with operation (y|n)? y
Rule deleted
اگر قوانینتان را دوباره با sudo ufw status فهرست کنید، میبینید که قانون حذف شده.
نحوه فهرست کردن پروفایلهای اپلیکیشن موجود
هنگام نصب، اپلیکیشنهایی که به ارتباطات شبکه متکیاند معمولاً پروفایل UFWای میسازند که میتوانید برای مجاز کردن اتصالات از آدرسهای خارجی استفاده کنید. این اغلب همان اجرای ufw allow from است؛ با مزیت فراهم کردن میانبری که شماره پورتهای خاصِ استفادهشده توسط سرویس را انتزاعی و نامگذاری کاربرپسند برای سرویسهای ارجاعشده فراهم میکند.
برای فهرست اینکه کدام پروفایلها الان موجودند، این را اجرا کنید:
sudo ufw app list
اگر سرویسی مثل وبسرور یا نرمافزار شبکه-وابسته دیگری نصب کردهاید و پروفایلی در UFW در دسترس نشده، اول مطمئن شوید سرویس فعال است. برای سرورهای ریموت، معمولاً OpenSSH در دسترس دارید:
Output
Available applications:
OpenSSH
نحوه فعال کردن پروفایل اپلیکیشن
برای فعال کردن پروفایل اپلیکیشن UFW، ufw allow را بهدنبالش نام پروفایل اپلیکیشنی که میخواهید فعال کنید اجرا کنید؛ که میتوانید با دستور sudo ufw app list به دستش بیاورید. در مثال زیر، پروفایل OpenSSH را فعال میکنیم؛ که همه اتصالات ورودی SSH را روی پورت پیشفرض SSH مجاز میداند:
sudo ufw allow "OpenSSH"
Output
Rule added
Rule added (v6)
یادتان باشد نام پروفایلهایی که از چند کلمه تشکیل شدهاند—مثل Nginx HTTPS—را کوتیشن کنید.
نحوه غیرفعال کردن پروفایل اپلیکیشن
برای غیرفعال کردن پروفایل اپلیکیشنی که قبلاً در UFW تنظیم کردهاید، باید قانون متناظرش را حذف کنید. مثلاً خروجی زیر از sudo ufw status را در نظر بگیرید:
sudo ufw status
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
این خروجی نشان میدهد پروفایل اپلیکیشن Nginx Full الان فعال است؛ و همه اتصالات به وبسرور را هم از طریق HTTP و هم HTTPS مجاز میداند. اگر میخواهید فقط درخواستهای HTTPS از و به وبسرورتان مجاز باشند، باید اول محدودکنندهترین قانون را فعال کنید—which در این مورد Nginx HTTPS میشود—سپس قانون Nginx Fullِ فعالِ فعلی را غیرفعال کنید:
sudo ufw allow "Nginx HTTPS"
sudo ufw delete allow "Nginx Full"
یادتان باشد میتوانید همه پروفایلهای اپلیکیشن موجود را با sudo ufw app list فهرست کنید.
نحوه مجاز کردن SSH
هنگام کار با سرورهای ریموت، میخواهید مطمئن شوید پورت SSH برای اتصالات باز است تا بتوانید از راه دور به سرورتان وارد شوید.
دستور زیر پروفایل اپلیکیشن OpenSSH در UFW را فعال و همه اتصالات به پورت پیشفرض SSH روی سرور را مجاز میکند:
sudo ufw allow OpenSSH
Output
Rule added
Rule added (v6)
هرچند کمتر کاربرپسند است، سینتکس جایگزین، تعیین شماره پورت دقیق سرویس SSH است؛ که معمولاً بهطور پیشفرض ۲۲ تنظیم شده:
sudo ufw allow 22
Output
Rule added
Rule added (v6)
نحوه مجاز کردن SSH ورودی از IP یا زیرشبکه خاص
برای مجاز کردن اتصالات ورودی از آدرس IP یا زیرشبکه خاص، از دایرکتیو from برای تعریف مبدأ اتصال استفاده کنید. این نیازمند آن است که آدرس مقصد را هم با پارامتر to مشخص کنید. برای قفل کردن این قانون فقط به SSH، پروتکل (proto) را به tcp محدود و سپس از پارامتر port استفاده و روی ۲۲—پورت پیشفرض SSH—تنظیمش کنید.
دستور زیر فقط اتصالات SSHِ آینده از IP 203.0.113.103 را مجاز میکند:
sudo ufw allow from 203.0.113.103 proto tcp to any port 22
Output
Rule added
همچنین میتوانید از آدرس زیرشبکه بهعنوان پارامتر from برای مجاز کردن اتصالات SSH ورودی از کل شبکه استفاده کنید:
sudo ufw allow from 203.0.113.0/24 proto tcp to any port 22
Output
Rule added
نحوه مجاز کردن Rsync ورودی از IP یا زیرشبکه خاص
برنامه Rsync—which روی پورت ۸۷۳ اجرا میشود—را میتوان برای انتقال فایل از کامپیوتری به کامپیوتر دیگر استفاده کرد.
برای مجاز کردن اتصالات rsync ورودی از آدرس IP یا زیرشبکه خاص، از پارامتر from برای مشخص کردن IP مبدأ و پارامتر port برای تنظیم پورت مقصد ۸۷۳ استفاده کنید.
دستور زیر فقط اتصالات Rsyncِ آینده از IP 203.0.113.103 را مجاز میکند:
sudo ufw allow from 203.0.113.103 to any port 873
Output
Rule added
برای مجاز کردن کل زیرشبکه 203.0.113.0/24 برای اتصال به سرورتان از طریق rsync:
sudo ufw allow from 203.0.113.0/24 to any port 873
Output
Rule added
نحوه مجاز کردن HTTP/HTTPS در Nginx
هنگام نصب، وبسرور Nginx چند پروفایل مختلف UFW در سرور تنظیم میکند. وقتی Nginx را نصب و بهعنوان سرویس فعال کردید، دستور زیر را اجرا کنید تا بفهمید کدام پروفایلها موجودند:
sudo ufw app list | grep Nginx
Output
Nginx Full
Nginx HTTP
Nginx HTTPS
برای فعال کردن هر دو ترافیک HTTP و HTTPS، Nginx Full را انتخاب کنید. در غیر این صورت، یا Nginx HTTP برای مجاز کردن فقط HTTP یا Nginx HTTPS برای مجاز کردن فقط HTTPS را انتخاب کنید.
دستور زیر هر دو ترافیک HTTP و HTTPS را روی سرور (پورتهای ۸۰ و ۴۴۳) مجاز میکند:
sudo ufw allow "Nginx Full"
Output
Rule added
Rule added (v6)
نحوه مجاز کردن HTTP/HTTPS در Apache
هنگام نصب، وبسرور Apache چند پروفایل مختلف UFW در سرور تنظیم میکند. وقتی Apache را نصب و بهعنوان سرویس فعال کردید، دستور زیر را اجرا کنید تا بفهمید کدام پروفایلها موجودند:
sudo ufw app list | grep Apache
Output
Apache
Apache Full
Apache Secure
برای فعال کردن هر دو ترافیک HTTP و HTTPS، Apache Full را انتخاب کنید. در غیر این صورت، یا Apache برای HTTP یا Apache Secure برای HTTPS را انتخاب کنید.
دستور زیر هر دو ترافیک HTTP و HTTPS را روی سرور (پورتهای ۸۰ و ۴۴۳) مجاز میکند:
sudo ufw allow "Apache Full"
Output
Rule added
Rule added (v6)
نحوه مجاز کردن همه HTTP ورودی (پورت ۸۰)
وبسرورها—مثل Apache و Nginx—معمولاً به درخواستهای HTTP روی پورت ۸۰ گوش میدهند. اگر سیاست پیشفرضتان برای ترافیک ورودی روی drop یا deny تنظیم شده، باید قانون UFW بسازید تا دسترسی خارجی روی پورت ۸۰ مجاز شود. میتوانید یا شماره پورت یا نام سرویس (http) را بهعنوان پارامتر این دستور استفاده کنید.
برای مجاز کردن همه اتصالات HTTP ورودی (پورت ۸۰)، اجرا کنید:
sudo ufw allow http
Output
Rule added
Rule added (v6)
سینتکس جایگزین، تعیین شماره پورت سرویس HTTP است:
sudo ufw allow 80
Output
Rule added
Rule added (v6)
نحوه مجاز کردن همه HTTPS ورودی (پورت ۴۴۳)
HTTPS معمولاً روی پورت ۴۴۳ اجرا میشود. اگر سیاست پیشفرضتان برای ترافیک ورودی روی drop یا deny تنظیم شده، باید قانون UFW بسازید تا دسترسی خارجی روی پورت ۴۴۳ مجاز شود. میتوانید یا شماره پورت یا نام سرویس (https) را بهعنوان پارامتر این دستور استفاده کنید.
برای مجاز کردن همه اتصالات HTTPS ورودی (پورت ۴۴۳)، اجرا کنید:
sudo ufw allow https
Output
Rule added
Rule added (v6)
سینتکس جایگزین، تعیین شماره پورت سرویس HTTPS است:
sudo ufw allow 443
Output
Rule added
Rule added (v6)
نحوه مجاز کردن همه HTTP و HTTPS ورودی
اگر میخواهید هر دو ترافیک HTTP و HTTPS را مجاز کنید، میتوانید قانون منفردی بسازید تا ترافیک روی هر دو پورت همزمان مجاز شود. این استفاده نیازمند آن است که پروتکل را هم با پارامتر proto تعریف کنید؛ که در این مورد باید روی tcp تنظیم شود.
برای مجاز کردن همه اتصالات HTTP و HTTPS ورودی (پورتهای ۸۰ و ۴۴۳)، اجرا کنید:
sudo ufw allow proto tcp from any to any port 80,443
Output
Rule added
Rule added (v6)
نحوه مجاز کردن اتصال MySQL از IP یا زیرشبکه خاص
MySQL به اتصالات کلاینت روی پورت ۳۳۰۶ گوش میدهد. اگر سرور دیتابیس MySQL شما توسط کلاینتی روی سرور ریموت استفاده میشود، باید قانون UFW بسازید تا آن دسترسی مجاز شود.
برای مجاز کردن اتصالات MySQL ورودی از آدرس IP یا زیرشبکه خاص، از پارامتر from برای مشخص کردن IP مبدأ و پارامتر port برای تنظیم پورت مقصد ۳۳۰۶ استفاده کنید.
دستور زیر به IP 203.0.113.103 اجازه اتصال به پورت MySQL سرور را میدهد:
sudo ufw allow from 203.0.113.103 to any port 3306
Output
Rule added
برای مجاز کردن کل زیرشبکه 203.0.113.0/24 برای اتصال به سرور MySQL شما، اجرا کنید:
sudo ufw allow from 203.0.113.0/24 to any port 3306
Output
Rule added
نحوه مجاز کردن اتصال PostgreSQL از IP یا زیرشبکه خاص
PostgreSQL به اتصالات کلاینت روی پورت ۵۴۳۲ گوش میدهد. اگر سرور دیتابیس PostgreSQL شما توسط کلاینتی روی سرور ریموت استفاده میشود، باید این ترافیک را صریحاً مجاز کنید.
برای مجاز کردن اتصالات PostgreSQL ورودی از آدرس IP یا زیرشبکه خاص، مبدأ را با پارامتر from مشخص و پورت را روی ۵۴۳۲ تنظیم کنید:
sudo ufw allow from 203.0.113.103 to any port 5432
Output
Rule added
برای مجاز کردن کل زیرشبکه 203.0.113.0/24 برای اتصال به سرور PostgreSQL شما، اجرا کنید:
sudo ufw allow from 203.0.113.0/24 to any port 5432
Output
Rule added
نحوه بلاک کردن ایمیل SMTP خروجی
سرورهای ایمیل—مثل Sendmail و Postfix—معمولاً از پورت ۲۵ برای ترافیک SMTP استفاده میکنند. اگر سرورتان نباید ایمیل خروجی بفرستد، ممکن است بخواهید آن نوع ترافیک را بلاک کنید. برای بلاک کردن اتصالات SMTP خروجی، اجرا کنید:
sudo ufw deny out 25
Output
Rule added
Rule added (v6)
این فایروالتان را طوری پیکربندی میکند که همه ترافیک خروجی روی پورت ۲۵ را رد کند. اگر لازم است اتصالات خروجی را روی شماره پورت متفاوتی رد کنید، میتوانید این دستور را تکرار و ۲۵ را با شماره پورتی که میخواهید بلاک کنید جایگزین کنید.
نحوه ریست کردن UFW به پیکربندی پیشفرض
در طول زمان، مجموعه قوانین UFW شما ممکن است با قوانین تست، ورودیهای تکراری یا پیکربندیهای قدیمی شلوغ شود. اگر تختهپاککنی لازم دارید، UFW دستور داخلی برای ریست پیکربندیاش به حالت پیشفرض فراهم میکند.
ریست کردن UFW این کارها را میکند:
- فایروال را غیرفعال میکند (UFW دیگر فعال نخواهد بود)
- همه قوانین موجود را حذف میکند؛ هم allow و هم deny
- سیاستهای پیشفرض را ریست میکند به: ردِ همه ترافیک ورودی و مجاز دانستن همه ترافیک خروجی
- قوانین پروفایل اپلیکیشن را پاک میکند (مثل OpenSSH، Nginx، Apache)
- همه ارجاعات قانون شمارهگذاریشده استفادهشده برای حذف را حذف میکند
برای اجرای ریست کامل UFW، دستور زیر را اجرا کنید:
sudo ufw reset
Output
Resetting all rules to installed defaults. This may disrupt existing ssh connections. Proceed with operation (y|n)?
برای تأیید، y را تایپ کنید.
این اقدام وقتی مفید است که:
- فایروالتان رفتار غیرمنتظرهای دارد
- چند قانون را بد پیکربندی کردهاید و میخواهید از نو شروع کنید
- نقش سرور را عوض میکنید (مثلاً از وبسرور به نود دیتابیس)
- میخواهید پیکربندیتان را بین سیستمها استاندارد کنید
نکته: اگر از طریق SSH به سرور وصل هستید، UFW را ریست نکنید مگر آماده باشید بلافاصله دسترسی SSH را دوباره مجاز کنید. وگرنه ریسک قفل شدن خودتان را هنگام فعال شدن مجدد فایروال دارید.
بعد از ریست UFW، باید قوانین دسترسی ضروری را دوباره پیکربندی کنید. مثلاً برای مجاز کردن مجدد SSH و فعال کردن فایروال:
sudo ufw allow OpenSSH
sudo ufw enable
سپس میتوانید مجموعه قوانینتان را از صفر بر اساس نیازهای فعلیتان بازسازی کنید.
نحوه شفافسازی تفاوت UFW و firewalld
در حالی که UFW مدیر فایروال پیشفرض روی سیستمهای مبتنی بر اوبونتو است، توزیعهای دیگر لینوکس—بهویژه مبتنی بر Red Hat—از ابزار متفاوتی استفاده میکنند: firewalld. هر دو ابزار همان هدف مدیریت قوانین فایروال را دنبال میکنند؛ اما رویکردهای متفاوتی میگیرند و با اولویتهای متفاوتی طراحی شدهاند.
firewalld چیست؟
firewalld ابزار مدیریت فایروالی است که رابط داینامیکی برای مدیریت قوانین فراهم میکند. از مفهوم Zoneها استفاده میکند؛ که به شما اجازه میدهد سطوح اعتماد متفاوتی برای اینترفیسهای شبکه تعریف کنید (مثلاً: public، internal، dmz). این آن را برای محیطهای پیچیدهتر—جایی که بخشهای مختلف سیستم یا شبکه رفتار فایروال متفاوتی لازم دارند—ایدهآل میکند.
firewalld هم قوانین Runtime و هم Permanent را پشتیبانی میکند. تغییرات Runtime بدون ریاستارت سرویس فوراً اثر میگذارند؛ که آن را برای بهروزرسانیهای در-لحظه مناسب میکند. قوانین Permanent بین ریبوتها باقی میمانند و معمولاً برای پیکربندی بلندمدت استفاده میشوند.
همچنین شامل پشتیبانی Rich Rule (مثل دسترسی مبتنی بر سرویس، انواع ICMP، فیلترینگ اینترفیس و کنترل آدرس مبدأ/مقصد) است و اغلب از طریق ابزارهای گرافیکی مثل firewall-config یا Cockpit مدیریت میشود.
UFW در مقابل firewalld
| ویژگی | UFW | firewalld |
|---|---|---|
| پیشفرض روی | اوبونتو، دبیان | RHEL، CentOS، فدورا |
| سبک پیکربندی | ایستا، مبتنی بر قانون | داینامیک، مبتنی بر Zone |
| Zoneها | پشتیبانینشده | کاملاً پشتیبانیشده |
| انواع قانون | ماندگار | Runtime و Permanent |
| پشتیبانی GUI | GUFW (پایه) | firewall-config، Cockpit (پیشرفته) |
| سادگی سینتکس | CLI ساده و خوانا | انعطافپذیرتر اما پیچیدهتر |
| بکاند | iptables یا nftables (غیرمستقیم) | iptables یا nftables |
| تمرکز مورد استفاده | فایروال پایه هاست | محیطهای چند-اینترفیسی، چند-Zoneی |
نحوه انتخاب بین UFW و firewalld
- UFW را انتخاب کنید اگر سرور تک-منظورهای اجرا میکنید، راهاندازی سریع قانون لازم دارید یا رابط مینیمالی را ترجیح میدهید.
- firewalld را انتخاب کنید اگر با راهاندازیهای چند-اینترفیسی، شبکههای مجازی یا پیکربندیهای در-سطح-سازمانی سروکار دارید؛ جایی که پیکربندیهای مبتنی بر Zone و بهروزرسانی زنده قوانین مهماند.
نکته: از استفاده از UFW و firewalld روی همان سیستم بپرهیزید. آنها همان قوانین زیرین iptables یا nftables را مدیریت میکنند و میتوانند با هم تداخل کنند؛ که باعث رفتار غیرمنتظره میشود.
نحوه چک و مدیریت وضعیت firewalld
برای چک اینکه آیا firewalld روی سیستمتان در حال اجراست:
sudo systemctl status firewalld
برای متوقف و غیرفعال کردنش اگر از UFW استفاده میکنید، از دستورات زیر استفاده کنید:
sudo systemctl stop firewalld
sudo systemctl disable firewalld
بهترین روشهای استفاده از UFW
برای بیشترین بهره از UFW در حالی که پیکربندیهای اشتباه و قطعی را کمینه میکنید، پیروی از این روشهای توصیهشده هنگام راهاندازی و نگهداری فایروالتان را در نظر بگیرید.
همیشه قبل از فعال کردن فایروال اجازه SSH بدهید
اگر از طریق SSH به سروری وصل هستید، مطمئن شوید قبل از فعال کردن UFW اجازه SSH بدهید تا از قفل شدن جلوگیری کنید:
sudo ufw allow OpenSSH
sudo ufw enable
failure در انجام این کار، دسترسی ریموتتان را در لحظه فعال شدن UFW بلاک میکند.
نحوه تنظیم سیاستهای پیشفرض قبل از افزودن قوانین
سیاستهای ورودی و خروجی پیشفرضتان را اوایل پیکربندی تنظیم کنید تا با خط پایه امنی شروع کنید:
sudo ufw default deny incoming
sudo ufw default allow outgoing
فقط بعد از آن باید شروع به مجاز کردن صریح سرویسهای موردنیازتان کنید.
نحوه استفاده از پروفایلهای اپلیکیشن وقتی موجودند
بهجای مجاز کردن دستی پورتها، از پروفایلهای اپلیکیشن از پیش تعریفشده استفاده کنید:
sudo ufw allow "Nginx Full"
برای دیدن اینکه چه پروفایلهایی موجودند:
sudo ufw app list
این مدیریت قانون را آسانتر و شانس خطای انسانی هنگام تایپ شماره پورتها یا پروتکلها را کم میکند.
نحوه مشخص بودن با IPها، پورتها و پروتکلها
با محکم کردن قوانین تا جای ممکن، افشا را محدود کنید. مثلاً بهجای باز کردن SSH برای کل دنیا:
sudo ufw allow from 203.0.113.0/24 to any port 22 proto tcp
این رویکرد سطح حمله سرورتان را با مجاز دانستن فقط مبدأهای مورد اعتماد کمینه میکند.
نحوه استفاده از قوانین شمارهگذاریشده برای مدیریت آسانتر
وقتی لازم است قوانین خاصی را حذف یا ممیزی کنید، استفاده کنید:
sudo ufw status numbered
این حذف دقیق قوانین را بدون نیاز به تایپ مجدد رشتههای کامل دستور آسانتر میکند:
sudo ufw delete 2
نحوه تست تغییرات در پنجره نگهداری (در صورت امکان)
پیکربندیهای اشتباه فایروال میتوانند سرویسها را مختل کنند. اگر در حال تغییر قوانین روی سرور پروداکشن هستید، در ساعات کمترافیک تست کنید یا پنجره نگهداری کوتاهی زمانبندی کنید تا ریسک کاهش یابد.
از لاگینگ برای مانیتور فعالیت استفاده کنید
لاگینگ را برای ثبت اتصالات ردشده و دیباگ رفتار فایروال فعال کنید:
sudo ufw logging on
لاگها معمولاً در این مسیر ذخیره میشوند:
/var/log/ufw.log
میزان تفصیل را میتوانید با این کنترل کنید:
sudo ufw logging low # یا medium / high / full
نحوه بکاپ گرفتن قوانین قبل از تغییرات بزرگ
قبل از ریست یا بازسازی پیکربندی UFW، مجموعه قوانین فعلی را ذخیره کنید:
sudo ufw status numbered > ufw-backup.txt
این به شما اجازه میدهد پیکربندیهای گذشته را در صورت خرابی چیزی، بازسازی یا مرور کنید.
UFW و firewalld را با هم استفاده نکنید
به یک سیستم مدیریت فایروال پایبند بمانید. اجرای همزمان UFW و firewalld میتواند باعث تداخل قوانین و رفتار غیرقابل پیشبینی شود.
آنکه استفاده نمیکنید را غیرفعال کنید:
sudo systemctl disable firewalld
یا:
sudo ufw disable
پیروی از این بهترین روشها کمک میکند تضمین کنید فایروالتان امن، نگهداریپذیر است و اتصالپذیری سرورتان را قطع نمیکند.
سوالات متداول
۱. سیاست پیشفرض UFW چیست؟
بهطور پیشفرض، UFW طوری پیکربندی شده که همه اتصالات ورودی را رد و همه اتصالات خروجی را مجاز بداند. یعنی هیچ دستگاه خارجی نمیتواند اتصالی به سیستمتان شروع کند مگر صریحاً مجاز شده باشد؛ در حالی که سیستم شما آزاد است به منابع خارجی دسترسی داشته باشد.
میتوانید سیاستهای پیشفرض فعلی را با اجرای این ببینید:
sudo ufw status verbose
برای تغییر پیشفرضها، استفاده کنید:
sudo ufw default deny incoming
sudo ufw default allow outgoing
۲. چطور آدرس IP خاصی را در UFW مجاز کنم؟
برای مجاز کردن همه ترافیک از آدرس IP خاص، از سینتکس allow from استفاده کنید. IP را با آدرسی که میخواهید مجاز کنید جایگزین کنید:
sudo ufw allow from 203.0.113.101
این قانونی میسازد که همه انواع اتصالات از آن IP به سرورتان را مجاز میداند. اگر میخواهید به پورت یا پروتکل خاصی محدودش کنید، میتوانید پارامترهای بیشتری اضافه کنید:
sudo ufw allow from 203.0.113.101 to any port 22 proto tcp
این فقط ترافیک SSH (پورت TCP ۲۲) را از IP دادهشده مجاز میکند.
۳. چطور بفهمم کدام قوانین الان فعالاند؟
برای دیدن قوانین فعال UFW، اجرا کنید:
sudo ufw status
برای خروجی تفصیلیتر—including سیاستهای پیشفرض و وضعیت لاگینگ—از فلگ verbose استفاده کنید:
sudo ufw status verbose
اگر میخواهید قوانین را با شماره خط ببینید (برای حذف قوانین خاص مفید)، اجرا کنید:
sudo ufw status numbered
۴. آیا UFW میتواند ترافیک خروجی را بلاک کند؟
بله، UFW را میتوان برای بلاک کردن اتصالات خروجی استفاده کرد. در حالی که UFW بهطور پیشفرض همه ترافیک خروجی را مجاز میداند، میتوانید قوانینی برای رد پورتها یا مقصدهای خاص اضافه کنید.
برای بلاک کردن مثلاً همه ترافیک SMTP خروجی روی پورت ۲۵:
sudo ufw deny out 25
همچنین میتوانید ترافیک خروجی به آدرسها یا بازههای IP خاص را بلاک کنید:
sudo ufw deny out to 203.0.113.0/24
برای تغییر سیاست پیشفرض برای کل ترافیک خروجی:
sudo ufw default deny outgoing
با قوانین خروجی محتاط باشید؛ بهویژه روی سرورهایی که به دسترسی خارجی برای بهروزرسانیها، بکاپها یا نصب پکیجها نیاز دارند.
۵. آیا UFW با IPv6 کار میکند؟
بله، UFW بهطور پیشفرض هر دو IPv4 و IPv6 را پشتیبانی میکند. وقتی قانونی مثل sudo ufw allow ssh را فعال میکنید، برای هر دو IPv4 و IPv6 قانون میسازند؛ مگر خلافش پیکربندی شده باشد.
میتوانید فعال بودن قوانین IPv6 را با چک کردن خروجی این تأیید کنید:
sudo ufw status
ورودیهایی مثل این میبینید:
Output
OpenSSH (v6) ALLOW Anywhere (v6)
برای غیرفعال کردن پشتیبانی IPv6 در UFW، فایل پیکربندی را ویرایش کنید:
sudo nano /etc/default/ufw
تنظیم کنید:
Output
IPV6=no
سپس UFW را ریلود کنید:
sudo ufw disable && sudo ufw enable
۶. آیا میتوانم از UFW با داکر استفاده کنم؟
UFW و داکر میتوانند تداخل کنند؛ چون داکر از قوانین پیشفرض iptables که UFW تنظیم میکند عبور میکند. در نتیجه، کانتینرهای داکر ممکن است—even وقتی UFW ظاهراً ترافیک را بلاک میکند—به شبکه افشا شوند.
اگر داکر را اجرا میکنید و کنترل سختگیرانه فایروال لازم دارید، باید:
- از قوانین فایروال خودِ داکر استفاده کنید
- یا سیاستهای iptables را طوری پیکربندی مجدد کنید که با UFW درست کار کنند
برای امن کردن سیستمتان حین اجرای داکر، استفاده از گزینه --iptables=false داکر و مدیریت دستی ترافیک کانتینر، یا اسکریپتهای یکپارچهسازی پیشرفته UFW/داکر را در نظر بگیرید.
نکته: بهطور پیشفرض، داکر مستقیماً iptables را تغییر میدهد. این میتواند قوانین UFW را بازنویسی یا از آنها عبور کند؛ مگر صریحاً در نظر گرفته شود.
۷. چطور قانون خاص UFW را حذف کنم؟
دو روش اصلی برای حذف قانون UFW وجود دارد:
با تکرار قانون دقیق:
sudo ufw delete allow from 203.0.113.101
با شماره قانون:
اول، قوانین را با شماره فهرست کنید:
sudo ufw status numbered
سپس قانونی را با شمارهاش حذف کنید:
sudo ufw delete 2
قبل از حذف قانون، برای تأیید از شما پرامپت گرفته میشود.
۸. چطور پروفایلهای اپلیکیشن موجود در UFW را فهرست کنم؟
بسیاری از اپلیکیشنهای شبکهای (مثل Nginx، Apache یا OpenSSH) هنگام نصب، پروفایلهای UFW ثبت میکنند. میتوانید همه پروفایلهای موجود را با این ببینید:
sudo ufw app list
برای دیدن اینکه پروفایلی چه پورتهایی را پوشش میدهد، اجرا کنید:
sudo ufw app info "Nginx Full"
این نشان میدهد پروفایل کدام پورتها را باز میکند و هر پروتکل مرتبطی را. استفاده از پروفایلهای اپلیکیشن مدیریت قانون را ساده و نیاز به به یاد سپردن شماره پورتهای خاص را حذف میکند.
نتیجهگیری
UFW ابزاری قدرتمند اما در-دسترس برای مدیریت قوانین فایروال روی سیستمهای اوبونتویی است. با سینتکس ساده و پشتیبانی داخلی از هر دو IPv4 و IPv6، UFW اعمال کنترلهای دسترسی را بدون نیاز به نوشتن دستی قوانین پیچیده iptables آسان میکند.
این راهنما رایجترین دستورات و موارد استفاده UFW را پوشش داد؛ شامل نحوه مجاز یا رد کردن ترافیک بر اساس پورت، آدرس IP و اینترفیس شبکه؛ و همزمان نحوه مدیریت پروفایلهای اپلیکیشن و ریست پیکربندی فایروال. بیشتر این مثالها را میتوان با تغییر پارامترهایی مثل آدرسهای IP یا شماره پورتها با نیازهای شبکه خودتان سازگار کرد.
برای جزئیات عمیقتر درباره گزینههای دستور UFW و استفاده پیشرفته، با man ufw دستیال را مشورت کنید یا مستندات رسمی اوبونتو را کاوش نمایید.




