FIREWALLD.RICHLANG(5) firewalld.richlanguage FIREWALLD.RICHLANG(5)

firewalld.richlanguage - مستندات زبان غنی (Rich Language) در firewalld

با زبان غنی (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 [family="ipv4|ipv6"] [priority="priority"]

اگر خانواده قانون (family) مشخص شود، می‌تواند "ipv4" یا "ipv6" باشد که قانون را به IPv4 یا IPv6 محدود می‌کند. اگر خانواده قانون ارائه نشود، قانون برای هر دو پروتکل IPv4 و IPv6 افزوده خواهد شد. اگر نشانی‌های مبدأ یا مقصد در یک قانون استفاده شوند، خانواده قانون باید مشخص گردد. این موضوع در مورد فوروارد پورت/بسته نیز صادق است.

اگر اولویت قانون (priority) مشخص شود، می‌تواند در بازه -32768 تا 32767 باشد که در آن مقادیر کمتر، تقدم بالاتری دارند. قوانین غنی بر اساس اولویت مرتب می‌شوند. ترتیب اجرای قوانین با اولویت یکسان نامشخص است. مقدار اولویت منفی پیش از سایر ساختارهای اولیه (primitives) در firewalld اجرا خواهد شد. مقدار اولویت مثبت پس از سایر ساختارهای اولیه firewalld اجرا می‌شود. مقدار اولویت 0 بر اساس کنشِ قانون و طبق بخش «اطلاعات مربوط به ثبت وقایع و کنش‌ها» در ادامه، در زنجیره مربوطه قرار خواهد گرفت.

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 [not] address="address[/mask]"|ipset="ipset"

با نشانی مقصد می‌توان هدف اتصال را به نشانی مقصد مشخص‌شده محدود ساخت. نشانی مقصد از همان نحو (syntax) نشانی مبدأ استفاده می‌کند.

استفاده از نشانی‌های مبدأ و مقصد اختیاری است و استفاده از نشانی مقصد با تمامی عناصر امکان‌پذیر نیست. این امر برای نمونه به استفاده از نشانی‌های مقصد در مدخل‌های سرویس بستگی دارد.

service name="service name"

سرویس service name به قانون افزوده خواهد شد. نام سرویس یکی از سرویس‌های ارائه‌شده توسط firewalld است. برای دریافت فهرست سرویس‌های پشتیبانی‌شده، از دستور firewall-cmd --get-services استفاده کنید.

اگر یک سرویس نشانی مقصد ارائه دهد، با نشانی مقصدِ موجود در قانون تداخل پیدا کرده و منجر به بروز خطا خواهد شد. سرویس‌هایی که به صورت داخلی از نشانی‌های مقصد استفاده می‌کنند بیشتر سرویس‌های مبتنی بر چندپخشی (multicast) هستند.

port port="port value" protocol="tcp|udp|sctp|dccp"

پورت port value می‌تواند یک شماره پورت تکی portid یا یک بازه پورت portid-portid باشد. پروتکل می‌تواند یکی از مقادیر tcp، udp، sctp یا dccp باشد.

protocol value="protocol value"

مقدار پروتکل می‌تواند یک شماره شناسه پروتکل یا یک نام پروتکل باشد. برای مشاهده مدخل‌های پروتکل مجاز، لطفاً فایل /etc/protocols را بررسی کنید.

tcp-mss-clamp="value=pmtu|value=number >= 536|None"

ویژگی tcp-mss-clamp اندازه بیشینه سگمنت (Maximum Segment Size) را در قانون تنظیم می‌کند.

ویژگی tcp-mss-clamp دارای یک مقدار خصیصه اختیاری است که می‌تواند برابر با "pmtu" یا عددی بزرگتر یا مساوی ۵۳۶ تنظیم شود. اگر مقدار این خصیصه مشخص نشود، اندازه بیشینه سگمنت به طور خودکار روی "pmtu" تنظیم می‌گردد.

icmp-block name="icmptype name"

مقدار icmptype یکی از انواع icmp است که توسط firewalld پشتیبانی می‌شود. برای دریافت فهرست انواع icmp پشتیبانی‌شده: firewall-cmd --get-icmptypes

تعیین کنش (action) در اینجا مجاز نیست؛ icmp-block به طور داخلی از کنش reject استفاده می‌کند.

masquerade

فعال‌سازی مبدل‌سازی نشانی (masquerading) در قانون. می‌توان یک نشانی مبدأ و همچنین نشانی مقصد را برای محدود کردن مبدل‌سازی به این محدوده مشخص کرد.

تعیین کنش (action) در اینجا مجاز نیست.

نکته: فوروارد IP به طور ضمنی فعال خواهد شد.

icmp-type name="icmptype name"

مقدار icmptype یکی از انواع icmp است که توسط firewalld پشتیبانی می‌شود. برای دریافت فهرست انواع icmp پشتیبانی‌شده: firewall-cmd --get-icmptypes

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 port="port value" protocol="tcp|udp|sctp|dccp"

پورت مبدأ port value می‌تواند یک شماره پورت تکی portid یا یک بازه پورت portid-portid باشد. پروتکل می‌تواند یکی از مقادیر tcp، udp، sctp یا dccp باشد.

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 [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 [limit value="rate/duration"]

قابلیت Audit روشی جایگزین برای ثبت وقایع با استفاده از رکوردهای حسابرسی ارسالی به سرویس auditd ارائه می‌دهد. نوع حسابرسی به طور خودکار از روی کنش قانون تشخیص داده خواهد شد. استفاده از audit اختیاری است. برای توضیحات مربوط به برچسب limit بخش «محدودیت (Limit)» را ببینید.

یک کنش می‌تواند یکی از موارد 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 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 قرار می‌گیرد.

این‌ها نمونه‌هایی از نحوه مشخص کردن قوانین زبان غنی هستند. این قالب (یعنی یک رشته که کل قانون را مشخص می‌کند) به عنوان مثال توسط 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

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)

صفحه خانگی firewalld:

Thomas Woerner <twoerner@redhat.com>

توسعه‌دهنده

Jiri Popelka <jpopelka@redhat.com>

توسعه‌دهنده

Eric Garver <eric@garver.life>

توسعه‌دهنده
firewalld 2.5.1