سرور مجازی

آموزش کامل نمایش و حذف قوانین فایروال UFW در اوبونتو و لینوکس

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

  • نویسنده: پیمان
  • ۱۰ دقیقه مطالعه
  • ۱ بازدید
  • ۰ دیدگاه
آموزش کامل نمایش و حذف قوانین فایروال UFW در اوبونتو و لینوکس

UFW (مخفف Uncomplicated Firewall) یک رابط ساده برای مدیریت قوانین فایروال لینوکس (netfilter) است. این ابزار فایروال پیش‌فرض اوبونتو است و روی توزیع‌های دیگر مثل Debian هم نصب می‌شود. اگر یک سرور مجازی لینوکس ایران دارید، احتمالاً همان ابتدا چند پورت را با UFW باز کرده‌اید و حالا باید بدانید چطور آن قوانین را ببینید و در صورت نیاز حذف کنید.

در این آموزش یاد می‌گیرید قوانین UFW را با خط فرمان لیست کنید و به دو روش (با شماره و با مشخصات قانون) حذف کنید. در انتها هم ریست کامل فایروال، خطاهای رایج و سوال‌های متداول آمده است.

مرجع سریع دستورات UFW

کاردستور
نمایش وضعیت فایروال و قوانینsudo ufw status
نمایش وضعیت همراه با لاگ و سیاست‌های پیش‌فرضsudo ufw status verbose
نمایش قوانین شماره‌دارsudo ufw status numbered
نمایش دستور معادل قوانین ذخیره‌شدهsudo ufw show added
نمایش پورت‌های در حال listen و قوانین مرتبطsudo ufw show listening
حذف قانون با شمارهsudo ufw delete NUMBER
حذف قانون با شماره (بدون تأیید، مناسب اسکریپت)sudo ufw --force delete NUMBER
حذف قانون با مشخصاتsudo ufw delete allow 80/tcp
ریست فایروال و حذف همه قوانینsudo ufw reset

پیش‌نیازها

کاربری که دستورات UFW را اجرا می‌کند باید دسترسی sudo داشته باشد.

نمایش قوانین UFW

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

sudo ufw status

اگر UFW غیرفعال باشد، خروجی این است:

Status: inactive

اگر UFW فعال باشد، همه قوانین فعال چاپ می‌شوند:

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)

خروجی verbose

برای دیدن اطلاعات بیشتر مثل سطح لاگ، سیاست‌های پیش‌فرض و رفتار با profileهای جدید، از status verbose استفاده کنید:

sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)

خروجی شماره‌دار

با status numbered ترتیب و شماره هر قانون نمایش داده می‌شود. وقتی می‌خواهید قانونی را با شماره حذف کنید، به این خروجی نیاز دارید:

sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 443/tcp                    ALLOW IN    Anywhere
[ 4] 8069/tcp                   ALLOW IN    Anywhere

نمایش قوانین با ufw show

دستور status وضعیت فایروالِ در حال اجرا را نشان می‌دهد، ولی show گزارش‌هایی از خود پیکربندی فایروال چاپ می‌کند. کاربردی‌ترین گزارش آن added است که برای قوانین ذخیره‌شده، دستور معادل را فهرست می‌کند:

sudo ufw show added
Added user rules (see 'ufw status' for running firewall):
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp

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

این گزارش قوانینی را که اضافه کرده‌اید می‌خواند، نه جدول‌های زنده netfilter را. برای همین حتی وقتی UFW غیرفعال است و ufw status فقط Status: inactive نشان می‌دهد، show added قوانین شما را نشان می‌دهد.

دستور show یکی از نام گزارش‌های زیر را می‌گیرد:

  • added: دستور معادل قوانین ذخیره‌شده
  • listening: پورت‌های در حال listen و قوانینی که به آن‌ها اعمال می‌شود
  • raw: کل فایروال با قالب خام iptables
  • builtins: chainهای داخلی
  • before-rules: قوانینی که قبل از قوانین کاربر اعمال می‌شوند
  • user-rules: قوانین کاربر
  • after-rules: قوانینی که بعد از قوانین کاربر اعمال می‌شوند
  • logging-rules: قوانین لاگ

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

sudo ufw show listening

این گزارش هر پورت در حال listen را با آدرس interface و فایل اجرایی پشت آن چاپ می‌کند و بعد قانون UFW منطبق را نشان می‌دهد. همه گزارش‌ها به‌جز added و listening خروجی خام iptables هستند، یعنی فایروال در حال اجرا را نشان می‌دهند و نه پیکربندی ذخیره‌شده شما را.

حذف قوانین UFW

UFW زیردستور remove ندارد؛ دستور حذف ufw delete است و دو روش استفاده دارد:

  • حذف با شماره قانون: وقتی قوانین زیادی دارید راحت‌تر است. قوانین شماره‌دار را لیست می‌کنید و شماره قانون موردنظر را می‌دهید.
  • حذف با مشخصات قانون: تعریف کامل قانون را می‌نویسید.

هشدار: اگر فایروال را از راه SSH مدیریت می‌کنید، قانونی را که ترافیک SSH (به‌طور پیش‌فرض پورت 22) را مجاز می‌کند حذف نکنید. سشن فعلی شما معمولاً باز می‌ماند، ولی اتصال‌های جدید بسته می‌شوند و به‌محض قطع شدن سشن، دسترسی‌تان از دست می‌رود.

حذف با شماره قانون

ابتدا قوانین را با شماره لیست کنید:

sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 443/tcp                    ALLOW IN    Anywhere
[ 4] 8069/tcp                   ALLOW IN    Anywhere

برای حذف قانون شماره 4 (پورت 8069) این دستور را اجرا کنید:

sudo ufw delete 4

UFW قبل از حذف تأیید می‌گیرد:

Deleting:
 allow 8069/tcp
Proceed with operation (y|n)? y
Rule deleted

حرف y را بزنید و Enter را فشار دهید. بعد از حذف هر قانون، شماره بقیه قوانین جابه‌جا می‌شود؛ پس قبل از حذف قانون بعدی دوباره لیست را ببینید.

وقتی IPv6 فعال باشد، یک قانون عمومی می‌تواند دو ورودی جدا برای IPv4 و IPv6 داشته باشد. حذف با شماره فقط همان ورودی انتخاب‌شده را پاک می‌کند. برای حذف هر دو ورودی با یک دستور، قانون عمومی را با مشخصات حذف کنید.

اگر حذف را بدون تأیید و داخل اسکریپت می‌خواهید، از این دستور استفاده کنید:

sudo ufw --force delete 4

حذف با مشخصات قانون

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

فرض کنید قبلاً قانونی برای مجاز کردن پورت 2222 اضافه کرده‌اید:

sudo ufw allow 2222

همان قانون را بعد از ufw delete تکرار کنید تا حذف شود:

sudo ufw delete allow 2222

این روش برای قوانین دقیق‌تر هم کار می‌کند. مثلاً برای حذف قانونی که ترافیک TCP روی پورت 80 را فقط از یک subnet مشخص مجاز می‌کند:

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

مشخصات باید دقیقاً با قانون ثبت‌شده یکی باشد. قانونی که با ufw allow 80 ساخته شده، با ufw delete allow 80/tcp حذف نمی‌شود، چون UFW این دو را قانون‌های جدا می‌داند. اگر مطمئن نیستید قانون چگونه ثبت شده، خروجی sudo ufw show added را ببینید.

ریست UFW و حذف همه قوانین

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

sudo ufw reset

UFW پیش از ریست از قوانین فعلی فایل پشتیبان می‌سازد و مسیر آن‌ها را در خروجی نشان می‌دهد. این دستور هم تأیید می‌گیرد؛ در اسکریپت از sudo ufw --force reset استفاده کنید.

هشدار: بعد از ریست، UFW غیرفعال است و سیاست پیش‌فرض ورودی (deny) فعلاً اعمال نمی‌شود. قبل از اینکه دوباره sudo ufw enable بزنید، اول SSH را مجاز کنید، وگرنه از سرور بیرون می‌مانید:

sudo ufw allow 22/tcp
sudo ufw enable

عیب‌یابی

Could not delete non-existent rule

UFW برای نسخه IP نشان‌داده‌شده در پیام، قانون منطبقی پیدا نکرده است. با sudo ufw show added دستورهای ذخیره‌شده را ببینید و همان مشخصات را بعد از ufw delete تکرار کنید. وقتی IPv6 فعال است، حذف یک قانون عمومی هر دو نسخه IPv4 و IPv6 را امتحان می‌کند. بنابراین ممکن است بعد از حذف موفق IPv4، اگر نسخه IPv6 وجود نداشته باشد پیام Could not delete non-existent rule (v6) بیاید.

ERROR: Could not find rule ‘N’

شماره‌ای که به ufw delete داده‌اید خارج از محدوده است. بعد از هر حذف، قوانین دوباره شماره‌گذاری می‌شوند؛ پیش از تلاش بعدی با sudo ufw status numbered لیست را دوباره ببینید.

ERROR: Could not find a profile matching ‘NAME’

نام application profile اشتباه است. این خطا از جست‌وجوی profile می‌آید و به لیست قوانین ربطی ندارد. با sudo ufw app list نام profileهای نصب‌شده را ببینید و با نام دقیق دوباره امتحان کنید.

تغییر شماره قوانین بعد از حذف

UFW بعد از هر حذف همه قوانین را دوباره شماره‌گذاری می‌کند. قبل از حذف قانون بعدی همیشه sudo ufw status numbered را دوباره اجرا کنید.

قفل شدن SSH بعد از حذف یک قانون

اگر قانون SSH را به‌اشتباه پاک کرده‌اید، به دسترسی کنسول یا دسترسی خارج از باند (out-of-band) نیاز دارید. روی سرور مجازی این کار معمولاً از کنسول پنل مدیریت انجام می‌شود. بعد از اتصال، دسترسی SSH را دوباره باز کنید:

sudo ufw allow 22/tcp

اگر UFW هنوز فعال است، همین کافی است. اگر غیرفعال شده، بعد از آن sudo ufw enable را هم اجرا کنید.

ufw: command not found

UFW نصب نیست. روی اوبونتو، Debian و مشتقات آن‌ها با sudo apt install ufw و روی Fedora با sudo dnf install ufw نصبش کنید. سیستم‌های سازگار با RHEL معمولاً از firewalld استفاده می‌کنند؛ اگر UFW را برای آن‌ها انتخاب می‌کنید، ممکن است اول باید EPEL یا منبع بسته مناسب دیگری را فعال کنید.

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

چطور فقط قوانین IPv4 یا IPv6 را لیست کنم؟

UFW فیلتر داخلی برای نسخه IP ندارد، ولی می‌توانید خروجی را به grep بدهید. برای دیدن فقط قوانین IPv4 از sudo ufw status | grep -v '(v6)' و برای فقط IPv6 از sudo ufw status | grep '(v6)' استفاده کنید.

می‌شود چند قانون را با یک دستور حذف کرد؟

UFW در هر دستور یک قانون را حذف می‌کند. اگر چند قانون را با شماره حذف می‌کنید، از شماره بزرگ‌تر به کوچک‌تر بروید تا شماره‌گذاری مجدد، قوانینی را که هنوز به آن‌ها نرسیده‌اید جابه‌جا نکند. برای پاک کردن همه قوانین از sudo ufw reset استفاده کنید.

با حذف یک قانون، اتصال‌های فعلی چه می‌شوند؟

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

چطور یک قانون را در موقعیت مشخص درج کنم؟

از sudo ufw insert NUMBER RULE استفاده کنید. مثلاً دستور زیر قانون را در جایگاه 1، قبل از همه قوانین دیگر، اضافه می‌کند:

sudo ufw insert 1 allow from 10.0.0.0/8

فرق ufw disable و ufw reset چیست؟

ufw disable فایروال را خاموش می‌کند ولی همه قوانین سر جایشان می‌مانند. ufw reset فایروال را غیرفعال می‌کند و همه قوانین را پاک می‌کند و پیکربندی پیش‌فرض را برمی‌گرداند.

جمع‌بندی

قوانین UFW را با sudo ufw status numbered لیست می‌کنید و با شماره یا با مشخصات قانون حذف می‌کنید. پیش از هر حذف، لیست شماره‌دار را دوباره ببینید و روی سرورهای راه دور مراقب باشید قانون SSH را پاک نکنید.

اصلاحات فنی نسبت به مقاله اصلی

  • در مقاله اصلی گفته شده حذف قانون SSH باعث قفل شدن می‌شود. دقیق‌تر این است که سشن فعلی معمولاً باز می‌ماند و فقط اتصال‌های جدید بسته می‌شوند. این توضیح به هشدار اضافه شد.
  • ufw reset تأیید (y|n) می‌گیرد. برای استفاده در اسکریپت، دستور --force reset اضافه شد.
  • مقاله اصلی نمی‌گفت بعد از ریست، UFW غیرفعال است و فعال کردن دوباره‌اش بدون باز کردن SSH دسترسی را می‌بندد. این هشدار اضافه شد.
  • در بخش بازگشت از قفل SSH، اجرای ufw enable فقط وقتی لازم است که UFW غیرفعال شده باشد؛ این شرط روشن شد.
  • در حذف با مشخصات، توضیح داده شد که مثلاً allow 80 و allow 80/tcp دو قانون جدا هستند و باید دقیقاً مطابق قانون ثبت‌شده حذف شوند.

دیدگاه‌ها

۰

هنوز دیدگاهی برای این مطلب ثبت نشده است؛ اولین نفر باشید.

ثبت دیدگاه

آدرس ایمیل شما منتشر نخواهد شد. فیلدهای الزامی با * مشخص شده‌اند. دیدگاه بعد از بررسی منتشر می‌شود.

نام خود را بنویسید.

یک ایمیل معتبر بنویسید.

۰ از ۴٬۵۰۰ نویسه

دیدگاه خود را بنویسید.

۴ + ۶ =

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

پاسخ را با عدد بنویسید.