سطح هسته تنها یک رابط عمومی مستقل از پروتکل را فراهم می کند که عملکردهای اساسی را برای استخراج داده ها از بسته ها، انجام عملیات داده و کنترل جریان ارائه می دهد. قوانین فیلتر و کنترل کننده های خاص پروتکل در بایت کد در فضای کاربر کامپایل می شوند، پس از آن این بایت کد با استفاده از رابط Netlink در هسته بارگذاری می شود و در هسته در یک ماشین مجازی ویژه که یادآور BPF (فیلترهای بسته برکلی) است، اجرا می شود. این رویکرد به شما این امکان را می دهد که اندازه کدهای فیلترینگ در حال اجرا در سطح هسته را به میزان قابل توجهی کاهش دهید و تمام عملکردهای تجزیه قوانین و منطق کار با پروتکل ها را به فضای کاربر منتقل کنید.
نوآوری های اصلی:
- پشتیبانی از شمارنده های بسته و ترافیک مرتبط با عناصر مجموعه به مجموعه ها اضافه شده است. شمارنده ها با استفاده از کلمه کلیدی "counter" فعال می شوند:
جدول ip x {
مجموعه y {
نوع ip sadr
مقابله با
عناصر = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}زنجیر z {
نوع فیلتر اولویت خروجی قلاب; سیاست پذیرش؛
ip daddr @y
}
} - برای تنظیم مقادیر اولیه شمارنده ها، به عنوان مثال، برای بازیابی شمارنده های قبلی پس از راه اندازی مجدد، می توانید از دستور "nft -f" استفاده کنید:
# cat ruleset.nft
جدول ip x {
مجموعه y {
نوع ip sadr
مقابله با
عناصر = { 192.168.10.35 بسته شمارنده 1 بایت 84, 192.168.10.101 \
شمارنده p 192.168.10.135 بسته شمارنده 0 بایت 0 }
}زنجیر z {
نوع فیلتر اولویت خروجی قلاب; سیاست پذیرش؛
ip daddr @y
}
}
# nft -f ruleset.nft
مجموعه قوانین لیست #nft
جدول ip x {
مجموعه y {
نوع ip sadr
مقابله با
عناصر = { 192.168.10.35 بسته شمارنده 1 بایت 84, 192.168.10.101 \
شمارنده p 192.168.10.135 بسته شمارنده 0 بایت 0 }
}زنجیر z {
نوع فیلتر اولویت خروجی قلاب; سیاست پذیرش؛
ip daddr @y
}
} - پشتیبانی ضد نیز به flowtable اضافه شده است:
میز آی پی فو {
نوار میز جریان {
اولویت ورودی قلاب -100
دستگاهها = { eth0، eth1 }
مقابله با
}زنجیر جلو {
نوع فیلتر قلاب جلو فیلتر اولویت;
flow اضافه کردن @bar counter
}
}می توانید لیست شمارنده ها را با استفاده از دستور "conntrack -L" مشاهده کنید:
tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 بسته=9 بایت=608 \
src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 بسته=8 بایت=428 [OFFLOAD] mark=0 \
secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
بسته ها=1005763 بایت=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
packets=967505 bytes=50310268 [OFFLOAD] mark=0 secctx=null use=2 - در مجموعههای الحاق (الحاق، بستههای مشخصی از آدرسها و پورتهایی که مقایسه را ساده میکنند)، میتوان از دستورالعمل "typeof" استفاده کرد که نوع داده عناصر را برای بخشهای تشکیل دهنده عناصر مجموعه تعیین میکند:
میز آی پی فو {
تنظیم لیست سفید {
نوع ip sadr . tcp dport
عناصر = { 192.168.10.35 . 80, 192.168.10.101. 80}
}نوار زنجیر {
نوع فیلتر hook prerouting priority filter; کاهش سیاست؛
آی پی بابا tcp dport @whitelist قبول کنید
}
} - نوع دستورالعمل اکنون برای پیوستن به لیست نقشه ها نیز اعمال می شود:
میز آی پی فو {
نقشه adr2mark {
نوع ip sadr . tcp dport: متا مارک
عناصر = { 192.168.10.35 . 80: 0x00000001،
192.168.10.135. 80 : 0x00000002 }
}نوار زنجیر {
نوع فیلتر hook prerouting priority filter; کاهش سیاست؛
ست متا مارک ip daddr . tcp dport map @addr2mark قبول
}
} - پشتیبانی اضافه شده برای پیوستن به محدوده در مجموعه های ناشناس (بی نام):
# nft اضافه کردن قانون inet فیلتر ورودی IP daddr. tcp dport\
{ 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } قبول کنید - قابلیت دور انداختن بستههای دارای پرچم 802.1q (VLAN) هنگام پردازش پلهای شبکه ارائه میشود:
# nft اضافه کردن قانون پل foo نوار اتر نوع vlan reject با تنظیم مجدد tcp
- اضافه شدن پشتیبانی برای تطبیق توسط شناسه جلسه TCP (شناسه conntrack). برای تعیین شناسه contrack، می توانید از گزینه "--output id" استفاده کنید:
# conntrack -L — شناسه خروجی
udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 بسته=2 \
bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 بسته=2 بایت=320 \
[مطمئن] mark=0 use=1 id=2779986232# nft اضافه کردن قانون foo bar ct id 2779986232 counter
منبع: opennet.ru