--- title: Lab Meeting Minutes 2023/02/07 tags: lab_meeting --- > Outline > [TOC] --- # PERAL Lab Meeting - 時間:112 年 02 月 07 日 10:00 - 地點:線上 - 線上會議連結 : [Online](https://meet.google.com/eaa-sgtg-dam?fbclid=IwAR2jlVxM6Ua-rcJ-zmp9H_rThS512P_0BhA2GS14fxCarqVdyzq656XVUCk) - 出席者:吳坤熹老師、謝萬霖、吳騰然、劉怡君、田蕙瑜、洪胤勛、丘世宇、莊才賢、紀見如、劉冠伶、林大智、繆亭霄 - 會議主題:[nftables](https://docs.google.com/presentation/d/1z5oUfqMHYFi9wnQAThr5RypnXiqY-oU4ckdGLdpU3AU/edit?fbclid=IwAR28dZY7sinHp7HRtAzDvF9OPpDB1ePJngpAV4cB2hOyEF39OG8kh6JFmu0#slide=id.g200c0d21018_0_1) - 主講者: 丘世宇 - 主記: 劉怡君 ## 會議內容 ### Introductions > nftables 中的 'nf': netfilter - netfilter - Linux kernel 中的一個網路封包處理框架 - 可以做封包過濾、網址或 port 轉譯 (NAT) 、封包紀錄或是修改封包 header - iptables - linux user space 的一個應用程式 - 可以控制 netfilter 來處理網路封包 - 只能處理 ipv4 - ip6tables: 處理 ipv6 - ebtables: 主要處理 layer 2 相關 - 滿常用來做防火牆或 NAT 之類的功能 - nftables - iptables 的後繼者 - 可以控制整個 netfilter - 與 iptables 的差異 - 不同語法 - tables 跟 chains 都可以自行設定,沒有預設 - 一條 rule 可以有多個動作 > iptables 一條 rule 一個動作 - ubuntu 22.04 預設 ### Tables, Chains and Rules - Tables - 用來裝 chains - 要指定 family 跟名字 - Chains - 用來裝 rules - 有 base chain 跟 regular chain - Rules - 對怎麼樣的封包做什麼事 ### 常用指令 - 顯示 tables ``` nft list ruleset nft -a list ruleset (顯示記數) ``` - 刪除 ``` delete table {table name} delete chain {table name} {chain name} delete rule {table name} {chain name} handle {handle num} ``` - 全部刪除 ``` flush ruleset [family] ``` ### Tables - family - table 的類型,型別為以下其中一個 - ip, ip6, inet, arp, bridge, netdev - ip: 限定 ipv4 - inet: ipv4 & ipv6 - name - table 的名字 - 新增範例 - nft add table ip block_ips ![](https://i.imgur.com/6Yggu3G.png) ### Hooks - 指定 chain 建立的時間點 ![](https://i.imgur.com/BpHRjBV.jpg) > 圖中藍色方匡為 hooks ### Chains - type - chain 的種類 - filter, nat, route - base chain - 可以指定要處理哪個階段的封包 - regular chain - 沒指定 hook,封包不會直接進來 - 可以在別的 chain 滿足某些條件後跳過來 #### Examples - 新增 base chain - `nft add chain ip block_ips “my_input { type filter hook input priority 0; policy accept; }"` - 新增 regular chain - `nft add chain ip block_ips idk` - ![](https://i.imgur.com/KRgbsfn.png) > `my_input`: base chain > `idk`: regular chain ![](https://i.imgur.com/A3nGMGV.png) ### Rules - Expression: 需要符合的條件 - Statement : 要做什麼 #### Example - 新增 - `nft add rule ip block_ips my_input ip saddr 192.168.0.101 drop` ![](https://i.imgur.com/m4FKJam.png) ### Others - `iptables-translate` - 可以把 iptables 指令轉成 nftables 指令輸出 ``` iptables-translate -A INPUT -s 192.0.2.0/24 -j ACCEPT > nft add rule ip filter INPUT ip saddr 192.0.2.0/24 counter accept ``` --- ### 建議&問題 1. Priority 的用途?[name=Lawrence] Ans: Priority的值越小,代表越優先被處理 [name=Chopin] 有 hook 即為 base chain,沒有 hook 即為 regular chain 2. Priority value 的範圍上限?[name=Jennifer] Ans: 超越 32768,但不確定上限 [name=Chopin] 3. Regular chain 可以跳到別的 regular chain 嗎?可以的話能產生無窮迴圈嗎?[name=August] Ans: 沒有辦法,會有 Too many levels ... 的 error 出來抱怨[name=Chopin] 4. Interface 不指定的話是會全部都含括進去嗎?[name=August] Ans: 指定更嚴謹 5. 可以一次設定一整個網段嗎?[name=Ashley] Ans: 可以 ![](https://i.imgur.com/ZRhTHF3.png) 6. p.14 iptables-translate 可轉換 iptables。而在 p.14 若 table 未存在,它會自動新建立一個嗎? [name=Jerry] Ans: 不確定 7. p.8 Priority 對應的是 [name=Jerry] 原本 iptables 只能依照上下文順序,透過 translate 得到的指令可以設定 priority? 8. 一個 table 裡的 family 可以有多個 name? 那在判定時,是哪個 name 優先?[name=Branko] Ans: 不可以。 待澄清的問題:兩個 table 的 family 一樣 9. 感受不到 nftable 的優勢[name=Angela] Ans: 若今日需要同時修改 arp, bridge, ip layer 的 rules,iptables 需要修改 3 tables;而 nftables 可直接在一個 table 進行修改 ![](https://i.imgur.com/kojejk8.png) 10. 在範例中 regular chain 只有示範 count 封包數量,可以在 regular chain 增加規則嗎(像 basic chain 那樣) ?[name=Toby] Ans: 可以。 ![](https://i.imgur.com/HzhjwoI.png) 11. 一個 chain 最多只存在一個 hook 嗎?[name=Edgar] Ans: 應該是。 12. Priority 綁在 hook 上面?[name=Edgar] Ans: 13. ## 待追蹤事項 1. [name=] ## 臨時動議 --- 散會結束時間: