[分享] nftables技術分享@Debian Jessie (II)

看板Linux作者 (Debian)時間11年前 (2014/07/15 06:28), 11年前編輯推噓3(300)
留言3則, 3人參與, 最新討論串1/1
第四章 實作nftables與開機載入規則分享 本章節即將以一實例運作的nftables, 來介紹nftables在Debian Jessie可以如何運作。 我們在測試所使用的這台電腦, 就直接實際測試開機規則載入執行nftables的實測。 4.1 建立nftables規則的方式 nftables的規則建立方式, 除了在第三章中我們所介紹的直接輸入nftables的指令以外, nftables本身也有一個互動式的介面, 可以讓使用者查詢/編輯目前運作中的nftables規則。 # nft -i nft -i的這個指令可以讓使用者進入nftables的互動式指令介面: nft> 而稍早我們在第三章所介紹的指令, 在互動介面中, 就可以不用輸入指令最前端的"nft"這3個英文字, 如此一來下指令的時間就縮短了一些。 而若要離開互動式介面, 則在互動式介面中輸入quit即可: nft>quit 如此一來就跳回原本使用的shell環境了。 而詳細的nftables指令, 可以在man裏面查詢nftables的指令規則, 安裝好nftables後man裏面就有詳細的資料囉! 4.2  nftables運作實例 一個完整的防火牆, 在電腦開機後進入系統, 就需要自動運行了, 而如何讓nftables在Debian Jessie上自動的運行呢? 這個問題非常好! 在debian中不用額外撰寫任何的script, 便有現成的方法讓nftables自動運行。 在早期我們操作iptables的開機規則載入時, 我們將iptables-restore指令寫在/etc/network/if-pre-up.d中, 給予其x權限, 使得我們所建立的iptables規則得以於開機時自動載入並且執行。 同樣的nftables也可以依樣畫葫蘆! 在Debian Jessie中nftables的規則檔案, 目前經過測試可成功運行的載入方法有兩種, 分別是: 1. 複製/etc/nftables中的設定,   並且在複製的設定中編輯所需的規則, 於開機時設定由/etc/network/if-pre-up.d建立的nftables載入指令, 來去載入編輯好的nftables規則。 2. 於/etc目錄中, 隨意touch一檔案, 將nftables規則寫於此檔案中, 在由/etc/network/if-pre-up.d建立的nftables載入指令,   使其自動執行編輯的nftables指令檔。 由於方法2可以讓使用者看到完整的nftables指令, 如此一來就算不常編輯nftables規則, 也比較不容易忘記nftables的指令語法。 亦為筆者較為推荐的方式。 故於在第四章中, 便以方法2進行示範! 為了避免視覺性的混淆, 示範的過程將會將ipv4與ipv6設定的檔案以不同的檔名做區分。 首先我們先在/etc中分別建立ipv4規則與ipv6規則的檔案, 以範例中的電腦, 是直接建立在/etc/nftables中, 分別建立檔案名稱為4與6的檔案予以分別放置ipv4與ipv6的規則, 為了避免一般使用者cd至nftables目錄後可以使用cat指令看到nftables的規則, 加上此兩個檔案必須進行載入而需要使用x權限, 故我們將此兩檔案權限設定為700。 我們簡單測試的ipv4的nftables規則加至檔案名稱為4的檔案如下: nft add rule ip filter input ct state established accept nft add rule ip filter input tcp dport {1234,5678} accept nft add rule ip filter input icmp type {echo-request} accept nft add rule ip filter input drop nft add rule ip filter forward drop ipv6的nftables規則加至檔案名稱為6的檔案如下: nft add rule ip6 filter input ct state established accept nft add rule ip6 filter input drop nft add rule ip6 filter forward drop 編輯好所需要的規則後, 再來就是處理開機載入的部份了! 我們到了/etc/network/if-pre-up.d目錄中, 分別建立自動載入ipv4與ipv6規則的兩個檔案, ipv4的檔案隨意命名為4start, ipv6的檔案隨意命名為6start, 在4start的檔案中, 我們寫入以下的指令: #!/bin/sh /usr/sbin/nft -f /etc/nftables/ipv4-filter;/usr/sbin/nft flush table ip filter;/etc/nftables/4 而在6start的檔案中, 我們寫入以下的指令: #!/bin/sh /usr/sbin/nft -f /etc/nftables/ipv6-filter;/usr/sbin/nft flush table ip6 filter;/etc/nftables/6 完成此兩個檔案後, 切記必須要把兩個檔案的權限設為700, 如此一來開機後, 才會自動載入/etc/nftables/4, 以及/etc/nftables/6這兩個以設定好的規則檔案。 這時候重新開機試試看吧! 重新開機後, 我們下nft list table ip filter指令, 將會看到: table ip filter { chain input { type filter hook input priority 0; ct state established accept icmp type { echo-request} accept tcp dport { 1234, 5678} log accept drop } chain forward { type filter hook forward priority 0; drop } chain output { type filter hook output priority 0; } } 也就是剛才我們設定在/etc/nftables/4中的規則, 這樣就成功了。 那麼來檢查看看試試看ipv6的規則, 下了nft list table ip6 filter指令, 將會看到: table ip6 filter { chain input { type filter hook input priority 0; ct state established accept drop } chain forward { type filter hook forward priority 0; drop } chain output { type filter hook output priority 0; } } 這也就是我們在/etc/nftables/6檔案中所設定的ipv6規則, 如此一來就證明我們的開機自動規則載入設定成功! 4.3 新增/移除/重新載入規則 當需要調整規則時, 不管是新增/移除/調整前後規則並且重新載入, nftables都可以順利的進行, 不過由於nftables本身不會判斷重複設定的規則, 故若是由設定檔中載入nftables的規則, 勢必需要先進行flush規則的動作, 再次進行載入規則, 以本次測試電腦的ipv4來說, 先行更動/etc/nftables/4中的檔案, 再來執行/usr/sbin/nft flush table ip filter, 最後執行/etc/nftables/4, 如此依來才可以讓nftables更新規則時不會重複載入相同的規則, 不過由於這樣指令太長, 對打字速度慢或是懶的打很多字的使用者並不吃香, 若您們與筆者一樣為lazy guy, 可以學筆者將flush的指令與載入規則的指令, 寫於/usr/local/sbin中, 如此一來只要打簡短幾個字, 就可以一次進行flush與載入規則的動作! 在/usr/local/sbin中, 我們建立一個ipv4使用的檔案假設叫作4reload好了, 並在4reload中加入下列指令: #!/bin/sh /usr/sbin/nft flush table ip filter;/etc/nftables/4 另外也可以建立一個ipv6使用的檔案假設叫作6reload, 在6reload中加入下列指令: #!/bin/sh /usr/sbin/nft flush table ip6 filter;/etc/nftables/6 並將此兩檔案權限設為700, 如此一來只要打上4reload這幾個字, 就可以讓nftables重新載入/etc/nftables/4中新設定好的ipv4規則。 而同樣的若打上6reload這幾個字, 就可以讓nftables重新載入/etc/nftables/6中新設定好的ipv6規則。 nftables的規則載入運作在Debian Jessie就是這麼簡單! 若要測試NAT等所需的規則設定, 也可以用同樣的方式以此類推來進行自動載入。 若想要在不同的網路使用場所使用不同的nftables規則, 亦可進行不同場所所需的nftables規則, 當把電腦帶到不同的地方, 就可以立刻載入不同設定的rules檔案, 如此一來就可以方便的依照不同的使用環境切換規則設定。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.29.198 ※ 文章網址: http://www.ptt.cc/bbs/Linux/M.1405376916.A.A87.html ※ 編輯: Debian (118.160.29.198), 07/15/2014 06:48:53

07/15 11:57, , 1F
讚!
07/15 11:57, 1F

07/15 15:41, , 2F
我自己是透過切換設定檔的方式來改變防火牆規則
07/15 15:41, 2F

11/20 11:10, , 3F
好文推
11/20 11:10, 3F
文章代碼(AID): #1Jn5cKg7 (Linux)