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: کل فایروال با قالب خام iptablesbuiltins: 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دو قانون جدا هستند و باید دقیقاً مطابق قانون ثبتشده حذف شوند.




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