| FIREWALLD.RICHLANG(5) | firewalld.richlanguage | FIREWALLD.RICHLANG(5) |
نام (NAME)
firewalld.richlanguage - مستندات زبان غنی (Rich Language) در firewalld
توضیحات (DESCRIPTION)
با زبان غنی (Rich Language) میتوان قوانین پیچیدهتر دیواره آتش را به شیوهای ساده و قابل فهم ایجاد کرد. این زبان از کلیدواژهها همراه با مقادیر استفاده میکند و یک نمایش انتزاعی از قوانین ip*tables است.
زبان غنی عناصر فعلی منطقه (سرویس، پورت، icmp-block، icmp-type، masquerade، forward-port و source-port) را با نشانیهای مبدأ و مقصد اضافی، ثبت وقایع (لاگگیری)، کنشها و محدودیتها برای وقایع و کنشها گسترش میدهد.
این صفحه زبان غنی مورداستفاده در کلاینت خط فرمان و واسط D-Bus را شرح میدهد. برای کسب اطلاعات درباره نحوه نمایش زبان غنی در فایلهای پیکربندی منطقه، لطفاً به firewalld.zone(5) مراجعه کنید.
هر قانون بخشی از یک منطقه (zone) است. یک منطقه میتواند شامل چندین قانون باشد. اگر چند قانون با یکدیگر تداخل یا تناقض داشته باشند، اولین قانونی که مطابقت یابد «برنده» خواهد بود (اعمال میشود).
ساختار کلی قانون
rule [source] [destination] service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|source-port [log|nflog] [audit] [accept|reject|drop|mark]
قانون کامل به صورت یک رشته متنی تکخطی ارائه میشود. مقصد (destination) تا زمانی که با مقصدِ یک سرویس تداخل نداشته باشد، در اینجا مجاز است.
ساختار قانون برای لیست سیاه یا سفید مبدأ
rule source [log|nflog] [audit] accept|reject|drop|mark
از این ساختار برای اعطا یا محدود کردن دسترسی از یک مبدأ به این ماشین یا ماشینهایی که توسط این ماشین در دسترس هستند استفاده میشود. استفاده از مقصد (destination) در اینجا مجاز نیست.
اطلاعات مهم درباره گزینههای عناصر: گزینههای مربوط به عناصر در یک قانون باید دقیقاً پس از همان عنصر اضافه شوند. اگر گزینه در جای دیگری قرار گیرد، ممکن است در صورت مطابقت با گزینههای عنصر دیگر برای آن عنصر اعمال شود، یا منجر به بروز خطای قانون گردد.
قانون (Rule)
rule [family="ipv4|ipv6"] [priority="priority"]
اگر خانواده قانون (family) مشخص شود، میتواند "ipv4" یا "ipv6" باشد که قانون را به IPv4 یا IPv6 محدود میکند. اگر خانواده قانون ارائه نشود، قانون برای هر دو پروتکل IPv4 و IPv6 افزوده خواهد شد. اگر نشانیهای مبدأ یا مقصد در یک قانون استفاده شوند، خانواده قانون باید مشخص گردد. این موضوع در مورد فوروارد پورت/بسته نیز صادق است.
اگر اولویت قانون (priority) مشخص شود، میتواند در بازه -32768 تا 32767 باشد که در آن مقادیر کمتر، تقدم بالاتری دارند. قوانین غنی بر اساس اولویت مرتب میشوند. ترتیب اجرای قوانین با اولویت یکسان نامشخص است. مقدار اولویت منفی پیش از سایر ساختارهای اولیه (primitives) در firewalld اجرا خواهد شد. مقدار اولویت مثبت پس از سایر ساختارهای اولیه firewalld اجرا میشود. مقدار اولویت 0 بر اساس کنشِ قانون و طبق بخش «اطلاعات مربوط به ثبت وقایع و کنشها» در ادامه، در زنجیره مربوطه قرار خواهد گرفت.
مبدأ (Source)
source [not] address="address[/mask]"|mac="mac-address"|ipset="ipset"
با نشانی مبدأ میتوان خاستگاه تلاش برای برقراری اتصال را به نشانی مبدأ محدود کرد. یک نشانی میتواند یک نشانی IP تکی، نشانی یک شبکه IP، یک نشانی MAC یا یک IPSet باشد. نشانی باید با خانواده قانون (IPv4/IPv6) همخوانی داشته باشد. ماسک زیرشبکه برای نشانیهای شبکه IPv4 به صورت دهدهی نقطهدار (/x.x.x.x) یا پیشوند (/x)، و برای نشانیهای شبکه IPv6 به صورت نماد پیشوند (/x) بیان میشود. همچنین میتوان با افزودن not پیش از address مفهوم نشانی را معکوس کرد؛ در این حالت، تمامی نشانیها به جز نشانی مشخصشده مطابقت خواهند یافت.
مقصد (Destination)
destination [not] address="address[/mask]"|ipset="ipset"
با نشانی مقصد میتوان هدف اتصال را به نشانی مقصد مشخصشده محدود ساخت. نشانی مقصد از همان نحو (syntax) نشانی مبدأ استفاده میکند.
استفاده از نشانیهای مبدأ و مقصد اختیاری است و استفاده از نشانی مقصد با تمامی عناصر امکانپذیر نیست. این امر برای نمونه به استفاده از نشانیهای مقصد در مدخلهای سرویس بستگی دارد.
سرویس (Service)
service name="service name"
سرویس service name به قانون افزوده خواهد شد. نام سرویس یکی از سرویسهای ارائهشده توسط firewalld است. برای دریافت فهرست سرویسهای پشتیبانیشده، از دستور firewall-cmd --get-services استفاده کنید.
اگر یک سرویس نشانی مقصد ارائه دهد، با نشانی مقصدِ موجود در قانون تداخل پیدا کرده و منجر به بروز خطا خواهد شد. سرویسهایی که به صورت داخلی از نشانیهای مقصد استفاده میکنند بیشتر سرویسهای مبتنی بر چندپخشی (multicast) هستند.
پورت (Port)
port port="port value" protocol="tcp|udp|sctp|dccp"
پورت port value میتواند یک شماره پورت تکی portid یا یک بازه پورت portid-portid باشد. پروتکل میتواند یکی از مقادیر tcp، udp، sctp یا dccp باشد.
پروتکل (Protocol)
protocol value="protocol value"
مقدار پروتکل میتواند یک شماره شناسه پروتکل یا یک نام پروتکل باشد. برای مشاهده مدخلهای پروتکل مجاز، لطفاً فایل /etc/protocols را بررسی کنید.
تثبیت اندازه سگمنت (Tcp-Mss-Clamp)
tcp-mss-clamp="value=pmtu|value=number >= 536|None"
ویژگی tcp-mss-clamp اندازه بیشینه سگمنت (Maximum Segment Size) را در قانون تنظیم میکند.
ویژگی tcp-mss-clamp دارای یک مقدار خصیصه اختیاری است که میتواند برابر با "pmtu" یا عددی بزرگتر یا مساوی ۵۳۶ تنظیم شود. اگر مقدار این خصیصه مشخص نشود، اندازه بیشینه سگمنت به طور خودکار روی "pmtu" تنظیم میگردد.
مسدودسازی ICMP (ICMP-Block)
icmp-block name="icmptype name"
مقدار icmptype یکی از انواع icmp است که توسط firewalld پشتیبانی میشود. برای دریافت فهرست انواع icmp پشتیبانیشده: firewall-cmd --get-icmptypes
تعیین کنش (action) در اینجا مجاز نیست؛ icmp-block به طور داخلی از کنش reject استفاده میکند.
مبدلسازی نشانی (Masquerade)
masquerade
فعالسازی مبدلسازی نشانی (masquerading) در قانون. میتوان یک نشانی مبدأ و همچنین نشانی مقصد را برای محدود کردن مبدلسازی به این محدوده مشخص کرد.
تعیین کنش (action) در اینجا مجاز نیست.
نکته: فوروارد IP به طور ضمنی فعال خواهد شد.
نوع ICMP (ICMP-Type)
icmp-type name="icmptype name"
مقدار icmptype یکی از انواع icmp است که توسط firewalld پشتیبانی میشود. برای دریافت فهرست انواع icmp پشتیبانیشده: firewall-cmd --get-icmptypes
هدایت پورت (Forward-Port)
forward-port port="port value" protocol="tcp|udp|sctp|dccp" to-port="port value" to-addr="address"
فوروارد پورت/بستهها از مقدار پورت محلی با پروتکل "tcp" یا "udp" به پورتی دیگر به صورت محلی، یا به ماشینی دیگر، یا به پورتی دیگر در ماشینی دیگر.
مقدار پورت میتواند یک شماره پورت تکی یا بازهای از پورتها به صورت portid-portid باشد. گزینه to-addr یک نشانی IP است. پروتکل میتواند یکی از مقادیر tcp، udp، sctp یا dccp باشد.
تعیین کنش (action) در اینجا مجاز نیست؛ forward-port به طور داخلی از کنش accept استفاده میکند.
نکته: اگر to-addr مشخص شده باشد، فوروارد IP به طور ضمنی فعال خواهد شد.
پورت مبدأ (Source-Port)
source-port port="port value" protocol="tcp|udp|sctp|dccp"
پورت مبدأ port value میتواند یک شماره پورت تکی portid یا یک بازه پورت portid-portid باشد. پروتکل میتواند یکی از مقادیر tcp، udp، sctp یا dccp باشد.
ثبت وقایع (Log)
log [prefix="prefix text"] [level="log level"] [limit value="rate/duration"]
ثبت تلاشهای جدید برای اتصال در قانون با استفاده از لاگگیری هسته، به عنوان مثال در syslog. میتوانید یک متن پیشوند با حداکثر طول ۱۲۷ نویسه تعیین کنید که به عنوان پیشوند به پیام لاگ افزوده میشود. سطح لاگ میتواند یکی از مقادیر "emerg"، "alert"، "crit"، "error"، "warning"، "notice"، "info" یا "debug" باشد که مقدار پیشفرض آن (در صورت عدم تعیین) "warning" است. برای مشاهده توضیحات مربوط به سطوح، به syslog(3) مراجعه کنید. برای توضیحات مربوط به برچسب limit بخش «محدودیت (Limit)» را ببینید.
نکته: بکاند iptables طول پیشوند را به ۲۹ نویسه کوتاه میکند.
ثبت وقایع با نتفیلتر (NFLog)
nflog [group="group id"] [prefix="prefix text"] [queue-size="threshold"] [limit value="rate/duration"]
ثبت تلاشهای جدید برای اتصال در قانون با استفاده از لاگگیری هسته جهت ارسال بستهها از طریق یک سوکت 'netlink' به کاربران یا برنامههایی که گروه چندپخشی (multicast) group را پایش میکنند. حداقل و مقدار پیشفرض برای group برابر 0 و حداکثر مقدار آن 65535 است. برای توضیحات دقیقتر، مدخل NETLINK_NETFILTER را در صفحه راهنمای netlink(7) و گزینه NFLOG را در هر دو صفحه راهنمای iptables-extensions(8) و nft(8) ببینید.
میتوانید یک متن پیشوند با حداکثر طول ۱۲۷ نویسه تعیین کنید که به عنوان پیشوند به پیام لاگ افزوده شود. گزینه queue-size میتواند برای افزایش آستانه صف تنظیم شود که به محدود کردن تعویض زمینه (context switching) کمک میکند. مقدار پیشفرض برای queue-size برابر 1 و حداکثر مقدار آن 65535 است. برای جزئیات بیشتر به iptables-extensions(8) و nft(8) مراجعه کنید.
برای توضیحات برچسب limit بخش «محدودیت (Limit)» را ببینید.
نکته: بکاند iptables طول پیشوند را به ۶۳ نویسه کوتاه میکند.
حسابرسی (Audit)
audit [limit value="rate/duration"]
قابلیت Audit روشی جایگزین برای ثبت وقایع با استفاده از رکوردهای حسابرسی ارسالی به سرویس auditd ارائه میدهد. نوع حسابرسی به طور خودکار از روی کنش قانون تشخیص داده خواهد شد. استفاده از audit اختیاری است. برای توضیحات مربوط به برچسب limit بخش «محدودیت (Limit)» را ببینید.
کنش (Action)
یک کنش میتواند یکی از موارد accept، reject، drop یا mark باشد.
قانون میتواند حاوی یک عنصر باشد یا صرفاً شامل یک مبدأ باشد. اگر قانون حاوی یک عنصر باشد، اتصال جدیدِ منطبق بر آن عنصر با این کنش مدیریت خواهد شد. اگر قانون عنصری نداشته باشد، تمام ترافیک رسیده از نشانی مبدأ با این کنش مدیریت میشود.
accept [limit value="rate/duration"]
reject [type="reject type"] [limit value="rate/duration"]
drop [limit value="rate/duration"]
mark set="mark[/mask]" [limit value="rate/duration"]
با accept تمامی تلاشهای جدید برای برقراری اتصال پذیرفته خواهند شد. با reject اتصالات پذیرفته نمیشوند و مبدأ آنها یک پیام رد ICMP(v6) دریافت میکند. نوع رد کردن (reject type) را میتوان برای تعیین پیام خطای ICMP(v6) مناسب تنظیم کرد. برای مشاهده انواع معتبر رد کردن، به --reject-with type در صفحه راهنمای iptables-extensions(8) مراجعه کنید. از آنجا که انواع reject برای IPv4 و IPv6 متفاوت هستند، هنگام استفاده از reject type باید خانواده قانون (rule family) را مشخص کنید. با drop تمام بستهها بلافاصله دور ریخته میشوند و هیچ اطلاعاتی به مبدأ ارسال نخواهد شد. با mark تمام بستهها در زنجیره PREROUTING در جدول mangle با ترکیب نشان و ماسک علامتگذاری میشوند. برای توضیحات مربوط به برچسب limit بخش «محدودیت (Limit)» را ببینید.
محدودیت (Limit)
limit value="rate/duration"
امکان محدودسازی Log، NFLog، Audit و Action وجود دارد. قانونی که از این برچسب استفاده میکند تا زمان رسیدن به این حد مطابقت خواهد یافت. نرخ (rate) یک عدد طبیعی مثبت است [1, ..]. مدتزمان (duration) یکی از مقادیر "s"، "m"، "h" یا "d" است که "s" به معنای ثانیه، "m" دقیقه، "h" ساعت و "d" روز میباشد. بیشینه مقدار محدودیت "2/d" است که به معنای حداکثر دو بار مطابقت در روز است.
اطلاعات مربوط به ثبت وقایع و کنشها
ثبت وقایع (Logging) میتواند با کنشهای log، nflog و audit انجام پذیرد. یک زنجیره جدید به تمام مناطق افزوده میشود: zone_log. این زنجیره برای برقراری نظم مناسب، پیش از زنجیره deny فراخوانی میشود.
قوانین یا بخشهایی از آنها بر اساس اولویت و کنش قانون در زنجیرههای جداگانه قرار میگیرند:
zone_pre zone_log zone_deny zone_allow zone_post
هنگامی که priority < 0 باشد، قانون غنی در زنجیره zone_pre قرار خواهد گرفت.
هنگامی که priority == 0 باشد: در این صورت تمامی قوانین لاگگیری در زنجیره zone_log قرار میگیرند. تمامی قوانین reject و drop در زنجیره zone_deny قرار میگیرند که پس از زنجیره log پیمایش میشود. تمامی قوانین accept در زنجیره zone_allow قرار میگیرند که پس از زنجیره deny پیمایش خواهد شد. اگر یک قانون حاوی لاگ و همچنین کنشهای deny یا allow باشد، هر بخش در زنجیره متناظر خود قرار میگیرد.
هنگامی که priority > 0 باشد، قانون غنی در زنجیره zone_post قرار میگیرد.
مثالها (EXAMPLES)
اینها نمونههایی از نحوه مشخص کردن قوانین زبان غنی هستند. این قالب (یعنی یک رشته که کل قانون را مشخص میکند) به عنوان مثال توسط firewall-cmd --add-rich-rule (رجوع کنید به firewall-cmd(1)) و همچنین واسط D-Bus استفاده میشود.
مثال ۱
فعالسازی اتصالات جدید IPv4 و IPv6 برای پروتکل 'ah'
rule protocol value="ah" accept
مثال ۲
مجاز کردن اتصالات جدید IPv4 و IPv6 برای سرویس ftp و ثبت وقایع با نرخ ۱ در دقیقه با استفاده از audit
rule service name="ftp" log limit value="1/m" audit accept
مثال ۳
مجاز کردن اتصالات جدید IPv4 از نشانی 192.168.0.0/24 برای سرویس tftp و ثبت وقایع با نرخ ۱ در دقیقه با استفاده از syslog
rule family="ipv4" source address="192.168.0.0/24" service name="tftp" log prefix="tftp" level="info" limit value="1/m" accept
مثال ۴
رد کردن تمام اتصالات جدید IPv6 از 1:2:3:4:6:: به سرویس radius و ثبت لاگ با نرخ ۳ در دقیقه. اتصالات جدید IPv6 از سایر مبدأها پذیرفته میشوند.
rule family="ipv6" source address="1:2:3:4:6::" service name="radius" log prefix="dns" level="info" limit value="3/m" reject rule family="ipv6" service name="radius" accept
مثال ۵
فوروارد پورت/بستههای IPv6 دریافت شده از 1:2:3:4:6:: روی پورت 4011 با پروتکل tcp به نشانی 1::2:3:4:7 روی پورت 4012
rule family="ipv6" source address="1:2:3:4:6::" forward-port to-addr="1::2:3:4:7" to-port="4012" protocol="tcp" port="4011"
مثال ۶
قرار دادن نشانی مبدأ در لیست سفید برای مجاز ساختن تمامی اتصالات از 192.168.2.2
rule family="ipv4" source address="192.168.2.2" accept
مثال ۷
قرار دادن نشانی مبدأ در لیست سیاه برای رد کردن (reject) تمامی اتصالات از 192.168.2.3
rule family="ipv4" source address="192.168.2.3" reject type="icmp-admin-prohibited"
مثال ۸
قرار دادن نشانی مبدأ در لیست سیاه برای دور ریختن (drop) تمامی اتصالات از 192.168.2.4
rule family="ipv4" source address="192.168.2.4" drop
همچنین ببینید (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 |