| UFW FRAMEWORK(8) | مه ۲۰۲۳ | UFW FRAMEWORK(8) |
نام (NAME)
ufw-framework - استفاده از چارچوب ufw
توضیحات (DESCRIPTION)
برنامه ufw هم یک رابط خط فرمان و هم چارچوبی برای مدیریت دیوار آتش netfilter فراهم میکند. در حالی که دستور ufw رابط کاربری آسانی را برای مدیریت فایروال ارائه میدهد، چارچوب ufw روشهایی را در اختیار مدیر سیستم قرار میدهد تا رفتار پیشفرض را سفارشیسازی کرده و قوانینی را اضافه کند که توسط ابزار خط فرمان پشتیبانی نمیشوند. از این طریق، ufw میتواند از تمام قدرت و انعطافپذیری netfilter در لینوکس بهرهبرداری کامل کند.
نمای کلی (OVERVIEW)
این چارچوب راهاندازی در زمان بوت، فایلهای قوانین برای افزودن قوانین سفارشی، روشی برای بارگذاری ماژولهای netfilter، پیکربندی پارامترهای هسته و پیکربندی IPv6 را فراهم مینماید. این چارچوب شامل فایلهای زیر است:
- /usr/lib/ufw/ufw-init
- اسکریپت مقداردهی اولیه
- /etc/ufw/before.init
- اسکریپت سفارشیسازی مقداردهی اولیه که پیش از مقداردهی ufw اجرا میشود
- /etc/ufw/after.init
- اسکریپت سفارشیسازی مقداردهی اولیه که پس از مقداردهی ufw اجرا میشود
- /etc/ufw/before[6].rules
- فایل قوانینی که پیش از قوانین اضافهشده از طریق رابط کاربری ارزیابی میشوند
- /etc/ufw/user[6].rules
- فایل قوانین حاوی قوانین اضافهشده از طریق رابط کاربری (مدیریتشده با دستور ufw)
- /etc/ufw/after[6].rules
- فایل قوانینی که پس از قوانین اضافهشده از طریق رابط کاربری ارزیابی میشوند
- /etc/default/ufw
- پیکربندی سطح بالا
- /etc/ufw/sysctl.conf
- تنظیمات شبکه هسته لینوکس
- /etc/ufw/ufw.conf
- پیکربندی سطح بالای الحاقی
راهاندازی در زمان بوت (BOOT INITIALIZATION)
سرویس ufw در هنگام بوت سیستم توسط /usr/lib/ufw/ufw-init آغاز به کار میکند. این اسکریپت یک اسکریپت استاندارد راهاندازی به سبک SysV است که توسط دستور ufw استفاده میشود و نباید تغییر کند. اسکریپتهای /etc/before.init و /etc/after.init ممکن است برای انجام هرگونه پیکربندی اضافی فایروال که هنوز در خود ufw پشتیبانی نمیشود استفاده شوند و اگر وجود داشته و قابل اجرا باشند، ufw-init این اسکریپتها را اجرا خواهد کرد. اگر هر یک از این اسکریپتها با خطا خارج شوند، ufw-init نیز با خطا خارج خواهد شد. اسکریپت ufw-init از آرگومانهای زیر پشتیبانی میکند:
- start:
- بارگذاری فایروال
- stop:
- تخلیه فایروال
- restart:
- بارگذاری مجدد فایروال
- force-reload:
- مشابه restart
- status:
- وضعیت پایهای فایروال
- force-stop:
- مشابه stop، با این تفاوت که بارگذاری قبلی فایروال را بررسی نمیکند
- flush-all:
- پاکسازی زنجیرههای توکار، حذف تمامی زنجیرههای غیرتوکار و بازنشانی خطمشی به ACCEPT
اسکریپت ufw-init اسکریپتهای before.init و after.init را با آرگومانهای start، stop، status و flush-all فراخوانی میکند، اما معمولاً در صورت استفاده، این اسکریپتها تنها نیاز به پیادهسازی start و stop دارند.
نرمافزار ufw علاوه بر زنجیرههای توکار iptables، از زنجیرههای متعدد تعریفشده توسط کاربر نیز استفاده میکند. اگر MANAGE_BUILTINS در /etc/default/ufw روی 'yes' تنظیم شده باشد، در هنگام stop و reload زنجیرههای توکار پاکسازی میشوند. اگر روی 'no' تنظیم شده باشد، در هنگام stop و reload زنجیرههای ثانویه ufw حذف شده و زنجیرههای اصلی ufw پاکسازی میشوند. علاوه بر پاکسازی زنجیرههای اختصاصی ufw، این ابزار زنجیرههای اصلی را با توجه به سایر زنجیرههای تعریفشده توسط کاربر که ممکن است اضافه شده باشند، در همان ترتیب حفظ میکند. این امر امکان همکاری متقابل ufw را با سایر نرمافزارهایی که قوانین فایروال خود را مدیریت میکنند فراهم میسازد.
برای اطمینان از اینکه فایروال شما در هنگام بوت بارگذاری میشود، باید این اسکریپت را در فرآیند بوت سیستم ادغام کنید. در صورتی که ufw از قبل ادغام نشده است، برای نحوه صحیح تغییر فرآیند بوت به مستندات توزیع لینوکس خود مراجعه کنید.
فایلهای قوانین (RULES FILES)
برنامه ufw تا حدی یک رابط پیشین (front-end) برای iptables-restore است، که قوانین آن در /etc/ufw/before.rules، /etc/ufw/after.rules و /etc/ufw/user.rules ذخیره میشوند. مدیران سیستم میتوانند before.rules و after.rules را بر اساس نیاز با استفاده از ساختار استاندارد iptables-restore سفارشیسازی کنند. قوانین به شرح زیر ارزیابی میشوند: ابتدا before.rules، سپس user.rules و در نهایت after.rules. قوانین IPv6 نیز به همین روش ارزیابی میشوند و فایلهای قوانین آنها به نامهای before6.rules، user6.rules و after6.rules نامگذاری شدهاند. لطفاً توجه داشته باشید که دستور ufw status فقط قوانینی را که با ufw اضافه شدهاند نمایش میدهد و نه قوانینی که در فایلهای قوانین /etc/ufw یافت میشوند.
مهم: ufw بهطور پیشفرض فقط از جدول *filter استفاده میکند. شما میتوانید هر جدول دیگری مانند *nat، *raw و *mangle را بر حسب نیاز اضافه کنید. برای هر جدول، یک دستور COMMIT متناظر الزامی است.
پس از ویرایش هر یک از این فایلها، باید ufw را مجدداً بارگذاری کنید تا قوانین اعمال شوند. برای کاربردهای رایج این فایلهای قوانین، بخش مثالها را ببینید.
ماژولها (MODULES)
نتفیلتر (Netfilter) ماژولهای ردیابی اتصال متعددی دارد. این ماژولها از پروتکل زیربنایی آگاه هستند و به مدیر سیستم امکان میدهند مجموعهقوانین خود را سادهتر کند. شما میتوانید با تنظیم IPT_MODULES در /etc/default/ufw مشخص کنید کدام ماژولهای نتفیلتر بارگذاری شوند. برخی از ماژولهای محبوب برای بارگذاری عبارتند از:
nf_conntrack_ftp nf_nat_ftp nf_conntrack_irc nf_nat_irc nf_conntrack_netbios_ns nf_conntrack_pptp nf_conntrack_tftp nf_nat_tftp nf_conntrack_sane
بارگذاری نامشروط ماژولهای ردیابی اتصال (*_nf_conntrack) به این شیوه منسوخ شده است. ufw همچنان از این قابلیت پشتیبانی میکند اما پیکربندیهای جدید تنها باید شامل ماژولهای خاص مورد نیاز سایت باشند. برای اطلاعات بیشتر، بخش دستیارهای اتصال را ببینید.
پارامترهای هسته (KERNEL PARAMETERS)
هنگامی که ufw فعال باشد، در هنگام بوت فایل /etc/ufw/sysctl.conf را میخواند. لطفاً توجه داشته باشید که /etc/ufw/sysctl.conf مقادیر موجود در sysctl.conf سیستم (معمولاً /etc/sysctl.conf) را بازنویسی میکند. مدیران سیستم میتوانند با تغییر /etc/default/ufw، فایل مورد استفاده را عوض کنند.
پروتکل IPV6
پروتکل IPv6 بهطور پیشفرض فعال است. هنگامی که غیرفعال باشد، تمامی بستههای ورودی، خروجی و هدایتشده (forwarded) به استثنای ترافیک روی رابط loopback دور انداخته میشوند (drop). برای تنظیم این رفتار، مقدار IPV6 را در /etc/default/ufw برابر 'yes' قرار دهید. برای جزئیات، صفحه راهنمای ufw را مشاهده فرمایید.
مثالها (EXAMPLES)
همانطور که اشاره شد، ufw فایلهای قوانین خود را با استفاده از دستورات iptables-restore و ip6tables-restore در هسته بارگذاری میکند. کاربرانی که مایلند قوانینی را بهطور دستی به فایلهای قوانین ufw اضافه کنند، باید با این دستورات و همچنین دستورات iptables و ip6tables آشنا باشند. در زیر چند مثال رایج از استفاده از فایلهای قوانین ufw آورده شده است. تمامی مثالها فرض را بر IPv4 قرار داده و فرض میکنند DEFAULT_FORWARD_POLICY در /etc/default/ufw روی DROP تنظیم شده است.
پوششدهی IP یا ماسکرِیدینگ (IP Masquerading)
برای فعالسازی ماسکریدینگ IP برای رایانههای شبکه 10.0.0.0/8 روی eth1 جهت به اشتراک گذاشتن آدرس IP منفرد روی eth0:
- فایل /etc/ufw/sysctl.conf را ویرایش کرده تا حاوی این خط باشد:
-
net.ipv4.ip_forward=1 - به انتهای /etc/ufw/before.rules بعد از بخش *filter اضافه کنید:
-
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE
COMMIT - اگر فایروال شما از تونلهای IPv6 یا 6to4 استفاده میکند و همزمان NAT انجام میدهد، معمولاً نباید بستههای پروتکل '41' (ipv6) را ماسکرید کنید. به عنوان مثال، بهجای موارد بالا، /etc/ufw/before.rules میتواند به این صورت تنظیم شود:
-
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.0.0/8 ! --protocol 41 -o eth0 -j MASQUERADE
COMMIT - دستور مسیردهی ufw route را جهت مجاز کردن ترافیک اضافه کنید:
-
ufw route allow in on eth1 out on eth0 from 10.0.0.0/8
تغییر مسیر پورتها (Port Redirections)
جهت هدایت پورت 80 پروتکل tcp روی eth0 به وبسرور در آدرس 10.0.0.2:
- فایل /etc/ufw/sysctl.conf را ویرایش کنید:
-
net.ipv4.ip_forward=1 - به انتهای /etc/ufw/before.rules بعد از بخش *filter اضافه کنید:
-
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp -i eth0 --dport 80 -j DNAT \
--to-destination 10.0.0.2:80
COMMIT - قاعده ufw route را جهت مجاز کردن ترافیک اضافه کنید:
-
ufw route allow in on eth0 to 10.0.0.2 port 80 proto tcp
فیلتر کردن ترافیک خروجی (Egress filtering)
جهت مسدود کردن آدرسهای RFC1918 که از eth0 خارج میشوند:
- قوانین ufw route را جهت رد ترافیک اضافه کنید:
-
ufw route reject out on eth0 to 10.0.0.0/8
ufw route reject out on eth0 to 172.16.0.0/12
ufw route reject out on eth0 to 192.168.0.0/16
مثال جامع (Full example)
این مثال نمونههای دیگر را ترکیب کرده و یک فایروال مسیریاب ساده را به نمایش میگذارد. هشدار: این پیکربندی صرفاً یک نمونه برای نمایش قابلیتهای چارچوب ufw به شیوهای موجز و ساده است و نباید بدون درک کامل کارکرد هر بخش در محیط عملیاتی استفاده شود. فایروال شما بدون شک باید محدودتر باشد.
این روتر/فایروال دو رابط شبکه دارد: eth0 (رو به اینترنت) و eth1 (شبکه داخلی LAN). کلاینتهای داخلی دارای آدرسهایی در شبکه 10.0.0.0/8 هستند و باید بتوانند به هر نقطهای از اینترنت متصل شوند. اتصالات به پورت 80 از سمت اینترنت باید به 10.0.0.2 هدایت شوند. دسترسی به پورت 22 سرویس ssh از ایستگاه کاری مدیریتی (10.0.0.100) به این ماشین باید مجاز باشد. همچنین اطمینان حاصل کنید که هیچ ترافیک داخلی به سمت اینترنت نشت نکند.
- فایل /etc/ufw/sysctl.conf را ویرایش کرده و مقدار زیر را قرار دهید:
-
net.ipv4.ip_forward=1 - به انتهای /etc/ufw/before.rules بعد از بخش *filter اضافه کنید:
-
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp -i eth0 --dport 80 -j DNAT \
--to-destination 10.0.0.2:80
-A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE
COMMIT - قوانین لازم ufw را اضافه کنید:
-
ufw route reject out on eth0 to 10.0.0.0/8
ufw route reject out on eth0 to 172.16.0.0/12
ufw route reject out on eth0 to 192.168.0.0/16
ufw route allow in on eth1 out on eth0 from 10.0.0.0/8
ufw route allow in on eth0 to 10.0.0.2 port 80 proto tcp
ufw allow in on eth1 from 10.0.0.100 to any port 22 proto tcp
دستیارهای اتصال (CONNECTION HELPERS)
پروتکلهای گوناگون نیازمند استفاده از دستیارهای ردیابی اتصال netfilter هستند تا بستههای مرتبط را در جریانهای RELATED دستهبندی کنند و مجموعهقوانین شفافتر و دقیقتر شوند. برای نمونه، با چند ماژول هسته و چند قاعده، یک مجموعهقانون میتواند به سادگی اتصال به پورت 21 سرویس FTP را مجاز کند، سپس هسته ترافیک را بررسی کرده و سایر بستههای داده FTP را به عنوان RELATED به اتصال اولیه نشانهگذاری میکند.
زمانی که دستیارها برای نخستین بار معرفی شدند، فرد تنها میتوانست ماژولها را در زمان بارگذاری ماژول پیکربندی کند (برای مثال اگر سرور FTP شما روی پورتی غیر از 21 گوش میداد، باید ماژول nf_conntrack_ftp را با مشخص کردن پورت صحیح بارگذاری میکردید). با گذشت زمان مشخص شد که استفاده بدون قید و شرط از دستیارهای اتصال میتواند منجر به سوءاستفاده شود، تا حدی به این دلیل که برخی پروتکلها اجازه دادههای تعیینشده توسط کاربر را میدهند که امکان عبور از فایروال را به روشهای ناخواسته فراهم میسازد. از هسته لینوکس 4.7 به بعد، انتساب خودکار دستیار conntrack (یعنی مدیریت بستهها برای یک پورت معین و تمام آدرسهای IP) غیرفعال شده است (رفتار پیشین را میتوان با تنظیم net/netfilter/nf_conntrack_helper=1 در /etc/ufw/sysctl.conf بازیابی کرد). اکنون فایروالها باید در عوض از هدف CT برای مرتبط کردن ترافیک با یک دستیار خاص استفاده کنند و سپس قوانین RELATED را جهت بهکارگیری آن دستیار تنظیم نمایند. این امر به پایگاهها اجازه میدهد استفاده از دستیارها را سفارشیسازی کرده و از سوءاستفاده جلوگیری کنند.
بهطور کلی، برای استفاده امن از دستیارها، مراحل زیر باید انجام شود:
- 1.
- مقدار net/netfilter/nf_conntrack_helper باید روی 0 تنظیم شود (پیشفرض).
- 2.
- ایجاد یک قاعده برای شروع اتصال (به عنوان مثال برای FTP، پورت 21).
- 3.
- ایجاد یک قاعده دستیار برای مرتبط کردن دستیار با این اتصال.
- 4.
- ایجاد یک قاعده دستیار برای مرتبط کردن جریان RELATED با این اتصال.
- 5.
- در صورت نیاز، افزودن ماژول متناظر *_nf_conntrack به IPT_MODULES.
- 6.
- بهصورت اختیاری، افزودن ماژول متناظر *_nf_nat به IPT_MODULES.
بهطور کلی مطلوب است که قوانین دستیار اتصال را تا حد امکان دقیق تنظیم کنید و اطمینان حاصل نمایید که ضدجعلسازی (anti-spoofing) به درستی برای سیستم شما تنظیم شده باشد تا از مشکلات امنیتی در مجموعهقوانین جلوگیری شود. برای اطلاعات بیشتر، نشانی زیر را ببینید: https://home.regit.org/netfilter-en/secure-use-of-helpers
در حال حاضر قوانین دستیار باید از طریق فایلهای قوانین (RULES FILES) مدیریت شوند. نسخه آینده ufw ساختار دستوری جدیدی را برای کار با قوانین دستیار معرفی خواهد کرد.
نکات (NOTES)
هنگام استفاده از ufw با libvirt و بریجینگ (bridging)، بستهها ممکن است مسدود شوند. تیم توسعه libvirt توصیه میکند متغیرهای sysctl زیر برای غیرفعال کردن netfilter روی پل ارتباطی تنظیم شوند:
net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0
توجه داشته باشید که ماژول bridge باید قبل از تنظیم این مقادیر در هسته بارگذاری شده باشد. یک روش برای اطمینان از عملکرد صحیح این فرآیند در ufw، افزودن 'bridge' به IPT_MODULES در /etc/default/ufw و سپس اضافه کردن قوانین فوق به /etc/ufw/sysctl.conf است.
به عنوان جایگزینی برای غیرفعالسازی netfilter روی پل ارتباطی، میتوانید iptables را پیکربندی کنید تا اجازه دهد تمامی ترافیک از روی پل عبور کند (forward شود). به عنوان مثال، در /etc/ufw/before.rules در داخل بخش *filter اضافه کنید:
-I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
همچنین ببینید (SEE ALSO)
ufw(8), iptables(8), ip6tables(8), iptables-restore(8), ip6tables-restore(8), sysctl(8), sysctl.conf(5)
نویسندگان (AUTHORS)
حق نشر ufw متعلق به سالهای 2008-2023 شرکت Canonical Ltd است.
| مه ۲۰۲۳ |