اوبنتوسرورلینوکس

راه‌اندازی فایروال با UFW روی اوبونتو و دبیان

مقدمه

راه‌اندازی یک فایروال کارآمد، برای امن‌سازی سرور ابری شما حیاتی است. پیش‌تر، راه‌اندازی فایروال از طریق ابزارهای پیچیده یا اسرارآمیز انجام می‌شد. بسیاری از این ابزارها — مانند iptables — قابلیت‌های زیادی در خود دارند؛ اما نیازمند تلاش اضافی از سمت کاربر برای یادگیری و درکشان هستند.

گزینه دیگری هم وجود دارد: UFW یا Uncomplicated Firewall (فایروال غیرپیچیده). UFW یک فرانت‌اند (Front-End) برای سیستم netfilter هسته است که هدفش فراهم کردن اینترفیسی کاربرپسندتر نسبت به ابزارهای دیگر مدیریت فایروال است. UFW در جامعه لینوکس به‌خوبی پشتیبانی می‌شود و به‌صورت پیش‌فرض روی اوبونتو نصب است؛ جایی که تا وقتی فعالش نکنید، غیرفعال باقی می‌ماند.

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

نکات کلیدی

  • UFW (‏Uncomplicated Firewall) فرانت‌اندی خوش‌رفتار برای فایروال netfilter هسته است و شما را از پیچیدگی قوانین خام iptables یا nftables بی‌نیاز می‌کند.
  • روی اوبونتو، UFW به‌صورت پیش‌فرض نصب اما غیرفعال است؛ روی دبیان در مخازن موجود است اما باید با sudo apt install ufw نصب شود.
  • نسخه‌های جدید UFW (‏0.36.x) روی اوبونتو و دبیان فعلی، از طریق لایه سازگاری iptables-nft از بک‌اند nftables استفاده می‌کنند؛ درحالی‌که دستوراتی که تایپ می‌کنید همان‌ها باقی می‌مانند.
  • خط پایه توصیه‌شده این است: همه ترافیک ورودی را رد کرده، همه ترافیک خروجی را مجاز کنید و سپس فقط پورت‌های موردنیاز را باز کنید.
  • همیشه قبل از اجرای sudo ufw enable، ‏SSH را مجاز کنید (با sudo ufw allow OpenSSH یا sudo ufw allow ssh)؛ در غیر این صورت ریسک قفل‌شدن خودتان بیرون از یک سرور راه‌دور را دارید.
  • می‌توانید ترافیک را بر اساس نام سرویس، شماره پورت، بازه پورت، آدرس IP یا پروفایل اپلیکیشن مجاز یا رد کنید؛ که قوانین را خوانا و دقیق می‌سازد.
  • دستور sudo ufw limit ssh با محدودکردن اتصالات جدید به حداکثر شش مورد در هر ۳۰ ثانیه از یک آدرس IP واحد، محافظت پایه‌ای در برابر Brute-Force اضافه می‌کند.
  • دستور sudo ufw status verbose قوانین فعال، سیاست‌های پیش‌فرض و سطح لاگ‌گیری را یک‌جا نشان می‌دهد.
  • UFW قوانین IPv6 را وقتی IPV6=yes در /etc/default/ufw تنظیم شده باشد — که روی سیستم‌های مدرن پیش‌فرض است — به‌طور خودکار مدیریت می‌کند.
  • دستور sudo ufw reset همه قوانین تعریف‌شده توسط کاربر را بکاپ گرفته و حذف می‌کند، فایروال را غیرفعال کرده و سیاست‌های پیش‌فرض را به «رد ورودی و مجاز خروجی» بازنشانی می‌کند.

پیش‌نیازها

برای دنبال‌کردن این آموزش، به سروری در حال اجرای اوبونتو یا دبیان نیاز دارید. سرور شما باید یک کاربر غیر root با دسترسی sudo داشته باشد.

  • برای راه‌اندازی این موارد روی اوبونتو، راهنمای «راه‌اندازی اولیه سرور با اوبونتو» را دنبال کنید.
  • برای راه‌اندازی این موارد روی دبیان، راهنمای «راه‌اندازی اولیه سرور با دبیان» را دنبال کنید. مراحل آن راهنما به یک اندازه برای دبیان ۱۲ و ۱۳ هم اعمال می‌شوند.

هر دوی این راهنماهای راه‌اندازی اولیه سرور به شما کمک می‌کنند محیطی امن بسازید که می‌توانید از آن برای تمرین ساخت قوانین فایروال استفاده کنید.

وقتی کاربر sudo خود را آماده کردید، می‌توانید قبل از پیکربندی UFW، به درک آنچه UFW انجام می‌دهد بپردازید.

درک UFW و نحوه کار آن

UFW فایروالِ هسته لینوکس را جایگزین نمی‌کند؛ آن را مدیریت می‌کند. هسته، ترافیک شبکه را از طریق چارچوب netfilter خود فیلتر می‌کند؛ که مدیران به‌طور سنتی آن را با iptables یا — جدیدتر — با nftables پیکربندی می‌کنند. نوشتن دستی این قوانین قدرتمند اما خطاخیز است. UFW روی این ماشینیاری می‌نشیند و دستورات کوتاه و خوانایی مثل sudo ufw allow ssh را به قوانین سطح پایین‌تری که هسته اعمال می‌کند، ترجمه می‌کند.

روی نسخه‌های فعلی اوبونتو و دبیان، ‏UFW نسخه 0.36.x از طریق لایه سازگاری iptables-nft از بک‌اند nftables استفاده می‌کند؛ پس حتی وقتی به اصطلاحات iptables فکر می‌کنید، قوانین در زیر کاپوت با nftables اعمال می‌شوند. این تغییر شفاف است: دستورات UFW در این راهنما فارغ از بک‌اند، یکسان‌اند.

برای دیدن اینکه کدام نسخه نصب شده، دستور زیر را اجرا کنید:

sudo ufw version

این دستور نسخه و مجوز UFW را مشابه موارد زیر گزارش می‌کند:

خروجی:

ufw 0.36.2
Copyright 2008-2023 Canonical Ltd.

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

ابزاراینترفیسبه‌صورت پیش‌فرضمناسب برای
UFWخط فرمان ساده (‏ufw allow ssh)اوبونتو (به‌راحتی به دبیان اضافه می‌شود)سرورهای منفرد و مجموعه قوانین سرراست
firewalldمبتنی بر Zone، ‏firewall-cmdRHEL، ‏Rocky Linux، Fedoraمحیط‌های داینامیک با چند Zone شبکه‌ای
iptables / nftablesسینتکس قوانین سطح پایینهمه توزیع‌هاکنترل ریزدانه، مسیریابی پیچیده یا NAT

برای بیشتر سرورهای ابریِ منفردِ اوبونتو یا دبیان، ‏UFW ساده‌ترین انتخابی است که همچنان کنترل کامل به شما می‌دهد. اگر روی سیستمی از خانواده Red Hat هستید یا مدیریت مبتنی بر Zone لازم دارید، firewalld را انتخاب کنید؛ و به سراغ nftables خام فقط زمانی بروید که قابلیت‌های پیشرفته‌ای لازم دارید که فرانت‌آندها ارائه نمی‌کنند.

نصب UFW روی اوبونتو و دبیان

روی اوبونتو، UFW به‌صورت پیش‌فرض نصب است؛ پس معمولاً نیازی به نصب چیزی ندارید. می‌توانید با بررسی وضعیتش، حضورش را تأیید کنید:

sudo ufw status

اگر UFW نصب اما هنوز فعال نشده باشد، خروجی ساده است:

خروجی:

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

غیرفعال‌کردن فایروال این تأیید را برمی‌گرداند:

خروجی:

Firewall stopped and disabled on system startup

سپس دوباره فعالش کنید:

sudo ufw enable

فعال‌سازی مجدد فایروال تأیید می‌کند که فعال است:

خروجی:

Firewall is active and enabled on system startup

فایروال UFW شما اکنون برای هندل هم IPv4 و هم IPv6 تنظیم شده است. در ادامه، قوانین پیش‌فرضی را که روی اتصال‌ها اعمال می‌شوند، تنظیم می‌کنید.

راه‌اندازی پیش‌فرض‌های UFW

می‌توانید با تعریف قوانین پیش‌فرض برای مجاز کردن یا رد کردن اتصال‌ها، کارایی فایروال خود را بهبود بدهید. پیش‌فرض UFW این است: رد کردن همه اتصالات ورودی و مجاز کردن همه اتصالات خروجی. این یعنی هر کسی که سعی در رسیدن به سرور شما داشته باشد نمی‌تواند متصل شود؛ درحالی‌که هر اپلیکیشنی داخل سرور همچنان می‌تواند بیرون متصل شود. برای تنظیم صریح این قوانین، ابتدا به قانون اتصالات ورودی بپردازید:

sudo ufw default deny incoming

تنظیم سیاست ورودی، خروجی زیر را برمی‌گرداند:

خروجی:

Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)

سپس به قانون اتصالات خروجی بپردازید:

sudo ufw default allow outgoing

تنظیم سیاست خروجی، تأییدی مشابه برمی‌گرداند:

خروجی:

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

اگر تغییرتان موفق بود، این خروجی را دریافت می‌کنید:

خروجی:

Rule added
Rule added (v6)

UFW برخی نام‌های سرویس را از همون اول می‌شناسد؛ مانند کلیدواژه ssh که بالا استفاده شد. به‌طور جایگزین، می‌توانید اتصالات ورودی به پورت 22/tcp — که از پروتکل کنترل انتقال (TCP) استفاده می‌کند — را مجاز کنید و همان کار را انجام بدهید:

sudo ufw allow 22/tcp

اگر این را بعد از اجرای قبلیِ allow ssh اجرا کنید، UFW به شما می‌گوید قانون از قبل وجود دارد:

خروجی:

Skipping adding existing rule
Skipping adding existing rule (v6)

اگر سرور SSH شما روی پورت غیراستانداردی مثل 2222 اجرا می‌شود، اتصالات را با همان سینتکس اما پورت متفاوت مجاز کنید. اگر شماره پورت را به‌تنهایی تعیین کنید، قانون روی هم tcp و هم udp اعمال می‌شود؛ پس نام‌بردن از پروتکل دقیق‌تر است:

sudo ufw allow 2222/tcp

مجاز کردن پورت سفارشی، همان تأیید قبلی را برمی‌گرداند:

خروجی:

Rule added
Rule added (v6)

برای کاهش ریسک تلاش‌های ورود Brute-Force، می‌توانید به‌جای مجاز کردن ساده، ‏SSH را با محدودیت نرخ (Rate-Limit) همراه کنید. دستور limit اتصالات جدید را حداکثر به شش مورد در ۳۰ ثانیه از هر آدرس IP واحد محدود می‌کند:

sudo ufw limit ssh

مجاز کردن اتصال‌های وب‌سرور

وب‌سرورهایی مانند Apache و Nginx درخواست‌های HTTP را روی پورت 80 و درخواست‌های HTTPS را روی پورت 443 دریافت می‌کنند. برای سرو کردن ترافیک رمزنگاری‌نشده، اتصالات به پورت 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، باید پورت داده یعنی ۲۰ را هم مجاز کنید:

sudo ufw allow 20/tcp

توجه: بیشتر استقرارهای مدرن FTP به‌جای حالت Active از حالت Passive استفاده می‌کنند. حالت Passive نیازمند باز کردن بازه اضافی از پورت‌های شماره‌بالا فراتر از ۲۰ و ۲۱ است. بازه دقیق در سرور FTP شما پیکربندی می‌شود (مثلاً pasv_min_port و pasv_max_port در vsftpd.conf یا PassivePorts در proftpd.conf). وقتی آن بازه را دانستید، با قانونی مثل sudo ufw allow 49152:65535/tcp آن را باز کنید. قبل از در معرض نمایش گذاشتن یک بازه پورت Passive، برای مقادیر درست به مستندات سرور FTP خود مراجعه کنید.

تنظیمات شما به اینکه کدام پورت‌ها و سرویس‌ها را لازم دارید باز کنید بستگی دارد و ممکن است مقداری تست لازم باشد. یادتان باشد اتصال SSH خود را هم مجاز نگه دارید.

تعیین بازه‌های پورت

می‌توانید با UFW بازه‌هایی از پورت‌ها را برای مجاز کردن یا رد کردن تعیین کنید. برای این کار، پورتِ سر بازه را تعیین کنید، سپس دونقطه (:)، بعد انتهای بازه و در نهایت پروتکل (‏tcp یا udp).

مثلاً، دستور زیر دسترسی TCP به همه پورت‌های ۱۰۰۰ تا ۲۰۰۰ (شامل هر دو) را مجاز می‌کند:

sudo ufw allow 1000:2000/tcp

به‌طور مشابه، دستور زیر اتصالات UDP به همه پورت‌های ۱۲۳۴ تا ۴۳۲۱ را رد می‌کند:

sudo ufw deny 1234:4321/udp

بسیاری از سرویس‌های مهم به‌جای TCP از UDP استفاده می‌کنند. DNS، NTP و پروتکل‌های VPN مانند WireGuard همگی به UDP متکی‌اند؛ پس هنگام نوشتن قوانین برایشان باید udp را صریحاً تعیین کنید. مثال‌های زیر نحوه مجاز کردن پورت VPN مربوط به WireGuard و پورت 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 یا Subnet مشخص، راهنمای ما را ببینید.

کار با پروفایل‌های اپلیکیشن UFW

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

sudo ufw app list

خروجی پروفایل‌های ثبت‌شده را نشان می‌دهد؛ که بسته به آنچه نصب کرده‌اید متغیر است:

خروجی:

Available applications:
  Apache
  Apache Full
  Apache Secure
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

برای دیدن دقیق اینکه یک پروفایل کدام پورت‌ها را باز می‌کند، جزئیاتش را بخواهید:

sudo ufw app info 'Nginx Full'

توصیف پروفایل، پورت‌هایی را که پوشش می‌دهد فهرست می‌کند — در این مورد، هم HTTP و هم HTTPS:

خروجی:

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

رد کردن اتصال‌ها

اگر می‌خواستید همه پورت‌های سرور خود را باز کنید — که توصیه نمی‌شود — می‌توانستید همه اتصالات را مجاز کرده و سپس فقط پورت‌های موردنظر برای مسدودسازی را رد کنید. مثال زیر دسترسی به پورت 80 را رد می‌کند:

sudo ufw deny 80/tcp

می‌توانید به همان روش بر اساس نام سرویس یا پروفایل اپلیکیشن هم رد کنید؛ مثلاً sudo ufw deny ftp. رد کردن برای مسدودسازی موقت یک سرویس — بدون حذف دائمی قانونِ مجاز کردنش — هم مفید است.

حذف قوانین

اگر می‌خواهید بعضی از قوانینی که ساختید را حذف کنید، از delete استفاده کرده و قانون موردنظر حذف را تعیین کنید:

sudo ufw delete allow 80/tcp

حذف قانون، خروجی زیر را برمی‌گرداند:

خروجی:

Rule deleted
Rule deleted (v6)

اگر قوانین طولانی یا پیچیده باشند، یک رویکرد جایگزین دومرحله‌ای وجود دارد. ابتدا، فهرست شماره‌گذاری‌شده‌ای از قوانین فعلی تولید کنید:

sudo ufw status numbered

فهرست شماره‌گذاری‌شده به شما اجازه می‌دهد هر قانون و ایندکسی را که برای حذفش استفاده خواهید کرد ببینید:

خروجی:

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
…

با فهرست شماره‌گذاری‌شده در دست، قانونی را با ارجاع به شماره‌اش حذف کنید. مثلاً، اگر پورت 80 در فهرست شماره ۴ است، از دستور زیر استفاده کنید. ممکن است برای تأیید با y (بله) یا n (خیر) از شما پرسیده شود:

sudo ufw delete 4

تأیید درخواست، قانون را حذف می‌کند:

خروجی:

Deleting:
 allow 80
Proceed with operation (y|n)? y
Rule deleted (v6)

فعال‌سازی UFW

وقتی همه قوانینی را که می‌خواهید روی فایروال اعمال شود تعریف کردید، می‌توانید UFW را فعال کنید تا اجرای آن‌ها را شروع کند. اگر از طریق SSH متصل هستید، مطمئن شوید قبل از فعال‌سازی، پورت SSH خود — معمولاً پورت 22 — را مجاز کرده‌اید. در غیر این صورت، ممکن است خودتان را بیرون از سرورتان قفل کنید:

sudo ufw enable

فعال‌کردن فایروال تأیید می‌کند که اکنون فعال بوده و هنگام بوت شروع می‌شود:

خروجی:

Firewall is active and enabled on system startup

برای تأیید اینکه تغییرات‌تان اعمال شده‌اند، وضعیت را برای بازبینی فهرست قوانین بررسی کنید:

sudo ufw status

خروجی وضعیت، هر قانون فعال و اقدامی را که UFW انجام می‌دهد فهرست می‌کند:

خروجی:

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

غیرفعال‌کردن فایروال، آن را متوقف کرده و از استارتاپ حذف می‌کند:

خروجی:

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 فایل‌های قوانین فعلی شما را قبل از پاک‌کردن بکاپ گرفته و سپس خودش را غیرفعال می‌کند:

خروجی:

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 اضافه کنید تا نشست موجود به کار خود ادامه دهد. اگر قبلاً قطع شده‌اید، از کنسول وب یا کنسول بازیابی ارائه‌دهنده‌تان برای ورود محلی استفاده کرده؛ سپس قبل از اتصال مجدد از طریق SSH، دستور sudo ufw allow OpenSSH را اجرا کنید. برای اجتناب کامل از این مشکل، همیشه 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) را نشان بدهند.

نمایش inactive در وضعیت UFW بعد از ریبوت

اگر 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 و محیط‌هایی که مدیریت داینامیک Zone برای اینترفیس‌های شبکه‌ای متفاوت لازم دارند، مناسب‌تر است. برای یک سرور ابری سرراست اوبونتو یا دبیان، ‏UFW معمولاً گزینه‌ای راحت‌تر و کاملاً توانمند است.

۴. بهترین شیوه‌های UFW برای یک سرور ابری اوبونتو چیست؟

همیشه قبل از فعال‌کردن فایروال، ‏SSH را مجاز کنید؛ سیاست پیش‌فرض را روی «رد ورودی و مجاز خروجی» نگه دارید و فقط پورت‌هایی را که سرویس‌هایتان واقعاً لازم دارند باز کنید. برای کندکردن تلاش‌های Brute-Force از sudo ufw limit ssh استفاده کنید، لاگ‌گیری را با 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 فعال باشد — که روی سیستم‌های مدرن از طریق تنظیم IPV6=yes در /etc/default/ufw به‌صورت پیش‌فرض فعال است. وقتی IPv6 فعال باشد، هر قانونی که اضافه می‌کنید روی هم IPv4 و هم IPv6 اعمال می‌شود؛ که دلیل نمایش هر دو پیام Rule added و Rule added (v6) در تأییدهای قوانین است. اگر آن تنظیم را تغییر بدهید، باید sudo ufw disable و سپس sudo ufw enable را اجرا کنید تا اعمال شود.

جمع‌بندی

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

با آماده‌بودن این مبانی، یک خط پایه محکم و امن برای هر سرور ابری در اختیار دارید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا