سیستم nftables با یک دستورات خط فرمان nft همراه است. این دستور جایگزین فرمان iptables خواهد بود اما ظاهر کاملا متفاوتی خواهد داشت. در صورتی که با hptables کار کده باشید، این تغییر میتوان آزار دهنده باشد، اما یک لایه هماهنگ ساز برای تبدیل دستورات iptables به nftables وجود دارد.
متاسفانه مستندات کمی برای آشنایی با این سیستم وجود دارد، در این مطلب سعی میکنیم آشنایی اولیه با این سیستم پیدا کنیم.
بررسی مثالهایی برای آشنایی
فرض کنید که میخواهید بسته های خاصی را با iptables فیلتر کنید، در iptables دستورات زیر را خواهید نوشت.
iptables -A FORWARD -p tcp --dport 22 -j LOG iptables -A FORWARD -p tcp --dport 22 -j DROP
با سیستم nftables دستور زیر را خواهید نوشت:
nft add rule filter forward tcp dport 22 log drop
فرض کنید که میخواهید بسته های چندین بسته را برای چندین پورت را فیلتر کنید و همچنین به نوع های خاص پروتکل icmpv6 اجازه عبود دهید. در iptables دستورات زیر را خواهید نوشت:
ip6tables -A INPUT -p tcp -m multiport --dports 23,80,443 -j ACCEPT ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
اما در nftables دستور زیر ر خواهید نوشت:
nft add rule ip6 filter input tcp dport {telnet, http, https} accept nft add rule ip6 filter input icmpv6 type { nd-neighbor-solicit, echo-request, nd-router-advert, nd-neighbor-advert } accept
mapping
یک ویژگی پیشرفته در nftables قابلیت مپ کردن است. این امکان وجود دارد که از داده هایی با اعواع مختلف استفاده کنیم و آنها را به هم مپ کنیم. برای مثال میتوان یک iface و مجموعه رول را به هم مرتبط کنیم. در مثال زیر زنجیره دستورات به نام low_sec و high_sec ساخته شده است.
# nft -i nft> add map filter jump_map { type ifindex => verdict; } nft> add element filter jump_map { eth0 => jump low_sec; } nft> add element filter jump_map { eth1 => jump high_sec; } nft> add rule filter input meta iif vmap @jump_map
در صورت نیاز به افزودن یک رابط شبکه، مثلا ppp1 دستور زیر را خواهیم نوشت:
nft> add element filter jump_map { ppp1 => jump low_sec; }
سرعت بروز رسانی و هسته
سیستم iptables با افزودن دستورات زیاد تر به حد زیادی دچار افت سرعت میشود. اما در سیستم جدیدتر nftables این کاهش سرعت وجود نخواهد داشت.
در سیستم iptables برای هر افزودن target یا match نیازمند ماژول و کامپایل دوباره کرنل هستیم. در سیستم nftables بیشتر وظایف در لایه کاربری انجام میشود که این مساله باعث کاهش نیاز به تغییرات هسته میشود. برای مثال ویژگی پشتیبانی از icmp6 با یک پچ قابل انجام است.
در مطلب بعدی به تغییرات معماری سیستم خواهیم پرداخت.