table of contents
| iptables-extensions(8) | iptables 1.8.13 | iptables-extensions(8) |
الاسم¶
iptables-extensions — قائمة الإضافات في توزيعة iptables القياسية
موجز¶
ip6tables [-m name [module-options...]] [-j target-name [target-options...]
iptables [-m name [module-options...]] [-j target-name [target-options...]
إضافات المطابقة¶
يمكن لـ iptables استخدام وحدات مطابقة الحزم الموسعة مع الخيارات -m أو --match، متبوعة باسم وحدة المطابقة؛ بعد ذلك، تتوفر خيارات إضافية متنوعة لسطر الأوامر، اعتمادًا على الوحدة المحددة. يمكنك تحديد وحدات مطابقة موسعة متعددة في سطر واحد، ويمكنك استخدام الخيارات -h أو --help بعد تحديد الوحدة لتلقي مساعدة خاصة بتلك الوحدة. يتم تقييم وحدات المطابقة الموسعة بالترتيب الذي تم تحديدها به في القاعدة.
إذا تم تحديد -p أو --protocol وفقط إذا تمت مصادفة خيار غير معروف، يحاول iptables تحميل وحدة مطابقة بنفس اسم البروتوكول، لمحاولة جعل الخيار متاحًا.
addrtype¶
تطابق هذه الوحدة الحزم بناءً على نوع العنوان. تُستخدم أنواع العناوين داخل مكدس الشبكة في النواة وتصنف العناوين إلى مجموعات مختلفة. يعتمد التعريف الدقيق لتلك المجموعة على بروتوكول الطبقة الثالثة المحدد.
أنواع العناوين التالية ممكنة:
- UNSPEC
- عنوان غير محدد (أي 0.0.0.0)
- UNICAST
- عنوان أحادي
- LOCAL
- عنوان محلي
- BROADCAST
- عنوان بث
- ANYCAST
- حبة أي كاست
- MULTICAST
- عنوان بث متعدد
- BLACKHOLE
- عنوان ثقب أسود
- UNREACHABLE
- عنوان غير قابل للوصول
- PROHIBIT
- عنوان محظور
- THROW
- FIXME
- NAT
- FIXME
- XRESOLVE
- [!] --src-type type
- يطابق إذا كان عنوان المصدر من النوع المحدد
- [!] --dst-type type
- يطابق إذا كان عنوان الوجهة من النوع المحدد
- --limit-iface-in
- يمكن تقييد التحقق من نوع العنوان بالواجهة التي تدخل منها الحزمة. هذا الخيار صالح فقط في سلاسل PREROUTING وINPUT وFORWARD. لا يمكن تحديده مع الخيار --limit-iface-out.
- --limit-iface-out
- يمكن تقييد التحقق من نوع العنوان بالواجهة التي تخرج منها الحزمة. هذا الخيار صالح فقط في سلاسل POSTROUTING وOUTPUT وFORWARD. لا يمكن تحديده مع الخيار --limit-iface-in.
ah (خاص بـ IPv6)¶
تطابق هذه الوحدة المعاملات في رأس الاستيثاق لحزم IPsec.
- [!] --ahspi spi[:spi]
- تطابق SPI.
- [!] --ahlen length
- الطول الكلي لهذا الرأس بالأوكتيتات.
- --ahres
- تطابق إذا كان الحقل المحجوز مملوءًا بصفر.
ah (خاص بـ IPv4)¶
تطابق هذه الوحدة SPIs في رأس الاستيثاق لحزم IPsec.
- [!] --ahspi spi[:spi]
bpf¶
تطابق باستخدام مرشح مأخذ لينكس. تتوقع مسارًا إلى كائن eBPF أو برنامج cBPF بتنسيق عشري.
- --object-pinned path
- مرر مسارًا إلى كائن eBPF مثبت.
تحمل التطبيقات برامج eBPF إلى النواة باستخدام استدعاء النظام bpf() وأمر BPF_PROG_LOAD ويمكنها تثبيتها في نظام ملفات افتراضي باستخدام BPF_OBJ_PIN. لاستخدام كائن مثبت في iptables، قم بتركيب نظام ملفات bpf باستخدام
- mount -t bpf bpf ${BPF_MOUNT}
ثم أدخل المرشح في iptables بالمسار:
- iptables -A OUTPUT -m bpf --object-pinned ${BPF_MOUNT}/{PINNED_PATH} -j ACCEPT
- --bytecode code
- مرر تنسيق كود البايت BPF كما يولده الأداة nfbpf_compile.
تنسيق الكود مشابه لمخرجات أمر tcpdump -ddd: سطر واحد يخزن عدد التعليمات، متبوعًا بسطر لكل تعليمة. تتبع أسطر التعليمات النمط 'u16 u8 u8 u32' بالتدوين العشري. ترمز الحقول للعملية، إزاحة القفز إذا كان صحيحًا، إزاحة القفز إذا كان خاطئًا والحقل العام متعدد الاستخدامات 'K'. التعليقات غير مدعومة.
على سبيل المثال، لقراءة الحزم المطابقة فقط لـ 'ip proto 6'، أدخل التالي، بدون التعليقات أو المسافات البيضاء الزائدة:
- 4 # عدد
التعليمات
48 0 0 9 # تحميل بايت ip->proto
21 0 1 6 # قفز مساوٍ IPPROTO_TCP
6 0 0 1 # إرجاع نجاح (غير صفري)
6 0 0 0 # إرجاع فشل (صفر)
يمكنك تمرير هذا المرشح لمطابقة bpf بالأمر التالي:
- iptables -A OUTPUT -m bpf --bytecode '4,48 0 0 9,21 0 1 6,6 0 0 1,6 0 0 0' -j ACCEPT
أو بدلاً من ذلك، يمكنك استدعاء الأداة nfbpf_compile.
- iptables -A OUTPUT -m bpf --bytecode "`nfbpf_compile RAW 'ip proto 6'`" -j ACCEPT
أو استخدم tcpdump -ddd. في هذه الحالة، قم بتوليد BPF يستهدف جهازًا بنفس نوع وصلة البيانات كمطابقة xtables. يمرر Iptables الحزم من طبقة الشبكة فصاعدًا، دون طبقة MAC. اختر جهازًا بنوع وصلة بيانات RAW، مثل جهاز tun:
- ip tuntap add tun0 mode tun
ip link set tun0 up
tcpdump -ddd -i tun0 ip proto 6
انظر tcpdump -L -i $dev للحصول على قائمة بأنواع وصلة البيانات المعروفة لجهاز معين.
قد ترغب في معرفة المزيد عن BPF من صفحة الدليل bpf(4) الخاصة بـ FreeBSD.
cgroup¶
- [!] --path path
- مطابقة
عضوية cgroup2.
كل مقبس مرتبط بـ cgroup v2 للعملية المنشئة. يطابق هذا الحزم القادمة من أو المتجهة إلى جميع المقابس في التسلسل الهرمي الفرعي للمسار المحدد. يجب أن يكون المسار نسبيًا لجذر التسلسل الهرمي لـ cgroup2.
- [!] --cgroup classid
- مطابقة classid لـ
cgroup net_cls.
classid هو العلامة المحددة عبر متحكم cgroup net_cls. لا يمكن استخدام هذا الخيار و--path معًا.
مثال:
- iptables -A OUTPUT -p tcp --sport 80 -m cgroup ! --path service/http-server -j DROP
- iptables -A OUTPUT -p tcp --sport 80 -m cgroup ! --cgroup 1 -j DROP
هام: عند استخدامه في سلسلة INPUT، فإن مطابق cgroup حاليًا ذو وظائف محدودة فقط، مما يعني أنه سيطابق فقط الحزم التي تتم معالجتها للمقابس المحلية عبر إزالة تعدد الإرسال المبكر للمقابس. لذلك، لا يُنصح بالاستخدام العام على سلسلة INPUT ما لم يتم فهم الآثار جيدًا.
متاح منذ لينكس 3.14.
عنقود¶
يسمح لك بنشر عناقيد مشاركة الحِمل للبوابات والخلفيات دون الحاجة إلى موازنات الحِمل.
يتطلب هذا المطابق أن ترى جميع العُقد نفس الحزم. وبالتالي، يقرر مطابق العنقود ما إذا كان على هذه العقدة معالجة حزمة معينة بالنظر إلى الخيارات التالية:
- --cluster-total-nodes \fIعدد
- يضبط عدد العُقد الكلي في العنقود.
- [!] --cluster-local-node \fIعدد
- يضبط معرف رقم العقدة المحلية.
- [!] --cluster-local-nodemask \fIقناع
- يضبط قناع معرف رقم العقدة المحلية. يمكنك استخدام هذا الخيار بدلاً من --cluster-local-node.
- --cluster-hash-seed \fIقيمة
- يضبط قيمة البذرة لتجزئة Jenkins.
مثال:
- iptables -A PREROUTING -t mangle -i eth1 -m cluster --cluster-total-nodes 2 --cluster-local-node 1 --cluster-hash-seed 0xdeadbeef -j MARK --set-mark 0xffff
- iptables -A PREROUTING -t mangle -i eth2 -m cluster --cluster-total-nodes 2 --cluster-local-node 1 --cluster-hash-seed 0xdeadbeef -j MARK --set-mark 0xffff
- iptables -A PREROUTING -t mangle -i eth1 -m mark ! --mark 0xffff -j DROP
- iptables -A PREROUTING -t mangle -i eth2 -m mark ! --mark 0xffff -j DROP
والأوامر التالية لجعل جميع العُقد ترى نفس الحزم:
- ip maddr add 01:00:5e:00:01:01 dev eth1
- ip maddr add 01:00:5e:00:01:02 dev eth2
- arptables -A OUTPUT -o eth1 --h-length 6 -j mangle --mangle-mac-s 01:00:5e:00:01:01
- arptables -A INPUT -i eth1 --h-length 6 --destination-mac 01:00:5e:00:01:01 -j mangle --mangle-mac-d 00:zz:yy:xx:5a:27
- arptables -A OUTPUT -o eth2 --h-length 6 -j mangle --mangle-mac-s 01:00:5e:00:01:02
- arptables -A INPUT -i eth2 --h-length 6 --destination-mac 01:00:5e:00:01:02 -j mangle --mangle-mac-d 00:zz:yy:xx:5a:27
ملاحظة: أوامر arptables أعلاه تستخدم الصيغة السائدة. إذا كنت تستخدم arptables-jf المضمنة في بعض إصدارات RedHat وCentOS وFedora، فستواجه أخطاء نحوية. لذلك، ستحتاج إلى تكييفها مع صيغة arptables-jf لجعلها تعمل.
في حالة اتصالات TCP، يجب تعطيل ميزة الالتقاط لتجنب وضع علامة على حزم TCP ACK القادمة في اتجاه الرد على أنها صالحة.
- echo 0 > /proc/sys/net/netfilter/nf_conntrack_tcp_loose
تعليق¶
يسمح لك بإضافة تعليقات (حتى 256 حرفًا) إلى أي قاعدة.
- --comment تعليق
- مثال:
- iptables -A INPUT -i eth1 -m comment --comment "شبكتي المحلية"
بايتات الاتصال¶
يطابق بعدد البايتات أو الحزم التي نقلها اتصال (أو أحد التدفقين المكونين للاتصال) حتى الآن، أو بمتوسط البايتات لكل حزمة.
العدادات هي 64 بت وبالتالي لا يُتوقع أن تفيض ;)
الاستخدام الرئيسي هو اكتشاف التنزيلات طويلة العمر ووضع علامة عليها لتتم جدولتها باستخدام نطاق أولوية أقل في التحكم في المرور.
يمكن أيضًا عرض البايتات المنقولة لكل اتصال من خلال `conntrack -L` والوصول إليها عبر ctnetlink.
لاحظ أنه بالنسبة للاتصالات التي لا تحتوي على معلومات محاسبة، ستعيد المطابقة دائمًا القيمة false. تتحكم علامة sysctl "net.netfilter.nf_conntrack_acct" في ما إذا كانت الاتصالات الجديدة ستُحسب بالبايت/الحزمة. لن تكتسب/تفقد تدفقات الاتصال الحالية بنية المحاسبة عند قلب علامة sysctl.
- [!] --connbytes from[:to]
- يطابق حزمًا من اتصال يكون عدد حزمه/بايتاته/متوسط حجم حزمته أكبر من FROM وأقل من TO بايت/حزمة. إذا تم حذف TO، يتم التحقق من FROM فقط. يُستخدم "!" لمطابقة الحزم التي لا تقع ضمن النطاق.
- --connbytes-dir {original|reply|both}
- أي الحزم يجب أخذها في الاعتبار
- --connbytes-mode {packets|bytes|avgpkt}
- ما إذا كان يجب التحقق من كمية الحزم، أو عدد البايتات المنقولة، أو متوسط الحجم (بالبايت) لجميع الحزم المستلمة حتى الآن. لاحظ أنه عند استخدام "both" مع "avgpkt"، وتدفق البيانات (بشكل رئيسي) في اتجاه واحد فقط (مثل HTTP)، سيكون متوسط حجم الحزمة حوالي نصف حزم البيانات الفعلية.
- مثال:
- iptables .. -m connbytes --connbytes 10000:100000 --connbytes-dir both --connbytes-mode bytes ...
connlabel¶
الوحدة النمطية تطابق أو تضيف تسميات اتصال (connlabels) إلى اتصال. تسميات الاتصال مشابهة لعلامات الاتصال (connmarks)، باستثناء أن التسميات مبنية على البتات؛ أي يمكن إرفاق جميع التسميات بتدفق في نفس الوقت. يتم دعم ما يصل إلى 128 تسمية فريدة حاليًا.
- [!] --label name
- يطابق إذا تم تعيين التسمية name على اتصال. بدلاً من اسم (والذي سيتم ترجمته إلى رقم، انظر المثال أدناه)، يمكن استخدام رقم بدلاً من ذلك. استخدام رقم يتجاوز دائمًا connlabel.conf.
- --set
- إذا لم يتم تعيين التسمية على الاتصال، فقم بتعيينها. لاحظ أن تعيين تسمية قد يفشل. وذلك لأن النواة تخصص منطقة تخزين تسمية التتبع (conntrack label) عند إنشاء الاتصال، وتحتفظ فقط بكمية الذاكرة المطلوبة من قبل مجموعة القواعد الموجودة في وقت إنشاء الاتصال. في هذه الحالة، ستفشل المطابقة (أو تنجح، في حالة نفي خيار --label).
تعتمد هذه المطابقة على libnetfilter_conntrack 1.0.4 أو أحدث. تتم ترجمة التسمية عبر ملف الإعدادات /etc/xtables/connlabel.conf.
مثال:
-
0 eth0-in 1 eth0-out 2 ppp-in 3 ppp-out 4 bulk-traffic 5 interactive
connlimit¶
يسمح لك بتقييد عدد الاتصالات المتوازية لخادم لكل عنوان IP للعميل (أو كتلة عنوان العميل).
- --connlimit-upto n
- يطابق إذا كان عدد الاتصالات الحالية أقل من أو يساوي n.
- --connlimit-above n
- طابق إذا كان عدد الاتصالات الحالية أعلى من n.
- --connlimit-mask prefix_length
- جمّع المضيفين باستخدام طول البادئة. بالنسبة لـ IPv4، يجب أن يكون هذا رقمًا بين (بما في ذلك) 0 و32. بالنسبة لـ IPv6، بين 0 و128. إذا لم يُحدد، يُستخدم أقصى طول بادئة للبروتوكول المنطبق.
- --connlimit-saddr
- طبّق الحد على مجموعة المصدر. هذا هو المبدئي إذا لم يُحدد --connlimit-daddr.
- --connlimit-daddr
- طبّق الحد على مجموعة الوجهة.
أمثلة:
- اسمح
باتصالين telnet
لكل مضيف
عميل:
iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT - يمكنك
أيضًا
المطابقة
بالعكس:
iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT - حدد عدد
طلبات HTTP
المتوازية
إلى 16 لكل
شبكة مصدر
بحجم الفئة
C (قناع شبكة 24
بت):
iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT - حدد عدد
طلبات HTTP
المتوازية
إلى 16
للشبكة
المحلية
الرابط (IPv6):
ip6tables -p tcp --syn --dport 80 -s fe80::/64 -m connlimit --connlimit-above 16 --connlimit-mask 64 -j REJECT - حدد عدد
الاتصالات
بمضيف معين:
ip6tables -p tcp --syn --dport 49152:65535 -d 2001:db8::1 -m connlimit --connlimit-above 100 -j REJECT
connmark¶
يطابق هذا الوحدة حقل علامة netfilter المرتبط باتصال (والذي يمكن تعيينه باستخدام الهدف CONNMARK أدناه).
- [!] --mark قيمة[/قناع]
- يطابق الحزم في الاتصالات ذات قيمة العلامة المعطاة (إذا تم تحديد قناع، يتم إجراء عملية AND منطقية مع العلامة قبل المقارنة).
تتبع الاتصال¶
تتيح هذه الوحدة، عند دمجها مع تتبع الاتصال، الوصول إلى حالة تتبع الاتصال لهذه الحزمة/الاتصال.
- [!] --ctstate قائمة_الحالات
- قائمة_الحالات هي قائمة مفصولة بفواصل لحالات الاتصال المطلوب مطابقتها. الحالات الممكنة مدرجة أدناه.
- [!] --ctproto بروتوكول_الطبقة4
- بروتوكول الطبقة 4 للمطابقة (بالرقم أو الاسم)
- [!] --ctorigsrc عنوان[/قناع]
- [!] --ctorigdst عنوان[/قناع]
- [!] --ctreplsrc عنوان[/قناع]
- [!] --ctrepldst عنوان[/قناع]
- المطابقة مع عنوان المصدر/الوجهة الأصلي/الرد
- [!] --ctorigsrcport منفذ[:منفذ]
- [!] --ctorigdstport منفذ[:منفذ]
- [!] --ctreplsrcport منفذ[:منفذ]
- [!] --ctrepldstport منفذ[:منفذ]
- المطابقة مع منفذ المصدر/الوجهة الأصلي/الرد (TCP/UDP/إلخ) أو مفتاح GRE. المطابقة مع نطاقات المنافذ مدعومة فقط في إصدارات النواة الأعلى من 2.6.38.
- [!] --ctstatus قائمة_الحالات
- قائمة_الحالات هي قائمة مفصولة بفواصل لحالات الاتصال المطلوب مطابقتها. الحالات الممكنة مدرجة أدناه.
- [!] --ctexpire الوقت[:الوقت]
- طابق العمر المتبقي بالثواني مع القيمة المعطاة أو نطاق القيم (شامل)
- --ctdir {ORIGINAL|REPLY}
- طابق الحزم المتدفقة في الاتجاه المحدد. إذا لم تُحدد هذه العلامة على الإطلاق، تُطابق الحزم في كلا الاتجاهين.
الحالات لـ --ctstate:
- INVALID
- الحزمة غير مرتبطة بأي اتصال معروف.
- NEW
- بدأت الحزمة اتصالاً جديداً أو ارتبطت باتصال لم يشهد حزماً في كلا الاتجاهين.
- ESTABLISHED
- الحزمة مرتبطة باتصال شهد حزماً في كلا الاتجاهين.
- RELATED
- تبدأ الحزمة اتصالاً جديداً، لكنها مرتبطة باتصال موجود، مثل نقل بيانات FTP أو خطأ ICMP.
- UNTRACKED
- الحزمة غير متعقبة على الإطلاق، ويحدث هذا إذا ألغيت تعقبها صراحة باستخدام -j CT --notrack في الجدول الخام.
- SNAT
- حالة افتراضية، تُطابق إذا اختلف عنوان المصدر الأصلي عن وجهة الرد.
- DNAT
- حالة افتراضية، تُطابق إذا اختلفت الوجهة الأصلية عن مصدر الرد.
الحالات لـ --ctstatus:
- NONE
- لا شيء مما يلي.
- EXPECTED
- هذا اتصال متوقع (أي أن مساعد تتبع الاتصال قام بإعداده).
- SEEN_REPLY
- رأى تتبع الاتصال حزمًا في كلا الاتجاهين.
- ASSURED
- يجب ألا ينتهي إدخال تتبع الاتصال مبكرًا أبدًا.
- مؤكد
- تم تأكيد الاتصال: غادرت الحزمة الأصلية الصندوق.
وحدة المعالجة المركزية¶
- [!] --cpu رقم
- طابق وحدة المعالجة المركزية التي تعالج هذه الحزمة. يتم ترقيم وحدات المعالجة المركزية من 0 إلى NR_CPUS-1. يمكن استخدامها مع RPS (توجيه الحزم عن بُعد) أو بطاقات شبكة متعددة القنوات لتوزيع حركة مرور الشبكة على قوائم انتظار مختلفة.
مثال:
iptables -t nat -A PREROUTING -p tcp --dport 80 -m cpu --cpu 0 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING -p tcp --dport 80 -m cpu --cpu 1 -j REDIRECT --to-ports 8081
متاح منذ لينكس 2.6.36.
dccp¶
- [!] --source-port,--sport منفذ[:منفذ]
- [!] --destination-port,--dport منفذ[:منفذ]
- [!] --dccp-types قناع
- يطابق عندما يكون نوع حزمة DCCP أحد 'mask'. 'mask' هي قائمة مفصولة بفواصل لأنواع الحزم. أنواع الحزم هي: REQUEST RESPONSE DATA ACK DATAACK CLOSEREQ CLOSE RESET SYNC SYNCACK INVALID.
- [!] --dccp-option number
- يطابق إذا تم تعيين خيار DCCP.
devgroup¶
يطابق مجموعة جهاز الواجهة الواردة/الصادرة لحزمة.
- [!] --src-group name
- يطابق مجموعة جهاز الجهاز الوارد
- [!] --dst-group name
- يطابق مجموعة جهاز الجهاز الصادر
dscp¶
تطابق هذه الوحدة حقل DSCP ذو 6 بت داخل حقل TOS في رأس IP. حل DSCP محل TOS داخل IETF.
- [!] --dscp value
- يطابق قيمة رقمية (عشرية أو سداسية عشرية) في النطاق 0–63.
- [!] --dscp-class class
- يطابق فئة DiffServ. قد تكون هذه القيمة أيًا من فئات BE أو EF أو AFxx أو CSx. ثم يتم تحويلها إلى قيمتها الرقمية المقابلة.
dst (خاص بـ IPv6)¶
تطابق هذه الوحدة المعلمات في رأس خيارات الوجهة
- [!] --dst-len length
- الطول الكلي لهذا الرأس بالأوكتيتات.
- --dst-opts type[:length][,type[:length]...]
- النوع الرقمي للخيار وطول بيانات الخيار بالأوكتيت.
ecn¶
يتيح لك هذا مطابقة بتات ECN لرأس IPv4/IPv6 وTCP. ECN هي آلية الإخطار الصريح بالازدحام كما هو محدد في RFC3168
- [!] --ecn-tcp-cwr
- يطابق هذا إذا كانت بتة CWR (استلام نافذة الازدحام) لـ TCP ECN مضبوطة.
- [!] --ecn-tcp-ece
- يطابق هذا إذا كانت بتة ECE (صدى ECN) لـ TCP ECN مضبوطة.
- [!] --ecn-ip-ect num
- يطابق هذا ECT معين (نقل قابل لـ ECN) لـ IPv4/IPv6. يجب عليك تحديد رقم بين `0' و`3'.
esp¶
يطابق هذه الوحدة SPIs في رأس ESP لحزم IPsec.
- [!] --espspi spi[:spi]
eui64 (خاص بـ IPv6)¶
تطابق هذه الوحدة جزء EUI-64 من عنوان IPv6 مهيأ آليًا بدون حالة. تقارن EUI-64 المستمد من عنوان MAC المصدر في إطار Ethernet مع البتات الـ64 السفلى من عنوان IPv6 المصدر. لكن بتة "Universal/Local" لا تُقارن. لا تطابق هذه الوحدة إطارات طبقة الوصلة الأخرى، وهي صالحة فقط في السلاسل PREROUTING وINPUT وFORWARD.
frag (خاص بـ IPv6)¶
تطابق هذه الوحدة المعاملات في رأس التجزئة.
- [!] --fragid id[:id]
- يطابق المُعرّف المعطى أو نطاقه.
- [!] --fraglen length
- لا يمكن استخدام هذا الخيار مع إصدار النواة 2.6.10 أو أحدث. طول رأس التجزئة ثابت وهذا الخيار لا معنى له.
- --fragres
- يطابق إذا كانت الحقول المحجوزة مملوءة بالأصفار.
- --fragfirst
- يطابق الجزء الأول.
- --fragmore
- يطابق إذا وُجدت أجزاء أخرى.
- --fraglast
- يطابق إذا كان هذا هو الجزء الأخير.
hashlimit¶
يستخدم hashlimit دلاء التجزئة للتعبير عن مطابقة تحديد المعدل (مثل مطابقة limit) لمجموعة من الاتصالات باستخدام قاعدة iptables واحدة. يمكن إجراء التجميع لكل مجموعة مضيف (عنوان المصدر و/أو الوجهة) و/أو لكل منفذ. يمنحك القدرة على التعبير عن "N حزمة لكل كمية زمنية لكل مجموعة" أو "N بايت في الثانية" (انظر أدناه لبعض الأمثلة).
خيار حد التجزئة (--hashlimit-upto، --hashlimit-above) و --hashlimit-name مطلوبان.
- --hashlimit-upto الكمية[/second|/minute|/hour|/day]
- يطابق إذا كان المعدل أقل من أو يساوي الكمية/الكمية الزمنية. يُحدد إما كرقم، مع لاحقة كمية زمنية اختيارية (المبدئي هو 3/ساعة)، أو كـ الكميةb/second (عدد البايتات في الثانية).
- --hashlimit-above الكمية[/second|/minute|/hour|/day]
- يطابق إذا كان المعدل أعلى من الكمية/الكمية الزمنية.
- --hashlimit-burst الكمية
- العدد الأقصى المبدئي للحزم للمطابقة: يُعاد شحن هذا العدد بواحد كل مرة لا يُبلغ فيها الحد المحدد أعلاه، حتى هذا العدد؛ المبدئي هو 5. عند طلب مطابقة معدل قائمة على البايت، يحدد هذا الخيار كمية البايتات التي يمكن أن تتجاوز المعدل المعطى. يجب استخدام هذا الخيار بحذر — إذا انتهت صلاحية الإدخال، تُعاد قيمة الاندفاع أيضًا.
- --hashlimit-mode {srcip|srcport|dstip|dstport},...
- قائمة مفصولة بفواصل من الكائنات التي يجب أخذها في الاعتبار. إذا لم يُعطَ خيار --hashlimit-mode، يعمل hashlimit مثل limit، ولكن بتكلفة القيام بصيانة التجزئة.
- --hashlimit-srcmask البادئة
- عند استخدام --hashlimit-mode srcip، ستُجمع جميع عناوين المصدر التي تُواجه وفقًا لطول البادئة المعطى وستخضع الشبكة الفرعية المنشأة هكذا لـ hashlimit. يجب أن تكون البادئة بين (شاملًا) 0 و32. لاحظ أن --hashlimit-srcmask 0 يفعل أساسًا نفس الشيء كعدم تحديد srcip لـ --hashlimit-mode، ولكنه أكثر تكلفة تقنيًا.
- --hashlimit-dstmask البادئة
- مثل --hashlimit-srcmask، لكن لعناوين الوجهة.
- --hashlimit-name foo
- الاسم للإدخال /proc/net/ipt_hashlimit/foo.
- --hashlimit-htable-size buckets
- عدد الجرافات في جدول التجزئة
- --hashlimit-htable-max entries
- الحد الأقصى للإدخالات في التجزئة.
- --hashlimit-htable-expire msec
- بعد كم ملي ثانية تنتهي صلاحية إدخالات التجزئة.
- --hashlimit-htable-gcinterval msec
- كم ملي ثانية بين فترات جمع القمامة.
- --hashlimit-rate-match
- صنف التدفق بدلاً من تحديد معدله. يعمل هذا كمطابقة صواب/خطأ حول ما إذا كان المعدل أعلى/أقل من رقم معين
- --hashlimit-rate-interval sec
- يمكن استخدامه مع --hashlimit-rate-match لتحديد الفاصل الزمني الذي يجب أخذ عينة المعدل فيه
أمثلة:
- المطابقة على المضيف المصدر
- "1000 حزمة في الثانية لكل مضيف في 192.168.0.0/16" => -s 192.168.0.0/16 --hashlimit-mode srcip --hashlimit-upto 1000/sec
- المطابقة على منفذ المصدر
- "100 حزمة في الثانية لكل خدمة من 192.168.1.1" => -s 192.168.1.1 --hashlimit-mode srcport --hashlimit-upto 100/sec
- المطابقة على الشبكة الفرعية
- "10000 packets per minute for every /28 subnet (groups of 8 addresses) in 10.0.0.0/8" => -s 10.0.0.0/8 --hashlimit-mask 28 --hashlimit-upto 10000/min
- مطابقة البايتات في الثانية
- "flows exceeding 512kbyte/s" => --hashlimit-mode srcip,dstip,srcport,dstport --hashlimit-above 512kb/s
- مطابقة البايتات في الثانية
- "hosts that exceed 512kbyte/s, but permit up to 1Megabytes without matching" --hashlimit-mode dstip --hashlimit-above 512kb/s --hashlimit-burst 1mb
hbh (خاص بـ IPv6)¶
تطابق هذه الوحدة المعاملات في رأس خيارات القفزة تلو القفزة
- [!] --hbh-len الطول
- الطول الكلي لهذا الرأس بالأوكتيتات.
- --hbh-opts النوع[:الطول][,النوع[:الطول]...]
- النوع الرقمي للخيار وطول بيانات الخيار بالأوكتيت.
المساعد¶
تطابق هذه الوحدة الحزم المتعلقة بمساعد تتبع اتصال محدد.
- [!] --helper السلسلة
- تطابق الحزم المتعلقة بمساعد تتبع الاتصال المحدد.
يمكن أن تكون السلسلة "ftp" للحزم المتعلقة بجلسة FTP على المنفذ المبدئي. للمنافذ الأخرى، ألحق --portnr بالقيمة، مثل "ftp-2121".
تنطبق نفس القواعد على مساعدي تتبع الاتصال الآخرين.
hl (خاص بـ IPv6)¶
تطابق هذه الوحدة حقل حد القفزات في رأس IPv6.
- [!] --hl-eq القيمة
- تطابق إذا كان حد القفزات يساوي القيمة.
- --hl-lt القيمة
- تطابق إذا كان حد القفزات أقل من القيمة.
- --hl-gt قيمة
- يطابق إذا كان حد القفز أكبر من القيمة.
icmp (خاص بـ IPv4)¶
يمكن استخدام هذا الامتداد إذا تم تحديد `--protocol icmp`. يوفر الخيار التالي:
- [!] --icmp-type {نوع[/رمز]|اسم_النوع}
- يسمح هذا
بتحديد نوع
ICMP، والذي
يمكن أن
يكون نوع ICMP
رقميًا، أو
زوج
نوع/رمز، أو
أحد أسماء
أنواع ICMP
المعروضة
بواسطة
الأمر
iptables -p icmp -h
icmp6 (خاص بـ IPv6)¶
يمكن استخدام هذا الامتداد إذا تم تحديد `--protocol ipv6-icmp` أو `--protocol icmpv6`. يوفر الخيار التالي:
- [!] --icmpv6-type نوع[/رمز]|اسم_النوع
- يسمح هذا
بتحديد نوع
ICMPv6، والذي
يمكن أن
يكون نوع ICMPv6
رقميًا، أو
نوع و
رمز، أو
أحد أسماء
أنواع ICMPv6
المعروضة
بواسطة
الأمر
ip6tables -p ipv6-icmp -h
iprange¶
يطابق هذا نطاقًا عشوائيًا معينًا من عناوين IP.
- [!] --src-range من[-إلى]
- طابق عنوان IP المصدر في النطاق المحدد.
- [!] --dst-range من[-إلى]
- طابق عنوان IP الوجهة في النطاق المحدد.
ipv6header (خاص بـ IPv6)¶
يطابق هذه الوحدة رؤوس امتداد IPv6 و/أو رأس الطبقة العليا.
- --soft
- يطابق إذا كانت الحزمة تتضمن أيًا من الرؤوس المحددة مع --header.
- [!] --header رأس[,رأس...]
- يطابق الحزمة التي تتضمن تمامًا جميع الرؤوس المحددة. الرؤوس المغلفة برأس ESP خارج النطاق. أنواع الرأس الممكنة يمكن أن تكون:
- hop|hop-by-hop
- رأس خيارات قفزة بقفزة
- dst
- رأس خيارات الوجهة
- route
- رأس التوجيه
- frag
- رأس التجزئة
- auth
- رأس الاستيثاق
- esp
- رأس حمولة الأمان المغلفة
- none
- لا رأس تالي يطابق 59 في 'حقل الرأس التالي' لرأس IPv6 أو أي رؤوس امتداد IPv6
- prot
- الذي يطابق أي رأس بروتوكول طبقة عليا. اسم بروتوكول من /etc/protocols وقيمة رقمية مسموح بها أيضًا. الرقم 255 يعادل prot.
ipvs¶
طابق خصائص اتصال IPVS.
- [!] --ipvs
- الحزمة تنتمي إلى اتصال IPVS
- أي من الخيارات التالية يستلزم --ipvs (حتى لو كان منفيًا)
- [!] --vproto protocol
- بروتوكول VIP للمطابقة؛ بالرقم أو الاسم، مثل "tcp"
- [!] --vaddr address[/mask]
- عنوان VIP للمطابقة
- [!] --vport port
- منفذ VIP للمطابقة؛ بالرقم أو الاسم، مثل "http"
- --vdir {ORIGINAL|REPLY}
- اتجاه تدفق الحزمة
- [!] --vmethod {GATE|IPIP|MASQ}
- طريقة إعادة التوجيه IPVS المستخدمة
- [!] --vportctl port
- منفذ VIP للاتصال المتحكم للمطابقة، مثل 21 لـ FTP
length¶
تطابق هذه الوحدة طول حمولة الطبقة 3 (مثل حزمة الطبقة 4) لحزمة مقابل قيمة محددة أو نطاق من القيم.
- [!] --length length[:length]
limit¶
تطابق هذه الوحدة بمعدل محدود باستخدام مرشح دلو الرموز. ستطابق قاعدة تستخدم هذا الامتداد حتى الوصول إلى هذا الحد. يمكن استخدامها مع هدف LOG لتوفير تسجيل محدود، على سبيل المثال.
لا يدعم xt_limit النفي — ستحتاج إلى استخدام -m hashlimit ! --hashlimit rate في هذه الحالة مع حذف --hashlimit-mode.
- --limit rate[/second|/minute|/hour|/day]
- معدل المطابقة المتوسط الأقصى: محدد كرقم، مع لاحقة اختيارية `/second' أو `/minute' أو `/hour' أو `/day'؛ المبدئي هو 3/hour.
- --limit-burst number
- العدد المبدئي الأقصى للحزم المطابقة: يُعاد شحن هذا العدد بواحد كل مرة لا يُبلغ فيها الحد المحدد أعلاه، حتى هذا العدد؛ المبدئي هو 5.
mac¶
- [!] --mac-source العنوان
- يطابق عنوان MAC المصدر. يجب أن يكون بالصيغة XX:XX:XX:XX:XX:XX. لاحظ أن هذا منطقي فقط للحزم القادمة من جهاز إيثرنت والداخلة إلى السلاسل PREROUTING أو FORWARD أو INPUT.
علامة¶
يطابق هذا الوحدة حقل علامة netfilter المرتبط بحزمة (يمكن ضبطه باستخدام هدف MARK أدناه).
- [!] --mark قيمة[/قناع]
- يطابق الحزم بقيمة العلامة غير الموقعة المعطاة (إذا حُدد قناع، يُجرى AND منطقي مع القناع قبل المقارنة).
mh (خاص بـ IPv6)¶
يُحمّل هذا الامتداد إذا حُدد `--protocol ipv6-mh` أو `--protocol mh`. يوفر الخيار التالي:
- [!] --mh-type النوع[:النوع]
- يسمح هذا
بتحديد نوع
رأس التنقل
(MH)، الذي
يمكن أن
يكون رقمي MH
النوع،
النوع أو
أحد أسماء
أنواع MH
المعروضة
بواسطة
الأمر
ip6tables -p mh -h
multiport¶
يطابق هذا الوحدة مجموعة من منافذ المصدر أو الوجهة. يمكن تحديد حتى 15 منفذاً. نطاق المنفذ (منفذ:منفذ) يُحتسب كمنفذين. يمكن استخدامه فقط مع أحد البروتوكولات التالية: tcp، udp، udplite، dccp و sctp.
- [!] --source-ports,--sports المنفذ[,المنفذ|,المنفذ:المنفذ]...
- يطابق إذا كان منفذ المصدر أحد المنافذ المعطاة. العلامة --sports هي اسم مستعار مناسب لهذا الخيار. تُفصل المنافذ المتعددة أو نطاقات المنافذ باستخدام فاصلة، ويُحدد نطاق المنفذ باستخدام نقطتين. لذا 53,1024:65535 يطابق المنفذ 53 وكل المنافذ من 1024 حتى 65535.
- [!] --destination-ports,--dports المنفذ[,المنفذ|,المنفذ:المنفذ]...
- يطابق إذا كان منفذ الوجهة أحد المنافذ المعطاة. العلامة --dports هي اسم مستعار مناسب لهذا الخيار.
- [!] --ports المنفذ[,المنفذ|,المنفذ:المنفذ]...
- يطابق إذا كان أي من منافذ المصدر أو الوجهة مساوياً لأحد المنافذ المعطاة.
nfacct¶
يوفر مطابقة nfacct البنية التحتية المحاسبية الموسعة لـ iptables. يجب استخدام هذه المطابقة مع الأداة المستقلة في مساحة المستخدم nfacct(8)
الخيار الوحيد المتاح لهذه المطابقة هو التالي:
- --nfacct-name name
- يتيح لك هذا تحديد اسم الكائن الموجود الذي سيُستخدم لمحاسبة حركة المرور التي تطابقها مجموعة القواعد هذه.
لاستخدام هذا الامتداد، يجب إنشاء كائن محاسبة:
- nfacct add http-traffic
ثم، يجب إرفاقه بكائن المحاسبة عبر iptables:
- iptables -I INPUT -p tcp --sport 80 -m nfacct --nfacct-name http-traffic
- iptables -I OUTPUT -p tcp --dport 80 -m nfacct --nfacct-name http-traffic
ثم، يمكنك التحقق من كمية حركة المرور التي تطابقها القواعد:
- nfacct get http-traffic
- { pkts = 00000000000000000156, bytes = 00000000000000151786 } = http-traffic;
يمكنك الحصول على nfacct(8) من https://www.netfilter.org أو، بدلاً من ذلك، من مستودع git.netfilter.org.
osf¶
تقوم وحدة osf ببصمة نظام تشغيل سلبية. تقارن هذه الوحدة بعض البيانات (حجم النافذة، MSS، الخيارات وترتيبها، TTL، DF، وغيرها) من الحزم مع تعيين بت SYN.
- [!] --genre string
- طابق نوع نظام تشغيل باستخدام بصمة سلبية.
- --ttl level
- قم بإجراء فحوصات TTL إضافية على الحزمة لتحديد نظام التشغيل. يمكن أن تكون level إحدى القيم التالية:
- 0
- مقارنة عنوان IP الحقيقي و TTL البصمة. يعمل هذا بشكل عام للشبكات المحلية.
- 1
- تحقق مما إذا كان TTL لرأس IP أقل من TTL البصمة. يعمل للعناوين القابلة للتوجيه عالميًا.
- 2
- لا تقارن TTL على الإطلاق.
- --log المستوى
- سجل الأنواع المحددة في dmesg حتى لو لم تطابق النوع المطلوب. المستوى يمكن أن يكون إحدى القيم التالية:
- 0
- سجل كل التوقيعات المتطابقة أو غير المعروفة
- 1
- سجل الأول فقط
- 2
- سجل كل التوقيعات المتطابقة المعروفة
قد تجد شيئًا كهذا في syslog:
Windows [2000:SP3:Windows XP Pro SP1, 2000 SP3]: 11.22.33.55:4024 -> 11.22.33.44:139 hops=3 Linux [2.5-2.6:] : 1.2.3.4:42624 -> 1.2.3.5:22 hops=4
بصمات نظام التشغيل قابلة للتحميل باستخدام برنامج nfnl_osf. لتحميل البصمات من ملف، استخدم:
nfnl_osf -f /usr/share/xtables/pf.os
لإزالتها مرة أخرى،
nfnl_osf -f /usr/share/xtables/pf.os -d
قاعدة بيانات البصمات يمكن تنزيلها من http://www.openbsd.org/cgi-bin/cvsweb/src/etc/pf.os .
المالك¶
تحاول هذه الوحدة مطابقة خصائص مختلفة لمنشئ الحزمة، للحزم المولدة محليًا. هذه المطابقة صالحة فقط في سلاسل OUTPUT و POSTROUTING. الحزم المعاد توجيهها لا تحتوي على أي مقبس مرتبط بها. الحزم من خيوط النواة تحتوي على مقبس، لكن عادة لا مالك.
- [!] --uid-owner اسم_المستخدم
- [!] --uid-owner معرف_المستخدم[-معرف_المستخدم]
- يطابق إذا كان هيكل ملف مقبس الحزمة (إذا كان موجودًا) مملوكًا للمستخدم المعطى. يمكنك أيضًا تحديد UID رقمي، أو نطاق UID.
- [!] --gid-owner اسم_المجموعة
- [!] --gid-owner معرف_المجموعة[-معرف_المجموعة]
- يطابق إذا كان هيكل ملف مقبس الحزمة مملوكًا للمجموعة المعطاة. يمكنك أيضًا تحديد GID رقمي، أو نطاق GID.
- --suppl-groups
- يتسبب في فحص المجموعة (المجموعات) المحددة مع --gid-owner أيضًا في المجموعات التكميلية لعملية.
- [!] --socket-exists
- يطابق إذا كانت الحزمة مرتبطة بمقبس.
physdev¶
تطابق هذه الوحدة على أجهزة الإدخال والإخراج لمنفذ الجسر التابعة لجهاز جسر. هذه الوحدة جزء من البنية التحتية التي تمكن جدار حماية IP للجسر الشفاف وهي مفيدة فقط لإصدارات النواة الأعلى من الإصدار 2.5.44.
- [!] --physdev-in name
- اسم منفذ جسر تُستقبل عبره حزمة (فقط للحزم الداخلة إلى السلاسل INPUT وFORWARD وPREROUTING). إذا انتهى اسم الواجهة بـ "+"، فإن أي واجهة تبدأ بهذا الاسم ستطابق. إذا لم تصل الحزمة عبر جهاز جسر، فلن تطابق هذه الحزمة هذا الخيار، ما لم يُستخدم '!'.
- [!] --physdev-out name
- اسم منفذ جسر ستُرسل عبره حزمة (للحزم المجسرة الداخلة إلى السلاسل FORWARD وPOSTROUTING). إذا انتهى اسم الواجهة بـ "+"، فإن أي واجهة تبدأ بهذا الاسم ستطابق.
- [!] --physdev-is-in
- يطابق إذا دخلت الحزمة عبر واجهة جسر.
- [!] --physdev-is-out
- يطابق إذا ستغادر الحزمة عبر واجهة جسر.
- [!] --physdev-is-bridged
- يطابق إذا كانت الحزمة تُجسر وبالتالي لا تُوجّه. هذا مفيد فقط في السلاسل FORWARD وPOSTROUTING.
pkttype¶
تطابق هذه الوحدة نوع حزمة طبقة الارتباط.
- [!] --pkt-type {unicast|broadcast|multicast}
policy¶
تطابق هذه الوحدة السياسة المستخدمة من قبل IPsec لمعالجة حزمة.
- --dir {in|out}
- يُستخدم لتحديد ما إذا كانت المطابقة للسياسة المستخدمة لفك التغليف أو السياسة التي ستُستخدم للتغليف. in صالح في السلاسل PREROUTING, INPUT و FORWARD، و out صالح في السلاسل POSTROUTING, OUTPUT و FORWARD.
- --pol {none|ipsec}
- يطابق إذا كانت الحزمة خاضعة لمعالجة IPsec. لا يمكن دمج --pol none مع --strict.
- --strict
- يختار ما إذا كانت المطابقة للسياسة الدقيقة أو المطابقة إذا تطابقت أي قاعدة من السياسة مع السياسة المعطاة.
لكل عنصر سياسة سيتم وصفه، يمكن استخدام خيار واحد أو أكثر من الخيارات التالية. عندما يكون --strict ساري المفعول، يجب استخدام خيار واحد على الأقل لكل عنصر.
- [!] --reqid id
- يطابق reqid لقاعدة السياسة. يمكن تحديد reqid باستخدام setkey(8) مع unique:id كمستوى.
- [!] --spi spi
- يطابق SPI لـ SA.
- [!] --proto {ah|esp|ipcomp}
- يطابق بروتوكول التغليف.
- [!] --mode {tunnel|transport}
- يطابق وضع التغليف.
- [!] --tunnel-src addr[/mask]
- يطابق عنوان نقطة النهاية المصدر لـ SA في وضع النفق. صالح فقط مع --mode tunnel.
- [!] --tunnel-dst addr[/mask]
- يطابق عنوان نقطة النهاية الوجهة لـ SA في وضع النفق. صالح فقط مع --mode tunnel.
- --next
- ابدأ العنصر التالي في مواصفات السياسة. يمكن استخدامه فقط مع --strict.
quota¶
ينفذ حصص الشبكة عن طريق إنقاص عداد بايت مع كل حزمة. يطابق الشرط حتى يصل عداد البايت إلى الصفر. يُعكس السلوك مع النفي (أي لا يطابق الشرط حتى يصل عداد البايت إلى الصفر).
- [!] --quota بايت
- الحصة بالبايت.
مقدر المعدل¶
يمكن لمقدر المعدل المطابقة على المعدلات المقدرة كما تُجمع بواسطة هدف RATEEST. يدعم المطابقة على قيم bps/pps المطلقة، ومقارنة مقدرَي معدل، والمطابقة على الفرق بين مقدرَي معدل.
لفهم أفضل للخيارات المتاحة، هذه كل التركيبات الممكنة:
- مطلق:
- rateest عامل rateest-bps
- rateest عامل rateest-pps
- مطلق + دلتا:
- (rateest ناقص rateest-bps1) عامل rateest-bps2
- (rateest ناقص rateest-pps1) عامل rateest-pps2
- نسبي:
- rateest1 عامل rateest2 rateest-bps(بدون معدل!)
- rateest1 عامل rateest2 rateest-pps(بدون معدل!)
- نسبي + دلتا:
- (rateest1 ناقص rateest-bps1) عامل (rateest2 ناقص rateest-bps2)
- (rateest1 ناقص rateest-pps1) عامل (rateest2 ناقص rateest-pps2)
- --rateest-delta
- لكل مقدر (سواء في الوضع المطلق أو النسبي)، يُحسب الفرق بين معدل التدفق الذي يحدده المقدر والقيمة الثابتة المختارة مع خيارات BPS/PPS. إذا كان معدل التدفق أعلى من BPS/PPS المحدد، يُستخدم 0 بدلاً من قيمة سالبة. بعبارة أخرى، يُستخدم "max(0, rateest#_rate - rateest#_bps)".
- [!] --rateest-lt
- يطابق إذا كان المعدل أقل من المعدل/المقدر المعطى.
- [!] --rateest-gt
- يطابق إذا كان المعدل أكبر من المعدل/المقدر المعطى.
- [!] --rateest-eq
- يطابق إذا كان المعدل مساوياً للمعدل/المقدر المعطى.
في ما يُسمى "الوضع المطلق"، يُستخدم مقدر معدل واحد فقط ويُقارن بقيمة ثابتة، بينما في "الوضع النسبي"، يُقارن مقدرا معدل ببعضهما البعض.
- --rateest الاسم
- اسم مقدر المعدل الواحد للوضع المطلق.
- --rateest1 الاسم
- --rateest2 الاسم
- اسما مقدرَي المعدل للوضع النسبي.
- --rateest-bps [القيمة]
- --rateest-pps [القيمة]
- --rateest-bps1 [القيمة]
- --rateest-bps2 [القيمة]
- --rateest-pps1 [القيمة]
- --rateest-pps2 [القيمة]
- قارن المقدر(ات) بالبايت أو الحزم في الثانية، وقارنها بالقيمة المختارة. انظر قائمة النقاط أعلاه لمعرفة أي خيار يُستخدم في أي حالة. يمكن استخدام لاحقة وحدة — المتاحة هي: bit, [kmgt]bit, [KMGT]ibit, Bps, [KMGT]Bps, [KMGT]iBps.
مثال: هذا ما يمكن استخدامه لتوجيه اتصالات البيانات الصادرة من خادم FTP عبر خطين بناءً على عرض النطاق الترددي المتاح وقت بدء اتصال البيانات:
# تقدير المعدلات الصادرة
iptables -t mangle -A POSTROUTING -o eth0 -j RATEEST --rateest-name eth0 --rateest-interval 250ms --rateest-ewma 0.5s
iptables -t mangle -A POSTROUTING -o ppp0 -j RATEEST --rateest-name ppp0 --rateest-interval 250ms --rateest-ewma 0.5s
# الوسم بناءً على عرض النطاق الترددي المتاح
iptables -t mangle -A balance -m conntrack --ctstate NEW -m helper --helper ftp -m rateest --rateest-delta --rateest1 eth0 --rateest-bps1 2.5mbit --rateest-gt --rateest2 ppp0 --rateest-bps2 2mbit -j CONNMARK --set-mark 1
iptables -t mangle -A balance -m conntrack --ctstate NEW -m helper --helper ftp -m rateest --rateest-delta --rateest1 ppp0 --rateest-bps1 2mbit --rateest-gt --rateest2 eth0 --rateest-bps2 2.5mbit -j CONNMARK --set-mark 2
iptables -t mangle -A balance -j CONNMARK --restore-mark
realm (خاص بـ IPv4)¶
يطابق عالم التوجيه. تُستخدم عوالم التوجيه في إعدادات التوجيه المعقدة التي تتضمن بروتوكولات توجيه ديناميكية مثل BGP.
- [!] --realm قيمة[/قناع]
- يطابق رقم عالم معين (وقناع اختياري). إذا لم يكن رقمًا، يمكن أن تكون القيمة عالمًا مسمى من /etc/iproute2/rt_realms (لا يمكن استخدام القناع في هذه الحالة). كل من القيمة والقناع هما عددان صحيحان غير موقعين بأربعة بايت ويمكن تحديدهما بالنظام العشري، أو السداسي عشري (بالبادئة "0x") أو الثماني (إذا أُعطي صفر بادئ).
recent¶
يسمح لك بإنشاء قائمة بعناوين IP ديناميكيًا ثم المطابقة ضد تلك القائمة بعدة طرق مختلفة.
على سبيل المثال، يمكنك إنشاء قائمة "أشرار" من الأشخاص الذين يحاولون الاتصال بالمنفذ 139 على جدار الحماية الخاص بك ثم إسقاط جميع الحزم المستقبلية منهم دون اعتبارهم.
--set و --rcheck و --update و --remove متنافية.
- --name اسم
- حدد القائمة لاستخدامها للأوامر. إذا لم يُعطَ اسم، فسيُستخدم DEFAULT.
- [!] --set
- سيُضيف عنوان المصدر للحزمة إلى القائمة. إذا كان عنوان المصدر موجودًا بالفعل في القائمة، فسيُحدّث الإدخال الحالي. سيعيد هذا دائمًا النجاح (أو الفشل إذا مُرر !).
- --rsource
- مطابقة/حفظ عنوان المصدر لكل حزمة في جدول القائمة الحديثة. هذا هو المبدئي.
- --rdest
- مطابقة/حفظ عنوان الوجهة لكل حزمة في جدول القائمة الحديثة.
- --mask netmask
- قناع الشبكة الذي يُطبق على هذه القائمة الحديثة.
- [!] --rcheck
- تحقق مما إذا كان عنوان المصدر للحزمة موجودًا حاليًا في القائمة.
- [!] --update
- مثل --rcheck، باستثناء أنه يُحدّث الطابع الزمني لـ"آخر مشاهدة" إذا تطابق.
- [!] --remove
- تحقق مما إذا كان عنوان المصدر للحزمة موجودًا حاليًا في القائمة، وإذا كان كذلك، يُزال ذلك العنوان من القائمة وتُعيد القاعدة قيمة صواب. إذا لم يُعثر على العنوان، تُعاد قيمة خطأ.
- --seconds seconds
- يجب استخدام هذا الخيار مع أحد --rcheck أو --update. عند استخدامه، يُضيّق المطابقة لتحدث فقط عندما يكون العنوان في القائمة وشوهد خلال آخر عدد محدد من الثواني.
- --reap
- يمكن استخدام هذا الخيار فقط مع --seconds. عند استخدامه، يؤدي ذلك إلى تطهير الإدخالات الأقدم من آخر عدد محدد من الثواني.
- --hitcount hits
- يجب استخدام هذا الخيار مع أحد --rcheck أو --update. عند استخدامه، يُضيّق المطابقة لتحدث فقط عندما يكون العنوان في القائمة وتكون الحزم قد استُقبلت بقيمة أكبر من أو تساوي القيمة المعطاة. يمكن استخدام هذا الخيار مع --seconds لإنشاء مطابقة أضيق تتطلب عددًا معينًا من الزيارات ضمن إطار زمني محدد.
- --rttl
- يمكن استخدام هذا الخيار فقط مع أحد --rcheck أو --update. عند استخدامه، يُضيّق المطابقة لتحدث فقط عندما يكون العنوان في القائمة ويتطابق TTL للحزمة الحالية مع تلك الخاصة بالحزمة التي أصابت قاعدة --set. قد يكون هذا مفيدًا إذا كانت لديك مشكلات مع أشخاص يزورون عنوان مصدرهم لتعطيل خدمتك عبر هذه الوحدة بمنع الآخرين من الوصول إلى موقعك عن طريق إرسال حزم مزيفة إليك.
أمثلة:
- iptables -A FORWARD -m recent --name badguy --rcheck --seconds 60 -j DROP
- iptables -A FORWARD -p tcp -i eth0 --dport 139 -m recent --name badguy --set -j DROP
/proc/net/xt_recent/* هي القوائم الحالية للعناوين والمعلومات حول كل مدخل من كل قائمة.
يمكن قراءة كل ملف في /proc/net/xt_recent/ لعرض القائمة الحالية أو كتابته باستخدام الأوامر التالية لتعديل القائمة:
- echo +addr >/proc/net/xt_recent/DEFAULT
- لإضافة addr إلى القائمة DEFAULT
- echo -addr >/proc/net/xt_recent/DEFAULT
- لإزالة addr من القائمة DEFAULT
- echo / >/proc/net/xt_recent/DEFAULT
- لتفريغ القائمة DEFAULT (إزالة جميع المدخلات).
تقبل الوحدة نفسها معاملات، المبدئيات موضحة:
- ip_list_tot=100
- عدد العناوين المتذكرة لكل جدول.
- ip_pkt_list_tot=0
- عدد الحزم لكل عنوان متذكر. هذا المعامل مهمل منذ إصدار النواة 3.19 الذي بدأ بحساب حجم الجدول بناءً على المعامل --hitcount المعطى.
- ip_list_hash_size=0
- حجم جدول التجزئة. 0 يعني حسابه بناءً على ip_list_tot بتقريبه لأعلى إلى القوة التالية من اثنين (مع مبدئية ip_list_tot إلى 100، سيحسب ip_list_hash_size إلى 128 مبدئيًا).
- ip_list_perms=0644
- أذونات ملفات /proc/net/xt_recent/*.
- ip_list_uid=0
- UID الرقمي لملكية ملفات /proc/net/xt_recent/*.
- ip_list_gid=0
- GID الرقمي لملكية ملفات /proc/net/xt_recent/*.
rpfilter¶
ينفذ اختبار مرشح المسار العكسي على حزمة. إذا أُرسل رد على الحزمة عبر نفس الواجهة التي وصلت منها الحزمة، فستطابق الحزمة. لاحظ أنه، على عكس rp_filter داخل النواة، لا تُعامل الحزم المحمية بواسطة IPSec بشكل خاص. ادمج هذه المطابقة مع مطابقة السياسة إذا أردت ذلك. أيضًا، الحزم الواصلة عبر واجهة الاسترجاع مسموح بها دائمًا. يمكن استخدام هذه المطابقة فقط في سلسلة PREROUTING لجدول raw أو mangle.
- --loose
- يُستخدم لتحديد أن اختبار مرشح المسار العكسي يجب أن يطابق حتى لو لم يكن جهاز الإخراج المحدد هو المتوقع.
- --validmark
- استخدم أيضًا قيمة nfmark للحزم عند إجراء بحث مسار المسار العكسي.
- --accept-local
- سيسمح هذا بالحزم الواصلة من الشبكة بعنوان مصدر مُخصص أيضًا للجهاز المحلي.
- --invert
- سيعكس هذا معنى المطابقة. بدلاً من مطابقة الحزم التي اجتازت اختبار مرشح المسار العكسي، تطابق تلك التي فشلت فيه.
مثال لتسجيل وإسقاط الحزم الفاشلة في اختبار مرشح المسار العكسي:
iptables -t raw -N RPFILTER
iptables -t raw -A RPFILTER -m rpfilter -j RETURN
iptables -t raw -A RPFILTER -m limit --limit 10/minute -j NFLOG --nflog-prefix "rpfilter drop"
iptables -t raw -A RPFILTER -j DROP
iptables -t raw -A PREROUTING -j RPFILTER
مثال لإسقاط الحزم الفاشلة، بدون تسجيل:
iptables -t raw -A RPFILTER -m rpfilter --invert -j DROP
rt (خاص بـ IPv6)¶
طابق على رأس التوجيه IPv6
- [!] --rt-type type
- طابق النوع (رقمي).
- [!] --rt-segsleft num[:num]
- طابق حقل `القطاعات المتبقية' (نطاق).
- [!] --rt-len length
- طابق طول هذا الرأس.
- --rt-0-res
- طابق الحقل المحجوز أيضًا (type=0)
- --rt-0-addrs addr[,addr...]
- طابق عناوين type=0 (قائمة).
- --rt-0-not-strict
- قائمة عناوين type=0 ليست قائمة صارمة.
sctp¶
تطابق هذه الوحدة رؤوس بروتوكول نقل التحكم في التدفق.
- [!] --source-port,--sport منفذ[:منفذ]
- [!] --destination-port,--dport منفذ[:منفذ]
- [!] --chunk-types {all|any|only} chunktype[:flags] [...]
- يشير حرف
العلم
بالأحرف
الكبيرة
إلى أن
العلم يجب
أن يطابق
إذا كان
مضبوطًا،
وبالأحرف
الصغيرة
يشير إلى
المطابقة
إذا لم يكن
مضبوطًا.
أنواع المطابقة:
- all
- طابق إذا كانت جميع أنواع القطع المعطاة موجودة وتطابق الأعلام.
- any
- طابق إذا كان أي من أنواع القطع المعطاة موجوداً مع الأعلام المعطاة.
- فقط
- طابق إذا
كانت أنواع
القطع
المعطاة
فقط موجودة
مع الأعلام
المعطاة
ولا يوجد أي
منها مفقود.
أنواع القطع: DATA INIT INIT_ACK SACK HEARTBEAT HEARTBEAT_ACK ABORT SHUTDOWN SHUTDOWN_ACK ERROR COOKIE_ECHO COOKIE_ACK ECN_ECNE ECN_CWR SHUTDOWN_COMPLETE I_DATA RE_CONFIG PAD ASCONF ASCONF_ACK FORWARD_TSN I_FORWARD_TSN
الأعلام المتاحة لنوع القطعة
DATA I U B E i u b e
I_DATA I U B E i u b e
ABORT T t
SHUTDOWN_COMPLETE T t(الأحرف الصغيرة تعني أن العلم يجب أن يكون "مطفأً"، والأحرف الكبيرة تعني "مضاءً")
أمثلة:
iptables -A INPUT -p sctp --dport 80 -j DROP
iptables -A INPUT -p sctp --chunk-types any DATA,INIT -j DROP
iptables -A INPUT -p sctp --chunk-types any DATA:Be -j ACCEPT
مجموعة¶
تطابق هذه الوحدة مجموعات IP التي يمكن تعريفها بواسطة ipset(8).
- [!] --match-set اسم_المجموعة علم[,علم]...
- حيث الأعلام هي قائمة مفصولة بفواصل من مواصفات src و/أو dst ولا يمكن أن يكون هناك أكثر من ستة منها. وبالتالي الأمر
-
iptables -A FORWARD -m set --match-set test src,dst - سيطابق الحزم التي يمكن العثور فيها (إذا كان نوع المجموعة هو ipportmap) على زوج عنوان المصدر ومنفذ الوجهة في المجموعة المحددة. إذا كان نوع المجموعة المحددة أحادي البعد (مثلاً ipmap)، فسيطابق الأمر الحزم التي يمكن العثور على عنوان المصدر فيها في المجموعة المحددة.
- --return-nomatch
- إذا تم تحديد الخيار --return-nomatch وكان نوع المجموعة يدعم العلم nomatch، فإن المطابقة تُعكس: المطابقة مع عنصر مُعلّم بـ nomatch تُرجع true، بينما المطابقة مع عنصر عادي تُرجع false.
- ! --update-counters
- إذا تم نفي العلم --update-counters، فإن عدادات الحزم والبايتات للعنصر المطابق في المجموعة لن تُحدّث. مبدئيًا، تُحدّث عدادات الحزم والبايتات.
- ! --update-subcounters
- إذا تم نفي العلم --update-subcounters، فإن عدادات الحزم والبايتات للعنصر المطابق في المجموعة العضو من مجموعة من نوع قائمة لن تُحدّث. مبدئيًا، تُحدّث عدادات الحزم والبايتات.
- [!] --packets-eq قيمة
- إذا طابقت الحزمة عنصرًا في المجموعة، طابق فقط إذا طابق عداد حزم العنصر القيمة المعطاة أيضًا.
- --packets-lt قيمة
- إذا طابقت الحزمة عنصرًا في المجموعة، طابق فقط إذا كان عداد حزم العنصر أقل من القيمة المعطاة أيضًا.
- --packets-gt قيمة
- إذا طابقت الحزمة عنصرًا في المجموعة، طابق فقط إذا كان عداد حزم العنصر أكبر من القيمة المعطاة أيضًا.
- [!] --bytes-eq قيمة
- إذا طابقت الحزمة عنصرًا في المجموعة، طابق فقط إذا طابق عداد بايتات العنصر القيمة المعطاة أيضًا.
- --bytes-lt قيمة
- إذا طابقت الحزمة عنصرًا في المجموعة، طابق فقط إذا كان عداد بايتات العنصر أقل من القيمة المعطاة أيضًا.
- --bytes-gt قيمة
- إذا طابقت الحزمة عنصرًا في المجموعة، طابق فقط إذا كان عداد بايتات العنصر أكبر من القيمة المعطاة أيضًا.
يتم تجاهل الخيارات والأعلام المتعلقة بعدادات الحزم والبايتات عندما تم تعريف المجموعة بدون دعم العداد.
يمكن استبدال الخيار --match-set بـ --set إذا لم يتعارض ذلك مع خيار من الإضافات الأخرى.
استخدام -m set يتطلب توفير دعم ipset في النواة، وهو متاح للنوى القياسية منذ Linux 2.6.39.
socket¶
يطابق هذا إذا أمكن العثور على مقبس TCP/UDP مفتوح عن طريق إجراء بحث عن المقبس على الحزمة. يطابق إذا كان هناك مقبس استماع مرتبط بقيمة غير صفرية أو قائم (ربما بعنوان غير محلي). يتم البحث باستخدام مجموعة packet لحزم TCP/UDP، أو رأس TCP/UDP الأصلي embedded في حزمة خطأ ICMP/ICPMv6.
- --transparent
- تجاهل المقابس غير الشفافة.
- --nowildcard
- لا تتجاهل المقابس المرتبطة بعنوان 'any'. لن يقبل تطابق المقبس المستمعين المرتبطين بقيمة صفرية مبدئيًا، لأن الخدمات المحلية قد تعترض حركة المرور التي كان سيتم توجيهها بخلاف ذلك. لذلك، لهذا الخيار آثار أمنية عند استخدامه لمطابقة حركة المرور الموجهة لإعادة توجيه هذه الحزم إلى الجهاز المحلي باستخدام التوجيه السياسي. عند استخدام تطابق المقبس لتنفيذ وكلاء شفافين بالكامل مرتبطين بعناوين غير محلية، يُوصى باستخدام الخيار --transparent بدلاً من ذلك.
مثال (بافتراض أن الحزم ذات العلامة 1 تُسلم محليًا):
- -t mangle -A PREROUTING -m socket --transparent -j MARK --set-mark 1
- --restore-skmark
- اضبط علامة الحزمة على علامة المقبس المطابق. يمكن دمجه مع الخيارين --transparent و--nowildcard لتقييد المقابس التي سيتم مطابقتها عند استعادة علامة الحزمة.
مثال: يفتح تطبيق مقبسين شفافين (IP_TRANSPARENT) ويضبط علامة عليهما باستخدام خيار المقبس SO_MARK. يمكننا تصفية الحزم المطابقة:
- -t mangle -I PREROUTING -m socket --transparent --restore-skmark -j action
- -t mangle -A action -m mark --mark 10 -j action2
- -t mangle -A action -m mark --mark 11 -j action3
state¶
إضافة "state" هي مجموعة فرعية من وحدة "conntrack". تسمح "state" بالوصول إلى حالة تتبع الاتصال لهذه الحزمة.
- [!] --state state
- حيث state هي قائمة مفصولة بفواصل من حالات الاتصال للمطابقة. يتم التعرف فقط على مجموعة فرعية من الحالات التي تفهمها "conntrack": INVALID وESTABLISHED وNEW وRELATED أو UNTRACKED. لوصفها، انظر عنوان "conntrack" في دليل الصفحة هذا.
statistic¶
تطابق هذه الوحدة الحزم بناءً على شرط إحصائي معين. تدعم وضعين متميزين يمكن ضبطهما باستخدام الخيار --mode.
الخيارات المدعومة:
- --mode الطور
- اضبط وضع المطابقة لقاعدة المطابقة، الأوضاع المدعومة هي random و nth.
- [!] --probability p
- اضبط احتمال مطابقة حزمة عشوائيًا. يعمل فقط مع وضع random. يجب أن يكون p بين 0.0 و 1.0. الدقة المدعومة هي بزيادات 1/2147483648.
- [!] --every n
- طابق حزمة واحدة كل n حزمة. يعمل فقط مع وضع nth (انظر أيضًا خيار --packet).
- --packet p
- اضبط قيمة العداد الأولية (0 <= p <= n-1، المبدئي 0) لوضع nth.
سلسلة¶
يطابق هذا الوحدة سلسلة معينة باستخدام استراتيجية مطابقة نمط. يتطلب نواة لينكس >= 2.6.14.
- --algo {bm|kmp}
- اختر استراتيجية مطابقة النمط. (bm = Boyer-Moore، kmp = Knuth-Pratt-Morris)
- --from offset
- اضبط الإزاحة التي يبدأ منها البحث عن أي تطابق. إذا لم يُمرر، المبدئي هو 0.
- --to offset
- اضبط الإزاحة التي يجب المسح حتىها. أي، البايت offset (العد من 0) هو آخر بايت يُمسح والموضع الأقصى لآخر حرف في pattern. إذا لم يُمرر، المبدئي هو حجم الحزمة.
- [!] --string pattern
- يطابق النمط المعطى.
- [!] --hex-string pattern
- يطابق النمط المعطى بترميز سداسي عشري.
- --icase
- تجاهل حالة الأحرف عند البحث.
- أمثلة:
- # يمكن
استخدام
نمط
السلسلة
للأحرف
النصية
البسيطة.
iptables -A INPUT -p tcp --dport 80 -m string --algo bm --string 'GET /index.html' -j LOG - # يمكن
استخدام
نمط
السلسلة
السداسية
للأحرف غير
القابلة
للطباعة،
مثل |0D 0A| أو |0D0A|.
iptables -p udp --dport 53 -m string --algo bm --from 40 --to 57 --hex-string '|03|www|09|netfilter|03|org|00|'
ملاحظة: نظرًا لأن Boyer-Moore (BM) يُجري عمليات بحث عن التطابقات من اليمين إلى اليسار وقد يُخزّن النواة حزمة في عدة كتل غير متجاورة، فمن الممكن أن تكون المطابقة موزعة على عدة كتل، وفي هذه الحالة لن تجدها هذه الخوارزمية.
إذا كنت ترغب في ضمان عدم حدوث مثل هذا الأمر أبدًا، فاستخدم خوارزمية Knuth-Pratt-Morris (KMP) بدلاً من ذلك. في الختام، اختر خوارزمية البحث عن السلسلة المناسبة وفقًا لحالة الاستخدام الخاصة بك.
على سبيل المثال، إذا كنت تستخدم الوحدة للتصفية أو NIDS أو أي غرض مشابه يركز على الأمان، فاختر KMP. من ناحية أخرى، إذا كنت تهتم حقًا بالأداء — على سبيل المثال، تُصنف الحزم لتطبيق سياسات جودة الخدمة (QoS) — ولا تمانع في فقدان التطابقات المحتملة الموزعة على عدة أجزاء، فاختر BM.
tcp¶
يمكن استخدام هذه الامتدادات إذا تم تحديد `--protocol tcp`. توفر الخيارات التالية:
- [!] --source-port,--sport منفذ[:منفذ]
- تحديد منفذ المصدر أو نطاق المنافذ. يمكن أن يكون اسم خدمة أو رقم منفذ. يمكن أيضًا تحديد نطاق شامل باستخدام التنسيق first:last. إذا تم حذف المنفذ الأول، يُفترض "0"؛ إذا تم حذف الأخير، يُفترض "65535". العلامة --sport هي اسم مستعار مناسب لهذا الخيار.
- [!] --destination-port,--dport منفذ[:منفذ]
- تحديد منفذ الوجهة أو نطاق المنافذ. العلامة --dport هي اسم مستعار مناسب لهذا الخيار.
- [!] --tcp-flags mask comp
- المطابقة
عندما تكون
أعلام TCP كما
هو محدد.
الوسيطة
الأولى mask
هي الأعلام
التي يجب
فحصها،
مكتوبة
كقائمة
مفصولة
بفواصل،
والوسيطة
الثانية comp
هي قائمة
مفصولة
بفواصل من
الأعلام
التي يجب
تعيينها.
الأعلام هي:
SYN ACK FIN RST URG PSH ALL NONE.
وبالتالي
الأمر
سيتطابق فقط مع الحزم التي تحتوي على علم SYN مضبوطًا، وأعلام ACK وFIN وRST غير مضبوطة.
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN - [!] --syn
- تطابق فقط حزم TCP مع تعيين بت SYN ومسح بتات ACK وRST وFIN. تُستخدم هذه الحزم لطلب بدء اتصال TCP؛ على سبيل المثال، حظر مثل هذه الحزم القادمة إلى واجهة سيمنع اتصالات TCP الواردة، لكن اتصالات TCP الصادرة لن تتأثر. هذا مكافئ لـ --tcp-flags SYN,RST,ACK,FIN SYN. إذا سبقت العلامة "!" الخيار "--syn"، يُعكس معنى الخيار.
- [!] --tcp-option number
- المطابقة إذا تم تعيين خيار TCP.
tcpmss¶
يطابق هذا حقل MSS (الحجم الأقصى للقطعة) لرأس TCP. يمكنك استخدام هذا فقط على حزم TCP SYN أو SYN/ACK، حيث أن MSS يتم التفاوض عليه فقط أثناء المصافحة TCP عند بدء الاتصال.
- [!] --mss قيمة[:قيمة]
- يطابق قيمة أو نطاق MSS معين لـ TCP. إذا تم تحديد نطاق، يجب أن تكون القيمة الثانية أكبر من أو تساوي القيمة الأولى.
time¶
يطابق هذا إذا كان وقت/تاريخ وصول الحزمة ضمن نطاق معين. جميع الخيارات اختيارية، ولكن يتم دمجها بعملية AND عند تحديدها. جميع الأوقات تُفسر كـ UTC بشكل مبدئي.
- --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
- --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
- يطابق فقط خلال الوقت المحدد، والذي يجب أن يكون بترميز ISO 8601 "T". النطاق الزمني الممكن هو 1970-01-01T00:00:00 إلى 2038-01-19T04:17:07.
- إذا لم يتم تحديد --datestart أو --datestop، فسيتم المبدئي إلى 1970-01-01 و 2038-01-19 على التوالي.
- --timestart ساعة:دقيقة[:ثانية]
- --timestop ساعة:دقيقة[:ثانية]
- يطابق فقط خلال الوقت النهاري المحدد. النطاق الزمني الممكن هو 00:00:00 إلى 23:59:59. الأصفار البادئة مسموح بها (مثل "06:03") ويتم تفسيرها بشكل صحيح كأساس-10.
- [!] --monthdays يوم[,يوم...]
- يطابق فقط في الأيام المحددة من الشهر. القيم الممكنة هي 1 إلى 31. لاحظ أن تحديد 31 لن يطابق بالطبع الأشهر التي لا تحتوي على يوم 31؛ نفس الشيء ينطبق على فبراير الذي يحتوي على 28 أو 29 يومًا.
- [!] --weekdays يوم[,يوم...]
- يطابق فقط في أيام الأسبوع المحددة. القيم الممكنة هي Mon، Tue، Wed، Thu، Fri، Sat، Sun، أو القيم من 1 إلى 7 على التوالي. يمكنك أيضًا استخدام متغيرات مكونة من حرفين (Mo، Tu، إلخ).
- --contiguous
- عندما تكون --timestop أصغر من قيمة --timestart، يطابق هذا كفترة زمنية واحدة بدلاً من فترات زمنية منفصلة. انظر الأمثلة.
- --kerneltz
- استخدم المنطقة الزمنية للنواة بدلاً من UTC لتحديد ما إذا كانت الحزمة تفي باللوائح الزمنية.
حول المناطق الزمنية للنواة: يحتفظ لينكس بوقت النظام بصيغة UTC، ويفعل ذلك دائمًا. عند الإقلاع، يتم تهيئة وقت النظام من مصدر زمني مرجعي. حيث لا يحتوي هذا المصدر الزمني على معلومات المنطقة الزمنية، مثل ساعة RTC CMOS x86، سيتم افتراض UTC. إذا كان المصدر الزمني ليس بصيغة UTC، يجب على مساحة المستخدم توفير وقت النظام الصحيح والمنطقة الزمنية للنواة بمجرد حصولها على المعلومات.
الوقت المحلي هو ميزة فوق وقت النظام (المستقل عن المنطقة الزمنية). لكل عملية فكرتها الخاصة عن الوقت المحلي، المحدد عبر متغير البيئة TZ. للنواة أيضًا متغير إزاحة المنطقة الزمنية الخاص بها. يحدد متغير بيئة المستخدم TZ كيفية عرض وقت النظام المعتمد على UTC، مثلًا عند تشغيل date(1)، أو ما تراه على ساعة سطح المكتب. قد يتحلل سلسلة TZ إلى إزاحات مختلفة في تواريخ مختلفة، وهو ما يُمكن القفز الزمني الآلي في مساحة المستخدم عند تغيير التوقيت الصيفي. يُستخدم متغير إزاحة المنطقة الزمنية للنواة عندما تحتاج للتحويل بين مصادر غير UTC، مثل أنظمة ملفات FAT، إلى UTC (لأن الأخير هو ما يستخدمه باقي النظام).
التحذير بشأن المنطقة الزمنية للنواة هو أن توزيعات لينكس قد تتجاهل تعيين المنطقة الزمنية للنواة، وبدلًا من ذلك تعين وقت النظام فقط. حتى لو قامت توزيعة معينة بتعيين المنطقة الزمنية عند الإقلاع، فإنها عادة لا تُبقي إزاحة المنطقة الزمنية للنواة — والتي تتغير مع التوقيت الصيفي — محدثة. لن يلمس ntpd المنطقة الزمنية للنواة، لذا تشغيله لن يحل المشكلة. وبناءً عليه، قد يواجه المرء منطقة زمنية دائمًا +0000، أو منطقة خاطئة نصف العام. ولهذا، يُثبط بشدة استخدام --kerneltz.
أمثلة. للمطابقة في عطلات نهاية الأسبوع، استخدم:
- -m time --weekdays Sa,Su
أو، للمطابقة (مرة واحدة) في كتلة عطلة وطنية:
- -m time --datestart 2007-12-24 --datestop 2007-12-27
بما أن وقت الإيقاف شامل فعليًا، ستحتاج إلى وقت الإيقاف التالي لعدم مطابقة الثانية الأولى من اليوم الجديد:
- -m time --datestart 2007-01-01T17:00 --datestop 2007-01-01T23:59:59
خلال ساعة الغداء:
- -m time --timestart 12:30 --timestop 13:30
الجمعة الرابعة في الشهر:
- -m time --weekdays Fr --monthdays 22,23,24,25,26,27,28
(لاحظ أن هذا يستغل خاصية رياضية معينة. ليس من الممكن قول "الخميس الرابع أو الجمعة الرابعة" في قاعدة واحدة. لكنه ممكن مع قواعد متعددة.)
المطابقة عبر الأيام قد لا تفعل ما هو متوقع. على سبيل المثال،
- -m time --weekdays Mo --timestart 23:00 --timestop 01:00 سيطابق الاثنين، لمدة ساعة من منتصف الليل إلى 1 صباحًا، ثم مرة أخرى لمدة ساعة أخرى من 23:00 فصاعدًا. إذا كان هذا غير مرغوب، مثلًا إذا كنت تريد 'مطابقة لمدة ساعتين من الاثنين 23:00 فصاعدًا'، تحتاج أيضًا إلى تحديد الخيار --contiguous في المثال أعلاه.
tos¶
تطابق هذه الوحدة حقل نوع الخدمة ذو 8 بت في رأس IPv4 (أي بما في ذلك بتات "الأسبقية") أو حقل الأولوية (أيضًا 8 بت) في رأس IPv6.
- [!] --tos قيمة[/قناع]
- يطابق الحزم بقيمة علامة TOS المعطاة. إذا تم تحديد قناع، يتم إجراء عملية AND منطقية مع علامة TOS قبل المقارنة.
- [!] --tos رمز
- يمكنك تحديد اسم رمزي عند استخدام مطابقة tos لـ IPv4. يمكن الحصول على قائمة أسماء TOS المعترف بها باستدعاء iptables مع -m tos -h. لاحظ أن هذا يستلزم قناعًا بقيمة 0x3F، أي جميع البتات باستثناء بتات ECN.
ttl (خاص بـ IPv4)¶
تطابق هذه الوحدة حقل وقت الحياة في رأس IP.
- [!] --ttl-eq ttl
- تطابق قيمة TTL المعطاة.
- --ttl-gt ttl
- تطابق إذا كانت TTL أكبر من قيمة TTL المعطاة.
- --ttl-lt ttl
- تطابق إذا كانت TTL أقل من قيمة TTL المعطاة.
u32¶
تختبر U32 ما إذا كانت الكميات المستخرجة من حزمة حتى 4 بايتات لها قيم محددة. مواصفات ما يُستخرج عامة بما يكفي لإيجاد بيانات عند إزاحات معينة من رؤوس TCP أو حمولاتها.
- [!] --u32 اختبارات
- الوسيطة تعادل برنامجًا بلغة صغيرة موصوفة أدناه.
- اختبارات := موقع "=" قيمة | اختبارات "&&" موقع "=" قيمة
- قيمة := نطاق | قيمة "," نطاق
- نطاق := رقم | رقم ":" رقم
رقم واحد، n، يُفسر مثل n:n. n:m يُفسر كنطاق الأرقام >=n و <=m.
- موقع := رقم | موقع عامل رقم
- عامل := "&" | "<<" | ">>" | "@"
العوامل & و << و >> و && تعني نفس المعنى في C. = هو في الواقع عامل انتماء مجموعة وبناء القيمة يصف مجموعة. العامل @ هو ما يسمح بالانتقال إلى الرأس التالي ويُوصف بمزيد من التفصيل أدناه.
توجد حاليًا بعض الحدود الاصطناعية في التنفيذ على حجم الاختبارات:
- *
- لا يزيد عن 10 من "=" (و 9 من "&&") في وسيط u32
- *
- لا يزيد عن 10 نطاقات (و 9 فواصل) لكل قيمة
- *
- لا يزيد عن 10 أرقام (و 9 عوامل تشغيل) لكل موقع
لوصف معنى الموقع، تخيل الآلة التالية التي تفسره. هناك ثلاثة سجلات:
- A من النوع char *، مبدئيًا عنوان رأس IP
- B و C عددان صحيحان غير موقعين 32 بت، مبدئيًا صفر
التعليمات هي:
- رقم
- B = رقم;
- C = (*(A+B)<<24) + (*(A+B+1)<<16) + (*(A+B+2)<<8) + *(A+B+3)
- &رقم
- C = C & رقم
- << رقم
- C = C << رقم
- >> رقم
- C = C >> رقم
- @رقم
- A = A + C; ثم نفذ التعليمات رقم
أي وصول للذاكرة خارج [skb->data,skb->end] يتسبب في فشل المطابقة. وإلا فإن نتيجة الحساب هي القيمة النهائية لـ C.
المسافات البيضاء مسموح بها ولكنها غير مطلوبة في الاختبارات. ومع ذلك، فإن الأحرف التي تظهر هناك قد تتطلب اقتباس الصدفة، لذا من الجيد وضع الوسائط بين علامتي اقتباس.
مثال:
- مطابقة حزم IP ذات الطول الإجمالي >= 256
- يحتوي رأس IP على حقل الطول الإجمالي في البايتات 2–3.
- --u32 "0 & 0xFFFF = 0x100:0xFFFF"
- قراءة البايتات 0–3
- ثم إجراء عملية AND مع 0xFFFF (لإعطاء البايتات 2–3)، واختبار ما إذا كان ذلك ضمن النطاق [0x100:0xFFFF]
مثال: (أكثر واقعية، وبالتالي أكثر تعقيداً)
- مطابقة حزم ICMP ذات النوع icmp 0
- الاختبار الأول بأنها حزمة ICMP، صحيح إذا وفقط إذا كان البايت 9 (البروتوكول) = 1
- --u32 "6 & 0xFF = 1 && ...
- قراءة البايتات 6–9، استخدام & لتجاهل البايتات 6–8 ومقارنة النتيجة بـ 1. الاختبار التالي بأنها ليست جزءاً. (إذا كانت كذلك، فقد تكون جزءاً من حزمة كهذه لكن لا يمكننا الجزم دائماً.) ملاحظة: هذا الاختبار ضروري عموماً إذا أردت مطابقة أي شيء يتجاوز رأس IP. آخر 6 بتات من البايت 6 وكل البايت 7 تكون 0 إذا وفقط إذا كانت هذه حزمة كاملة (وليست جزءاً). بدلاً من ذلك، يمكنك السماح بالأجزاء الأولى باختبار آخر 5 بتات فقط من البايت 6.
- ... 4 & 0x3FFF = 0 && ...
- الاختبار الأخير: البايت الأول بعد رأس IP (النوع) هو 0. هنا يجب استخدام بناء الجملة @. طول رأس IP (IHL) بكلمات 32 بت يُخزّن في النصف الأيمن من البايت 0 من رأس IP نفسه.
- ... 0 >> 22 & 0x3C @ 0 >> 24 = 0"
- الـ 0 الأولى تعني قراءة البايتات 0–3، >>22 تعني إزاحة ذلك 22 بتاً لليمين. إزاحة 24 بتاً ستعطي البايت الأول، لذا 22 بتاً فقط هي أربعة أضعاف ذلك بالإضافة إلى بضع بتات إضافية. &3C ثم تزيل البتتين الإضافيتين على اليمين وأول أربع بتات من البايت الأول. على سبيل المثال، إذا كان IHL=5، فإن رأس IP طوله 20 (4 × 5) بايت. في هذه الحالة، البايتات 0–1 هي (بالثنائي) xxxx0101 yyzzzzzz، >>22 تعطي القيمة ذات 10 بتات xxxx0101yy و &3C تعطي 010100. @ تعني استخدام هذا الرقم كإزاحة جديدة في الحزمة، وقراءة أربعة بايتات تبدأ من هناك. هذه هي أول 4 بايتات من حمولة ICMP، والتي البايت 0 منها هو نوع ICMP. لذلك، نقوم ببساطة بإزاحة القيمة 24 بتاً لليمين لتجاهل كل شيء عدا البايت الأول ومقارنة النتيجة بـ 0.
مثال:
- البايتات 8–12 من حمولة TCP هي أي من 1، 2، 5 أو 8
- أولاً نختبر أن الحزمة هي حزمة tcp (مشابهة لـ ICMP).
- --u32 "6 & 0xFF = 6 && ...
- ثم، نختبر أنها ليست جزءاً (نفس ما سبق).
- ... 0 >> 22 & 0x3C @ 12 >> 26 & 0x3C @ 8 = 1,2,5,8"
- 0>>22&3C كما سبق يحسب عدد البايتات في رأس IP. @ يجعل هذا الإزاحة الجديدة في الحزمة، وهي بداية رأس TCP. طول رأس TCP (مرة أخرى بكلمات 32 بت) هو النصف الأيسر من البايت 12 من رأس TCP. 12>>26&3C يحسب هذا الطول بالبايتات (مشابهاً لرأس IP سابقاً). "@" يجعل هذا الإزاحة الجديدة، وهي بداية حمولة TCP. أخيراً، 8 تقرأ البايتات 8–12 من الحمولة و = تتحقق مما إذا كانت النتيجة هي أي من 1، 2، 5 أو 8.
udp¶
يمكن استخدام هذه الإضافات إذا تم تحديد `--protocol udp`. توفر الخيارات التالية:
- [!] --source-port,--sport منفذ[:منفذ]
- تحديد منفذ المصدر أو نطاق المنافذ. راجع وصف خيار --source-port لإضافة TCP للتفاصيل.
- [!] --destination-port,--dport منفذ[:منفذ]
- تحديد منفذ الوجهة أو نطاق المنافذ. راجع وصف خيار --destination-port لإضافة TCP للتفاصيل.
إضافات الهدف¶
يمكن لـ iptables استخدام وحدات الهدف الموسعة: التالية مضمنة في التوزيعة القياسية.
التدقيق¶
ينشئ هذا الهدف سجلات تدقيق للحزم التي تصل إلى الهدف. يمكن استخدامه لتسجيل الحزم المقبولة والمحذوفة والمرفوضة. راجع auditd(8) للتفاصيل الإضافية.
- --type {accept|drop|reject}
- تعيين نوع سجل التدقيق. بدءًا من linux-4.12، لم يعد لهذا الخيار تأثير على رسائل التدقيق المُنشأة. لا يزال مقبولاً من قبل iptables لأسباب التوافق، لكنه يُتجاهل.
مثال:
- iptables -N AUDIT_DROP
- iptables -A AUDIT_DROP -j AUDIT
- iptables -A AUDIT_DROP -j DROP
المجموع الاختباري¶
يعمل هذا الهدف بشكل انتقائي حول التطبيقات المعطلة/القديمة. يمكن استخدامه فقط في جدول mangle.
- --checksum-fill
- حساب وملء المجموع الاختباري في حزمة تفتقر إلى مجموع اختباري. هذا مفيد بشكل خاص إذا كنت بحاجة إلى التعامل مع التطبيقات القديمة مثل عملاء dhcp، التي لا تعمل بشكل جيد مع تفريغ المجموع الاختباري، لكنك لا تريد تعطيل تفريغ المجموع الاختباري في جهازك.
التصنيف¶
تتيح لك هذه الوحدة تعيين قيمة skb->priority (وبالتالي تصنيف الحزمة إلى فئة CBQ محددة).
- --set-class major:minor
- تعيين قيمة الفئة الرئيسية والثانوية. تُفسر القيم دائمًا على أنها سداسية عشرية حتى لو لم تُعط بادئة 0x.
CLUSTERIP (خاص بـ IPv4)¶
تتيح لك هذه الوحدة تكوين مجموعة بسيطة من العقد التي تشارك عنوان IP و MAC معينين دون وجود موازن تحميل صريح أمامها. يتم توزيع الاتصالات بشكل ثابت بين العقد في هذه المجموعة.
يرجى ملاحظة أن هدف CLUSTERIP يُعتبر مهملاً لصالح مطابقة cluster الأكثر مرونة وغير المقتصرة على IPv4.
- --new
- أنشئ ClusterIP جديدًا. يجب عليك دائمًا تعيين هذا في القاعدة الأولى لـ ClusterIP معين.
- --hashmode mode
- حدد وضع التجزئة. يجب أن يكون واحدًا من sourceip أو sourceip-sourceport أو sourceip-sourceport-destport.
- --clustermac mac
- حدد عنوان MAC لـ ClusterIP. يجب أن يكون عنوان بث متعدد على طبقة الوصلة
- --total-nodes num
- عدد العقد الإجمالي داخل هذه المجموعة.
- --local-node num
- رقم العقدة المحلية داخل هذه المجموعة.
- --hash-init rnd
- حدد البذرة العشوائية المستخدمة لتهيئة التجزئة.
CONNMARK¶
تضبط هذه الوحدة قيمة علامة netfilter المرتبطة باتصال. العلامة بعرض 32 بت.
- --set-xmark value[/mask]
- صفر البتات المعطاة بواسطة mask وقم بعملية XOR لـ value في ctmark.
- --save-mark [--nfmask nfmask] [--ctmask ctmask]
- انسخ علامة الحزمة (nfmark) إلى علامة الاتصال (ctmark) باستخدام الأقنعة المعطاة. يتم تحديد قيمة nfmark الجديدة كما يلي:
- ctmark = (ctmark & ~ctmask) ^ (nfmark & nfmask)
- أي أن ctmask يحدد البتات المراد مسحها و nfmask يحدد بتات nfmark المراد XORها في ctmark. القيمة المبدئية لـ ctmask و nfmask هي 0xFFFFFFFF.
- --restore-mark [--nfmask nfmask] [--ctmask ctmask]
- انسخ علامة الاتصال (ctmark) إلى علامة الحزمة (nfmark) باستخدام الأقنعة المعطاة. تُحدد قيمة ctmark الجديدة كالتالي:
- nfmark = (nfmark & ~nfmask) ^ (ctmark & ctmask);
- أي أن nfmask يحدد البتات المراد مسحها و ctmask يحدد بتات ctmark المراد XORها في nfmark. القيمة المبدئية لـ ctmask و nfmask هي 0xFFFFFFFF.
- --restore-mark صالح فقط في جدول mangle.
المختصرات التالية متاحة لـ --set-xmark:
- --and-mark بتات
- قم بعملية AND ثنائية للـ ctmark مع بتات. (مختصر لـ --set-xmark 0/بتات_مقلوبة، حيث بتات_مقلوبة هي النفي الثنائي لـ بتات.)
- --or-mark بتات
- قم بعملية OR ثنائية للـ ctmark مع بتات. (مختصر لـ --set-xmark بتات/بتات.)
- --xor-mark بتات
- قم بعملية XOR ثنائية للـ ctmark مع بتات. (مختصر لـ --set-xmark بتات/0.)
- --set-mark قيمة[/قناع]
- اضبط علامة الاتصال. إذا تم تحديد قناع، فسيتم تعديل البتات المحددة في القناع فقط.
- --save-mark [--mask قناع]
- انسخ nfmark إلى ctmark. إذا تم تحديد قناع، فسيتم نسخ تلك البتات فقط.
- --restore-mark [--mask قناع]
- انسخ ctmark إلى nfmark. إذا تم تحديد قناع، فسيتم نسخ تلك البتات فقط. هذا صالح فقط في جدول mangle.
CONNSECMARK¶
تنسخ هذه الوحدة العلامات الأمنية من الحزم إلى الاتصالات (إذا كانت غير موسومة)، ومن الاتصالات عائدة إلى الحزم (أيضًا فقط إذا كانت غير موسومة). تُستخدم عادةً مع SECMARK، وهي صالحة في جدول security (للتوافق العكسي مع النوى القديمة، فهي صالحة أيضًا في جدول mangle).
CT¶
يحدد هدف CT معاملات لحزمة أو اتصالها المرتبط. يرفق الهدف إدخال تتبع اتصال "قالب" بالحزمة، والذي يُستخدم بعد ذلك بواسطة نواة conntrack عند تهيئة إدخال ct جديد. وبالتالي، هذا الهدف صالح فقط في جدول "raw".
- --notrack
- يعطل تتبع الاتصال لهذه الحزمة.
- --helper name
- استخدم المساعد المُعرّف بواسطة name للاتصال. هذا أكثر مرونة من تحميل وحدات مساعد conntrack بمنافذ محددة مسبقًا.
- --ctevents event[,...]
- قم فقط بتوليد أحداث conntrack المحددة لهذا الاتصال. أنواع الأحداث الممكنة هي: new, related, destroy, reply, assured, protoinfo, helper, mark (يشير هذا إلى ctmark، وليس nfmark), natseqinfo, secmark (ctsecmark).
- --expevents event[,...]
- قم فقط بتوليد أحداث التوقع المحددة لهذا الاتصال. أنواع الأحداث الممكنة هي: new.
- --zone-orig {id|mark}
- بالنسبة لحركة المرور القادمة من الاتجاه الأصلي، خصص هذه الحزمة للمنطقة id واجعل عمليات البحث تتم فقط في تلك المنطقة. إذا تم استخدام mark بدلاً من id، فتُشتق المنطقة من nfmark للحزمة.
- --zone-reply {id|mark}
- بالنسبة لحركة المرور القادمة من اتجاه الرد، خصص هذه الحزمة للمنطقة id واجعل عمليات البحث تتم فقط في تلك المنطقة. إذا تم استخدام mark بدلاً من id، فتُشتق المنطقة من nfmark للحزمة.
- --zone {id|mark}
- خصص هذه الحزمة للمنطقة id واجعل عمليات البحث تتم فقط في تلك المنطقة. إذا تم استخدام mark بدلاً من id، فتُشتق المنطقة من nfmark للحزمة. افتراضيًا، الحزم لها منطقة 0. ينطبق هذا الخيار على كلا الاتجاهين.
- --timeout name
- استخدم سياسة المهلة المحددة بواسطة name للاتصال. يوفر هذا تعريفًا أكثر مرونة لسياسة المهلة مقارنة بقيم المهلة العامة المتاحة في /proc/sys/net/netfilter/nf_conntrack_*_timeout_*.
DNAT¶
يكون هذا الهدف صالحًا فقط في جدول nat، في سلاسل PREROUTING وOUTPUT، والسلاسل المعرفة من قبل المستخدم والتي تُستدعى فقط من تلك السلاسل. يحدد أن عنوان وجهة الحزمة يجب تعديله (وستُشوّه جميع الحزم المستقبلية في هذا الاتصال أيضًا)، ويجب التوقف عن فحص القواعد. يأخذ الخيارات التالية:
- --to-destination [ipaddr[-ipaddr]][:port[-port[/baseport]]]
- والذي يمكنه تحديد عنوان IP وجهة واحد جديد، أو نطاق شامل لعناوين IP. اختياريًا نطاق منفذ، إذا كانت القاعدة تحدد أيضًا أحد البروتوكولات التالية: tcp، udp، dccp أو sctp. إذا لم يُحدد نطاق منفذ، فلن يُعدّل منفذ الوجهة أبدًا. إذا لم يُحدد عنوان IP، فسيُعدّل منفذ الوجهة فقط. إذا أُعطي baseport، يُستخدم الفرق بين منفذ الوجهة الأصلي وقيمته كإزاحة في نطاق منفذ التعيين. يسمح هذا بإنشاء نطاقات تعيين منفذ منقولة وهو متاح منذ إصدار النواة 4.18. لمنفذ واحد أو baseport، يمكن استخدام اسم خدمة كما هو مدرج في /etc/services. إذا كان ipaddr عنوان IPv4 استرجاعي (أي 127.0.0.0/8) فيجب ضبط "net.ipv4.conf.*.route_localnet" sysctl لواجهة الإدخال على 1. وإلا ستُسقط الحزم بواسطة كود التوجيه كـ "martians".
- --random
- عشوائية تعيين منفذ المصدر (النواة >= 2.6.22).
- --persistent
- يعطي العميل نفس عنوان المصدر/الوجهة لكل اتصال. يحل هذا محل هدف SAME. دعم التعيينات المستمرة متاح منذ 2.6.29-rc2.
- دعم IPv6 متاح منذ نوى لينكس >= 3.7.
DNPT (خاص بـ IPv6)¶
يوفر ترجمة بادئة شبكة IPv6 إلى IPv6 للوجهة بدون حالة (كما هو موصوف في RFC 6296).
يجب استخدام هذا الهدف في جدول mangle، وليس في جدول nat. يأخذ الخيارات التالية:
- --src-pfx [prefix/length]
- اضبط بادئة المصدر التي تريد ترجمتها والطول
- --dst-pfx [prefix/length]
- اضبط بادئة الوجهة التي تريد استخدامها في الترجمة والطول
يجب استخدام هدف SNPT لإلغاء الترجمة. مثال:
- ip6tables -t mangle -I POSTROUTING -s fd00::/64 ! -o vboxnet0 -j SNPT --src-pfx fd00::/64 --dst-pfx 2001:e20:2000:40f::/64
- ip6tables -t mangle -I PREROUTING -i wlan0 -d 2001:e20:2000:40f::/64 -j DNPT --src-pfx 2001:e20:2000:40f::/64 --dst-pfx fd00::/64
قد تحتاج إلى تمكين وكيل الجوار IPv6:
- sysctl -w net.ipv6.conf.all.proxy_ndp=1
يجب أيضًا استخدام الهدف NOTRACK لتعطيل تتبع الاتصال للتدفقات المترجمة.
DSCP¶
يغير هذا الهدف قيمة بتات DSCP داخل رأس TOS لحزمة IPv4. نظرًا لأن هذا يتلاعب بحزمة، يمكن استخدامه فقط في جدول mangle.
- --set-dscp قيمة
- اضبط حقل DSCP على قيمة رقمية (يمكن أن تكون عشرية أو سداسية عشرية)
- --set-dscp-class فئة
- اضبط حقل DSCP على فئة DiffServ.
ECN (خاص بـ IPv4)¶
يعمل هذا الهدف بشكل انتقائي حول الثقوب السوداء المعروفة لـ ECN. يمكن استخدامه فقط في جدول mangle.
- --ecn-tcp-remove
- أزل جميع بتات ECN من رأس TCP. بالطبع، يمكن استخدامه فقط بالتزامن مع -p tcp.
HL (خاص بـ IPv6)¶
يُستخدم هذا لتعديل حقل حد القفز في رأس IPv6. حقل حد القفز مشابه لما يُعرف بقيمة TTL في IPv4. يمكن أن يكون ضبط أو زيادة حقل حد القفز خطيرًا جدًا، لذا يجب تجنبه بأي ثمن. هذا الهدف صالح فقط في جدول mangle.
لا تقم أبدًا بضبط أو زيادة القيمة على الحزم التي تغادر شبكتك المحلية!
- --hl-set قيمة
- اضبط حد القفز على `قيمة'.
- --hl-dec قيمة
- إنقاص حد القفز بمقدار `القيمة` مرة.
- --hl-inc القيمة
- زيادة حد القفز بمقدار `القيمة` مرة.
HMARK¶
مثل MARK، أي تعيين علامة جدار الحماية (fwmark)، لكن العلامة تُحسب من تجزئة مُحدد الحزمة عند الاختيار. يجب عليك أيضًا تحديد نطاق العلامة، واختياريًا، الإزاحة للبدء منها. يتم فحص رسائل خطأ ICMP واستخدامها لحساب التجزئة.
الخيارات الموجودة هي:
- --hmark-tuple الصف
- أعضاء الصف المحتملون هم: src بمعنى عنوان المصدر (عنوان IPv4، IPv6)، dst بمعنى عنوان الوجهة (عنوان IPv4، IPv6)، sport بمعنى منفذ المصدر (TCP، UDP، UDPlite، SCTP، DCCP)، dport بمعنى منفذ الوجهة (TCP، UDP، UDPlite، SCTP، DCCP)، spi بمعنى مؤشر معلمة الأمان (AH، ESP)، وct بمعنى استخدام صف التتبع (conntrack) بدلاً من محددات الحزمة.
- --hmark-mod القيمة (يجب أن تكون > 0)
- المعامل لحساب التجزئة (لتحديد نطاق العلامات الممكنة)
- --hmark-offset القيمة
- الإزاحة لبدء العلامات منها.
- للاستخدام المتقدم، بدلاً من استخدام --hmark-tuple، يمكنك تحديد
- البادئات والأقنعة:
- --hmark-src-prefix cidr
- قناع عنوان المصدر بترميز CIDR.
- --hmark-dst-prefix cidr
- قناع عنوان الوجهة بترميز CIDR.
- --hmark-sport-mask القيمة
- قناع منفذ مصدر 16 بت بالنظام الست عشري.
- --hmark-dport-mask قيمة
- قناع منفذ وجهة 16 بت بالنظام الست عشري.
- --hmark-spi-mask قيمة
- حقل 32 بت مع قناع spi.
- --hmark-proto-mask قيمة
- حقل 8 بت مع رقم بروتوكول الطبقة 4.
- --hmark-rnd قيمة
- قيمة عشوائية مخصصة 32 بت لتغذية حساب التجزئة.
أمثلة:
iptables -t mangle -A PREROUTING -m conntrack --ctstate NEW
-j HMARK --hmark-tuple ct,src,dst,proto --hmark-offset 10000 --hmark-mod 10
--hmark-rnd 0xfeedcafe
iptables -t mangle -A PREROUTING -j HMARK --hmark-offset 10000 --hmark-tuple src,dst,proto --hmark-mod 10 --hmark-rnd 0xdeafbeef
IDLETIMER¶
يمكن استخدام هذا الهدف لتحديد متى تكون الواجهات خاملة لفترة زمنية معينة. تُعرّف المؤقتات بوسوم وتُنشأ عند تعيين قاعدة بوسم جديد. تأخذ القواعد أيضًا قيمة مهلة (بالثواني) كخيار. إذا استخدمت أكثر من قاعدة نفس وسم المؤقت، يُعاد تشغيل المؤقت كلما أصابت أي من القواعد. يُنشأ إدخال واحد لكل مؤقت في sysfs. تحتوي هذه السمة على الوقت المتبقي لانتهاء المؤقت. توجد السمات تحت فئة xt_idletimer:
/sys/class/xt_idletimer/timers/<وسم>
عند انتهاء المؤقت، تُرسل وحدة الهدف إشعار sysfs إلى مساحة المستخدم، والتي يمكنها بعد ذلك تحديد ما يجب فعله (مثل قطع الاتصال لتوفير الطاقة).
- --timeout مقدار
- هذا هو الوقت بالثواني الذي سيُشغّل الإشعار.
- --label سلسلة
- هذا معرّف فريد للمؤقت. الحد الأقصى لطول سلسلة الوسم هو 27 حرفًا.
LED¶
يُنشئ هذا مشغل LED يمكن إرفاقه بأضواء مؤشرات النظام، لإصدار وميض أو إضاءتها عند مرور حزم معينة عبر النظام. قد يكون أحد الأمثلة هو إضاءة LED لبضع دقائق في كل مرة يتم فيها إنشاء اتصال SSH بالجهاز المحلي. تتحكم الخيارات التالية في سلوك المشغل:
- --led-trigger-id الاسم
- هذا هو الاسم المُعطى لمشغل LED. سيتم إضافة البادئة "netfilter-" إلى الاسم الفعلي للمشغل.
- --led-delay مللي ثانية
- يُشير هذا إلى المدة (بالمللي ثانية) التي يجب أن يظل فيها LED مضاءً عند وصول حزمة قبل إطفائه مرة أخرى. المبدئي هو 0 (وميض بأسرع ما يمكن). يمكن إعطاء القيمة الخاصة inf لترك LED مضاءً بشكل دائم بمجرد تنشيطه. (في هذه الحالة، يجب فصل المشغل يدويًا وإعادة توصيله بجهاز LED لإطفائه مرة أخرى.)
- --led-always-blink
- اجعل LED يومض دائمًا عند وصول الحزمة، حتى لو كان LED مضاءً بالفعل. يسمح هذا بالإخطار بحزم جديدة حتى مع قيم تأخير طويلة (والتي قد تؤدي بخلاف ذلك إلى إطالة صامتة لوقت التأخير.)
- مثال:
- إنشاء مشغل LED لحركة مرور SSH الواردة:
- iptables -A INPUT -p tcp --dport 22 -j LED --led-trigger-id ssh
- ثم إرفاق المشغل الجديد بـ LED:
- echo netfilter-ssh >/sys/class/leds/اسم_led/trigger
LOG¶
تشغيل تسجيل النواة للحزم المتطابقة. عند تعيين هذا الخيار لقاعدة، ستطبع نواة لينكس بعض المعلومات عن جميع الحزم المتطابقة (مثل معظم حقول رأس IP/IPv6) عبر سجل النواة (حيث يمكن قراءتها باستخدام dmesg(1) أو قراءتها في syslog).
هذا "هدف غير منهي"، أي يستمر اجتياز القاعدة في القاعدة التالية. لذا إذا أردت تسجيل الحزم التي ترفضها، استخدم قاعدتين منفصلتين بنفس معايير المطابقة، الأولى تستخدم الهدف LOG ثم DROP (أو REJECT).
- --log-level المستوى
- مستوى التسجيل، والذي يمكن أن يكون رقميًا (خاصًا بالنظام) أو ذاكريًا. القيم الممكنة هي (بترتيب تنازلي للأولوية): emerg، alert، crit، error، warning، notice، info أو debug.
- --log-prefix البادئة
- أسبق رسائل السجل بالبادئة المحددة؛ يصل طولها إلى 29 حرفًا، ومفيدة لتمييز الرسائل في السجلات.
- --log-tcp-sequence
- سجل أرقام تسلسل TCP. هذا يشكل خطرًا أمنيًا إذا كان السجل قابلاً للقراءة من قبل المستخدمين.
- --log-tcp-options
- سجل الخيارات من رأس حزمة TCP.
- --log-ip-options
- سجل الخيارات من رأس حزمة IP/IPv6.
- --log-uid
- سجل معرف المستخدم للعملية التي أنشأت الحزمة.
- --log-macdecode
- سجل عناوين MAC والبروتوكول.
MARK¶
يُستخدم هذا الهدف لتعيين قيمة علامة Netfilter المرتبطة بالحزمة. يمكن، على سبيل المثال، استخدامه مع التوجيه المعتمد على fwmark (يتطلب iproute2). إذا كنت تخطط للقيام بذلك، لاحظ أن العلامة يجب تعيينها إما في سلسلة PREROUTING أو OUTPUT من جدول mangle للتأثير على التوجيه. حقل العلامة عرضه 32 بت.
- --set-xmark value[/mask]
- يُصفّر البتات المعطاة بواسطة mask ويُجري XOR لـ value في علامة الحزمة ("nfmark"). إذا تم حذف mask، يُفترض 0xFFFFFFFF.
- --set-mark قيمة[/قناع]
- يُصفّر البتات المعطاة بواسطة mask ويُجري OR لـ value في علامة الحزمة. إذا تم حذف mask، يُفترض 0xFFFFFFFF.
الذاكرات المساعدة التالية متوفرة:
- --and-mark بتات
- قم بعملية AND ثنائية لـ nfmark مع bits. (ذاكرة مساعدة لـ --set-xmark 0/invbits، حيث invbits هو النفي الثنائي لـ bits.)
- --or-mark بتات
- قم بعملية OR ثنائية لـ nfmark مع bits. (ذاكرة مساعدة لـ --set-xmark bits/bits.)
- --xor-mark بتات
- قم بعملية XOR ثنائية لـ nfmark مع bits. (ذاكرة مساعدة لـ --set-xmark bits/0.)
MASQUERADE¶
هذا الهدف صالح فقط في جدول nat، في سلسلة POSTROUTING. يجب استخدامه فقط مع اتصالات IP المعينة ديناميكيًا (الطلب الهاتفي): إذا كان لديك عنوان IP ثابت، يجب استخدام هدف SNAT. التمويه يعادل تحديد تعيين لعنوان IP للواجهة التي تخرج منها الحزمة، ولكن له أيضًا تأثير أن الاتصالات تُنسى تُنسى عندما تنقطع الواجهة. هذا هو السلوك الصحيح عندما لا يحتمل أن يكون للطلب الهاتفي التالي نفس عنوان الواجهة (وبالتالي تُفقد أي اتصالات قائمة على أي حال).
- --to-ports port[-port]
- يحدد هذا نطاقًا من منافذ المصدر لاستخدامها، متجاوزًا الاستدلال الافتراضي لاختيار منفذ المصدر لـ SNAT (انظر أعلاه). هذا صالح فقط إذا كانت القاعدة تحدد أيضًا أحد البروتوكولات التالية: tcp أو udp أو dccp أو sctp.
- --random
- عشوائية تعيين منفذ المصدر (النواة >= 2.6.21). منذ النواة 5.0، --random مطابق لـ --random-fully.
- --random-fully
- تعيين منفذ المصدر بعشوائية كاملة (النواة >= 3.13).
- دعم IPv6 متاح منذ نوى لينكس >= 3.7.
NETMAP¶
يسمح لك هذا الهدف بتعيين شبكة كاملة من العناوين بشكل ثابت على شبكة أخرى من العناوين. يمكن استخدامه فقط من القواعد في جدول nat.
- --to address[/mask]
- عنوان الشبكة المراد التعيين إليه. سيتم بناء العنوان الناتج بالطريقة التالية: جميع البتات 'الواحدة' في القناع تُملأ من `العنوان` الجديد. جميع البتات التي تكون صفرًا في القناع تُملأ من العنوان الأصلي.
- دعم IPv6 متاح منذ نوى لينكس >= 3.7.
NFLOG¶
يوفر هذا هدف تسجيل الحزم المتطابقة. عند تعيين هذا الهدف لقاعدة، ستمرر نواة لينكس الحزمة إلى الواجهة الخلفية للتسجيل المحملة لتسجيل الحزمة. يُستخدم هذا عادةً مع nfnetlink_log كواجهة خلفية للتسجيل، والتي سترسل الحزمة عبر مقبس netlink إلى مجموعة البث المتعدد المحددة. يمكن لعملية أو أكثر في مساحة المستخدم الاشتراك في المجموعة لاستقبال الحزم. مثل LOG، هذا هدف غير منتهي، أي يستمر اجتياز القاعدة إلى القاعدة التالية.
- --nflog-group nlgroup
- مجموعة netlink (0–2^16-1) التي تُرسل إليها الحزم (تنطبق فقط على nfnetlink_log). القيمة المبدئية هي 0.
- --nflog-prefix prefix
- سلسلة بادئة لتضمينها في رسالة السجل، بطول يصل إلى 64 حرفًا، مفيدة لتمييز الرسائل في السجلات.
- --nflog-range size
- لم يعمل هذا الخيار مطلقًا، استخدم --nflog-size بدلاً من ذلك
- --nflog-size size
- عدد البايتات المراد نسخها إلى مساحة المستخدم (تنطبق فقط على nfnetlink_log). قد تحدد مثيلات nfnetlink_log نطاقها الخاص، ويتجاوز هذا الخيار ذلك.
- --nflog-threshold size
- عدد الحزم المراد وضعها في قائمة الانتظار داخل النواة قبل إرسالها إلى مساحة المستخدم (تنطبق فقط على nfnetlink_log). تؤدي القيم الأعلى إلى حمل أقل لكل حزمة، ولكنها تزيد التأخير حتى تصل الحزم إلى مساحة المستخدم. القيمة المبدئية هي 1.
NFQUEUE¶
يُمرر هذا الهدف الحزمة إلى مساحة المستخدم باستخدام معالج nfnetlink_queue. توضع الحزمة في قائمة الانتظار المُحددة برقم قائمة انتظار 16-بت. يمكن لمساحة المستخدم فحص الحزمة وتعديلها إذا رغبت. يجب على مساحة المستخدم بعد ذلك إسقاط الحزمة أو إعادة حقنها في النواة. يُرجى مراجعة libnetfilter_queue للتفاصيل. أُضيف nfnetlink_queue في لينكس 2.6.14. أُضيف خيار queue-balance في لينكس 2.6.31، و queue-bypass في 2.6.39.
- --queue-num قيمة
- يُحدد هذا رقم قائمة الانتظار المراد استخدامها. أرقام قوائم الانتظار الصالحة هي من 0 إلى 65535. القيمة المبدئية هي 0.
- --queue-balance قيمة:قيمة
- يُحدد هذا نطاقًا من قوائم الانتظار لاستخدامها. تُوزن الحزم بعد ذلك عبر قوائم الانتظار المُعطاة. هذا مفيد للأنظمة متعددة النوى: ابدأ مثيلات متعددة من برنامج مساحة المستخدم على قوائم الانتظار x, x+1, .. x+n واستخدم "--queue-balance x:x+n". توضع الحزم المنتمية لنفس الاتصال في نفس nfqueue. بسبب تفاصيل التنفيذ، قيمة نطاق أقل من 0 تُحدد قيمة النطاق الأعلى إلى 65534، أي يمكن للمرء الموازنة فقط بين 65535 قائمة انتظار على الأكثر.
- --queue-bypass
- مبدئيًا، إذا لم يكن هناك برنامج مساحة مستخدم يستمع على NFQUEUE، فتُسقط جميع الحزم التي ستُوضع في قائمة الانتظار. عند استخدام هذا الخيار، تتصرف قاعدة NFQUEUE مثل ACCEPT بدلاً من ذلك، وتنتقل الحزمة إلى الجدول التالي.
- --queue-cpu-fanout
- متاح بدءًا من نواة لينكس 3.10. عند استخدامه مع --queue-balance، سيستخدم هذا معرف وحدة المعالجة المركزية كمؤشر لتعيين الحزم إلى قوائم الانتظار. الفكرة هي أنه يمكنك تحسين الأداء إذا كان هناك قائمة انتظار لكل وحدة معالجة مركزية. يتطلب هذا تحديد --queue-balance.
NOTRACK¶
يُعطل هذا الامتداد تتبع الاتصال لجميع الحزم المطابقة لتلك القاعدة. يُعادل -j CT --notrack. مثل CT، يمكن استخدام NOTRACK فقط في جدول raw.
RATEEST¶
يجمع هدف RATEEST الإحصائيات، ويُجري حساب تقدير المعدل، ويحفظ النتائج للتقييم لاحقًا باستخدام مطابقة rateest.
- --rateest-name اسم
- يُحصي الحزم المطابقة في المجموعة المُشار إليها بواسطة اسم، والتي يمكن اختيارها بحرية.
- --rateest-interval مقدار{s|ms|us}
- فاصل قياس المعدل، بالثواني أو الميلي ثانية أو الميكرو ثانية.
- --rateest-ewmalog قيمة
- ثابت زمني لمتوسط قياس المعدل.
REDIRECT¶
هذا الهدف صالح فقط في جدول nat، وفي سلاسل PREROUTING وOUTPUT، والسلاسل المعرفة من قبل المستخدم والتي تُستدعى فقط من تلك السلاسل. يقوم بإعادة توجيه الحزمة إلى الجهاز نفسه عن طريق تغيير IP الوجهة إلى العنوان الرئيسي للواجهة الواردة (يتم تعيين الحزم المولدة محليًا إلى عنوان المضيف المحلي، 127.0.0.1 لـ IPv4 و::1 لـ IPv6، ويتم إسقاط الحزم التي تصل على واجهات ليس لها عنوان IP مكون).
- --to-ports port[-port]
- يحدد هذا منفذ وجهة أو نطاق من المنافذ لاستخدامها: بدون هذا، لا يتم تغيير منفذ الوجهة أبدًا. هذا صالح فقط إذا كانت القاعدة تحدد أيضًا أحد البروتوكولات التالية: tcp، udp، dccp أو sctp. لمنفذ واحد، يمكن استخدام اسم خدمة كما هو مدرج في /etc/services.
- --random
- عشوائية تعيين منفذ المصدر (النواة >= 2.6.22).
- دعم IPv6 متاح بدءًا من نوى Linux >= 3.7.
REJECT (خاص بـ IPv6)¶
يُستخدم هذا لإرسال حزمة خطأ ردًا على الحزمة المطابقة: وإلا فهو مكافئ لـ DROP لذا فهو هدف منتهي، ينهي اجتياز القاعدة. هذا الهدف صالح فقط في سلاسل INPUT وFORWARD وOUTPUT، والسلاسل المعرفة من قبل المستخدم والتي تُستدعى فقط من تلك السلاسل. الخيار التالي يتحكم في طبيعة حزمة الخطأ المرتجعة:
- --reject-with type
- يمكن أن يكون النوع المعطى icmp6-no-route، no-route، icmp6-adm-prohibited، adm-prohibited، icmp6-addr-unreachable، addr-unreach، أو icmp6-port-unreachable، والتي تُرجع رسالة خطأ ICMPv6 المناسبة (icmp6-port-unreachable هو المبدئي). أخيرًا، يمكن استخدام الخيار tcp-reset على القواعد التي تطابق بروتوكول TCP فقط: هذا يتسبب في إرسال حزمة TCP RST مرة أخرى. هذا مفيد بشكل أساسي لحظر استقصاءات ident (113/tcp) التي تحدث بشكل متكرر عند إرسال البريد إلى مضيفات بريد معطلة (والتي لن تقبل بريدك بخلاف ذلك). يمكن استخدام tcp-reset فقط مع إصدارات النواة 2.6.14 أو أحدث.
تحذير: لا ينبغي لك تطبيق هدف REJECT بشكل عشوائي على الحزم التي يتم تصنيف حالة اتصالها على أنها INVALID؛ بدلاً من ذلك، يجب عليك فقط إسقاط هذه الحزم.
ضع في اعتبارك مضيف مصدر يرسل حزمة P، مع تعرض P لتأخير كبير على طول مسارها بحيث يصدر المضيف المصدر إعادة إرسال، P_2، مع نجاح P_2 في الوصول إلى وجهتها وتقديم حالة الاتصال بشكل طبيعي. من المعقول أن تعتبر P المتأخرة غير مرتبطة بأي إدخال تتبع اتصال. إنشاء استجابة رفض لحزمة مصنفة بهذه الطريقة سينهي الاتصال السليم.
لذا، بدلاً من:
-A INPUT ... -j REJECT
فكر في استخدام:
-A INPUT ... -m conntrack --ctstate INVALID -j DROP
-A INPUT ... -j REJECT
REJECT (خاص بـ IPv4)¶
يُستخدم هذا لإرسال حزمة خطأ ردًا على الحزمة المطابقة: وإلا فهو مكافئ لـ DROP لذا فهو هدف منتهي، ينهي اجتياز القاعدة. هذا الهدف صالح فقط في سلاسل INPUT وFORWARD وOUTPUT، والسلاسل المعرفة من قبل المستخدم والتي تُستدعى فقط من تلك السلاسل. الخيار التالي يتحكم في طبيعة حزمة الخطأ المرتجعة:
- --reject-with type
- يمكن أن يكون النوع المعطى icmp-net-unreachable، icmp-host-unreachable، icmp-port-unreachable، icmp-proto-unreachable، icmp-net-prohibited، icmp-host-prohibited، أو icmp-admin-prohibited (*)، والتي تُرجع رسالة خطأ ICMP المناسبة (icmp-port-unreachable هو المبدئي). يمكن استخدام الخيار tcp-reset على القواعد التي تطابق بروتوكول TCP فقط: هذا يتسبب في إرسال حزمة TCP RST مرة أخرى. هذا مفيد بشكل أساسي لحظر استقصاءات ident (113/tcp) التي تحدث بشكل متكرر عند إرسال البريد إلى مضيفات بريد معطلة (والتي لن تقبل بريدك بخلاف ذلك).
- (*) استخدام icmp-admin-prohibited مع نوى لا تدعمه سيؤدي إلى إسقاط عادي بدلاً من REJECT
تحذير: لا ينبغي لك تطبيق هدف REJECT بشكل عشوائي على الحزم التي يتم تصنيف حالة اتصالها على أنها INVALID؛ بدلاً من ذلك، يجب عليك فقط إسقاط هذه الحزم.
ضع في اعتبارك مضيف مصدر يرسل حزمة P، مع تعرض P لتأخير كبير على طول مسارها بحيث يصدر المضيف المصدر إعادة إرسال، P_2، مع نجاح P_2 في الوصول إلى وجهتها وتقديم حالة الاتصال بشكل طبيعي. من المعقول أن تعتبر P المتأخرة غير مرتبطة بأي إدخال تتبع اتصال. إنشاء استجابة رفض لحزمة مصنفة بهذه الطريقة سينهي الاتصال السليم.
لذا، بدلاً من:
-A INPUT ... -j REJECT
فكر في استخدام:
-A INPUT ... -m conntrack --ctstate INVALID -j DROP
-A INPUT ... -j REJECT
SECMARK¶
يُستخدم هذا لتعيين قيمة علامة الأمان المرتبطة بالحزمة لاستخدامها من قبل أنظمة فرعية للأمان مثل SELinux. إنه صالح في جدول security (للتوافق مع الإصدارات الأقدم من النواة، فهو صالح أيضًا في جدول mangle). العلامة بعرض 32 بت.
SET¶
تضيف هذه الوحدة و/أو تحذف مدخلات من مجموعات IP التي يمكن تعريفها بواسطة ipset(8).
- --add-set اسم_المجموعة علم[,علم...]
- أضف عنوان/منافذ الحزمة إلى المجموعة
- --del-set اسم_المجموعة علم[,علم...]
- احذف عنوان/منافذ الحزمة من المجموعة
- --map-set اسم_المجموعة علم[,علم...]
- [--map-mark] [--map-prio] [--map-queue] خصص خصائص الحزمة (علامة جدار الحماية، أولوية tc، قائمة انتظار الأجهزة)
- حيث علم(الأعلام) هي مواصفات src و/أو dst ولا يمكن أن يتجاوز عددها ستة.
- --timeout قيمة
- عند إضافة مدخل، قيمة المهلة المستخدمة بدلاً من القيمة المبدئية من تعريف المجموعة
- --exist
- عند إضافة مدخل إذا كان موجودًا بالفعل، أعد تعيين قيمة المهلة إلى القيمة المحددة أو إلى القيمة المبدئية من تعريف المجموعة
- --map-set اسم_المجموعة
- يجب إنشاء اسم المجموعة مع خيار --skbinfo --map-mark خصص علامة جدار الحماية للحزمة بالبحث عن القيمة في المجموعة --map-prio خصص أولوية التحكم في المرور للحزمة بالبحث عن القيمة في المجموعة --map-queue خصص قائمة انتظار بطاقة الشبكة للحزمة بالبحث عن القيمة في المجموعة
- يمكن استخدام خيار --map-set من جدول mangle فقط. يمكن استخدام العلمين --map-prio و --map-queue في سلاسل OUTPUT و FORWARD و POSTROUTING.
يتطلب استخدام -j SET توفير دعم ipset في النواة، وهو متاح للنوى القياسية منذ Linux 2.6.39.
SNAT¶
يكون هذا الهدف صالحًا فقط في جدول nat، في سلاسل POSTROUTING و INPUT، والسلاسل المعرفة من قبل المستخدم والتي تُستدعى فقط من تلك السلاسل. يحدد أن عنوان المصدر للحزمة يجب تعديله (وستُشوه جميع الحزم المستقبلية في هذا الاتصال أيضًا)، ويجب التوقف عن فحص القواعد. يأخذ الخيارات التالية:
- --to-source [عنوان_IP[-عنوان_IP]][:منفذ[-منفذ]]
- يمكنه تحديد عنوان IP مصدر واحد جديد، أو نطاق شامل من عناوين IP. اختياريًا نطاق منافذ، إذا كانت القاعدة تحدد أيضًا أحد البروتوكولات التالية: tcp أو udp أو dccp أو sctp. إذا لم يُحدد نطاق منافذ، فسيتم تعيين منافذ المصدر الأقل من 512 إلى منافذ أخرى أقل من 512: تلك بين 512 و 1023 شاملة سيتم تعيينها إلى منافذ أقل من 1024، وسيتم تعيين المنافذ الأخرى إلى 1024 أو أعلى. حيثما أمكن، لن يحدث أي تغيير في المنفذ.
- --random
- عشوائية تعيين المنفذ المصدر عبر خوارزمية تعتمد على التجزئة (النواة >= 2.6.21).
- --random-fully
- عشوائية كاملة لتعيين المنفذ المصدر عبر مولد أرقام عشوائية زائفة (PRNG) (النواة >= 3.14).
- --persistent
- يعطي العميل نفس عنوان المصدر/الوجهة لكل اتصال. يحل هذا محل هدف SAME. دعم التعيينات المستمرة متاح منذ 2.6.29-rc2.
النوى الأقدم من 2.6.36-rc1 لا تملك القدرة على SNAT في سلسلة INPUT.
- دعم IPv6 متاح منذ نوى لينكس >= 3.7.
SNPT (خاص بـ IPv6)¶
يوفر ترجمة بادئة شبكة IPv6 إلى IPv6 بدون حالة (كما هو موصوف في RFC 6296).
يجب استخدام هذا الهدف في جدول mangle، وليس في جدول nat. يأخذ الخيارات التالية:
- --src-pfx [prefix/length]
- اضبط بادئة المصدر التي تريد ترجمتها والطول
- --dst-pfx [prefix/length]
- اضبط بادئة الوجهة التي تريد استخدامها في الترجمة والطول
يجب استخدام هدف DNPT لعكس الترجمة. مثال:
- ip6tables -t mangle -I POSTROUTING -s fd00::/64 ! -o vboxnet0 -j SNPT --src-pfx fd00::/64 --dst-pfx 2001:e20:2000:40f::/64
- ip6tables -t mangle -I PREROUTING -i wlan0 -d 2001:e20:2000:40f::/64 -j DNPT --src-pfx 2001:e20:2000:40f::/64 --dst-pfx fd00::/64
قد تحتاج إلى تمكين وكيل الجوار IPv6:
- sysctl -w net.ipv6.conf.all.proxy_ndp=1
يجب أيضًا استخدام الهدف NOTRACK لتعطيل تتبع الاتصال للتدفقات المترجمة.
SYNPROXY¶
يعالج هذا الهدف مصافحة TCP ثلاثية الاتجاهات بالتوازي في سياق netfilter لحماية النظام المحلي أو الخلفي. يتطلب هذا الهدف تتبع الاتصال لأن أرقام التسلسل تحتاج إلى الترجمة. تحسنت قدرة النواة على امتصاص هجوم SYNFLOOD بشكل كبير بدءًا من Linux 4.4، لذا لم يعد هذا الهدف ضروريًا لحماية خوادم Linux.
- --mss الحد الأقصى لحجم القطعة
- الحد الأقصى لحجم القطعة المُعلَن للعملاء. يجب أن يتطابق هذا مع النظام الخلفي.
- --wscale مقياس النافذة
- مقياس النافذة المُعلَن للعملاء. يجب أن يتطابق هذا مع النظام الخلفي.
- --sack-perm
- تمرير خيار الإقرار الانتقائي للعميل إلى النظام الخلفي (سيُعطّل إذا لم يكن موجودًا).
- --timestamps
- تمرير خيار الطابع الزمني للعميل إلى النظام الخلفي (سيُعطّل إذا لم يكن موجودًا، وهو ضروري أيضًا للإقرار الانتقائي وتوسيع النافذة).
مثال:
تحديد خيارات TCP المستخدمة من قبل النظام الخلفي، من نظام خارجي
- tcpdump -pni eth0 -c 1 'tcp[tcpflags] == (tcp-syn|tcp-ack)'
port 80 &
telnet 192.0.2.42 80
18:57:24.693307 IP 192.0.2.42.80 > 192.0.2.43.48757:
الأعلام [S.]، التسلسل 360414582، الإقرار 788841994، النافذة 14480،
الخيارات [mss 1460,sackOK،
TS val 1409056151 ecr 9690221،
nop,wscale 9]،
الطول 0
أوقف وضع tcp_loose، بحيث يعلّم conntrack الحزم خارج التدفق كحالة INVALID.
- echo 0 > /proc/sys/net/netfilter/nf_conntrack_tcp_loose
اجعل حزم SYN غير متتبعة
- iptables -t raw -A PREROUTING -i eth0 -p tcp --dport 80
--syn -j CT --notrack
التقط حالات UNTRACKED (حزم SYN) وINVALID (حزم ACK للمصافحة الثلاثية) وأرسلها إلى SYNPROXY. ستستجيب هذه القاعدة لحزم SYN بحزم SYN+ACK مع ملفات تعريف الارتباط المتزامنة، وتنشئ حالة ESTABLISHED لاستجابة العميل الصالحة (حزم ACK للمصافحة الثلاثية)، وتتجاهل ملفات تعريف الارتباط غير الصحيحة. تركيبات الأعلام غير المتوقعة أثناء المصافحة الثلاثية لن تتطابق وستستمر (مثل SYN+FIN، SYN+ACK).
- iptables -A INPUT -i eth0 -p tcp --dport 80
-m state --state UNTRACKED,INVALID -j SYNPROXY
--sack-perm --timestamp --mss 1460 --wscale 9
أسقط الحزم غير الصالحة، ستكون هذه حزمًا خارج التدفق لم تُطابق بواسطة SYNPROXY.
- iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state INVALID -j DROP
TCPMSS¶
يغير هذا الهدف قيمة MSS لحزم TCP SYN، للتحكم في الحجم الأقصى لذلك الاتصال (عادةً ما يحدها إلى MTU لواجهة الخروج ناقص 40 لـ IPv4 أو 60 لـ IPv6، على التوالي). بالطبع، يمكن استخدامه فقط مع -p tcp.
يُستخدم هذا الهدف للتغلب على مزودي خدمة الإنترنت أو الخوادم عديمة العقل إجراميًا التي تحجب حزم "ICMP Fragmentation Needed" أو "ICMPv6 Packet Too Big". أعراض هذه المشكلة هي أن كل شيء يعمل بشكل جيد من جدار الحماية/الموجه Linux الخاص بك، لكن الأجهزة خلفه لا يمكنها أبدًا تبادل الحزم الكبيرة:
- 1.
- تتصل متصفحات الويب، ثم تتعطل دون استلام بيانات.
- 2.
- يعمل البريد الصغير بشكل جيد، لكن رسائل البريد الكبيرة تتعطل.
- 3.
- يعمل ssh بشكل جيد، لكن scp يتعطل بعد المصافحة الأولية.
الحل البديل: فعّل هذا الخيار وأضف قاعدة إلى تكوين جدار الحماية الخاص بك مثل:
-
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN
-j TCPMSS --clamp-mss-to-pmtu
- --set-mss قيمة
- يضبط خيار MSS صراحةً إلى القيمة المحددة. إذا كان MSS للحزمة أقل بالفعل من القيمة، فلن يتم زيادته (بدءًا من Linux 2.6.25) لتجنب المزيد من المشكلات مع المضيفين الذين يعتمدون على MSS صحيح.
- --clamp-mss-to-pmtu
- يضبط قيمة MSS آليًا إلى (path_MTU - 40 لـ IPv4؛ -60 لـ IPv6). قد لا يعمل هذا كما هو مطلوب حيث توجد مسارات غير متماثلة مع MTU مسار مختلف — يستخدم النواة MTU المسار الذي ستستخدمه لإرسال الحزم من نفسها إلى عناوين IP المصدر والوجهة. قبل Linux 2.6.25، تم اعتبار MTU المسار إلى عنوان IP الوجهة فقط بواسطة هذا الخيار؛ النوى اللاحقة تعتبر أيضًا MTU المسار إلى عنوان IP المصدر.
هذه الخيارات متعارضة.
TCPOPTSTRIP¶
سيقوم هذا الهدف بإزالة خيارات TCP من حزمة TCP. (سيستبدلها فعليًا بـ NO-OPs.) على هذا النحو، ستحتاج إلى إضافة معاملات -p tcp.
- --strip-options خيار[,خيار...]
- يزيل الخيار (الخيارات) المحددة. يمكن تحديد الخيارات برقم خيار TCP أو باسم رمزي. يمكن الحصول على قائمة الخيارات المعترف بها عن طريق استدعاء iptables مع -j TCPOPTSTRIP -h.
TEE¶
سيقوم هدف TEE باستنساخ حزمة وإعادة توجيه هذه النسخة إلى جهاز آخر على مقطع الشبكة المحلي. بمعنى آخر، يجب أن يكون nexthop هو الهدف، أو ستحتاج إلى تكوين nexthop لإعادة توجيهها أكثر إذا رغبت في ذلك.
- --gateway عنوان_ip
- أرسل الحزمة المستنسخة إلى المضيف الذي يمكن الوصول إليه في عنوان IP المحدد. استخدام 0.0.0.0 (لحزم IPv4) أو :: (IPv6) غير صالح.
لإعادة توجيه كل حركة المرور الواردة على eth0 إلى صندوق تسجيل طبقة الشبكة:
-t mangle -A PREROUTING -i eth0 -j TEE --gateway 2001:db8::1
TOS¶
يضبط هذه الوحدة حقل نوع الخدمة في رأس IPv4 (بما في ذلك بتات "الأولوية") أو حقل الأولوية في رأس IPv6. لاحظ أن TOS يشارك نفس البتات مثل DSCP و ECN. هدف TOS صالح فقط في جدول mangle.
- --set-tos قيمة[/قناع]
- يصفّر البتات المعطاة بواسطة القناع (انظر الملاحظة أدناه) ويقوم بعملية XOR لـ القيمة في حقل TOS/الأولوية. إذا تم حذف القناع، يُفترض 0xFF.
- --set-tos رمز
- يمكنك تحديد اسم رمزي عند استخدام هدف TOS لـ IPv4. هذا يعني قناعًا بقيمة 0xFF (انظر الملاحظة أدناه). يمكن الحصول على قائمة أسماء TOS المعترف بها عن طريق استدعاء iptables مع -j TOS -h.
الذاكرات المساعدة التالية متوفرة:
- --and-tos بتات
- إجراء عملية AND ثنائية لقيمة TOS مع بتات. (ذاكرة مساعدة لـ --set-tos 0/بتات_معكوسة، حيث بتات_معكوسة هي النفي الثنائي لـ بتات. انظر الملاحظة أدناه.)
- --or-tos بتات
- إجراء عملية OR ثنائية لقيمة TOS مع بتات. (ذاكرة مساعدة لـ --set-tos بتات/بتات. انظر الملاحظة أدناه.)
- --xor-tos بتات
- إجراء عملية XOR ثنائية لقيمة TOS مع بتات. (ذاكرة مساعدة لـ --set-tos بتات/0. انظر الملاحظة أدناه.)
ملاحظة: في نوى لينكس حتى الإصدار 2.6.38 وما بعده، باستثناء الإصدارات طويلة الأمد 2.6.32 (>=.42)، و2.6.33 (>=.15)، و2.6.35 (>=.14)، يوجد خطأ حيث لا يعمل تشويه TOS لـ IPv6 كما هو موثق ويختلف عن إصدار IPv4. يشير قناع TOS إلى البتات التي يرغب المرء في تصفيرها، لذا يجب عكسه قبل تطبيقه على حقل TOS الأصلي. ومع ذلك، تتجاهل النوى المذكورة أعلاه العكس مما يعطل --set-tos وذاكراته المساعدة.
TPROXY¶
هذا الهدف صالح فقط في جدول mangle، في سلسلة PREROUTING والسلاسل المعرفة من قبل المستخدم والتي تُستدعى فقط من هذه السلسلة. يعيد توجيه الحزمة إلى مقبس محلي دون تغيير رأس الحزمة بأي شكل. يمكنه أيضًا تغيير قيمة العلامة التي يمكن استخدامها بعد ذلك في قواعد التوجيه المتقدمة. يقبل ثلاثة خيارات:
- --on-port منفذ
- يحدد هذا منفذ وجهة لاستخدامه. هو خيار مطلوب، يعني 0 أن منفذ الوجهة الجديد هو نفسه الأصلي. هذا صالح فقط إذا كانت القاعدة تحدد أيضًا -p tcp أو -p udp.
- --on-ip عنوان
- يحدد هذا عنوان وجهة لاستخدامه. بشكل مبدئي، العنوان هو عنوان IP للواجهة الواردة. هذا صالح فقط إذا كانت القاعدة تحدد أيضًا -p tcp أو -p udp.
- --tproxy-mark قيمة[/قناع]
- يضع علامات على الحزم بالقيمة/القناع المعطى. يمكن استخدام قيمة fwmark المحددة هنا بواسطة التوجيه المتقدم. (مطلوب لعمل الوكيل الشفاف: وإلا سيتم إعادة توجيه هذه الحزم، وهو ما ربما لا تريده.)
TRACE¶
يضع هذا الهدف علامات على الحزم بحيث يسجل النواة كل قاعدة تطابق الحزم أثناء مرورها عبر الجداول والسلاسل والقواعد. يمكن استخدامه فقط في جدول raw.
مع iptables-legacy، يجب تحميل خلفية تسجيل، مثل ip(6)t_LOG أو nfnetlink_log، لكي يكون هذا مرئيًا. تُسجل الحزم ببادئة السلسلة: "TRACE: tablename:chainname:type:rulenum " حيث يمكن أن يكون النوع "rule" لقاعدة عادية، و"return" لقاعدة ضمنية في نهاية سلسلة معرفة من قبل المستخدم، و"policy" لسياسة السلاسل المضمنة.
مع iptables-nft، يُترجم الهدف إلى تعبير meta nftrace الخاص بـ nftables. وبالتالي، ترسل النواة أحداث التتبع عبر netlink إلى مساحة المستخدم حيث يمكن عرضها باستخدام أمر xtables-monitor --trace. للتفاصيل، راجع xtables-monitor(8).
TTL (خاص بـ IPv4)¶
يُستخدم هذا لتعديل حقل رأس TTL في IPv4. يحدد حقل TTL عدد القفزات (الموجهات) التي يمكن للحزمة عبورها حتى يتجاوز وقت بقائها.
قد يكون ضبط أو زيادة حقل TTL خطيرًا جدًا، لذا يجب تجنبه بأي ثمن. هذا الهدف صالح فقط في جدول mangle.
لا تقم أبدًا بضبط أو زيادة القيمة على الحزم التي تغادر شبكتك المحلية!
- --ttl-set قيمة
- يضبط قيمة TTL إلى `قيمة'.
- --ttl-dec قيمة
- يقلل قيمة TTL بمقدار `قيمة' مرة.
- --ttl-inc قيمة
- يزيد قيمة TTL بمقدار `قيمة' مرة.
ULOG (خاص بـ IPv4)¶
هذا هو السلف القديم الخاص بـ IPv4 فقط لهدف NFLOG. يوفر تسجيل الحزم المتطابقة في مساحة المستخدم. عند ضبط هذا الهدف لقاعدة، سيقوم نواة لينكس بإرسال هذه الحزمة متعددة الإرسال عبر مقبس netlink. يمكن لعملية أو أكثر في مساحة المستخدم الاشتراك في مجموعات متعددة الإرسال المختلفة واستلام الحزم. مثل LOG، هذا هو "هدف غير منهي"، أي يستمر اجتياز القاعدة في القاعدة التالية.
- --ulog-nlgroup مجموعة_nl
- يحدد هذا مجموعة netlink (1–32) التي تُرسل إليها الحزمة. القيمة المبدئية هي 1.
- --ulog-prefix بادئة
- يسبق رسائل السجل بالبادئة المحددة؛ بطول يصل إلى 32 حرفًا، ومفيد لتمييز الرسائل في السجلات.
- --ulog-cprange حجم
- عدد البايتات التي تُنسخ إلى مساحة المستخدم. قيمة 0 تنسخ دائمًا الحزمة بأكملها، بغض النظر عن حجمها. المبدئي هو 0.
- --ulog-qthreshold حجم
- عدد الحزم
التي تُصطف
داخل
النواة. ضبط
هذه القيمة
على،
مثلاً، 10
يُراكم عشر
حزم داخل
النواة
وينقلها
كرسالة netlink
متعددة
الأجزاء
إلى مساحة
المستخدم.
المبدئي هو
1 (للتوافق
مع
الإصدارات
السابقة).
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| iptables 1.8.13 |