هدف اصلی این (Mark) 32 بیتی این است که تمام این بخشهای شبکه کرنل داخلی لینوکس با استفاده از آن بهعنوان نوعی پیام در تعامل با یکدیگر باشند.
هدف MARK برای تنظیم مقادیر علامت Netfilter که با بسته های خاص مرتبط هستند استفاده می شود. این هدف فقط در جدول mangle معتبر است و در خارج از آنجا کار نخواهد کرد. مقادیر MARK ممکن است همراه با قابلیتهای مسیریابی پیشرفته در لینوکس برای ارسال بستههای مختلف از طریق مسیرهای مختلف استفاده شوند و به آنها بگوییم که از رشتههای مختلف صف (qdisc) و غیره استفاده کنند. برای اطلاعات بیشتر در مورد مسیریابی پیشرفته، مسیریابی پیشرفته لینوکس را بررسی کنید. و کنترل ترافیک چگونه . توجه داشته باشید که مقدار علامت در بسته واقعی تنظیم نشده است، بلکه مقداری است که در هسته با بسته مرتبط است. به عبارت دیگر، شما نمی توانید یک MARK تنظیم کنیدبرای یک بسته و سپس انتظار داشته باشید که MARK همچنان در میزبان دیگری وجود داشته باشد. اگر این همان چیزی است که می خواهید، بهتر است با هدف TOS که مقدار TOS را در هدر IP مخدوش می کند، استفاده کنید.
جدول ۱۱-۶. گزینه های هدف را علامت گذاری کنید
گزینه | — تنظیم-مارک |
مثال | iptables -t mangle -A PREROUTING -p tcp –dport 22 -j MARK –set-mark 2 |
توضیح | گزینه –set -mark برای تنظیم علامت مورد نیاز است. تطبیق –set -mark یک مقدار صحیح می گیرد. به عنوان مثال، ممکن است علامت ۲ را روی جریان خاصی از بستهها یا روی همه بستههای یک میزبان خاص قرار دهیم و سپس مسیریابی پیشرفته را روی آن میزبان انجام دهیم تا پهنای باند شبکه را کاهش یا افزایش دهیم و غیره. |
mangle در Netfilter، شما گزینه ای برای بسته هایی دارید که از جدول –set-mark عبور می کنند .
اکثر آموزشها و مثالها از طریق اینترنت، میگویند که این فقط یک علامت روی بسته اضافه میکند، مانند این، اما جزئیات بیشتری از اینکه چه علامتی تنظیم شده است و کجا روی بسته قرار دارد، وجود ندارد:
iptables -A PREROUTING -t mangle -i eth0 -p tcp –dport 80 -j MARK –set-mark 1
سوال من این است:
چه نوع علامتی تنظیم شده است و این علامت (Mark) دقیقاً در کجای بسته قرار دارد؟
iptables فیلتر شبکه
FWmark = Firewall Mark چیست ؟
Mark—–>> ۳۲bit
علامت (Mark) یک مقدار صحیح ۳۲ بیتی است که به یک بسته شبکه متصل شده است. برخی از بخشهای شبکه که با آن در تعامل هستند (به زیر مراجعه کنید) میتوانند عملیات بیتی روی این مقدار انجام دهند، سپس میتوان آن را بین یک مقدار ۳۲ بیتی تا مجموعهای از ۳۲ پرچم یا ترکیبی از پرچمها و مقادیر کوچکتر تفسیر کرد، بسته به اینکه چگونه یک مقدار سازماندهی استفاده از آن را انتخاب می کند ( tc (Trafic Control ) نمی توان این کار را انجام داد). البته این علامت فقط تا زمانی وجود دارد که توسط هسته لینوکس مدیریت شود . این فقط مجازی و داخلی است، زیرا نمی تواند روی سیم وجود داشته باشد. بسته به جایی که از آن استفاده می شود، ممکن است علامت فایروال، fwmark یا علامت ساده نامیده شود.
هر بسته شبکه ای که توسط هسته پردازش می شود، توسط ساختاری به نام sk_buff که در تعریف شده است، مدیریت می شود linux/include/linux/skbuff.h. این ساختار شامل متا داده های مختلف مربوط به بسته در صورت لزوم است، مانند اطلاعات IPsec در صورت وجود، ورودی کنتراک مرتبط پس از جستجو، … و همچنین علامت آن .
بخشهای مختلف پشته شبکه میتوانند این علامت را بخوانند، رفتار را بر اساس مقدار آن تغییر دهند یا آن را (دوباره) بنویسند، به عنوان مثال:
tc،
پشته مسیریابی میتواند قوانین خاصی را با ip rule (مثلاً ip rule add fwmark 1 lookup 42) تنظیم کند تا تصمیمات مسیریابی خود را با این علامت fw تغییر دهد (مثلاً استفاده از جدول مسیریابی که آن بستهها را به واسط دیگری غیر از پیشفرض ارسال میکند).
هدف اصلی این علامت (Mark) این است که تمام این بخشهای شبکه با استفاده از آن بهعنوان نوعی پیام در تعامل با یکدیگر باشند. جریان بسته در Netfilter و General Networking می تواند کمک کند تا ببینیم آن عناصر به چه ترتیبی مدیریت بسته و در نتیجه علامت آن را دریافت می کنند.
علائم مرتبط دیگری در کنار fwmark وجود دارد:
connmark، که با sk_buff یک بسته ذخیره نمی شود، اما در یک ورودی conntrack ردیابی جریان بسته ذخیره می شود . connmark آن البته می تواند توسط iptables با connmarkمطابقت و CONNMARKهدف خود استفاده شود، با یک مثال استفاده در آنجا: Netfilter Connmark To Linux و فراتر از آن! . این اجازه می دهد تا تصمیم اتخاذ شده بر اساس یک بسته واحد حفظ شود و سپس بر روی تمام بسته های یک اتصال اعمال شود.
secmarkو به همین ترتیب مربوط به آن است connsecmarkکه برای تعامل با ماژول های امنیتی لینوکس مانند SELinux در نظر گرفته شده است.
چگونه تمام بسته هایی که از یک دستگاه می آیند را علامت گذاری کنیم؟
من با استفاده از یک دستگاه tun ایجاد میکنم ip tuntap add dev tun0 mode tun، سپس میخواهم علامتی را برای همه بستههایی که از tun0 میآیند تنظیم کنم iptables -t mangle -A OUTPUT -o tun0 -j MARK –set-mark 1. اما وقتی با استفاده از قوانین مطابقت را بررسی میکنم iptables -t mangle -nvL، بستههای صفر مطابقت دارند. آیا کسی می تواند در این مورد به من کمک کند؟
در واقع من فیلترهای دیگر را امتحان کردم اما چیزی نگرفتم. آیا این ربطی به پیکربندی tun0 دارد؟
iptables
0xff = 255