ملزومات UFW: قوانین و دستورات رایج فایروال برای امنیت لینوکس
جدول محتوا
- ملزومات UFW: قوانین و دستورات رایج فایروال برای امنیت لینوکس
- مقدمه
- نحوه استفاده از این راهنما
- نحوه تأیید وضعیت UFW
- نحوه فعال کردن UFW
- نحوه غیرفعال کردن UFW
- چگونه UFW با iptables ادغام میشود
- نحوه مسدود کردن یک آدرس IP
- نحوه مسدود کردن اتصالات ورودی به یک رابط شبکه
- نحوه مجاز کردن یک آدرس IP
- نحوهی مجاز کردن اتصالات ورودی به یک رابط شبکه
- نحوه حذف قانون UFW
- نحوه فهرست کردن پروفایلهای برنامههای کاربردی موجود
- نحوه غیرفعال کردن پروفایل برنامه
- نحوه فعال کردن SSH
- نحوه فعال کردن HTTP/HTTPS در Nginx
- نحوه فعال کردن HTTP/HTTPS در آپاچی
- نحوه مجاز کردن همه HTTP های ورودی (پورت 80)
- نحوهی مجاز کردن همهی HTTPSهای ورودی (پورت ۴۴۳)
- نحوهی مجاز کردن تمام HTTP و HTTPSهای ورودی
- نحوهی مجاز کردن اتصال MySQL از یک آدرس IP یا زیرشبکهی خاص
- نحوهی مجاز کردن اتصال PostgreSQL از یک آدرس IP یا زیرشبکهی خاص
- نحوه مسدود کردن ایمیلهای خروجی SMTP
- نحوه تنظیم مجدد UFW به پیکربندی پیشفرض
- چگونه تفاوت بین UFW و firewalld را روشن کنیم
- چگونه بین UFW و firewalld یکی را انتخاب کنیم؟
- بهترین شیوهها برای استفاده از UFW
مقدمه
UFW (فایروال ساده) یک ابزار خط فرمان است که برای سادهسازی مدیریت فایروال در سیستمهای لینوکس، بهویژه سیستمهای مبتنی بر اوبونتو، طراحی شده است. این ابزار که بر پایه iptables ساخته شده است، روشی کاربرپسند برای تعریف قوانین کنترل ترافیک شبکه، مانند اجازه دادن یا مسدود کردن پورتها، آدرسهای IP یا سرویسهای خاص، ارائه میدهد. UFW برای مدیران سیستم و توسعهدهندگانی که نیاز به ایمنسازی سرورها بدون مواجهه با پیچیدگی دستورات خام iptables دارند، مناسب است و رویکردی ساده برای مدیریت ترافیک IPv4 و IPv6 ارائه میدهد.
این راهنما که به سبک برگه تقلب است، مرجعی سریع به موارد و دستورات رایج استفاده از UFW، از جمله نمونههایی از نحوه اجازه دادن و مسدود کردن سرویسها بر اساس پورت، رابط شبکه و آدرس IP منبع، ارائه میدهد. همچنین سیاستهای پیشفرض، پروفایلهای برنامه، دسترسی SSH و سناریوهای استفاده پیشرفته را پوشش میدهد و آن را به منبعی کاربردی برای مدیریت ایمن قوانین فایروال در سیستمهای اوبونتو تبدیل میکند.
نکات کلیدی
- UFW مدیریت فایروال را ساده میکند: UFW یک رابط کاربرپسند برای مدیریت iptables است که برای سادهسازی پیکربندی فایروال در سیستمهای مبتنی بر اوبونتو طراحی شده است.
- سیاستهای پیشفرض از نظر طراحی ایمن هستند: به طور پیشفرض، UFW تمام اتصالات ورودی را رد میکند و به تمام اتصالات خروجی اجازه میدهد و یک خط پایه امن برای اکثر سرورها ایجاد میکند.
- همیشه قبل از فعال کردن UFW، SSH را مجاز کنید: اگر از طریق SSH متصل هستید، قبل از فعال کردن UFW، دسترسی SSH را با دستور sudo ufw allow OpenSSH فعال کنید تا از قطع دسترسی از راه دور جلوگیری شود.
- استفاده از پروفایلهای برنامه در صورت وجود: UFW با پروفایلهای برنامه (مانند Nginx Full، OpenSSH) ادغام میشود و امکان ایجاد آسانتر قوانین را بدون مشخص کردن دستی شماره پورتها فراهم میکند.
- پشتیبانی از قوانین مبتنی بر IP: شما میتوانید با استفاده از دستورات سادهای مانند ufw allow from IP یا ufw deny from subnet، ترافیک را از آدرسهای IP یا زیرشبکههای خاص مجاز یا مسدود کنید.
- قوانین مختص رابط کاربری، کنترل جزئی ارائه میدهند: UFW امکان هدفگیری قوانین را برای هر رابط شبکه فراهم میکند که برای سیستمهای چند رابط کاربری و محیطهای مجازی مفید است.
- UFW با IPv4 و IPv6 ادغام میشود: قوانین برای هر دو نسخه IP اعمال میشوند، مگر اینکه صریحاً غیرفعال شده باشند. ورودیهای (v6) را در خروجی وضعیت برای قوانین IPv6 مشاهده خواهید کرد.
- داکر میتواند با UFW تداخل داشته باشد: داکر مستقیماً iptables را تغییر میدهد و به طور بالقوه قوانین UFW را دور میزند، مگر اینکه پیکربندی اضافی اعمال شود.
- قوانین UFW را میتوان به راحتی بازنشانی یا حذف کرد: از ufw reset برای پاک کردن همه قوانین یا از ufw delete برای حذف موارد خاص، از جمله بر اساس شماره قانون برای دقت بیشتر، استفاده کنید.
- بهترین شیوهها، امنیت و قابلیت نگهداری را افزایش میدهند: این راهنما بر شیوههای واضح تأکید دارد: تنظیم زودهنگام سیاستهای پیشفرض، پشتیبانگیری از مجموعه قوانین، استفاده از گزارشگیری و اجتناب از استفاده از firewall در کنار UFW.
نحوه استفاده از این راهنما
- این راهنما در قالب یک برگه تقلب با قطعه کدهای خط فرمان مستقل است.
- به هر بخشی که مربوط به کاری است که میخواهید انجام دهید، بروید.
- وقتی متن هایلایت شده را در دستورات این راهنما مشاهده میکنید، به خاطر داشته باشید که این متن باید به آدرسهای IP شبکه شما اشاره داشته باشد.
به یاد داشته باشید که میتوانید مجموعه قوانین فعلی UFW خود را با دستور sudo ufw status یا sudo ufw status verbose بررسی کنید.
نحوه تأیید وضعیت UFW
برای بررسی فعال بودن ufw، دستور زیر را اجرا کنید:
sudo ufw status
Output
-------------------
Status: inactive
خروجی نشان میدهد که آیا فایروال شما فعال است یا خیر.
نحوه فعال کردن UFW
اگر هنگام اجرای دستور ufw status با پیام Status: inactive مواجه شدید، به این معنی است که فایروال هنوز روی سیستم فعال نشده است. برای فعال کردن آن باید دستوری را اجرا کنید.
برای فعال کردن UFW روی سیستم خود، دستور زیر را اجرا کنید:
sudo ufw enable
خروجی مانند این را خواهید دید:
Output
-------------------
Firewall is active and enabled on system startup
سیاستهای پیشفرض UFW
وقتی UFW را برای اولین بار فعال میکنید، مجموعهای از سیاستهای پیشفرض اعمال میشود که نحوه مدیریت اتصالات ورودی و خروجی توسط فایروال را تعریف میکنند. به طور پیشفرض، UFW به صورت زیر پیکربندی شده است:
- تمام اتصالات ورودی را رد کنید
- همه اتصالات خروجی را مجاز کنید
میتوانید تنظیمات پیشفرض فعلی پالیسی را با دستور زیر تأیید کنید:
sudo ufw status verbose
Output
-------------------
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
اگر میخواهید رفتار پیشفرض را تغییر دهید، میتوانید با استفاده از دستورات زیر، سیاستهای پیشفرض را بهروزرسانی کنید:
- برای رد کردن تمام اتصالات ورودی (برای اکثر سرورها توصیه میشود):
sudo ufw default deny incoming
- برای مجاز کردن همه اتصالات خروجی (پیشفرض):
sudo ufw default allow outgoing
- برای رد کردن تمام ترافیک ارسالی (مربوط به روترها و دروازهها):
sudo ufw default deny routed
این قوانین پیشفرض به عنوان پایه عمل میکنند. پس از تنظیم، میتوانید با استفاده از قوانین allow در ufw، همانطور که در بخشهای دیگر این راهنما توضیح داده شده است، به طور صریح به اتصالات قابل اعتماد اجازه دهید.
شما همیشه میتوانید در صورت نیاز، بسته به میزان محدودکننده یا باز بودن فایروال خود، سیاستهای پیشفرض خود را دوباره اعمال یا تنظیم مجدد کنید.
نحوه غیرفعال کردن UFW
اگر به هر دلیلی نیاز به غیرفعال کردن UFW دارید، میتوانید با دستور زیر این کار را انجام دهید:
sudo ufw disable
توجه داشته باشید که این دستور سرویس فایروال را به طور کامل روی سیستم شما غیرفعال میکند.
چگونه UFW با iptables ادغام میشود
UFW یک رابط کاربری کاربرپسند برای مدیریت iptables، چارچوب فیلترینگ بستههای زیربنایی مورد استفاده توسط اکثر سیستمهای لینوکس، است. وقتی قوانین فایروال را با استفاده از UFW پیکربندی میکنید، این قوانین در پشت صحنه به سینتکس iptables ترجمه میشوند.
این یعنی اینکه:
- نیازی نیست قوانین iptables را به صورت دستی بنویسید.
- تغییرات ایجاد شده از طریق UFW به طور خودکار از طریق iptables اعمال میشوند.
- هر دو قانون IPv4 و IPv6 مدیریت میشوند، مگر اینکه پشتیبانی IPv6 به صراحت در پیکربندی UFW غیرفعال شده باشد.
برای بررسی اینکه آیا UFW قوانین iptables شما را مدیریت میکند، میتوانید خروجی خام iptables را بررسی کنید:
sudo iptables -L
زنجیرههایی مانند ufw-before-input، ufw-user-input و موارد دیگر را خواهید دید که به طور خودکار توسط UFW ایجاد و مدیریت میشوند تا سیاستهای خود را اعمال کنند.
UFW تعاریف قوانین دائمی خود را در فایلهای پیکربندی، معمولاً در مسیر زیر ذخیره میکند:
Output
-------------------
/etc/ufw/
اکثر کاربران هرگز نیازی به ویرایش مستقیم این فایلها ندارند. با این حال، اگر شما قوانین iptables را به صورت دستی یا از طریق ابزارهای دیگر (مانند Docker یا اسکریپتهای سفارشی) مدیریت میکنید، باید توجه داشته باشید که UFW ممکن است این قوانین را بازنویسی کند یا با آنها تداخل داشته باشد.
در حالی که UFW مدیریت قوانین را ساده میکند، iptables همچنان فیلترینگ بستهها را در سطح هسته انجام میدهد. UFW را به عنوان یک دستیار خط فرمان در نظر بگیرید که iptables را به راحتی صحبت میکند، بنابراین شما مجبور نیستید این کار را انجام دهید.
نحوه مسدود کردن یک آدرس IP
برای مسدود کردن تمام اتصالات شبکه که از یک آدرس IP خاص سرچشمه میگیرند، دستور زیر را اجرا کنید و آدرس 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 مشخص شده را به عنوان “رد شده” مشاهده خواهید کرد:
Output
-------------------
Status: active
To Action From
-- ------ ----
Anywhere DENY 203.0.113.100
تمام اتصالات، چه ورودی و چه خروجی، برای آدرس IP مشخص شده مسدود میشوند.
نحوه مسدود کردن یک Subnet
اگر نیاز به مسدود کردن کل یک زیرشبکه دارید، میتوانید از آدرس زیرشبکه به همراه پارامتر from در دستور deny ufw استفاده کنید. این کار تمام آدرسهای IP را در زیرشبکه مثال 203.0.113.0/24 مسدود میکند:
sudo ufw deny from 203.0.113.0/24
Output
-------------------
Rule added
نحوه مسدود کردن اتصالات ورودی به یک رابط شبکه
برای مسدود کردن اتصالات ورودی از یک آدرس IP خاص به یک رابط شبکه خاص، دستور زیر را اجرا کنید و آدرس IP هایلایت شده را با آدرس IP که میخواهید مسدود کنید جایگزین کنید:
sudo ufw deny in on eth0 from 203.0.113.100
Output
Rule added
پارامتر in به ufw میگوید که این قانون را فقط برای اتصالات ورودی اعمال کند، و پارامتر on eth0 مشخص میکند که این قانون فقط برای رابط eth0 اعمال میشود. این ممکن است در صورتی مفید باشد که سیستمی با چندین رابط شبکه (از جمله رابطهای مجازی) داشته باشید و نیاز به مسدود کردن دسترسی خارجی به برخی از این رابطها، اما نه همه آنها، داشته باشید.
نحوه مجاز کردن یک آدرس IP
برای اجازه دادن به همه اتصالات شبکه که از یک آدرس IP خاص سرچشمه میگیرند، دستور زیر را اجرا کنید و آدرس IP هایلایت شده را با آدرس IP که میخواهید اجازه دسترسی به آن را بدهید، جایگزین کنید:
sudo ufw allow from 203.0.113.101
Output
Rule added
اگر اکنون دستور sudo ufw status را اجرا کنید، خروجی مشابه این را مشاهده خواهید کرد که کلمه ALLOW را در کنار آدرس IP که اضافه کردهاید نشان میدهد.
Output
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 را اجرا کنید، خروجی مشابه این را خواهید دید:
Output
Status: active
To Action From
-- ------ ----
...
Anywhere on eth0 ALLOW 203.0.113.102
نحوه حذف قانون UFW
برای حذف قانونی که قبلاً در UFW تنظیم کردهاید، از ufw delete و به دنبال آن قانون (allow یا deny) و مشخصات هدف استفاده کنید. مثال زیر قانونی را که قبلاً برای اجازه دادن به همه اتصالات از آدرس IP 203.0.113.101 تنظیم شده بود، حذف میکند:
sudo ufw delete allow from 203.0.113.101
Output
Rule deleted
راه دیگر برای مشخص کردن اینکه کدام قانون را میخواهید حذف کنید، ارائه شناسه قانون است. این اطلاعات را میتوان با دستور زیر به دست آورد:
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
از خروجی، میتوانید ببینید که دو قانون فعال وجود دارد. قانون اول، با مقادیر هایلایت شده، تمام اتصالاتی که از آدرس IP 203.0.113.100 میآیند را رد میکند. قانون دوم اتصالات روی رابط eth0 که از آدرس IP 203.0.113.102 میآیند را مجاز میداند.
از آنجا که سیاست پیشفرض UFW تمام ترافیک ورودی را رد میکند، یک قانون DENY خاص فقط برای لغو یک قانون ALLOW با مجوز بیشتر لازم است. اگر هیچ قانون ALLOW متناقضی برای آن منبع ندارید، میتوانید این قانون را حذف کنید.
sudo ufw delete 1
از شما خواسته میشود که عملیات را تأیید کنید و مطمئن شوید که شناسهای که ارائه میدهید به قانون صحیحی که میخواهید حذف کنید اشاره دارد.
Output
Deleting:
deny from 203.0.113.100
Proceed with operation (y|n)? y
Rule deleted
اگر دوباره قوانین خود را با وضعیت sudo ufw فهرست کنید، خواهید دید که آن قانون حذف شده است.
نحوه فهرست کردن پروفایلهای برنامههای کاربردی موجود
پس از نصب، برنامههایی که به ارتباطات شبکهای متکی هستند، معمولاً یک پروفایل UFW راهاندازی میکنند که میتوانید از آن برای اجازه اتصال از آدرسهای خارجی استفاده کنید. این اغلب مشابه اجرای ufw allow from است، با این مزیت که میانبری ارائه میدهد که شماره پورتهای خاصی را که یک سرویس استفاده میکند، خلاصه میکند و یک نامگذاری کاربرپسند برای سرویسهای ارجاع شده ارائه میدهد.
برای فهرست کردن پروفایلهای موجود در حال حاضر، دستور زیر را اجرا کنید:
sudo ufw app list
اگر سرویسی مانند وب سرور یا سایر نرمافزارهای وابسته به شبکه نصب کردهاید و پروفایلی در UFW در دسترس قرار نگرفته است، ابتدا مطمئن شوید که سرویس فعال است. برای سرورهای راه دور، معمولاً OpenSSH به راحتی در دسترس خواهد بود:
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.
نحوه غیرفعال کردن پروفایل برنامه
برای غیرفعال کردن یک پروفایل برنامه که قبلاً در UFW تنظیم کردهاید، باید قانون مربوطه آن را حذف کنید. برای مثال، خروجی زیر را از sudo ufw status در نظر بگیرید:
sudo ufw status
Output
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)
اگرچه کاربرپسندتر است، اما یک روش جایگزین برای مشخص کردن شماره پورت دقیق سرویس SSH وجود دارد که معمولاً به طور پیشفرض روی ۲۲ تنظیم شده است:
sudo ufw allow 22
Output
Rule added
Rule added (v6)
نحوهی مجاز کردن SSH ورودی از یک آدرس IP یا زیرشبکهی خاص
برای اجازه دادن به اتصالات ورودی از یک آدرس IP یا زیرشبکه خاص، از یک دستورالعمل from برای تعریف منبع اتصال استفاده کنید. این کار مستلزم آن است که آدرس مقصد را نیز با پارامتر to مشخص کنید. برای قفل کردن این قانون فقط به SSH، proto (پروتکل) را به tcp محدود میکنید و سپس از پارامتر port استفاده کرده و آن را روی ۲۲، پورت پیشفرض SSH، تنظیم میکنید.
دستور زیر فقط اتصالات SSH را که از آدرس IP 203.0.113.103 میآیند، مجاز میکند:
sudo ufw allow from 203.0.113.103 proto tcp to any port 22
Rule added
نحوهی مجاز کردن Rsync ورودی از یک آدرس IP یا زیرشبکهی خاص
برنامه Rsync که روی پورت ۸۷۳ اجرا میشود، میتواند برای انتقال فایلها از یک کامپیوتر به کامپیوتر دیگر استفاده شود.
برای اجازه دادن به اتصالات ورودی rsync از یک آدرس IP یا زیرشبکه خاص، از پارامتر from برای مشخص کردن آدرس IP منبع و از پارامتر port برای تنظیم پورت مقصد ۸۷۳ استفاده کنید.
دستور زیر فقط اتصالات Rsync را که از آدرس IP 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 مختلف را در سرور تنظیم میکند. پس از نصب و فعالسازی Nginx به عنوان یک سرویس، دستور زیر را اجرا کنید تا مشخص شود کدام پروفایلها در دسترس هستند:
sudo ufw app list | grep Nginx
Output
Nginx Full
Nginx HTTP
Nginx HTTPS
برای فعال کردن ترافیک HTTP و HTTPS، Nginx Full را انتخاب کنید. در غیر این صورت، Nginx HTTP را برای اجازه دادن فقط HTTP یا Nginx HTTPS را برای اجازه دادن فقط HTTPS انتخاب کنید.
دستور زیر هر دو ترافیک HTTP و HTTPS را روی سرور (پورتهای ۸۰ و ۴۴۳) مجاز میکند:
sudo ufw allow "Nginx Full"
Output
Rule added
Rule added (v6)
نحوه فعال کردن HTTP/HTTPS در آپاچی
پس از نصب، وب سرور آپاچی چندین پروفایل UFW مختلف را در سرور تنظیم میکند. پس از نصب و فعالسازی آپاچی به عنوان یک سرویس، دستور زیر را اجرا کنید تا مشخص شود کدام پروفایلها در دسترس هستند:
sudo ufw app list | grep Apache
Output
Apache
Apache Full
Apache Secure
برای فعال کردن ترافیک HTTP و HTTPS، Apache Full را انتخاب کنید. در غیر این صورت، برای HTTP، Apache یا برای HTTPS، Apache Secure را انتخاب کنید.
دستور زیر ترافیک HTTP و HTTPS را روی سرور (پورتهای ۸۰ و ۴۴۳) مجاز میکند:
sudo ufw allow "Apache Full"
Output
Rule added
Rule added (v6)
نحوه مجاز کردن همه HTTP های ورودی (پورت 80)
سرورهای وب، مانند آپاچی و انجینایکس، معمولاً درخواستهای HTTP را روی پورت ۸۰ دریافت میکنند. اگر سیاست پیشفرض شما برای ترافیک ورودی روی drop یا deny تنظیم شده باشد، باید یک قانون UFW ایجاد کنید تا دسترسی خارجی روی پورت ۸۰ مجاز باشد. میتوانید از شماره پورت یا نام سرویس (http) به عنوان پارامتر این دستور استفاده کنید.
برای اجازه دادن به همه اتصالات HTTP ورودی (پورت ۸۰)، دستور زیر را اجرا کنید:
sudo ufw allow http
Output
Rule added
Rule added (v6)
یک روش جایگزین برای مشخص کردن شماره پورت سرویس HTTP این است:
sudo ufw allow 80
Output
Rule added
Rule added (v6)
نحوهی مجاز کردن همهی HTTPSهای ورودی (پورت ۴۴۳)
HTTPS معمولاً روی پورت ۴۴۳ اجرا میشود. اگر سیاست پیشفرض شما برای ترافیک ورودی روی drop یا deny تنظیم شده باشد، باید یک قانون UFW ایجاد کنید تا دسترسی خارجی روی پورت ۴۴۳ مجاز باشد. میتوانید از شماره پورت یا نام سرویس (https) به عنوان پارامتر این دستور استفاده کنید.
برای مجاز کردن همه اتصالات ورودی HTTPS (پورت ۴۴۳)، دستور زیر را اجرا کنید:
sudo ufw allow https
Output
Rule added
Rule added (v6)
یک روش جایگزین برای مشخص کردن شماره پورت سرویس HTTPS این است:
sudo ufw allow 443
Output
Rule added
Rule added (v6)
نحوهی مجاز کردن تمام HTTP و HTTPSهای ورودی
اگر میخواهید ترافیک HTTP و HTTPS را مجاز کنید، میتوانید یک قانون واحد ایجاد کنید تا ترافیک روی هر دو پورت به طور همزمان مجاز باشد. این استفاده مستلزم آن است که پروتکل را نیز با پارامتر proto تعریف کنید، که در این حالت باید روی tcp تنظیم شود.
برای مجاز کردن همه اتصالات ورودی HTTP و HTTPS (پورتهای ۸۰ و ۴۴۳)، دستور زیر را اجرا کنید:
sudo ufw allow proto tcp from any to any port 80,443
Output
Rule added
Rule added (v6)
نحوهی مجاز کردن اتصال MySQL از یک آدرس IP یا زیرشبکهی خاص
MySQL به اتصالات کلاینت روی پورت ۳۳۰۶ گوش میدهد. اگر سرور پایگاه داده MySQL شما توسط یک کلاینت روی یک سرور راه دور استفاده میشود، باید یک قانون UFW ایجاد کنید تا به آن دسترسی اجازه دهید.
برای اجازه دادن به اتصالات MySQL ورودی از یک آدرس IP یا زیرشبکه خاص، از پارامتر from برای مشخص کردن آدرس IP منبع و از پارامتر port برای تنظیم پورت مقصد ۳۳۰۶ استفاده کنید.
دستور زیر به آدرس IP 203.0.113.103 اجازه اتصال به پورت MySQL سرور را میدهد:
sudo ufw allow from 203.0.113.103 to any port 3306
Output
Rule added
برای اینکه کل زیرشبکه 203.0.113.0/24 بتواند به سرور MySQL شما متصل شود، دستور زیر را اجرا کنید:
sudo ufw allow from 203.0.113.0/24 to any port 3306
Output
Rule added
نحوهی مجاز کردن اتصال PostgreSQL از یک آدرس IP یا زیرشبکهی خاص
PostgreSQL به اتصالات کلاینت روی پورت ۵۴۳۲ گوش میدهد. اگر سرور پایگاه داده PostgreSQL شما توسط یک کلاینت روی یک سرور راه دور استفاده میشود، باید صریحاً این ترافیک را مجاز کنید.
برای مجاز کردن اتصالات ورودی PostgreSQL از یک آدرس IP یا زیرشبکه خاص، منبع را با پارامتر from مشخص کنید و پورت را روی ۵۴۳۲ تنظیم کنید:
sudo ufw allow from 203.0.113.103 to any port 5432
Output
Rule added
برای اینکه کل زیرشبکه 203.0.113.0/24 بتواند به سرور PostgreSQL شما متصل شود، دستور زیر را اجرا کنید:
sudo ufw allow from 203.0.113.0/24 to any port 5432
Output
Rule added
نحوه مسدود کردن ایمیلهای خروجی SMTP
سرورهای ایمیل، مانند Sendmail و Postfix، معمولاً از پورت ۲۵ برای ترافیک SMTP استفاده میکنند. اگر سرور شما نباید ایمیل خروجی ارسال کند، ممکن است بخواهید این نوع ترافیک را مسدود کنید. برای مسدود کردن اتصالات SMTP خروجی، دستور زیر را اجرا کنید:
sudo ufw deny out 25
Output
Rule added
Rule added (v6)
این دستور فایروال شما را طوری پیکربندی میکند که تمام ترافیک خروجی روی پورت ۲۵ را مسدود کند. اگر نیاز دارید که اتصالات خروجی روی شماره پورت دیگری را رد کنید، میتوانید این دستور را تکرار کنید و ۲۵ را با شماره پورتی که میخواهید مسدود کنید جایگزین کنید.
نحوه تنظیم مجدد UFW به پیکربندی پیشفرض
با گذشت زمان، مجموعه قوانین UFW شما ممکن است با قوانین آزمایشی، ورودیهای تکراری یا پیکربندیهای قدیمی شلوغ شود. اگر به یک نسخه جدید نیاز دارید، UFW یک دستور داخلی برای تنظیم مجدد پیکربندی خود به حالت پیشفرض ارائه میدهد.
تنظیم مجدد UFW:
- فایروال را غیرفعال کنید (UFW دیگر فعال نخواهد بود)
- حذف تمام قوانین موجود؛ هم قوانین مجاز و هم قوانین رد
- سیاستهای پیشفرض را به حالت اولیه برگردانید:
deny for all incoming traffic
allow for all outgoing traffic
- پاک کردن قوانین پروفایل برنامه (مثلاً OpenSSH، Nginx، Apache)
- تمام ارجاعات قانون شمارهگذاریشدهای که برای حذف استفاده شدهاند را حذف کنید
برای انجام تنظیم مجدد کامل UFW، دستور زیر را اجرا کنید:
sudo ufw reset
Output
Resetting all rules to installed defaults.
This may disrupt existing ssh connections. Proceed with operation (y|n)?
برای تأیید، y را تایپ کنید.
این اقدام زمانی مفید است که:
- فایروال شما رفتار غیرمنتظرهای دارد
- شما چندین قانون را اشتباه پیکربندی کردهاید و میخواهید از نو شروع کنید
- شما در حال تغییر نقشهای سرور هستید (مثلاً از یک وب سرور به یک گره پایگاه داده)
- شما میخواهید پیکربندی خود را در بین سیستمها استاندارد کنید
پس از تنظیم مجدد UFW، باید قوانین دسترسی ضروری را دوباره پیکربندی کنید. به عنوان مثال، برای فعال کردن مجدد SSH و فعال کردن فایروال:
sudo ufw allow OpenSSH
sudo ufw enable
سپس میتوانید مجموعه قوانین خود را از ابتدا بر اساس نیازهای فعلی خود بازسازی کنید.
چگونه تفاوت بین UFW و firewalld را روشن کنیم
در حالی که UFW مدیر فایروال پیشفرض در سیستمهای مبتنی بر اوبونتو است، سایر توزیعهای لینوکس، به ویژه توزیعهای مبتنی بر رد هت، از ابزار متفاوتی استفاده میکنند: firewalld. هر دو ابزار هدف یکسانی را برای مدیریت قوانین فایروال دنبال میکنند، اما رویکردهای متفاوتی دارند و با اولویتهای متفاوتی طراحی شدهاند.
فایروال چیست؟
firewalld یک ابزار مدیریت فایروال است که یک رابط پویا برای مدیریت قوانین ارائه میدهد. این ابزار از مفهوم مناطق (zones) استفاده میکند که به شما امکان میدهد سطوح اعتماد مختلفی را برای رابطهای شبکه تعریف کنید (به عنوان مثال: عمومی، داخلی، dmz). این امر آن را برای محیطهای پیچیدهتر که در آنها بخشهای مختلف سیستم یا شبکه به رفتار فایروال متفاوتی نیاز دارند، ایدهآل میکند.
فایروالدی از هر دو نوع قوانین زمان اجرا و دائمی پشتیبانی میکند. تغییرات زمان اجرا بلافاصله و بدون راهاندازی مجدد سرویس اعمال میشوند و آن را برای بهروزرسانیهای در حال اجرا مناسب میکنند. قوانین دائمی در طول راهاندازیهای مجدد همچنان پابرجا میمانند و معمولاً برای پیکربندی طولانیمدت استفاده میشوند.
همچنین شامل پشتیبانی غنی از قوانین (مانند دسترسی مبتنی بر سرویس، انواع ICMP، فیلتر کردن رابط و کنترل آدرس منبع/مقصد) است و اغلب از طریق ابزارهای گرافیکی مانند firewall-config یا Cockpit مدیریت میشود.
UFW در مقابل فایروال
Feature | UFW | firewalld |
---|---|---|
Default on | Ubuntu, Debian | RHEL, CentOS, Fedora |
Configuration style | Static, rule-based | Dynamic, zone-based |
Zones | Not supported | Fully supported |
Rule types | Persistent | Runtime and permanent |
GUI support | GUFW (Graphical Uncomplicated Firewall) (basic) | firewall-config, Cockpit (advanced) |
Syntax simplicity | Simple, human-readable CLI | More flexible but more complex |
Backend | iptables or nftables (indirectly) | iptables or nftables |
Use case focus | Basic host firewalling | Multi-interface, multi-zone environments |
چگونه بین UFW و firewalld یکی را انتخاب کنیم؟
- اگر یک سرور تک منظوره دارید، به تنظیم سریع قوانین نیاز دارید یا رابط کاربری مینیمالیستی را ترجیح میدهید، UFW را انتخاب کنید.
- اگر با تنظیمات چند رابطی، شبکههای مجازی یا پیکربندیهای سطح سازمانی سروکار دارید که در آنها پیکربندیهای مبتنی بر منطقه و بهروزرسانیهای قوانین زنده مهم هستند، firewalld را انتخاب کنید.
نحوه بررسی و مدیریت وضعیت firewalld
برای بررسی اینکه آیا firewalld روی سیستم شما اجرا میشود یا خیر:
sudo systemctl status firewalld
برای متوقف کردن و غیرفعال کردن آن اگر از UFW استفاده میکنید، از دستورات زیر استفاده کنید:
sudo systemctl stop firewalld
sudo systemctl disable firewalld
بهترین شیوهها برای استفاده از UFW
برای اینکه بیشترین بهره را از UFW ببرید و در عین حال پیکربندیهای نادرست و زمان از کارافتادگی را به حداقل برسانید، هنگام راهاندازی و نگهداری فایروال خود، رعایت این بهترین شیوههای توصیهشده را در نظر بگیرید.
همیشه قبل از فعال کردن فایروال، SSH را فعال کنید
اگر از طریق SSH به سرور متصل هستید، قبل از فعال کردن UFW، مطمئن شوید که SSH را فعال کردهاید تا از قفل شدن جلوگیری شود:
sudo ufw allow OpenSSH
sudo ufw enable
عدم انجام این کار، دسترسی از راه دور شما را به محض فعال شدن UFW مسدود خواهد کرد.
نحوه تنظیم سیاستهای پیشفرض قبل از افزودن قوانین
سیاستهای پیشفرض ورودی و خروجی خود را در اوایل پیکربندی تنظیم کنید تا با یک پایه امن شروع کنید:
sudo ufw default deny incoming
sudo ufw default allow outgoing
فقط در این صورت باید صراحتاً اجازه دهید خدماتی که نیاز دارید ارائه شوند.
نحوه استفاده از پروفایلهای برنامه در صورت وجود
sudo ufw allow "Nginx Full"
برای دیدن پروفایلهای موجود:
sudo ufw app list
این امر مدیریت قوانین را آسانتر میکند و احتمال خطای انسانی را هنگام تایپ شماره پورتها یا پروتکلها کاهش میدهد.
چگونه در مورد IPها، پورتها و پروتکلها دقیق باشیم
با سختتر کردن قوانین تا حد امکان، میزان مواجهه را محدود کنید. برای مثال، به جای باز کردن SSH به روی جهان:
sudo ufw allow from 203.0.113.0/24 to any port 22 proto tcp
این رویکرد با اجازه دادن به منابع معتبر، سطح حمله به سرور شما را به حداقل میرساند.
نحوه استفاده از قوانین شمارهگذاری شده برای مدیریت آسانتر
وقتی نیاز به حذف یا ممیزی قوانین خاص دارید، از موارد زیر استفاده کنید:
sudo ufw status numbered
این کار حذف دقیق قوانین را بدون نیاز به تایپ مجدد رشتههای کامل فرمان، آسانتر میکند:
sudo ufw delete 2
نحوه آزمایش تغییرات در یک پنجره تعمیر و نگهداری (در صورت امکان)
پیکربندی نادرست فایروال میتواند سرویسها را مختل کند. اگر در حال تغییر قوانین روی یک سرور عملیاتی هستید، برای کاهش ریسک، در ساعات غیر اوج ترافیک آزمایش کنید یا یک دوره کوتاه مدت نگهداری را برنامهریزی کنید.
استفاده از گزارشگیری برای نظارت بر فعالیتها
فعال کردن گزارشگیری برای ثبت اتصالات قطعشده و اشکالزدایی رفتار فایروال:
sudo ufw logging on
لاگها معمولاً در موارد زیر ذخیره میشوند:
/var/log/ufw.log
شما میتوانید با استفاده از موارد زیر، پرحرفی را کنترل کنید:
sudo ufw logging low # or medium / high / full
چگونه قبل از ایجاد تغییرات اساسی، از قوانین نسخه پشتیبان تهیه کنیم
قبل از تنظیم مجدد یا تغییر پیکربندی UFW، مجموعه قوانین فعلی را ذخیره کنید:
sudo ufw status numbered > ufw-backup.txt
این به شما امکان میدهد در صورت بروز مشکل، پیکربندیهای قبلی را از نو ایجاد یا بررسی کنید.
از UFW و firewalld با هم استفاده نکنید
به یک سیستم مدیریت فایروال پایبند باشید. اجرای همزمان UFW و firewalld میتواند باعث تداخل قوانین و رفتار غیرقابل پیشبینی شود.
موردی را که استفاده نمیکنید غیرفعال کنید:
sudo systemctl disable firewalld
یا:
sudo ufw disable
پیروی از این بهترین شیوهها به شما کمک میکند تا مطمئن شوید که فایروال شما ایمن و قابل نگهداری است و اتصال سرور شما را قطع نمیکند.
سوالات متداول
۱. سیاست پیشفرض UFW چیست؟
به طور پیشفرض، UFW طوری پیکربندی شده است که تمام اتصالات ورودی را رد کرده و به تمام اتصالات خروجی اجازه اتصال دهد. این بدان معناست که هیچ دستگاه خارجی نمیتواند اتصالی را به سیستم شما آغاز کند، مگر اینکه صراحتاً اجازه داده شده باشد، در حالی که سیستم شما برای دسترسی به منابع خارجی آزاد است.
شما میتوانید سیاستهای پیشفرض فعلی را با اجرای دستور زیر مشاهده کنید:
sudo ufw status verbose
برای تغییر مقادیر پیشفرض، از دستور زیر استفاده کنید:
sudo ufw default deny incoming
sudo ufw default allow outgoing
۲. چگونه میتوانم یک آدرس IP خاص را در UFW مجاز کنم؟
برای مجاز کردن تمام ترافیک از یک آدرس IP خاص، از دستور allow from استفاده کنید. IP را با آدرسی که میخواهید مجاز کنید جایگزین کنید:
sudo ufw allow from 203.0.113.101
این یک قانون ایجاد میکند که به همه نوع اتصال از آن IP به سرور شما اجازه میدهد. اگر میخواهید آن را به یک پورت یا پروتکل خاص محدود کنید، میتوانید پارامترهای بیشتری اضافه کنید:
sudo ufw allow from 203.0.113.101 to any port 22 proto tcp
این فقط ترافیک SSH (پورت TCP 22) را از IP داده شده مجاز میکند.
۳. چگونه میتوانم بررسی کنم که کدام قوانین در حال حاضر فعال هستند؟
برای مشاهده قوانین فعال UFW خود، دستور زیر را اجرا کنید:
sudo ufw status
برای خروجی دقیقتر، شامل سیاستهای پیشفرض و وضعیت ثبت وقایع، از پرچم verbose استفاده کنید:
sudo ufw status verbose
اگر میخواهید قوانین را با شماره خط مشاهده کنید (برای حذف قوانین خاص مفید است)، دستور زیر را اجرا کنید:
sudo ufw status numbered
۴. آیا UFW میتواند ترافیک خروجی را مسدود کند؟
بله، میتوان از UFW برای مسدود کردن اتصالات خروجی استفاده کرد. در حالی که UFW به طور پیشفرض تمام ترافیک خروجی را مجاز میداند، میتوانید قوانینی را برای مسدود کردن پورتها یا مقاصد خاص اضافه کنید.
برای مسدود کردن تمام ترافیک SMTP خروجی روی پورت ۲۵، به عنوان مثال:
sudo ufw deny out 25
همچنین میتوانید ترافیک خروجی به آدرسهای IP یا محدودههای خاص را مسدود کنید:
sudo ufw deny out to 203.0.113.0/24
برای تغییر سیاست پیشفرض برای همه ترافیک خروجی:
sudo ufw default deny outgoing
در مورد قوانین خروجی محتاط باشید، به خصوص در سرورهایی که برای بهروزرسانیها، پشتیبانگیری یا نصب بستهها به دسترسی خارجی نیاز دارند..
۵. آیا UFW با IPv6 کار میکند؟
بله، UFW به طور پیشفرض از IPv4 و IPv6 پشتیبانی میکند. وقتی قانونی مانند sudo ufw allow ssh را فعال میکنید، قوانینی برای IPv4 و IPv6 ایجاد میکند، مگر اینکه طور دیگری پیکربندی شده باشد.
میتوانید با بررسی خروجی دستور زیر، فعال بودن قوانین IPv6 را تأیید کنید:
sudo ufw status
ورودیهایی مانند موارد زیر را خواهید دید:
Output
OpenSSH (v6) ALLOW Anywhere (v6)
برای غیرفعال کردن پشتیبانی IPv6 در UFW، فایل پیکربندی را ویرایش کنید:
sudo nano /etc/default/ufw
تنظیم:
Output
IPV6=no
سپس UFW را مجدداً بارگذاری کنید:
sudo ufw disable && sudo ufw enable
۶. آیا میتوانم از UFW به همراه داکر استفاده کنم؟
UFW و Docker میتوانند با هم تداخل داشته باشند زیرا Docker قوانین پیشفرض iptables که UFW تنظیم میکند را دور میزند. در نتیجه، حتی اگر UFW ظاهراً ترافیک را مسدود کند، کانتینرهای Docker ممکن است در معرض شبکه قرار گیرند.
اگر از Docker استفاده میکنید و به کنترل دقیق فایروال نیاز دارید، باید:
- از قوانین فایروال خود داکر استفاده کنید
- یا سیاستهای iptables را برای کار صحیح با UFW دوباره پیکربندی کنید
برای ایمنسازی سیستم خود هنگام اجرای داکر، استفاده از گزینه –iptables=false داکر و مدیریت دستی ترافیک کانتینر یا استفاده از اسکریپتهای پیشرفته ادغام UFW/Docker را در نظر بگیرید.
۷. چگونه میتوانم یک قانون خاص UFW را حذف کنم؟
دو روش اصلی برای حذف یک قانون UFW وجود دارد:
- با تکرار دقیق قانون:
sudo ufw delete allow from 203.0.113.101
2 . بر اساس شماره قانون:
ابتدا، قوانین را با شماره فهرست کنید:
sudo ufw status numbered
سپس یک قانون را با شماره آن حذف کنید:
sudo ufw delete 2
قبل از حذف قانون، از شما خواسته میشود که حذف را تأیید کنید.
۸. چگونه میتوانم پروفایلهای برنامههای موجود در UFW را فهرست کنم؟
بسیاری از برنامههای تحت شبکه (مانند Nginx، Apache یا OpenSSH) هنگام نصب، پروفایلهای UFW را ثبت میکنند. میتوانید تمام پروفایلهای موجود را با دستور زیر مشاهده کنید:
sudo ufw app list
برای دیدن اینکه یک پروفایل چه پورتهایی را پوشش میدهد، دستور زیر را اجرا کنید:
sudo ufw app info "Nginx Full"
این نشان میدهد که پروفایل کدام پورتها را باز میکند و پروتکلهای مرتبط با آن چیست. استفاده از پروفایلهای برنامه، مدیریت قوانین را ساده میکند و نیاز به به خاطر سپردن شماره پورتهای خاص را از بین میبرد.
نتیجهگیری
UFW ابزاری قدرتمند اما در عین حال قابل دسترس برای مدیریت قوانین فایروال در سیستمهای اوبونتو است. UFW با سینتکس ساده و پشتیبانی داخلی از IPv4 و IPv6، اعمال کنترلهای دسترسی را بدون نیاز به نوشتن دستی قوانین پیچیده iptables آسان میکند.
این راهنما رایجترین دستورات UFW و موارد استفاده از آن، از جمله نحوه مجاز یا غیرمجاز کردن ترافیک بر اساس پورت، آدرس IP و رابط شبکه، و همچنین نحوه مدیریت پروفایلهای برنامه و تنظیم مجدد پیکربندی فایروال را پوشش داده است. اکثر این مثالها را میتوان با تغییر پارامترهایی مانند آدرسهای IP یا شماره پورتها، متناسب با نیازهای شبکه خود تطبیق داد.
برای جزئیات بیشتر در مورد گزینههای دستور UFW و کاربردهای پیشرفته، با استفاده از man ufw به دفترچه راهنما مراجعه کنید یا مستندات رسمی اوبونتو را بررسی کنید.
برای کاوش و کسب اطلاعات بیشتر در مورد پیکربندی فایروال و شبکه لینوکس، به این منابع مفید مراجعه کنید:
- نحوه راه اندازی فایروال با UFW در اوبونتو
- پورت باز لینوکس: راهنمای گام به گام مدیریت پورتهای فایروال
- بیش از ۵۰ دستور ضروری لینوکس: یک راهنمای جامع