زیرساخت ابری هایو

قوانین و دستورات فایروال UFW Essentials

فهرست مطالب

معرفی فایروال UFW

فایروال UFW مخفف uncomplicated firewall است و به معنی فایروال سبک و ساده است.

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

در واقع این ابزار یک رابط کاربری ساده را برای استفاده از فایروال در خط فرمان اجرا می کند.

این آموزش به زبان ساده برای دسترسی سریع به دستورات رایج UFW مانند نحوه مجاز کردن و مسدود کردن سرویس ها بر اساس پورت، رابطه شبکه و آدرس IP ها است.

فایروال UFW

راهنمای استفاده از این آموزش:

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

دقت داشته باشید که در بعضی از قطعه کد ها، قسمت هایی بصورت متن کج شده وجود دارد، در این قسمت ها باید آدرس IP مورد نظر خود را وارد کنید و پیش از اجرای کد، در آنها تغییراتی اجرا کنید.

برای مشاهده مجموعه قوانین UFW خود می توانید از قطعه کد های زیر استفاده کنید:

sudo ufw status

یا

sudo ufw status verbose

بررسی وضعیت UFW در اوبونتو

در مرحله اول برای تشخیص فعال بودن و یا فعال نبودن UFW خود، قطعه کد زیر را اجرا کنید:

sudo ufw status

پس از اجرا کردن قطعه کد بالا، با خروجی مانند زیر مواجه خواهید شد:

Status: inactive

این خروجی نشان دهنده فعال/غیرفعال بودن فایروال شما است.

آموزش فعال کردن UFW در ubuntu

اگر پس از اجرا قطعه کد بالا با پیام “Status: inactive” روبه رو شدید، بدان معناست که این فایروال هنوز در سیستم شما فعال نشده،

پس باما همراه باشید تا در ادامه با اجرا کردن دستوری ufw را فعال کنیم.

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

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

برای فعال کردن UFW، قطعه کد زیر را اجرا کنید:

sudo ufw enable

پس از اجرا کردن کد، خروجی ای را مانند زیر خواهید دید:

Firewall is active and enabled on system startup

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

sudo ufw status
خروجی:

Status: active

Logging: on (low)

Default: deny (incoming), allow (outgoing), deny (routed)

New profiles: skip

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

اگر به هر دلیلی نیاز به غیرفعال کردن UFW دارید، قطعه کد زیر را اجرا کنید:

sudo ufw disable

توجه کنید، این دستور سرویس فایروال شما را به صور کامل غیر فعال می کند.

مسدود کردن آدرس IP انتخابی در ابونتو ufw

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

sudo ufw deny from 203.0.113.100

 

خروجی زیر نشان دهنده موفقیت آمیز بودن پروسه مسدود کردن است:

Rule added

در این مثال، عبارت from 203.0.113.100 ، آدرس آیپی ای که باید مسدود بشود را مشخص میکند.

دقت داشته باشید به جای آیپی وارد شده در این مثال باید آیپی مورد نظر خودتون رو وارد کنید.

اگر اکنون دستور sudo ufw status را اجرا کنید، آدرس IP مشخص شده را به عنوان مسدود شده، مشاهده خواهید کرد:

Status: active
To Action From
-- ------ ----
Anywhere DENY 203.0.113.100

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

مسدود کردن زیر شبکه ها در اوبونتو 20.04

اگر نیاز به مسدود کردن یک زیر شبکه به صورت کامل دارید، می توانید آدرس زیر شبکه را به عنوان پارامتر from در دستور ufw deny استفاده کنید،

برای مثال دستور زیر تمامی آدرس IP هایی را در زیر شبکه نمونه (203.0.113.0/24) وجود دارد را مسدود می کند:

sudo ufw deny from 203.0.113.0/24

خروجی دستور بالا:

Rule added

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

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

sudo ufw deny in on eth0 from 203.0.113.100

خروجی دستور:

Rule added

در این قطعه کد، پارامتر “in” به UFW می گوید که دستور را فقط برای اتصالات ورودی اعمال کند.

همچنین پارامتر on eth0 مشخص می کند که این دستور، تنها برای رابط eth0 اعمال شود.

حال اگر سیستمی با چندین رابط شبکه( از جمله رابطه های مجازی) دارید، نیاز دارید که دسترسی خارجی به برخی از این رابطه ها را مسدود کنید، زیرا ممکن است برایتان مفید و به بهبود امنیت سیستم های کمک شایانی کند.

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

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

sudo ufw allow from 203.0.113.101
خروجی:

Rule added

هم اکنون اگر با استفاده از sudo ufw status، وضعیت UFW را دریافت کنید، باید خروجی را مانند خروجی زیر ببینید که کلمه 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

خروجی:

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

مثال زیر قانونی را حذف می کند که قبلا تنظیم شده بود تا همه اتصالات از یک آدرس  IP مانند 203.0.113.101 می آید را مجاز کند:

sudo ufw delete allow from 203.0.113.101
خروجی:
Rule deleted

راه دیگری نیز برای حذف دستورات وجود دارد، در این راه با استفاده از شناسه دستورات دست به پاک کردن، دستور مورد نظر می زنیم، برای به دست آوردی شناسه دستورات می توانید از کد زیر استفاده کنید:

sudo ufw status numbered
خروجی:
Status: active
To Action From
-- ------ ----
[ 1] Anywhere DENY IN 203.0.113.100
[ 2] Anywhere on eth0 ALLOW IN 203.0.113.102

در خروجی نمایش داده شده می توانید مشاهده کنید که هم اکنون دو دستور فعال داریم، دستور اول، تمامی اتصالات را از آدرس IP مانند 203.0.113.10، رد می کند.

قانون دوم اجازه میدهد تا اتصالات بر روی رابط eth0 از آدرس IP مانند 203.0.113.102 به سرور متصل شود.

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

پس قانون اول اضافی است، بنابراین می توانید آن را حذف کنید. برای حذف یک قانون با استفاده از شناسه آن، کد زیر را اجرا کنید:

sudo ufw delete 1

پس از اجرا کد، از شما خواسته می شود که عملیات را تایید کنید و مطمئن شوید شناسه ای که ارائه می کنید با دستوری که می خواهید حذف کنید برابر است.

خروجی:
Deleting:
deny from 203.0.113.100
Proceed with operation (y|n)? y
Rule deleted

هم اکنون اگر دوباره احراز وضعیت را با کد sudo ufw status انجام دهید، خواهید دید که دستور حذف شده است.

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

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

این کار اغلب مانند اجرای کد ufw allow from است، اما اینکار یه مزیتی نسبت به استفاده از کد دارد با اینکار یک میانبر به یک پورت خاصی که سرویس کاربر از آن استفاده میکند خواهیم داشت. و یک نام گذاری کاربر پسند برای سرویس های ارجاع شده ارائه می دهد.

برای فهرست کردن پروفایل هایی که در حال حاضر در دسترس هستند، کد زیر را اجرا کنید:

sudo ufw app list

اگر سرویسی مانند وب سرور یا سایر نرم افزارهای وابسته به شبکه را نصب کرده اید، اما پروفایلی در UFW در دسترس نیست، ابتدا مطمئن شوید که این سرویس فعال است.

برای سرورهای راه دور، معمولاً OpenSSH فعال خواهد بود:

خروجی
Available applications:
OpenSSH

فعال کردن پروفایل برنامه ها

برای فعال کردن پروفایل  ufw allow  را به همراه نام پروفایل برنامه ای را که می خواهید فعال کنید، رو بنویسید،

با استفاده از دستور sudo ufw app list پروفایل برنامه ها را به دست آورید.

در مثال زیر، ما پروفایل OpenSSH را فعال می کنیم که به تمامی اتصالات SSH در پورت پیشفرض SSH ، اجازه دسترسی می دهد.

sudo ufw allow “OpenSSH”
خروجی
Rule added
Rule added (v6)

به یاد داشته باشید که نام های پروفایل را که از چندین کلمه تشکیل شده اند، مانند 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)

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

اگر می‌خواهید فقط درخواست‌های HTTPS را از وب سرور و به سرور خود مجاز کنید، باید ابتدا محدودترین دستور را در فایروال فعال کنید،

که در این مورد دستور Nginx HTTPS هست و بعد باید قانون Nginx Full رو غیرفعال کنید:

sudo ufw allow "Nginx HTTPS"
sudo ufw delete allow "Nginx Full"

به یاد داشته باشید که می‌توانید تمام پروفایل های برنامه موجود را، با لیست کردن برنامه ها با استفاده از دستور sudo ufw list  کنید.

دسترسی SSH

هنگام استفاده از سرور مجازی، باید مطمئن شوید که پورت SSH برای اتصالات باز است تا بتوانید از راه دور به سرور خود وارد شوید.

دستور زیر پروفایل برنامه OpenSSH را فعال می کند و به همه اتصالات به پورت SSH پیش فرض بر روی سرور اجازه دسترسی می دهد:

sudo ufw allow OpenSSH
خروجی
Rule added
Rule added (v6)

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

sudo ufw allow 22
خروجی
Rule added
Rule added (v6)

مجاز کردن SSH ورودی از آدرس IP یا زیرشبکه خاص

برای اجازه دادن به اتصالات ورودی از یک آدرس IP یا زیرشبکه خاص، دستورالعملی را برای تعریف منبع اتصال، قرار می دهیم.

برای این کار باید آدرس مقصد را با یک پارامتر مشخص کنیم.

برای محدود کردن این دستور فقط به SSH، در ابتدا پروتکل را محدود به tcp کرده و سپس از پارامتر پورت استفاده می‌کنیم و آن را روی پورت 22 پورت پیش‌فرض SSH تنظیم می کنیم.

با فراخوانی دستور زیر، فقط به اتصالات SSH که از آدرس IP :203.0.113.103 می آیند اجازه دسترسی داده میشود.

sudo ufw allow from 203.0.113.103 proto tcp to any port 22
خروجی
Rule added

همچنین می توانید از یک آدرس زیر شبکه به عنوان پارامتر from برای اجازه دادن به اتصالات SSH ورودی، از کل شبکه استفاده کنید:

sudo ufw allow from 203.0.113.0/24 proto tcp to any port 22

مجاز کردن Rsync ورودی از آدرس IP یا زیرشبکه خاص

برنامه Rsync برنامه است که روی پورت 873 اجرا میشود، با استفاده از این برنامه میتوانید فایلی را از یک کامپیوتر به کامپیوتری دیگر انتقال دهید.

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

دستور زیر فقط اتصالات Rsync را که از آدرس IP 203.0.113.103 می آیند اجازه دسترسی می دهد:

sudo ufw allow from 203.0.113.103 to any port 873
خروجی:
Rule added

برای اینکه کل زیرشبکه 203.0.113.0/24 بتواند با سرور شما همگام شود، قطعه کد زیر را اجرا کنید:

sudo ufw allow from 203.0.113.0/24 to any port 873

خروجی

Rule added

اجازه دسترسی به Nginx HTTP / HTTPS

پس از نصب، وب سرور Nginx چند پروفایل مختلف UFW را در سرور تنظیم می کند.

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

sudo ufw app list | grep Nginx

خروجی

Nginx Full

Nginx HTTP

Nginx HTTPS

برای فعال کردن ترافیک از HTTP و HTTPS ،Nginx Full را انتخاب کنید تا دسترسی به هر دوی آنها داده شود.

در غیر این صورت، Nginx HTTP را انتخاب کنید تا فقط HTTP مجاز باشد و یا در صورت نیاز Nginx HTTPS را انتخاب کنید تا فقط  HTTPS مجاز باشد.

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

sudo ufw allow "Nginx Full"

خروجی

Rule added

Rule added (v6)

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

سرورهای وب، مانند Apache و Nginx، معمولاً به درخواست‌های HTTP در پورت 80 توجه نشان می‌دهند.

اگر قوانین شما برای ترافیک ورودی به صورت پیش فرض به صورت اجازه دسترسی دادن و مسدود کردن تنظیم شده است، باید یک قانون UFW ایجاد کنید تا اجازه دسترسی خارجی به پورت 80 را بدهد.

می توانید از شماره پورت یا نام سرویس (http) به عنوان پارامتر این دستور استفاده کنید.

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

sudo ufw allow http
خروجی
Rule added
Rule added (v6)

همچنین یک راه جایگزین برای مشخص کردن پورت سرویس HTTP را مشخص می کنیم:

sudo ufw allow 80
خروجی
Rule added
Rule added (v6)

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

HTTPS معمولاً روی پورت 443 اجرا می‌شود.

اگر قوانین شما برای ترافیک ورودی به صورت پیش فرض به صورت اجازه دسترسی دادن و مسدود کردن تنظیم شده است، باید یک قانون UFW ایجاد کنید تا اجازه دسترسی خارجی به پورت 443 را بدهد.

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

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

sudo ufw allow https

خروجی

Rule added

Rule added (v6)

همچنین یک راه جایگزین برای مشخص کردن پورت سرویس HTTP را مشخص می کنیم:

sudo ufw allow 443

خروجی

Rule added

Rule added (v6)

اجازه دسترسی به همه HTTP و HTTPS های ورودی

اگر می خواهید ترافیک HTTP و HTTPS را مجاز کنید، می توانید یک دستور واحدی را ایجاد کنید که به هر دو پورت اجازه دسترسی می دهد.

این استفاده مستلزم آن است که پروتکل را نیز با پارامتر proto تعریف کنید که در این حالت باید روی tcp تنظیم شود.

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

sudo ufw allow proto tcp from any to any port 80,443

خروجی

Rule added

Rule added (v6)

مجاز کردن Mysql ورودی از آدرس IP یا زیرشبکه خاص

MySQL به اتصالات سرویس گیرنده در پورت 3306 توجه نشان می دهد.

اگر از سرور پایگاه داده MySQL شما، توسط یک سرویس گیرنده در سرور راه دور استفاده می شود، باید یک دستور UFW ایجاد کنید تا به آن دسترسی اجازه داده دهیم.

برای دادن اجازه دسترسی به اتصالات MySQL ورودی از یک آدرس IP یا زیرشبکه خاص، از پارامتر from برای تعیین آدرس IP مبدا و پارامتر port برای تنظیم پورت مقصد 3306 استفاده کنید.

دستور زیر به آدرس IP 203.0.113.103 اجازه می دهد تا به پورت MySQL سرور متصل شود:

sudo ufw allow from 203.0.113.103 to any port 3306

خروجی

Rule added

برای اینکه کل زیر شبکه 203.0.113.0/24 بتواند به سرور MySQL شما متصل شود، قطعه کد زیر را اجرا کنید:

sudo ufw allow from 203.0.113.0/24 to any port 3306

خروجی

Rule added

مجاز کردن PostgreSQL ورودی از آدرس IP یا زیرشبکه خاص

PostgreSQL به اتصالات کلاینت در پورت 5432 توجه نشان می دهد. اگر سرور پایگاه داده PostgreSQL شما توسط یک کلاینت بر روی سروری از راه دور استفاده می شود، باید مطمئن شوید که به آن ترافیک اجازه دسترسی می دهید.

برای اجازه دادن به اتصالات PostgreSQL ورودی از یک آدرس IP یا زیرشبکه خاص، منبع را با پارامتر from مشخص کنید و port را روی 5432 تنظیم کنید:

sudo ufw allow from 203.0.113.103 to any port 5432

خروجی

Rule added

برای اینکه کل زیر شبکه 203.0.113.0/24 بتواند به سرور PostgreSQL شما متصل شود، قطعه کد زیر را اجرا کنید:

sudo ufw allow from 203.0.113.0/24 to any port 5432

خروجی

Rule added

مسدود کردن ایمیل SMTP

سرورهای ایمیل، مانند Sendmail و Postfix، معمولاً از پورت 25 برای ترافیک SMTP استفاده می کنند.

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

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

sudo ufw deny out 25

خروجی:

Rule added

Rule added (v6)

این قطعه کد، فایروال شما را به گونه ای پیکربندی می کند که تمام ترافیک خروجی در پورت 25 را حذف میکند.

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

حرف آخر

UFW ابزار قدرتمندی است که در صورت پیکربندی درست، می تواند امنیت سرورهای شما را تا حد زیادی بهبود بخشد.

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

نکته ای که حائز اهمیت است این است که بسیاری از دستورات این آموزش را میتوان با تغییر پارامتر هایی مانند آدرس IP مبدا و/یا پورت مقصد، متناسب با موارد و سناریوهای مختلف استفاده کرد.

همچنین برای اطلاعات دقیق تر در مورد هر پارامتر فرمان و اصلاح کننده های موجود، می توانید از ابزار man برای بررسی کتابچه راهنمای UFW استفاده کنید:

man ufw

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

نیاز به راهنمایی بیشتر دارید؟
عجله دارید؟ 02156218439
رایگان آموزش ببین - آموزش کار با سرویس های هایو

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

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