
مقدمه
راهاندازی یک فایروال کارکردی برای امن کردن سرور ابریتان حیاتی است. قبلاً پیکربندی فایروال از طریق ابزارهای پیچیده و مرموز انجام میشد. بسیاری از این ابزارها، مانند iptables، قابلیتهای زیادی در خود دارند، اما به تلاش اضافی از سمت کاربر برای یادگیری و درک نیاز دارند.
گزینه دیگر UFW یا Uncomplicated Firewall (فایروال بدون پیچیدگی) است. UFW یک رابط کاربری برای سیستم netfilter کرنل است که هدفش ارائه رابط کاربرپسندتر نسبت به سایر ابزارهای مدیریت فایروال است. UFW در جامعه لینوکس بهخوبی پشتیبانی میشود و بهصورت پیشفرض روی اوبونتو نصب است؛ البته تا وقتی فعالش نکنید، غیرفعال باقی میماند.
در این آموزش، یک فایروال با استفاده از UFW برای امن کردن سرور ابری اوبونتو یا دبیان راهاندازی میکنید. UFW را در صورت عدم وجود نصب میکنید، قوانین پیشفرض را برای اجازه یا رد اتصالات تنظیم میکنید، پورتهایی را برای سرویسها و آدرسهای IP خاص باز میکنید، از پروفایلهای اپلیکیشن استفاده میکنید، لاگینگ را فعال میکنید، قوانین را حذف میکنید و همه چیز را به تنظیمات پیشفرض ریست میکنید.
نکات کلیدی
- UFW (فایروال بدون پیچیدگی) یک رابط ساده و کاربرپسند برای فایروال netfilter کرنل است که شما را از پیچیدگی قوانین خام iptables یا nftables بینیاز میکند.
- روی اوبونتو، UFW بهصورت پیشفرض نصب اما غیرفعال است؛ روی دبیان در مخازن موجود است اما باید با
sudo apt install ufwنصب شود. - نسخههای اخیر UFW (0.36.x) روی اوبونتو و دبیان فعلی از بکاند nftables از طریق لایه سازگاری iptables-nft استفاده میکنند، در حالی که دستوراتی که تایپ میکنید همانها باقی میمانند.
- پایه توصیهشده این است: رد همه ترافیک ورودی و اجازه همه ترافیک خروجی، سپس فقط پورتهایی را که نیاز دارید باز کنید.
- همیشه قبل از اجرای
sudo ufw enable، اجازه عبور SSH را صادر کنید (sudo ufw allow OpenSSHیاsudo ufw allow ssh)؛ وگرنه ممکن است از سرور ریموت خودتان را بیرون بکِشید (Lock Out). - میتوانید ترافیک را بر اساس نام سرویس، شماره پورت، بازه پورت، آدرس IP یا پروفایل اپلیکیشن اجازه عبور یا رد کنید؛ این کار قوانین را خوانا و دقیق میکند.
sudo ufw limit sshمحافظت پایه در برابر حمله جستجوی فراگیر (Brute-Force) با محدود کردن اتصالات جدید به حداکثر شش مورد در هر ۳۰ ثانیه از یک IP واحد اضافه میکند.sudo ufw status verboseقوانین فعال، سیاستهای پیشفرض و سطح لاگینگ را یکجا نشان میدهد.- UFW قوانین IPv6 را بهطور خودکار مدیریت میکند وقتی
IPV6=yesدر/etc/default/ufwتنظیم شده باشد؛ که در سیستمهای مدرن، پیشفرض همین است. sudo ufw resetاز همه قوانین تعریفشده توسط کاربر بکاپ میگیرد و آنها را حذف میکند، فایروال را غیرفعال میکند و سیاستهای پیشفرض را به ردِ ورودی و اجازه خروجی برمیگرداند.
پیشنیازها
برای دنبال کردن این آموزش، به یک سرور با اوبونتو یا دبیان نیاز دارید. سرور شما باید یک کاربر غیر root با دسترسی sudo داشته باشد.
- برای راهاندازی این مورد روی اوبونتو، راهنمای راهاندازی اولیه سرور با اوبونتو در پارمین کلود را دنبال کنید.
- برای راهاندازی این مورد روی دبیان، راهنمای راهاندازی اولیه سرور با دبیان ۱۲ در پارمین کلود را دنبال کنید. مراحل آن راهنما برای دبیان ۱۳ هم بهطور کامل کاربرد دارند.
هر دوی این راهنماهای راهاندازی اولیه سرور به شما کمک میکنند محیطی امن بسازید که میتوانید با آن تمرین ساخت قوانین فایروال را انجام دهید.
وقتی کاربر sudo شما آماده شد، میتوانید قبل از پیکربندی، به سراغ درک اینکه UFW چه کاری انجام میدهد بروید.
درک UFW و نحوه کار آن
UFW جایگزین فایروالِ داخل کرنل لینوکس نمیشود؛ بلکه آن را مدیریت میکند. کرنل، ترافیک شبکه را از طریق چارچوب netfilter خود فیلتر میکند که مدیران بهطور سنتی آن را با iptables یا اخیراً با nftables پیکربندی میکنند. نوشتن دستی آن قوانین قدرتمند اما مستعد خطاست. UFW روی آن سازوکار سوار میشود و دستورات کوتاه و خوانایی مانند sudo ufw allow ssh را به قوانین سطح پایینترِ مورد اجرای کرنل ترجمه میکند.
روی نسخههای فعلی اوبونتو و دبیان، UFW نسخه 0.36.x از بکاند nftables از طریق لایه سازگاری iptables-nft استفاده میکند؛ پس حتی وقتی با اصطلاحات iptables فکر میکنید، قوانین در پسزمینه از طریق nftables اعمال میشوند. این تغییر شفاف است: دستورات UFW در این راهنما فارغ از بکاند، یکساناند.
برای دیدن اینکه کدام نسخه نصب شده، این را اجرا کنید:
sudo ufw version
دستور نسخه UFW و مجوز را مشابه موارد زیر گزارش میکند:
Output
ufw 0.36.2
Copyright 2008-2023 Canonical Ltd.
UFW تنها گزینه نیست؛ جدول زیر آن را با دو ابزار رایج دیگر فایروال لینوکس مقایسه میکند تا بتوانید درستترین را برای محیط خودتان انتخاب کنید.
| ابزار | رابط | پیشفرض روی | مناسب برای |
|---|---|---|---|
| UFW | خط فرمان ساده (ufw allow ssh) | اوبونتو (بهراحتی به دبیان اضافه میشود) | سرورهای منفرد و مجموعه قوانین سرراست |
| firewalld | مبتنی بر زون، firewall-cmd | RHEL، Rocky Linux، Fedora | محیطهای پویا با چند زون شبکه |
| iptables / nftables | سینتکس قوانین سطحپایین | همه توزیعها | کنترل ریزبینانه، مسیریابی یا NAT پیچیده |
برای بیشتر سرورهای ابری منفرد اوبونتو یا دبیان، UFW سادهترین انتخابی است که همچنان کنترل کامل به شما میدهد. اگر روی سیستمی از خانواده Red Hat هستید یا مدیریت مبتنی بر زون میخواهید، firewalld را انتخاب کنید و به قوانین خام nftables فقط وقتی سر بزنید که به قابلیتهای پیشرفتهای نیاز دارید که رابطهای کاربری ارائه نمیدهند.
نصب UFW روی اوبونتو و دبیان
روی اوبونتو، UFW بهصورت پیشفرض نصب است؛ پس معمولاً نیازی به نصب چیزی ندارید. میتوانید وجودش را با بررسی وضعیتش تأیید کنید:
sudo ufw status
اگر UFW نصب اما هنوز فعال نشده باشد، خروجی صرفاً این است:
Output
Status: inactive
روی دبیان، UFW در مخازن استاندارد موجود است اما بهصورت پیشفرض نصب نیست. آن را با apt نصب کنید:
sudo apt update
sudo apt install ufw
نکته برای کاربران دبیان: نصب پکیج ufw فایروال را خودکار فعال نمیکند. UFW تا زمانی که
sudo ufw enableرا اجرا نکنید غیرفعال میماند؛ این به شما فرصت میدهد اول یک قانون SSH اضافه کنید تا خودتان را بیرون نکِشید. بقیه این راهنما—مگر اینکه مرحلهای چیز دیگری بگوید—روی اوبونتو و دبیان یکسان اعمال میشود.
با نصب UFW، قدم بعدی اطمینان از مدیریت درستِ ترافیک IPv6 است.
استفاده از IPv6 با UFW
اگر سرور مجازی خصوصی (VPS) شما برای IPv6 پیکربندی شده، مطمئن شوید UFW برای پشتیبانی از IPv6 تنظیم شده تا هم قوانین فایروال IPv4 و هم IPv6 شما را پیکربندی کند. برای این کار، فایل پیکربندی UFW را با ویرایشگر متن مورد علاقهتان باز کنید. این مثال از nano استفاده میکند:
sudo nano /etc/default/ufw
تأیید کنید که IPV6 روی yes تنظیم شده باشد. روی اوبونتو و دبیان مدرن این از قبل پیشفرض است:
/etc/default/ufw
# /etc/default/ufw
#
# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback
# accepted). You will need to 'disable' and then 'enable' the firewall for
# the changes to take effect.
IPV6=yes
…
بعد از اعمال تغییرات، فایل را ذخیره و از آن خارج شوید. اگر از nano استفاده میکنید، CTRL + X و بعد Y و بعد ENTER را بزنید.
برای اعمال شدن هر تغییری در /etc/default/ufw، فایروال را با غیرفعال کردن اولیه ریاستارت کنید:
sudo ufw disable
غیرفعال کردن فایروال این تأیید را برمیگرداند:
Output
Firewall stopped and disabled on system startup
سپس دوباره فعالش کنید:
sudo ufw enable
فعال کردن مجدد فایروال، فعال بودنش را تأیید میکند:
Output
Firewall is active and enabled on system startup
فایروال UFW شما حالا برای مدیریت هر دو IPv4 و IPv6 تنظیم شده است. در مرحله بعد، قوانین پیشفرضی را که روی اتصالات اعمال میشوند تنظیم میکنید.
تنظیم پیشفرضهای UFW
میتوانید کارایی فایروالتان را با تعریف قوانین پیشفرض برای اجازه و رد اتصالات بهبود ببخشید. پیشفرض UFW این است: رد همه اتصالات ورودی و اجازه همه اتصالات خروجی. یعنی هر کسی که سعی کند به سرورتان برسد نمیتواند وصل شود، در حالی که هر اپلیکیشنی داخل سرور همچنان میتواند بیرون وصل شود. برای تنظیم صریح این قوانین، اول قانون اتصالات ورودی را تنظیم کنید:
sudo ufw default deny incoming
تنظیم سیاست ورودی این را برمیگرداند:
Output
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
سپس، قانون اتصالات خروجی را تنظیم کنید:
sudo ufw default allow outgoing
تنظیم سیاست خروجی تأیید مشابهی برمیگرداند:
Output
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
نکته: اگر میخواهید محدودتر عمل کنید، میتوانید همه درخواستهای خروجی را هم رد کنید. این گزینه به سلیقه شخصی مربوط است. مثلاً روی یک سرور ابری عمومی، میتواند به جلوگیری از اتصالات خروجی ناخواسته مانند شلهای ریموت کمک کند. البته مدیریت فایروالتان را دشوارتر میکند؛ چون باید برای هر اتصال خروجی که میخواهید مجاز باشد، قانون اضافه کنید. میتوانید این را بهعنوان پیشفرض با دستور زیر تنظیم کنید:
sudo ufw default deny outgoing
اجازه اتصالات به فایروال
اجازه اتصالات مستلزم تغییر قوانین فایروال است که با اجرای دستورات در ترمینال انجام میشود. اگر همین حالا فایروالتان را فعال کنید، همه اتصالات ورودی را رد میکند. اگر با SSH وصل شده باشید، این یک مشکل است؛ چون از سرورتان بیرون میافتید. با اجازه اتصالات SSH قبل از فعال کردن UFW از این کار جلوگیری کنید:
sudo ufw allow ssh
اگر تغییرتان موفق بوده، این خروجی را میگیرید:
Output
Rule added
Rule added (v6)
UFW برخی نامهای سرویس را از قبل میشناسد؛ مانند کلیدواژه ssh استفادهشده در بالا. بهعنوان جایگزین، میتوانید اتصالات ورودی به پورت 22/tcp را که از پروتکل کنترل انتقال (TCP) استفاده میکند اجازه دهید؛ همان کار را انجام میدهد:
sudo ufw allow 22/tcp
اگر این را بعد از اجرای allow ssh اجرا کنید، UFW میگوید قانون از قبل وجود دارد:
Output
Skipping adding existing rule
Skipping adding existing rule (v6)
اگر سرور SSH شما روی پورت غیراستانداردی مانند 2222 اجرا میشود، اتصالات را با همان سینتکس اما پورت متفاوت اجازه دهید. اگر شماره پورت را بهتنهایی مشخص کنید، قانون روی هم tcp و هم udp اعمال میشود؛ پس نام بردن از پروتکل دقیقتر است:
sudo ufw allow 2222/tcp
اجازه پورت سفارشی، همان تأیید قبلی را برمیگرداند:
Output
Rule added
Rule added (v6)
برای کاهش ریسک تلاشهای ورود با حمله brute-force، بهجای صرفاً اجازه دادن SSH، میتوانید آن را با نرخ محدود کنید. دستور limit، اتصالات جدید از هر IP واحد را به شش مورد در ۳۰ ثانیه محدود میکند:
sudo ufw limit ssh
اجازه اتصالات وبسرور
وبسرورهایی مانند Apache و Nginx، درخواستهای HTTP را روی پورت ۸۰ و درخواستهای HTTPS را روی پورت ۴۴۳ دریافت میکنند. برای سرو کردن ترافیک بدون رمزنگاری، اجازه اتصال به 80/tcp:
sudo ufw allow 80/tcp
برای سرو کردن ترافیک رمزنگاریشده HTTPS، پورت 443/tcp را هم باز کنید:
sudo ufw allow 443/tcp
UFW برای وبسرورهای رایج، پروفایلهای اپلیکیشنِ نامگذاریشده ارائه میدهد که اغلب تمیزتر از به یاد سپردن شماره پورتهاست. مثلاً اگر Nginx نصب است، میتوانید ترافیک HTTP را با نام پروفایلش اجازه دهید:
sudo ufw allow 'Nginx HTTP'
اگر بهجای آن Apache نصب است، از پروفایل Apache استفاده کنید:
sudo ufw allow 'Apache'
اگر ترجیح میدهید فارغ از اینکه کدام وبسرور نصب است، با شماره پورت اجازه دهید، دستور معادل این است:
sudo ufw allow 80/tcp
اجازه اتصالات FTP
پروتکل انتقال فایل (FTP) با ترافیک وب بیارتباط است و پورتهای خودش را دارد: ۲۱ برای کنترل و ۲۰ برای انتقال داده. اگر مشخصاً به سرور FTP نیاز دارید، پورت کنترل را با نام اجازه دهید:
sudo ufw allow ftp
اجازه با نام معادل اجازه مستقیم 21/tcp است:
sudo ufw allow 21/tcp
برای اتصالات FTP در حالت فعال (Active Mode)، باید پورت داده ۲۰ را هم اجازه دهید:
sudo ufw allow 20/tcp
نکته: بیشتر استقرارهای مدرن FTP بهجای حالت فعال از حالت غیرفعال (Passive Mode) استفاده میکنند. حالت غیرفعال نیازمند باز کردن بازه اضافی از پورتهای بالارده فراتر از ۲۰ و ۲۱ است. بازه دقیق در سرور FTP شما پیکربندی میشود (مثلاً
pasv_min_portوpasv_max_portدر vsftpd.conf یاPassivePortsدر proftpd.conf). وقتی آن بازه را دانستید، آن را با قانونی مانندsudo ufw allow 49152:65535/tcpباز کنید. قبل از افشای بازه پورت غیرفعال، مستندات سرور FTP خود را برای مقادیر درست ملاحظه کنید.
تنظیمات شما به اینکه کدام پورتها و سرویسها را میخواهید باز کنید بستگی دارد و ممکن است مقداری تست لازم باشد. یادتان باشد اتصال SSH را هم اجازهگذاشته نگه دارید.
مشخص کردن بازه پورتها
میتوانید بازههایی از پورتها را برای اجازه یا رد با UFW مشخص کنید. برای این کار، پورت ابتدای بازه را مشخص کنید، بعد یک دونقطه (:)، سپس انتهای بازه و در نهایت پروتکل (tcp یا udp).
مثلاً دستور زیر دسترسی TCP به همه پورتهای ۱۰۰۰ تا ۲۰۰۰ (شامل هر دو سر) را اجازه میدهد:
sudo ufw allow 1000:2000/tcp
بهطور مشابه، دستور زیر اتصالات UDP به همه پورتهای ۱۲۳۴ تا ۴۳۲۱ را رد میکند:
sudo ufw deny 1234:4321/udp
بسیاری از سرویسهای مهم از UDP بهجای TCP استفاده میکنند. DNS، NTP و پروتکلهای VPN مانند WireGuard همه به UDP متکیاند؛ پس هنگام نوشتن قوانین برای آنها باید udp را صریحاً مشخص کنید. مثالهای زیر نشان میدهند چطور پورت VPN وایرگارد و پورت DNS را روی UDP اجازه دهید:
sudo ufw allow 51820/udp
sudo ufw allow 53/udp
مشخص کردن آدرسهای IP
میتوانید اتصالات از یک آدرس IP مشخص را اجازه دهید. حتماً آدرس نمونه را با آدرس خودتان جایگزین کنید:
sudo ufw allow from your_server_ip
برای محدود کردن این اجازه به یک پورت منفرد، to any port و شماره پورت را اضافه کنید؛ که الگویی رایج برای محدود کردن SSH به یک آدرس مورد اعتماد است:
sudo ufw allow from your_server_ip to any port 22
همانطور که این مثالها نشان میدهند، هنگام تنظیم قوانین فایروال با اجازه انتخابی پورتها و آدرسهای IP خاص، انعطاف زیادی دارید. برای اطلاعات بیشتر درباره اجازه اتصالات ورودی از آدرس IP یا زیرشبکه خاص، راهنمای مرتبط در پارمین کلود را ببینید.
کار با پروفایلهای اپلیکیشن UFW
وقتی نرمافزار شبکهای نصب میکنید، اغلب یک پروفایل اپلیکیشن UFW ثبت میکند؛ که بستهای نامگذاریشده از پورتهایی است که آن سرویس نیاز دارد. استفاده از پروفایلها قوانین شما را خوانا نگه میدارد. برای دیدن اینکه کدام پروفایلها روی سیستم شما موجودند، آنها را فهرست کنید:
sudo ufw app list
خروجی پروفایلهای ثبتشده را نشان میدهد که بسته به آنچه نصب کردهاید متغیر است:
Output
Available applications:
Apache
Apache Full
Apache Secure
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
برای دیدن دقیق اینکه یک پروفایل کدام پورتها را باز میکند، جزئیاتش را بخواهید:
sudo ufw app info 'Nginx Full'
توضیحات پروفایل، پورتهای تحت پوششش را فهرست میکند؛ در این مورد هم HTTP و هم HTTPS:
Output
Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server
Ports:
80,443/tcp
وقتی دانستید پروفایلی چه کاری انجام میدهد، آن را با نامش اجازه دهید تا همه پورتهایش یکجا باز شود:
sudo ufw allow 'Nginx Full'
استفاده از پروفایل OpenSSH روش توصیهشده برای اجازه SSH است؛ چون از یک شماره پورت خالی شفافتر است و همان شکلی است که بیشتر راهنماهای راهاندازی اولیه سرور استفاده میکنند.
وقتی پکیجی ارتقا مییابد، پروفایل اپلیکیشنش ممکن است برای انعکاس پورتهای جدید یا بهروزشده تغییر کند. برای اطمینان از اینکه UFW از آخرین نسخه پروفایل استفاده میکند، بعد از ارتقای پکیج مربوطه، ufw app update را با نام پروفایل اجرا کنید:
sudo ufw app update 'Nginx Full'
برای رفرش همه پروفایلهای ثبتشده یکجا، نام پروفایل را حذف کنید:
sudo ufw app update all
میتوانید فهرست فعلی پروفایلهای ثبتشده را هر وقت خواستید با این تأیید کنید:
sudo ufw app list
رد اتصالات
اگر میخواستید همه پورتهای سرورتان را باز کنید—which توصیه نمیشود—میتوانستید همه اتصالات را اجازه دهید و بعد فقط پورتهایی را که میخواهید بلاک کنید رد کنید. مثال زیر دسترسی به پورت ۸۰ را رد میکند:
sudo ufw deny 80/tcp
میتوانید به همان شکل با نام سرویس یا پروفایل اپلیکیشن رد کنید؛ مثلاً sudo ufw deny ftp. رد کردن برای بلاک موقت یک سرویس بدون حذف دائمی قانون اجازهاش هم مفید است.
حذف قوانین
اگر میخواهید برخی از قوانینی که ساختهاید را حذف کنید، از delete استفاده کنید و قانونی را که میخواهید حذف شود مشخص کنید:
sudo ufw delete allow 80/tcp
حذف قانون این را برمیگرداند:
Output
Rule deleted
Rule deleted (v6)
اگر قوانین طولانی یا پیچیده باشند، یک رویکرد جایگزین دو مرحلهای وجود دارد. اول، فهرست شمارهگذاریشده قوانین فعلی را تولید کنید:
sudo ufw status numbered
فهرست شمارهگذاریشده به شما امکان میدهد هر قانون و اندیسی که برای حذفش استفاده میکنید را ببینید:
Output
Status: active
To Action From
-- ------ ----
[ 1] OpenSSH ALLOW IN Anywhere
[ 2] 22/tcp ALLOW IN Anywhere
[ 3] 2222/tcp ALLOW IN Anywhere
[ 4] 80 ALLOW IN Anywhere
[ 5] 20/tcp ALLOW IN Anywhere
…
با فهرست شمارهگذاریشده جلویتان، یک قانون را با ارجاع به شمارهاش حذف کنید. مثلاً اگر پورت ۸۰ شماره ۴ در فهرست است، از دستور زیر استفاده کنید. ممکن است از شما برای تأیید با y (بله) یا n (نه) درخواست شود:
sudo ufw delete 4
تأیید پرامپت، قانون را حذف میکند:
Output
Deleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted (v6)
فعال کردن UFW
وقتی همه قوانینی را که میخواهید روی فایروالتان اعمال شود تعریف کردید، میتوانید UFW را فعال کنید تا اعمالشان را شروع کند. اگر با SSH وصل هستید، مطمئن شوید قبل از فعال کردن، پورت SSHتان—معمولاً پورت ۲۲—را اجازه دادهاید. وگرنه ممکن است خودتان را از سرورتان بیرون بکِشید:
sudo ufw enable
فعال کردن فایروال تأیید میکند که الان فعال است و هنگام بوت شروع میشود:
Output
Firewall is active and enabled on system startup
برای تأیید اعمال شدن تغییرات، وضعیت را برای مرور فهرست قوانین بررسی کنید:
sudo ufw status
خروجی وضعیت، هر قانون فعال و اقدام UFW را فهرست میکند:
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
22/tcp ALLOW Anywhere
2222/tcp ALLOW Anywhere
20/tcp ALLOW Anywhere
80/tcp DENY Anywhere
…
برای نمای جامعتری که سیاستهای پیشفرض و سطح لاگینگ را هم نشان میدهد، از verbose استفاده کنید:
sudo ufw status verbose
برای غیرفعال کردن UFW در هر زمانی، این را اجرا کنید:
sudo ufw disable
غیرفعال کردن فایروال، آن را متوقف و از استارتاپ حذف میکند:
Output
Firewall stopped and disabled on system startup
فعال کردن لاگینگ UFW
لاگینگ، ترافیکی را که UFW مدیریت میکند ثبت میکند؛ که برای شناسایی تلاشهای اتصال بلاکشده و دیباگ قوانینتان ارزشمند است. لاگینگ را با این روشن کنید:
sudo ufw logging on
UFW چندین سطح لاگینگ دارد تا بتوانید بین جزئیات و حجم لاگ تعادل برقرار کنید. یک سطح را با نام تنظیم کنید:
sudo ufw logging medium
سطحهای موجود عبارتاند از: low (بستههای بلاکشدهای را لاگ میکند که با سیاست مطابقت ندارند)، medium (لاگگیری اتصالات جدید و برخی بستههای مطابقتیافته را اضافه میکند)، high (لاگ با محدودیت نرخ و جزئیات بیشتر) و full (همه چیز را بدون محدودیت نرخ لاگ میکند). روی بیشتر سرورهای ابری، low یا medium تعادل خوبی است. UFW ورودیهایش را در /var/log/ufw.log مینویسد که میتوانید آنجا مرورشان کنید:
sudo tail /var/log/ufw.log
برای تأیید فعال بودن لاگینگ و دیدن اینکه کدام سطح الان تنظیم شده، این را اجرا کنید:
sudo ufw status verbose
خروجی شامل خطی مانند Logging: on (medium) است که سطح فعال را در کنار قوانین و سیاستهای پیشفرضتان نشان میدهد.
ریست کردن تنظیمات پیشفرض
اگر به هر دلیلی لازم شد قوانین سرورتان را پاک و از نو شروع کنید، میتوانید با دستور ufw reset این کار را انجام دهید. قبل از ریست، از شما برای تأیید با y یا n پرامپت گرفته میشود؛ چون این کار میتواند اتصالات SSH موجود را مختل کند:
sudo ufw reset
UFW از فایلهای قانون فعلی شما بکاپ میگیرد و بعد پاکشان میکند، سپس خودش را غیرفعال میکند:
Output
Resetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)? y
Backing up 'user.rules' to '/etc/ufw/user.rules.20220217_190530'
Backing up 'before.rules' to '/etc/ufw/before.rules.20220217_190530'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20220217_190530'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20220217_190530'
ریست کردن، UFW را غیرفعال و هر قانونی را که قبلاً تعریف کرده بودید حذف میکند. همچنین سیاستهای پیشفرض را برمیگرداند (ردِ ورودی و اجازه خروجی). بعد از ریست، سرویسهای موردنیاز (بهویژه SSH) را دوباره اجازه دهید و سپس فایروال را دوباره فعال کنید.
عیبیابی مشکلات رایج UFW
چند مشکل هنگام شروع کار با UFW زیاد پیش میآیند. زیربخشهای زیر هر کدام را با راهحل مشخصش پوشش میدهند.
بیرون افتادن از SSH بعد از فعال کردن UFW
این رایجترین مشکل UFW است و وقتی رخ میدهد که sudo ufw enable را بدون اجازه قبلی پورت SSH اجرا کنید؛ در نتیجه سیاست پیشفرضِ رد ورودی، نشست خودتان را بلاک میکند. اگر هنوز ترمینال بازی دارید، فوراً قانون SSH را با sudo ufw allow OpenSSH اضافه کنید تا نشست موجود به کار خود ادامه دهد. اگر از قبل قطع شدهاید، از کنسول وب ارائهدهندهتان یا کنسول بازیابی برای ورود محلی استفاده کنید، سپس sudo ufw allow OpenSSH را اجرا کنید و بعد دوباره با SSH وصل شوید. برای دور کردن کامل این مشکل، همیشه قبل از فعال کردن فایروال، SSH را اجازه دهید.
قوانین بعد از ریبوت باقی نمیمانند
قوانین UFW روی دیسک ذخیره و هنگام بوت ریلود میشوند، به شرطی که فایروال فعال باشد؛ پس مشکلات ماندگاری (Persistence) معمولاً یعنی خود UFW برای شروع هنگام بوت فعال نیست. با sudo ufw status verbose فعال و انبل بودن سرویس را تأیید کنید؛ که باید Status: active را گزارش بدهد. اگر بعد از ریبوت inactive گزارش داد، sudo ufw enable را اجرا کنید (که آن را برای استارتاپ هم ثبت میکند) و روی سیستمهای مبتنی بر systemd با sudo systemctl enable ufw از انبل بودن یونیت مطمئن شوید.
قوانین IPv6 اعمال نمیشوند
اگر قوانین IPv4 شما کار میکنند اما ترافیک IPv6 همانطور که انتظار دارید فیلتر نمیشود، علت تقریباً همیشه این است که پشتیبانی IPv6 در پیکربندی خاموش است. فایل /etc/default/ufw را باز کنید و تأیید کنید IPV6=yes تنظیم شده، سپس فایروال را با اجرای sudo ufw disable و بعد sudo ufw enable ریلود کنید؛ چون تغییرات آن فایل فقط بعد از ریاستارت اعمال میشوند. بعد از فعال کردن مجدد، تأییدهای قانون باید هم Rule added و هم Rule added (v6) را نشان بدهند.
وضعیت UFW بعد از ریبوت inactive نشان میدهد
اگر sudo ufw status حتی با اینکه قوانین اضافه کردهاید، inactive گزارش کند، فایروال هرگز فعال نشده یا یونیت استارتاپش غیرفعال است. فعال کردن UFW با sudo ufw enable هم الان فعالش میکند و هم آن را طوری پیکربندی میکند که در هر بوت بارگذاری شود. روی نصب مینیمال دبیان، با sudo systemctl is-enabled ufw هم بررسی کنید که سرویس در systemd انبل است؛ اگر disabled برگرداند، با sudo systemctl enable --now ufw فعالش کنید.
سوالات متداول
۱. چطور فایروال UFW را روی اوبونتو راهاندازی کنم؟
حداقل توالی این است: سیاستهای پیشفرض را تنظیم کنید، SSH را اجازه دهید، سپس فایروال را فعال کنید. sudo ufw default deny incoming، sudo ufw default allow outgoing، sudo ufw allow OpenSSH و در نهایت sudo ufw enable را اجرا کنید. بعد از آن، هر پورت اضافیای را که سرویسهایتان نیاز دارند باز کنید؛ مانند sudo ufw allow 80/tcp برای وبسرور، و همه چیز را با sudo ufw status verbose تأیید کنید. مراحل مرتبط در بخشهای «تنظیم پیشفرضهای UFW» و «فعال کردن UFW» بالا پوشش داده شدهاند.
۲. آیا UFW روی دبیان کار میکند؟
بله، UFW روی دبیان کار میکند. تفاوتش با اوبونتو این است که UFW روی دبیان بهصورت پیشفرض نصب نیست؛ پس با sudo apt update و سپس sudo apt install ufw نصبش میکنید. بعد از نصب، هر دستور دقیقاً مثل اوبونتو رفتار میکند و فایروال تا زمانی که sudo ufw enable را اجرا نکنید غیرفعال میماند.
۳. firewalld بهتر است یا UFW؟
هیچکدام بهطور مطلق بهتر نیستند؛ انتخاب درست به سیستم و نیازهای شما بستگی دارد. UFW سادهتر است و برای راهاندازیهای تکسروری روی اوبونتو و دبیان—که بیشتر چند پورت محدود را باز میکنید—انتخاب طبیعی است. firewalld برای سیستمهای خانواده Red Hat مانند Rocky Linux و Fedora و محیطهایی که به مدیریت پویای زون برای کارتهای شبکه مختلف نیاز دارند مناسبتر است. برای یک سرور ابری سرراست اوبونتو یا دبیان، UFW معمولاً گزینه سادهترِ کاملاً توانمند است.
۴. بهترین روشهای UFW برای سرور ابری اوبونتو چیست؟
همیشه قبل از فعال کردن فایروال، SSH را اجازه دهید؛ سیاست پیشفرض را روی ردِ ورودی و اجازه خروجی نگه دارید و فقط پورتهایی را که سرویسهایتان واقعاً نیاز دارند باز کنید. از sudo ufw limit ssh برای کند کردن تلاشهای brute-force استفاده کنید، لاگینگ را با sudo ufw logging on روشن کنید و قوانینتان را دورهای با sudo ufw status numbered مرور کنید. تا جای ممکن، سرویسهای حساس مانند SSH را به IPهای شناختهشده محدود کنید بهجای اینکه برای کل اینترنت باز بمانند.
۵. چطور یک پورت مشخص را با UFW در اوبونتو اجازه بدهم؟
از sudo ufw allow بههمراه شماره پورت و پروتکل استفاده کنید؛ مثلاً sudo ufw allow 8080/tcp برای باز کردن پورت TCP 8080. نام بردن از پروتکل (tcp یا udp) دقیقتر است؛ اگر فقط شماره پورت بدهید، قانون روی هر دو پروتکل اعمال میشود. میتوانید اضافه شدن قانون را با sudo ufw status تأیید کنید.
۶. چطور یک قانون UFW را حذف کنم؟
دو راه برای حذف قانون وجود دارد. میتوانید با مشخصات قانون حذف کنید، که آینهای از نحوه ساختش است؛ مثلاً sudo ufw delete allow 80/tcp. روش دیگر، اجرای sudo ufw status numbered برای فهرست قوانین با شماره اندیس و سپس حذف با شماره است؛ مثلاً sudo ufw delete 2. حذف با شماره وقتی قوانین طولانی یا پیچیدهاند راحتتر است و UFW برای تأیید از شما پرامپت میگیرد.
۷. چطور بفهمم UFW فعال و در حال اجراست؟
sudo ufw status verbose را اجرا کنید. اگر فایروال روشن باشد، خط اول Status: active است و بهدنبالش سیاستهای پیشفرض ورودی و خروجی، سطح لاگینگ و فهرست کامل قوانین میآید. اگر Status: inactive باشد، UFW نصب شده اما در حال حاضر هیچ قانونی را اعمال نمیکند و با sudo ufw enable فعالش میکنید.
۸. آیا فعال کردن UFW روی ترافیک IPv6 تأثیر میگذارد؟
بله؛ به شرطی که پشتیبانی IPv6 در UFW فعال باشد—which در سیستمهای مدرن با تنظیم IPV6=yes در /etc/default/ufw پیشفرض است. وقتی IPv6 فعال است، هر قانونی که اضافه میکنید روی هر دو IPv4 و IPv6 اعمال میشود؛ به همین دلیل تأییدهای قانون هم Rule added و هم Rule added (v6) را نشان میدهند. اگر آن تنظیم را تغییر دهید، باید sudo ufw disable و sudo ufw enable را اجرا کنید تا اعمال شود.
نتیجهگیری
در این آموزش، UFW را نصب و پیکربندی کردید تا دسترسی به زیرمجموعهای از پورتها و آدرسهای IP روی یک سرور ابری اوبونتو یا دبیان را اجازه دهید یا محدود کنید. سیاستهای پیشفرض را تنظیم کردید، پورتهایی برای SSH و ترافیک وب باز کردید، با پروفایلهای اپلیکیشن کار کردید، لاگینگ را فعال کردید، قوانین را حذف کردید و یاد گرفتید چطور فایروال را ریست کنید و رایجترین مشکلات را عیبیابی کنید.




