.TH "UFW FRAMEWORK" "8" "" "مه ۲۰۲۳" "مه ۲۰۲۳" .SH "نام (NAME)" ufw\-framework \- استفاده از چارچوب ufw .PP .SH "توضیحات (DESCRIPTION)" برنامه \fBufw\fR هم یک رابط خط فرمان و هم چارچوبی برای مدیریت دیوار آتش netfilter فراهم می‌کند. در حالی که دستور \fBufw\fR رابط کاربری آسانی را برای مدیریت فایروال ارائه می‌دهد، چارچوب \fBufw\fR روش‌هایی را در اختیار مدیر سیستم قرار می‌دهد تا رفتار پیش‌فرض را سفارشی‌سازی کرده و قوانینی را اضافه کند که توسط ابزار خط فرمان پشتیبانی نمی‌شوند. از این طریق، \fBufw\fR می‌تواند از تمام قدرت و انعطاف‌پذیری netfilter در لینوکس بهره‌برداری کامل کند. .SH "نمای کلی (OVERVIEW)" .PP این چارچوب راه‌اندازی در زمان بوت، فایل‌های قوانین برای افزودن قوانین سفارشی، روشی برای بارگذاری ماژول‌های netfilter، پیکربندی پارامترهای هسته و پیکربندی IPv6 را فراهم می‌نماید. این چارچوب شامل فایل‌های زیر است: .TP /usr/lib/ufw/ufw\-init اسکریپت مقداردهی اولیه .TP /etc/ufw/before.init اسکریپت سفارشی‌سازی مقداردهی اولیه که پیش از مقداردهی ufw اجرا می‌شود .TP /etc/ufw/after.init اسکریپت سفارشی‌سازی مقداردهی اولیه که پس از مقداردهی ufw اجرا می‌شود .TP /etc/ufw/before[6].rules فایل قوانینی که پیش از قوانین اضافه‌شده از طریق رابط کاربری ارزیابی می‌شوند .TP /etc/ufw/user[6].rules فایل قوانین حاوی قوانین اضافه‌شده از طریق رابط کاربری (مدیریت‌شده با دستور \fBufw\fR) .TP /etc/ufw/after[6].rules فایل قوانینی که پس از قوانین اضافه‌شده از طریق رابط کاربری ارزیابی می‌شوند .TP /etc/default/ufw پیکربندی سطح بالا .TP /etc/ufw/sysctl.conf تنظیمات شبکه هسته لینوکس .TP /etc/ufw/ufw.conf پیکربندی سطح بالای الحاقی .SH "راه‌اندازی در زمان بوت (BOOT INITIALIZATION)" .PP سرویس \fBufw\fR در هنگام بوت سیستم توسط /usr/lib/ufw/ufw\-init آغاز به کار می‌کند. این اسکریپت یک اسکریپت استاندارد راه‌اندازی به سبک SysV است که توسط دستور \fBufw\fR استفاده می‌شود و نباید تغییر کند. اسکریپت‌های /etc/before.init و /etc/after.init ممکن است برای انجام هرگونه پیکربندی اضافی فایروال که هنوز در خود ufw پشتیبانی نمی‌شود استفاده شوند و اگر وجود داشته و قابل اجرا باشند، ufw\-init این اسکریپت‌ها را اجرا خواهد کرد. اگر هر یک از این اسکریپت‌ها با خطا خارج شوند، ufw\-init نیز با خطا خارج خواهد شد. اسکریپت ufw\-init از آرگومان‌های زیر پشتیبانی می‌کند: .TP start: بارگذاری فایروال .TP stop: تخلیه فایروال .TP restart: بارگذاری مجدد فایروال .TP force\-reload: مشابه restart .TP status: وضعیت پایه‌ای فایروال .TP force\-stop: مشابه stop، با این تفاوت که بارگذاری قبلی فایروال را بررسی نمی‌کند .TP flush\-all: پاکسازی زنجیره‌های توکار، حذف تمامی زنجیره‌های غیرتوکار و بازنشانی خط‌مشی به ACCEPT .PP اسکریپت ufw\-init اسکریپت‌های before.init و after.init را با آرگومان‌های start، stop، status و flush\-all فراخوانی می‌کند، اما معمولاً در صورت استفاده، این اسکریپت‌ها تنها نیاز به پیاده‌سازی start و stop دارند. .PP نرم‌افزار \fBufw\fR علاوه بر زنجیره‌های توکار iptables، از زنجیره‌های متعدد تعریف‌شده توسط کاربر نیز استفاده می‌کند. اگر MANAGE_BUILTINS در /etc/default/ufw روی 'yes' تنظیم شده باشد، در هنگام stop و reload زنجیره‌های توکار پاکسازی می‌شوند. اگر روی 'no' تنظیم شده باشد، در هنگام stop و reload زنجیره‌های ثانویه \fBufw\fR حذف شده و زنجیره‌های اصلی \fBufw\fR پاکسازی می‌شوند. علاوه بر پاکسازی زنجیره‌های اختصاصی \fBufw\fR، این ابزار زنجیره‌های اصلی را با توجه به سایر زنجیره‌های تعریف‌شده توسط کاربر که ممکن است اضافه شده باشند، در همان ترتیب حفظ می‌کند. این امر امکان همکاری متقابل \fBufw\fR را با سایر نرم‌افزارهایی که قوانین فایروال خود را مدیریت می‌کنند فراهم می‌سازد. .PP برای اطمینان از این‌که فایروال شما در هنگام بوت بارگذاری می‌شود، باید این اسکریپت را در فرآیند بوت سیستم ادغام کنید. در صورتی که \fBufw\fR از قبل ادغام نشده است، برای نحوه صحیح تغییر فرآیند بوت به مستندات توزیع لینوکس خود مراجعه کنید. .SH "فایل‌های قوانین (RULES FILES)" .PP برنامه \fBufw\fR تا حدی یک رابط پیشین (front\-end) برای \fBiptables\-restore\fR است، که قوانین آن در /etc/ufw/before.rules، /etc/ufw/after.rules و /etc/ufw/user.rules ذخیره می‌شوند. مدیران سیستم می‌توانند \fBbefore.rules\fR و \fBafter.rules\fR را بر اساس نیاز با استفاده از ساختار استاندارد \fBiptables\-restore\fR سفارشی‌سازی کنند. قوانین به شرح زیر ارزیابی می‌شوند: ابتدا \fBbefore.rules\fR، سپس \fBuser.rules\fR و در نهایت \fBafter.rules\fR. قوانین IPv6 نیز به همین روش ارزیابی می‌شوند و فایل‌های قوانین آن‌ها به نام‌های \fBbefore6.rules\fR، \fBuser6.rules\fR و \fBafter6.rules\fR نام‌گذاری شده‌اند. لطفاً توجه داشته باشید که دستور \fBufw status\fR فقط قوانینی را که با \fBufw\fR اضافه شده‌اند نمایش می‌دهد و نه قوانینی که در فایل‌های قوانین /etc/ufw یافت می‌شوند. .PP \fBمهم\fR: \fBufw\fR به‌طور پیش‌فرض فقط از جدول *filter استفاده می‌کند. شما می‌توانید هر جدول دیگری مانند *nat، *raw و *mangle را بر حسب نیاز اضافه کنید. برای هر جدول، یک دستور COMMIT متناظر الزامی است. .PP پس از ویرایش هر یک از این فایل‌ها، باید \fBufw\fR را مجدداً بارگذاری کنید تا قوانین اعمال شوند. برای کاربردهای رایج این فایل‌های قوانین، بخش مثال‌ها را ببینید. .SH "ماژول‌ها (MODULES)" .PP نت‌فیلتر (Netfilter) ماژول‌های ردیابی اتصال متعددی دارد. این ماژول‌ها از پروتکل زیربنایی آگاه هستند و به مدیر سیستم امکان می‌دهند مجموعه‌قوانین خود را ساده‌تر کند. شما می‌توانید با تنظیم IPT_MODULES در /etc/default/ufw مشخص کنید کدام ماژول‌های نت‌فیلتر بارگذاری شوند. برخی از ماژول‌های محبوب برای بارگذاری عبارتند از: .PP .nf 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 .fi .PP بارگذاری نامشروط ماژول‌های ردیابی اتصال (*_nf_conntrack) به این شیوه منسوخ شده است. \fBufw\fR همچنان از این قابلیت پشتیبانی می‌کند اما پیکربندی‌های جدید تنها باید شامل ماژول‌های خاص مورد نیاز سایت باشند. برای اطلاعات بیشتر، بخش دستیارهای اتصال را ببینید. .SH "پارامترهای هسته (KERNEL PARAMETERS)" .PP هنگامی که \fBufw\fR فعال باشد، در هنگام بوت فایل /etc/ufw/sysctl.conf را می‌خواند. لطفاً توجه داشته باشید که /etc/ufw/sysctl.conf مقادیر موجود در sysctl.conf سیستم (معمولاً /etc/sysctl.conf) را بازنویسی می‌کند. مدیران سیستم می‌توانند با تغییر /etc/default/ufw، فایل مورد استفاده را عوض کنند. .SH "پروتکل IPV6" .PP پروتکل IPv6 به‌طور پیش‌فرض فعال است. هنگامی که غیرفعال باشد، تمامی بسته‌های ورودی، خروجی و هدایت‌شده (forwarded) به استثنای ترافیک روی رابط loopback دور انداخته می‌شوند (drop). برای تنظیم این رفتار، مقدار IPV6 را در /etc/default/ufw برابر 'yes' قرار دهید. برای جزئیات، صفحه راهنمای \fBufw\fR را مشاهده فرمایید. .SH "مثال‌ها (EXAMPLES)" .PP همان‌طور که اشاره شد، \fBufw\fR فایل‌های قوانین خود را با استفاده از دستورات \fBiptables\-restore\fR و \fBip6tables\-restore\fR در هسته بارگذاری می‌کند. کاربرانی که مایلند قوانینی را به‌طور دستی به فایل‌های قوانین \fBufw\fR اضافه کنند، باید با این دستورات و همچنین دستورات \fBiptables\fR و \fBip6tables\fR آشنا باشند. در زیر چند مثال رایج از استفاده از فایل‌های قوانین \fBufw\fR آورده شده است. تمامی مثال‌ها فرض را بر IPv4 قرار داده و فرض می‌کنند DEFAULT_FORWARD_POLICY در /etc/default/ufw روی DROP تنظیم شده است. .SS "پوشش‌دهی IP یا ماسکرِیدینگ (IP Masquerading)" .PP برای فعال‌سازی ماسکریدینگ IP برای رایانه‌های شبکه 10.0.0.0/8 روی eth1 جهت به اشتراک گذاشتن آدرس IP منفرد روی eth0: .TP فایل /etc/ufw/sysctl.conf را ویرایش کرده تا حاوی این خط باشد: net.ipv4.ip_forward=1 .TP به انتهای /etc/ufw/before.rules بعد از بخش *filter اضافه کنید: *nat :POSTROUTING ACCEPT [0:0] \-A POSTROUTING \-s 10.0.0.0/8 \-o eth0 \-j MASQUERADE COMMIT .TP اگر فایروال شما از تونل‌های 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 .TP دستور مسیردهی \fBufw route\fR را جهت مجاز کردن ترافیک اضافه کنید: ufw route allow in on eth1 out on eth0 from 10.0.0.0/8 .SS "تغییر مسیر پورت‌ها (Port Redirections)" .PP جهت هدایت پورت 80 پروتکل tcp روی eth0 به وب‌سرور در آدرس 10.0.0.2: .TP فایل /etc/ufw/sysctl.conf را ویرایش کنید: net.ipv4.ip_forward=1 .TP به انتهای /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 .TP قاعده \fBufw route\fR را جهت مجاز کردن ترافیک اضافه کنید: ufw route allow in on eth0 to 10.0.0.2 port 80 proto tcp .SS "فیلتر کردن ترافیک خروجی (Egress filtering)" .PP جهت مسدود کردن آدرس‌های RFC1918 که از eth0 خارج می‌شوند: .TP قوانین \fBufw route\fR را جهت رد ترافیک اضافه کنید: 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 .SS "مثال جامع (Full example)" .PP این مثال نمونه‌های دیگر را ترکیب کرده و یک فایروال مسیریاب ساده را به نمایش می‌گذارد. \fBهشدار\fR: این پیکربندی صرفاً یک نمونه برای نمایش قابلیت‌های چارچوب \fBufw\fR به شیوه‌ای موجز و ساده است و نباید بدون درک کامل کارکرد هر بخش در محیط عملیاتی استفاده شود. فایروال شما بدون شک باید محدودتر باشد. .PP این روتر/فایروال دو رابط شبکه دارد: eth0 (رو به اینترنت) و eth1 (شبکه داخلی LAN). کلاینت‌های داخلی دارای آدرس‌هایی در شبکه 10.0.0.0/8 هستند و باید بتوانند به هر نقطه‌ای از اینترنت متصل شوند. اتصالات به پورت 80 از سمت اینترنت باید به 10.0.0.2 هدایت شوند. دسترسی به پورت 22 سرویس ssh از ایستگاه کاری مدیریتی (10.0.0.100) به این ماشین باید مجاز باشد. همچنین اطمینان حاصل کنید که هیچ ترافیک داخلی به سمت اینترنت نشت نکند. .TP فایل /etc/ufw/sysctl.conf را ویرایش کرده و مقدار زیر را قرار دهید: net.ipv4.ip_forward=1 .TP به انتهای /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 .TP قوانین لازم \fBufw\fR را اضافه کنید: 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 .SH "دستیارهای اتصال (CONNECTION HELPERS)" .PP پروتکل‌های گوناگون نیازمند استفاده از دستیارهای ردیابی اتصال netfilter هستند تا بسته‌های مرتبط را در جریان‌های RELATED دسته‌بندی کنند و مجموعه‌قوانین شفاف‌تر و دقیق‌تر شوند. برای نمونه، با چند ماژول هسته و چند قاعده، یک مجموعه‌قانون می‌تواند به سادگی اتصال به پورت 21 سرویس FTP را مجاز کند، سپس هسته ترافیک را بررسی کرده و سایر بسته‌های داده FTP را به عنوان RELATED به اتصال اولیه نشانه‌گذاری می‌کند. .PP زمانی که دستیارها برای نخستین بار معرفی شدند، فرد تنها می‌توانست ماژول‌ها را در زمان بارگذاری ماژول پیکربندی کند (برای مثال اگر سرور FTP شما روی پورتی غیر از 21 گوش می‌داد، باید ماژول nf_conntrack_ftp را با مشخص کردن پورت صحیح بارگذاری می‌کردید). با گذشت زمان مشخص شد که استفاده بدون قید و شرط از دستیارهای اتصال می‌تواند منجر به سوءاستفاده شود، تا حدی به این دلیل که برخی پروتکل‌ها اجازه داده‌های تعیین‌شده توسط کاربر را می‌دهند که امکان عبور از فایروال را به روش‌های ناخواسته فراهم می‌سازد. از هسته لینوکس 4.7 به بعد، انتساب خودکار دستیار conntrack (یعنی مدیریت بسته‌ها برای یک پورت معین و تمام آدرس‌های IP) غیرفعال شده است (رفتار پیشین را می‌توان با تنظیم net/netfilter/nf_conntrack_helper=1 در /etc/ufw/sysctl.conf بازیابی کرد). اکنون فایروال‌ها باید در عوض از هدف CT برای مرتبط کردن ترافیک با یک دستیار خاص استفاده کنند و سپس قوانین RELATED را جهت به‌کارگیری آن دستیار تنظیم نمایند. این امر به پایگاه‌ها اجازه می‌دهد استفاده از دستیارها را سفارشی‌سازی کرده و از سوءاستفاده جلوگیری کنند. .PP به‌طور کلی، برای استفاده امن از دستیارها، مراحل زیر باید انجام شود: .IP 1. مقدار net/netfilter/nf_conntrack_helper باید روی 0 تنظیم شود (پیش‌فرض). .IP 2. ایجاد یک قاعده برای شروع اتصال (به عنوان مثال برای FTP، پورت 21). .IP 3. ایجاد یک قاعده دستیار برای مرتبط کردن دستیار با این اتصال. .IP 4. ایجاد یک قاعده دستیار برای مرتبط کردن جریان RELATED با این اتصال. .IP 5. در صورت نیاز، افزودن ماژول متناظر *_nf_conntrack به IPT_MODULES. .IP 6. به‌صورت اختیاری، افزودن ماژول متناظر *_nf_nat به IPT_MODULES. .PP به‌طور کلی مطلوب است که قوانین دستیار اتصال را تا حد امکان دقیق تنظیم کنید و اطمینان حاصل نمایید که ضدجعل‌سازی (anti\-spoofing) به درستی برای سیستم شما تنظیم شده باشد تا از مشکلات امنیتی در مجموعه‌قوانین جلوگیری شود. برای اطلاعات بیشتر، نشانی زیر را ببینید: .PP در حال حاضر قوانین دستیار باید از طریق فایل‌های قوانین (RULES FILES) مدیریت شوند. نسخه آینده \fBufw\fR ساختار دستوری جدیدی را برای کار با قوانین دستیار معرفی خواهد کرد. .SH "نکات (NOTES)" .PP هنگام استفاده از ufw با libvirt و بریجینگ (bridging)، بسته‌ها ممکن است مسدود شوند. تیم توسعه libvirt توصیه می‌کند متغیرهای sysctl زیر برای غیرفعال کردن netfilter روی پل ارتباطی تنظیم شوند: .PP .nf net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0 .fi .PP توجه داشته باشید که ماژول bridge باید قبل از تنظیم این مقادیر در هسته بارگذاری شده باشد. یک روش برای اطمینان از عملکرد صحیح این فرآیند در ufw، افزودن 'bridge' به IPT_MODULES در /etc/default/ufw و سپس اضافه کردن قوانین فوق به /etc/ufw/sysctl.conf است. .PP به عنوان جایگزینی برای غیرفعال‌سازی netfilter روی پل ارتباطی، می‌توانید iptables را پیکربندی کنید تا اجازه دهد تمامی ترافیک از روی پل عبور کند (forward شود). به عنوان مثال، در /etc/ufw/before.rules در داخل بخش *filter اضافه کنید: .PP .nf -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT .fi .SH "همچنین ببینید (SEE ALSO)" .PP \fBufw\fR(8), \fBiptables\fR(8), \fBip6tables\fR(8), \fBiptables\-restore\fR(8), \fBip6tables\-restore\fR(8), \fBsysctl\fR(8), \fBsysctl.conf\fR(5) .SH "نویسندگان (AUTHORS)" .PP حق نشر ufw متعلق به سال‌های 2008-2023 شرکت Canonical Ltd است.