nftables技術分享@Debian Jessie (II) - Linux

Olga avatar
By Olga
at 2014-07-15T06:28

Table of Contents

第四章 實作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檔案,

如此一來就可以方便的依照不同的使用環境切換規則設定。

--
Tags: Linux

All Comments

Enid avatar
By Enid
at 2014-07-15T20:31
讚!
Thomas avatar
By Thomas
at 2014-07-19T21:08
我自己是透過切換設定檔的方式來改變防火牆規則
Barb Cronin avatar
By Barb Cronin
at 2014-07-21T07:58
好文推

Slax 7.0.8

Dorothy avatar
By Dorothy
at 2014-07-15T01:08
剛剛在virtualbox上面試了一下 以光碟開機的話 開機後打開dolphin會有個Slax CD 這裡面有slax的程式 但是要自己做格式化把硬碟分配好 我是先用fdisk把硬碟切割以後mkfs -t ext3 /dev/sda1 之後mount -t ext3 /dev/sda1 /media ...

Slax 7.0.8

Odelette avatar
By Odelette
at 2014-07-14T23:21
不好意思 想請問 現在有一台小筆電(目前是XP) 然後想要安裝SLAX (不要用隨身碟或光碟開機) 直接安裝在硬碟上 我的步驟是要 1. 把XP格式化 2. 把SLAX先安裝到USB上 3. 用小筆電插USB用USB開機後 可以直接從USB在安裝到硬碟上嗎? 之前有看到 好像說5.X版有選項 ...

灌完NetworkManager之後,xfce的權限問題

Ingrid avatar
By Ingrid
at 2014-07-14T20:57
最近開始在玩Gentoo,source版本是hardened 3.14, 依據官方的教學一直裝到xwindows的部份 不過compile kernel的部份用genkernel很快的做過了 剛灌好xfce時,進入xwindows後,剛開始很美好, 裝好中文字形,酷音輸入法,把terminal也換掉後,想說 ...

fsck died with exit status 8

Callum avatar
By Callum
at 2014-07-14T20:51
安安 各位大德 小弟對Linux不是很熟,但網站出問題我要負責orz 目前遇到了問題如連結: http://goo.gl/6qXPB8 我照關鍵字查詢 fsck died with exit status 8 或 unrecoverable error reading M ...

Win 8.1 -> Linux Mint 17 LIVE 黑屏

Yedda avatar
By Yedda
at 2014-07-14T18:09
好不容易載了 ISO 然後有做成 USB 開機碟 然後爬文看了硬碟空間分配 分配完想要安裝 結果開機都無法進入到 LIVE 裡面,選單選完 Linux Mint 就黑屏沒再跑了 我 Fast boot, Security boot 都關了還是不行 我也不知道怎麼弄 http://goo.gl/WUjsqc ...