| FIREWALLD.DIRECT(5) | firewalld.direct | FIREWALLD.DIRECT(5) |
نام (NAME)
firewalld.direct - پرونده پیکربندی مستقیم firewalld
خلاصه دستور (SYNOPSIS)
/etc/firewalld/direct.xml
منسوخشده (DEPRECATED)
رابط مستقیم (direct interface) منسوخ شده است. این قابلیت در نسخههای آینده حذف خواهد شد و سیاستها جایگزین آن شدهاند؛ نگاه کنید به firewalld.policies(5).
توضیحات (DESCRIPTION)
پیکربندی مستقیم، دسترسی مستقیمتری به فایروال فراهم میکند. این ویژگی مستلزم آن است که کاربر با مفاهیم پایهای ip(6)tables و ebtables آشنا باشد، مانند table (filter/mangle/nat/...)، chain (INPUT/OUTPUT/FORWARD/...)، commands (-A/-D/-I/...)، parameters (-p/-s/-d/-j/...) و targets (ACCEPT/DROP/REJECT/...). پیکربندی مستقیم فقط باید به عنوان آخرین راهکار و زمانی که امکان استفاده از firewalld.zone(5) وجود ندارد به کار گرفته شود. همچنین نگاه کنید به Direct Options در firewall-cmd(1).
یک پرونده پیکربندی مستقیم firewalld حاوی اطلاعاتی درباره زنجیرهها (chains)، قواعد (rules) و عبور مستقیم (passthrough) دائمی است.
ساختار پرونده پیکربندی مستقیم به صورت زیر است:
<?xml version="1.0" encoding="utf-8"?> <direct> [ <chain ipv="ipv4|ipv6|eb" table="table" chain="chain"/> ] [ <rule ipv="ipv4|ipv6|eb" table="table" chain="chain" priority="priority"> args </rule> ] [ <passthrough ipv="ipv4|ipv6|eb"> args </passthrough> ] </direct>
direct
تگهای اجباری شروع و پایان direct، پیکربندی مستقیم را مشخص میکنند. این تگ تنها یک بار در هر پرونده پیکربندی مستقیم میتواند استفاده شود. این تگ هیچ مشخصهای (attribute) ندارد.
chain
یک تگ عنصری خالی اختیاری است و میتواند چندین بار استفاده شود. از این تگ میتوان برای تعریف نام زنجیرههای اضافی استفاده کرد. هر مدخل chain دقیقاً دارای سه مشخصه است:
ipv="ipv4|ipv6|eb"
table="table"
chain="chain"
لطفاً به یاد داشته باشید که برای متصل کردن این زنجیره به یک زنجیره دیگر، یک قاعده یا قاعده عبور مستقیم با گزینه --jump یا --goto اضافه کنید.
rule
یک تگ عنصری اختیاری است و میتواند چندین بار استفاده شود. از این تگ میتوان برای افزودن قواعد به یک زنجیره توکار (built-in) یا زنجیره اضافهشده استفاده کرد. هر مدخل rule دقیقاً دارای چهار مشخصه است:
ipv="ipv4|ipv6|eb"
table="table"
chain="chain"
priority="priority"
مؤلفه args میتواند هر آرگومانی از iptables یا ip6tables باشد که با مشخصههای table یا chain تعارض نداشته باشد.
passthrough
یک تگ عنصری اختیاری است و میتواند چندین بار استفاده شود. از این تگ میتوان برای افزودن قواعد به یک زنجیره توکار یا اضافهشده استفاده کرد. هر مدخل passthrough دقیقاً دارای یک مشخصه است:
ipv="ipv4|ipv6|eb"
مؤلفه args میتواند هر آرگومانی از iptables یا ip6tables باشد.
قاعده عبور مستقیم (passthrough) مستقیماً به زنجیره اضافه میشود. هیچ سازوکاری مشابه rule مستقیم در بالا برای آن وجود ندارد. کاربر قاعده عبور مستقیم باید خود اطمینان حاصل کند که هیچ تداخلی با قواعد ایجادشده توسط firewalld رخ نخواهد داد.
هشدارها (CAVEATS)
بسته به مقدار FirewallBackend (نگاه کنید به firewalld.conf(5)) قواعد مستقیم در برخی سناریوها رفتار متفاوتی خواهند داشت.
اولویت پذیرش/دور انداختن بسته (Packet accept/drop precedence)
به دلیل جزئیات پیادهسازی netfilter در داخل کرنل، اگر FirewallBackend=nftables استفاده شود، قواعد مستقیمی که بستهها را ACCEPT میکنند، در واقع باعث پذیرش فوری بستهها توسط سیستم نمیشوند. این بستهها همچنان مشمول مجموعه قواعد nftables فایروال firewalld هستند. این امر اساساً به این معناست که دو فایروال مستقل وجود دارد و بستهها باید توسط هر دو (iptables و nftables) پذیرفته شوند. علاوه بر این، این سناریو در داخل خود nftables نیز (باز هم به دلیل netfilter) رخ میدهد اگر چندین زنجیره به یک هوک متصل شده باشند - ماجرا صرفاً به سادگی تقابل iptables و nftables نیست.
چندین راهکار برای حل مشکل ACCEPT وجود دارد:
اگر بتوان از یک قاعده غنی استفاده کرد، همواره باید بر قواعد مستقیم ترجیح داده شوند. قواعد غنی به FirewallBackend فعال تبدیل خواهند شد. نگاه کنید به firewalld.richlanguage(5).
کاربران میتوانند یک قاعده پذیرش صریح به مجموعه قواعد nftables اضافه کنند. این کار میتواند با افزودن رابط شبکه یا مبدأ به ناحیه trusted انجام شود.
این راهبرد اغلب توسط ابزارهایی که فیلترسازی اختصاصی خود را انجام میدهند (مانند libvirt، podman، docker) به کار گرفته میشود.
هشدار: این کار به این معناست که firewalld هیچ فیلترسازی روی این بستهها انجام نخواهد داد. تمامی این عملیات باید از طریق قواعد مستقیم یا قواعد iptables خارج از چارچوب انجام شود.
همچنین میتوانید فقط سرویس، درگاه، آدرس یا موارد مرتبط را در ناحیه مناسب فعال کنید.
آخرین راهکار، بازگشت به بکاند iptables با تنظیم FirewallBackend=iptables است. کاربران باید توجه داشته باشند که توسعه firewalld بر روی بکاند nftables متمرکز است.
برای قواعد مستقیمی که بستهها را DROP (دور میاندازند)، بستهها بدون توجه به مقدار FirewallBackend بلافاصله دور انداخته میشوند. از این رو، هیچ ملاحظه خاصی در این مورد نیاز نیست.
فایروال firewalld رفتار ACCEPT/DROP بالا را با ثبت هوکهای nftables با تقدم پایینتر نسبت به هوکهای iptables تضمین میکند.
اولویت واسط مستقیم (Direct interface precedence)
در حالت FirewallBackend=iptables قواعد داخلی سطح بالای firewalld قبل از اجرای قواعد مستقیم اعمال میشوند. این شامل قواعد مربوط به پذیرش اتصالات موجود نیز میشود. در گذشته این مسئله موجب شگفتی کاربران میشد. به عنوان مثال، اگر کاربری یک قاعده مستقیم برای مسدودسازی ترافیک روی درگاه مقصد ۲۲ اضافه میکرد، نشستهای SSH موجود به کار خود ادامه میدادند، اما اتصالهای جدید رد میشدند.
در حالت FirewallBackend=nftables به قواعد مستقیم عمداً اولویت بالاتری نسبت به تمامی قواعد دیگر firewalld داده شده است. این شامل قواعد پذیرش اتصالات موجود نیز میگردد.
مثالها (EXAMPLES)
قرار دادن شبکههای 192.168.1.0/24 و 192.168.5.0/24 در فهرست مسدودسازی (denylist) همراه با ثبت گزارش و دور انداختن زودهنگام بستهها در جدول raw:
<?xml version="1.0" encoding="utf-8"?> <direct> <chain ipv="ipv4" table="raw" chain="denylist"/> <rule ipv="ipv4" table="raw" chain="PREROUTING" priority="0">-s 192.168.1.0/24 -j denylist</rule> <rule ipv="ipv4" table="raw" chain="PREROUTING" priority="1">-s 192.168.5.0/24 -j denylist</rule> <rule ipv="ipv4" table="raw" chain="denylist" priority="0">-m limit --limit 1/min -j LOG --log-prefix "denylisted: "</rule> <rule ipv="ipv4" table="raw" chain="denylist" priority="1">-j DROP</rule> </direct>
همچنین ببینید (SEE ALSO)
firewall-applet(1), firewalld(1), firewall-cmd(1), firewall-config(1), firewalld.conf(5), firewalld.direct(5), firewalld.dbus(5), firewalld.icmptype(5), firewall-offline-cmd(1), firewalld.richlanguage(5), firewalld.service(5), firewalld.zone(5), firewalld.zones(5), firewalld.policy(5), firewalld.policies(5), firewalld.ipset(5), firewalld.helper(5)
نکات (NOTES)
تارنمای اصلی firewalld:
نویسندگان (AUTHORS)
Thomas Woerner <twoerner@redhat.com>
Jiri Popelka <jpopelka@redhat.com>
Eric Garver <eric@garver.life>
| firewalld 2.5.1 |