تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

آشنایی با قوانین و دستورات رایج فایروال (UFW)


۶ اسفند ۱۴۰۳

UFW (Uncomplicated Firewall) یک ابزار پیکربندی فایروال است که بر پایه iptables ساخته شده و به‌طور پیش‌فرض در اوبونتو گنجانده شده است. این ابزار یک رابط ساده برای پیکربندی موارد رایج فایروال از طریق خط فرمان ارائه می‌دهد. ما در این راهنما بطور مختصر دستورات UFW را روی یک سرور مجازی اوبونتو نسخه 22.04 معرفی کرده و روش مجاز یا مسدود کردن پورت‌ها، رابط شبکه و آدرس شبکه را توضیح خواهیم داد. در ادامه برای مشاهده وضعیت قوانین فعلی UFW، می‌توانید از دستور sudo ufw status یا sudo ufw status verbose استفاده کنید.

پیشنهاد مطالعه: فایروال Iptables چگونه کار می‌کند؟

بررسی وضعیت UFW

برای اینکه بدانید آیا ufw فعال است یا خیر، در خط فرمان دستور زیر را تایپ کنید:

sudo ufw status

اگر ufw نصب نشده باشد، پیغام زیر را خواهید دید:

Output
Status: inactive

فعال سازی UFW

برای فعال کردن ufw دستور زیر را وارد کنید:

sudo ufw enable

حالا باید این خروجی

را در ترمینال خود ببینید:

Firewall is active and enabled on system startup

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

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

پیشنهاد مطالعه: SSH چیست؟ + نحوه استفاده از SSH برای اتصال به سرور مجازی (VPS)

برای اینکه ببینید در حال حاضر چه چیزی مسدود یا مجاز است، هنگام اجرای دستور ufw status از پارامتر verbose بصورت زیر استفاده کنید:

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

غیرفعال کردن UFW

اگر به هر دلیلی نیاز دارید ufw را غیرفعال کنید، می‌توانید از دستور زیر استفاده کنید:

sudo ufw disable

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

مسدود کردن یک 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 مشخص‌شده به‌عنوان یک IP مسدود شده نمایش داده خواهد شد:

Output
Status: active

To                         Action      From
--                         ------      ----
Anywhere                   DENY        203.0.113.100   

تمام اتصالات ورودی و خروجی برای آدرس IP مشخص‌شده مسدود می‌شوند.

مسدود کردن دسترسی ساب‌نت‌ها

اگر می‌خواهید یک زیرشبکه (Subnet) را کامل مسدود کنید، آدرس زیرشبکه را به عنوان پارامتر from در دستور ufw deny وارد کنید. این کار تمام آدرس‌های IP موجود در زیرشبکه مثال 203.0.113.0/24 را مسدود خواهد کرد:

sudo ufw deny from 203.0.113.0/24
Output
Rule added

مسدود کردن اتصالات ورودی به رابط شبکه

در این مرحله برای مسدود کردن اتصالات ورودی از یک آدرس IP خاص به یک رابط شبکه خاص دیگر، دستور زیر را اجرا کنید:

sudo ufw deny in on eth0 from 203.0.113.100
Output
Rule added

در دستور بالا:

  • پارامتر in به ufw می‌گوید که قانون فوق برای اتصالات ورودی اعمال شود.
  • پارامتر on eth0 مشخص می‌کند که این قانون فقط برای شبکه eth0 اعمال شود.

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

مجاز کردن یک آدرس IP

در این مرحله برای مجاز کردن اتصالات شبکه‌ای که از یک آدرس IP خاص شروع می‌شوند ،دستور زیر را اجرا کنید و آدرس IP هایلایت شده را با آدرس IP مورد نظر خودتان جایگزین کنید:

sudo ufw allow from 203.0.113.101
Output
Rule added

اگر حالا دستور sudo ufw status را اجرا کنید، خروجی مشابه زیر را می‌بینید که کلمه ALLOW در کنار آدرس IP که به تازگی اضافه کرده‌اید نمایش داده می‌شود:

Status: active

To                         Action      From
--                           ------        ----
...          
Anywhere              ALLOW    203.0.113.101

علاوه‌بر این، شما می‌توانید اتصالات را از یک زیرشبکه کامل نیز، با وارد کردن آدرس زیرشبکه به همراه پیشوند آن ،مانند 203.0.113.0/24، مجاز کنید.

اجازه دادن به اتصالات ورودی در رابط شبکه

برای اجازه دادن به اتصالات ورودی از یک آدرس IP خاص به یک رابط شبکه مشخص، دستور زیر را اجرا کنید و آدرس IP هایلایت شده را با آدرس IP مورد نظر خود جایگزین کنید:

sudo ufw allow in on eth0 from 203.0.113.102
Output
Rule added

در دستور بالا:

  • پارامتر in به ufw می‌گوید که قانون فوق برای اتصالات ورودی اعمال شود.
  • پارامتر on eth0 مشخص می‌کند که این قانون فقط برای شبکه eth0 اعمال شود.

اگر حالا دستور sudo ufw status را اجرا کنید، خروجی مشابه زیر را دریافت خواهید کرد:

Status: active

To                         Action      From
--                         ------      ----
...         
Anywhere on eth0           ALLOW       203.0.113.102

حذف یک قانون در UFW

برای حذف یک قانون که قبلاً در UFW ایجاد کرده‌اید، می‌توانید از دستور ufw delete به همراه نوع قانون (allow یا deny) استفاده کنید.

به‌عنوان مثال، اگر قبلاً قانونی برای اجازه دادن به تمام اتصالات از آدرس 203.0.113.101 ایجاد کرده بودید، می‌توانید با دستور زیر آن را حذف کنید:

sudo ufw delete allow from 203.0.113.101
Output
Rule deleted

روش دیگر برای حذف قانون مورد نظرتان، استفاده از Rule 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     

همان‌طور که می‌بینید، دو قانون فعال وجود دارد:

  • قانون اول، تمامی اتصالات ورودی از آدرس 203.0.113.100 را مسدود می‌کند.
  • قانون دوم اجازه می‌دهد که آدرس 203.0.113.102 به رابط شبکه eth0 متصل شود.

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

sudo ufw delete 1

حالا در ادامه از شما می‌خواهد تا فرایند حذف را تائید کنید:

Output
Deleting:
 deny from 203.0.113.100
Proceed with operation (y|n)? y
Rule deleted

با فشردن کلید Y قانون حذف می‌شود. اگر دوباره قوانین خود را با دستور sudo ufw status لیست کنید، می‌بینید که قانون موردنظر حذف شده است.

لیست پروفایل برنامه‌ها

پروفایل برنامه یک پرونده متنی با فرمت INI است که خدمات را شرح می‌دهد و شامل قوانین فایروال مربوط به آن سرویس می‌باشد. این پروفایل‌ها در هنگام نصب بسته‌ها در دایرکتوری /etc/ufw/applications.d ایجاد می‌شوند.

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

sudo ufw app list

اگر یک سرویس مانند وب‌سرور یا نرم‌افزار دیگری که به شبکه وابسته است را قبل نصب کرده‌اید و پروفایلی بران آن در ufw در دسترس‌تان نیست ،ابتدا مطمئن شوید که سرویس فعال است یا خیر! برای دسترسی به سرورها از راه دور، معمولا از OpenُSSH استفاده می‌شود:

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 باید داخل علامت نقل قول قرار بگیرند. مانند دستور زیر:

sudo ufw allow "Nginx HTTPS"

غیرفعال سازی پروفایل

در این بخش برای غیرفعال کردن یک پروفایل برنامه که قبلاً در UFW تنظیم کرده‌اید، باید قانون مربوط به آن را حذف کنید. به‌عنوان مثال، فرض کنید خروجی دستور sudo ufw status به شکل زیر باشد:

sudo ufw status
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 را از و به وب‌سرور خود مجاز کنید، ابتدا باید قانون را محدودتر کنید، یعنی 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)

دستور بالا قانونی از فایروال را تعریف می‌کند که به تمام اتصالات پورت 22 (پورت پیش فرض SSH) اجازه دسترسی بدهد. در واقع با تعریف SSH به عنوان سرویس مجاز در فایل /etc/services، فایروال UFW تشخیص می‌دهد که به درخواست‌های SSH پاسخ دهد.

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

sudo ufw allow 22
Output
Rule added
Rule added (v6)

ناگفته نماند اگر تنظیمات SSH طوری‌ است که روی پورت دیگری اجرا می‌شود، نیاز است شماره همان پورت را وارد کنید. برای مثال، اگر سرور SSH شما از پورت 2222 برای اتصال استفاده می‌کند، می‌توانید از دستور زیر برای مجاز کردن اتصالات به این پورت استفاده کنید:

sudo ufw allow 2222

اجازه دادن به اتصالات ورودی SSH از یک آدرس IP

برای مجاز کردن اتصالات ورودی از یک آدرس IP یا زیرشبکه خاص، باید از دستور from استفاده کنید. علاوه بر این، باید آدرس مقصد را با پارامتر to تعیین کنید. برای اینکه این قانون فقط برای SSH اعمال شود، باید پروتکل را به tcp محدود کرده و با استفاده از پارامتر port، پورت 22 که پورت پیش‌فرض SSH است را مشخص کنید.

دستور زیر فقط اتصالات SSH را که از آدرس 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 که بر روی پورت873 اجرا می‌شود، برای انتقال فایل‌ها بین دو سیستم استفاده می‌شود.

شما می‌توانید برای مجاز کردن اتصالات ورودی Rsync از یک آدرس IP یا زیرشبکه خاص، از پارامتر from برای مشخص کردن آدرس IP مبدا و از پارامتر port برای تعیین پورت مقصد (یعنی پورت 873) استفاده کنید.

دستور زیر اتصالات Rsync را که از آدرس 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 را در سرور ایجاد می‌کند. برای شناسایی این پروفایل‌ها دستور زیر را اجرا کنید:

sudo ufw app list | grep Nginx
Output
  Nginx Full
  Nginx HTTP
  Nginx HTTPS

حالا برای فعال‌سازی ترافیک HTTP و HTTPS، پروفایل Nginx Full را انتخاب کنید. در غیر این صورت، برای اجازه دادن به ترافیک فقط HTTP از پروفایل Nginx HTTP و برای فقط HTTPS از پروفایل Nginx HTTPS استفاده کنید.

با اجرای دستور زیر می‌توانید بطور همزمان ترافیک HTTP و HTTPS را روی سرور (پورت‌های 80 و 443) مجاز کنید:

sudo ufw allow "Nginx Full"
Output
Rule added
Rule added (v6)

اجازه دادن به HTTP و HTTPS در Apache

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

sudo ufw app list | grep Apache
Output
  Apache
  Apache Full
  Apache Secure

برای فعال‌سازی ترافیک HTTP و HTTPS، پروفایل Apache Full را انتخاب کنید. در غیر این صورت، برای فعال‌سازی ترافیک فقط HTTP از پروفایل Apache و برای فعال‌سازی ترافیک فقط HTTPS از پروفایل Apache Secure استفاده کنید.

با دستور زیر می‌توانید همزمان ترافیک HTTP و HTTPS را روی سرور (پورت‌های 80 و 443) مجاز کنید:

sudo ufw allow "Apache Full"

Output
Rule added
Rule added (v6)

پیشنهاد مطالعه: مقایسه وب‌سرور Apache و NGINX؛ کدام را انتخاب کنیم؟

اجازه دادن به ورودی HTTP (پورت 80)

سرورهای وب مانند Apache و Nginx معمولاً برای پردازش درخواست‌های HTTP از پورت 80 استفاده می‌کنند. اگر تنظیمات پیش‌فرض شما برای ترافیک ورودی طوری باشد که ترافیک را مسدود یا رد کند، باید یک قانون UFW ایجاد کنید تا دسترسی خارجی به پورت 80 مجاز شود. شما می‌توانید از شماره پورت یا نام سرویس (http) به‌عنوان پارامتر برای این دستور استفاده کنید.

برای اجازه دادن به تمامی اتصالات ورودی HTTP (پورت 80)، از دستور زیر استفاده کنید:

sudo ufw allow http
Output
Rule added
Rule added (v6)

یک جایگزین دیگر این است که شماره پورت سرویس HTTP را طبق دستور زیر وارد کنید:

sudo ufw allow 80
Output
Rule added
Rule added (v6)

اجازه دادن به ورودی HTTPS (پورت443)

HTTPS معمولاً روی پورت 443 اجرا می‌شود. اگر تنظیمات پیش‌فرض شما برای ترافیک ورودی طوری باشد که ترافیک را مسدود یا رد کند، باید یک قانون UFW ایجاد کنید تا دسترسی خارجی به پورت 443 مجاز شود. شما می‌توانید هم از شماره پورت و هم از نام سرویس (https) به‌عنوان پارامتر برای این دستور استفاده کنید.

برای مجاز کردن تمامی اتصالات ورودی HTTPS (پورت 443)، از دستور زیر استفاده کنید:

sudo ufw allow https
Output
Rule added
Rule added (v6)

یک جایگزین دیگر این است که شماره پورت سرویس HTTPS را طبق دستور زیر وارد کنید:

sudo ufw allow 443
Output
Rule added
Rule added (v6)
اجازه دادن به HTTP و HTTPS در Apache

اجازه دادن به کل ورودی‌های HTTP و HTTPS

در این مرحله اگر بخواهید همزمان ترافیک HTTP و HTTPS را مجاز کنید، می‌توانید یک قانون واحد ایجاد کنید که هر دو پورت را مجاز کند. برای این کار باید پروتکل را با پارامتر proto تعریف کنید که در این مورد باید به‌صورت tcp تنظیم شود.

حالا برای مجاز کردن تمامی اتصالات ورودی HTTP و HTTPS (پورت‌های 80 و 443)، دستور زیر را اجرا کنید:

sudo ufw allow proto tcp from any to any port 80,443
Output
Rule added
Rule added (v6)

با سرورهای مجازی لینوکس لیارا، نصب فایروال را با اطمینان انجام دهید

تهیه خدمات لینوکسی امن و باکیفیت می‌تواند برای بسیاری از افراد و کسب‌وکارها چالشی جدی باشد. برای داشتن یک سرور با تنظیمات امنیتی دقیق و عملکرد بالا، لازم است به سراغ ارائه‌دهندگانی بروید که تجربه و اعتبار کافی در این زمینه دارند. لیارا با زیرساخت ابری قدرتمند و پشتیبانی حرفه‌ای و ۲۴ ساعته، به‌عنوان یکی از بهترین ارائه‌دهندگان خدمات لینوکسی در ایران شناخته می‌شود.

لیارا با ارائه سرورهای مجازی با عملکرد بالا و تنظیمات امنیتی پیشرفته، نیاز شما را در زمینه میزبانی وب و پیکربندی سرور به بهترین شکل ممکن برآورده می‌کند. برای مشاهده پلن‌های مختلف و جزئیات سرور مجازی، کافی است روی لینک زیر کلیک کنید و بهترین انتخاب را برای نیاز خود داشته باشید.

سرور مجازی لینوکس

جمع بندی

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

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

man ufw

صفحه رسمی UFW در مستندات اوبونتو منبع کاملی است که می‌توانید برای موارد پیشرفته‌تر و مثال‌های بیشتر به آن مراجعه کنید.

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

1- چگونه می‌توان UFW را در سرور اوبونتو نصب کرد؟

برای نصب UFW در لینوکس اوبونتو دستور  sudo apt-get install UFW را در ترمینال اجرا کنید.

2- چگونه می‌توان UFW را در سرور دبیان فعال کرد؟

برای فعال کردن UFW در دبیان، می‌توانید دستور sudo apt install UFW را در ترمینال اجرا کنید. سپس قوانین دسترسی را براساس نیاز خود تنظیم کنید.

3- چگونه وضعیت قوانین UFW را بررسی کنیم؟

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

sudo ufw status verbose

4- چگونه یک قانون UFW را با استفاده از ID آن حذف کنیم؟

برای حذف یک قانون خاص با استفاده از ID آن، ابتدا باید ID قوانین موجود را با دستور زیر مشاهده کنید:

sudo ufw status numbered

5- چگونه تنظیمات فایروال UFW را برای یک برنامه خاص (مثل Nginx یا Apache) اعمال کنیم؟

برای اجازه دادن به دسترسی به برنامه‌های خاص مانند Nginx یا Apache، ابتدا باید مطمئن شوید که پروفایل‌های مربوطه در UFW فعال هستند. سپس، با استفاده از دستور زیر می‌توانید برای برنامه Apache یا Nginx مجوز دهید:

sudo ufw allow 'Apache Full'

6- آیا می‌توانیم چندین پورت را به‌طور همزمان در UFW باز کنیم؟

بله، برای باز کردن چندین پورت، می‌توانید از دستور زیر استفاده کنید:

sudo ufw allow 80,443,8080/tcp