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

Callum avatar
By Callum
at 2014-07-13T18:03

Table of Contents

本技術分享一共分為四章

第一章 緒言
第二章 環境簡介
第三章 nftables簡易規則介紹
第四章 實作nftables與開機載入規則分享

本文(I)將介紹第一章至第三章,

第四章將於(II)進行介紹。



第一章 緒言

由於netfilter已經宣佈了nftables及將自kernel 3.13版本後,

陸續的取代使用許久的iptables。

手邊剛好有了一台沒有任何用途使用中的電腦,

故便幫各位Debian的使用者們,

對nftables進行了簡單的測試。




第二章 環境簡介

本次的測試硬體與軟體環境如下:

DHCP浮動ip網段

某不知名Intel Core Duo 雙核心單執行緒CPU乙顆

G31晶片組主機板

RTL8168 ethernet晶片網卡乙張

Debian Jessie 64bit boot up with SystemD



由於本次使用的硬體僅為單網卡的電腦,

故本次測試的nftables範圍,

就沒有包含到了使用NAT的規則部份。




第三章 nftables簡易規則介紹

由於近日以來,

部份勇於嘗試新鮮的linux distro,

皆提供了其發行板所使用的套件庫內nftables可安裝packages,

並release了nftables相關的wiki文件[1][2],

很可惜的,

在下必須向各位說聲抱歉,

目前debian官方並未提供詳細的nftables wiki相關文件,

不過由於netfilter的官方文件[3]與諸多先進們曾留下的howto筆記中[4][5],

我們仍可以透過這些資訊,

來進行一個基本的nftables study。



於debian jessie中,

目前我們已經可由apt套件庫安裝上nftables,

# apt-get install nftables


在安裝好nftables後,

我們可以看一下/etc/nftables的目錄,

所有最基本的nftables設定皆放在此目錄中。

#ls -l| /etc/nftables

您會看到類似像是這樣的畫面:

-rwxr-xr-x 1 root root 217 5月 28 15:42 bridge-filter
-rwxr-xr-x 1 root root 207 5月 28 15:42 inet-filter
-rwxr-xr-x 1 root root 202 5月 28 15:42 ipv4-filter
-rwxr-xr-x 1 root root 94 5月 28 15:42 ipv4-mangle
-rwxr-xr-x 1 root root 160 5月 28 15:42 ipv4-nat
-rwxr-xr-x 1 root root 206 5月 28 15:42 ipv6-filter
-rwxr-xr-x 1 root root 98 5月 28 15:42 ipv6-mangle
-rwxr-xr-x 1 root root 164 5月 28 15:42 ipv6-nat

各位其實可以發現,

iptables中我們可以設定的規則,

都可以在nftables上的設定檔中來進行設定。

此次我們僅測試到的是ipv4與ipv6的基本功能,

我們便使用ipv4-filter與ipv6-filter這兩個檔案進行匯入

匯入的方式很簡單,

我們可以下這兩個指令,

將ipv4與ipv6的規則迅速的匯入。

# nft -f /etc/nftables/ipv4-filter

# nft -f /etc/nftables/ipv6-filter

此時您可以使用這兩個指令來去察看ipv4與ipv6的現存設定

# nft list table ip filter

# nft list table ip6 filter

這時您看到的畫面,

與您直接cat /etc/nftables/ipv4-filter,

以及cat /etc/nftables/ipv6-filter這兩個指令看到的畫面,

會看到相同的東西。


先來個簡單又實用的example!

若擋了所有input的連線,

但電腦仍然需要上網,

則勢必要讓主動連外的封包可以回來:

# nft add rule ip filter input ct state established accept

同樣的若要是在ipv6的環境下,

也可以加入在ipv6的規則中:

# nft add rule ip6 filter input ct state established accept



在linux上使用ssh來遠端連線是很基本的需求,

使用nfs進行傳送檔案更不用說了,

故依照我們的需求開port也是很理所當然的事情。

假設本機的ssh port在4444,

那麼以下的這條規則就可以幫各位開好了ssh使用的port:

# nft add rule ip filter input tcp dport 4444 accept

當所需要開啟的port不只一個,

在nftables中可以很簡單的使用multi port的方式,

以一條規則開啟多個port,

假設今天要開啟3333、4444以及5555這3個tcp的port,

那麼只要下這一個指令就可以一氣呵成。

# nft add rule ip filter input tcp dport {3333,4444,5555} accept



阻擋某一個ip也是很基本的需求,

假設今天要阻擋來自於ip 1.2.3.4的電腦的連線:

# nft add rule ip filter input ip saddr 1.2.3.4 drop



阻擋某個mac address的網卡的連線,

當然也不會是太困難的事情!

假設今天要阻擋來自00:11:22:33:44:55這個mac address的網卡的連線:

# nft add rule ip filter input ether saddr 00:11:22:33:44:55 drop



其餘部份於(II)繼續進行介紹!




參考文獻


[1] http://wiki.gentoo.org/wiki/Nftables
[2] https://wiki.archlinux.org/index.php/nftables
[3] http://wiki.nftables.org/wiki-nftables/index.php/Main_Page
[4] https://home.regit.org/netfilter-en/nftables-quick-howto/
[5] http://kernelnewbies.org/nftables_examples

--
Tags: Linux

All Comments

Bethany avatar
By Bethany
at 2014-07-16T09:19
先推,可是好懶得學新東西(倒 舊機器的也不太敢動
Faithe avatar
By Faithe
at 2014-07-17T21:00
有網頁版的嗎?
Jake avatar
By Jake
at 2014-07-18T17:01
可以動態開port嗎?
Sierra Rose avatar
By Sierra Rose
at 2014-07-19T09:12
這文看起來像是在個人blog筆記 還是其他閱讀版本
Regina avatar
By Regina
at 2014-07-21T21:35
@kadok:本篇分享目前只有在本版公開貼出,並沒有在其他
blog或是網站公開貼出,若您想要轉錄至其他blog也非常歡迎
Rebecca avatar
By Rebecca
at 2014-07-26T08:10
!歡迎隨意轉錄取用。

Re: cdlinux在安裝無線網卡驅動程式的問題

Leila avatar
By Leila
at 2014-07-10T16:43
看畫面應該是ubuntu...應該atat 你應該會找到一個類似程式集的地方,就是裡面有很多程式 裡面就會有終端機了,或是叫terminal 點開之後,輸入 cd 網卡目錄位置 切換目錄 然後再打./install.sh 希望對你有幫助,雖然我覺得不會有任何幫助XD 就當我來賺p幣好了XD ※ 引述《boos ...

CentOS Release 7 is out

Caroline avatar
By Caroline
at 2014-07-10T14:51
※ 引述《lucieun (血月)》之銘言: : http://lists.centos.org/pipermail/centos-announce/2014-July/020393.html : CentOS 7出了 : 這次好快,RHEL 7也不過6月初才發布 : 只過了一個月就立即跟進 : 趕快載下來玩 ...

cdlinux在安裝無線網卡驅動程式的問題

Liam avatar
By Liam
at 2014-07-09T16:57
最近下載了CDlinux 然後買了一張支援linux的無線網卡 裡面付了一個linux的驅動程式 如下圖: http://i.imgur.com/zRcSDb0.jpg 不過試了很久還是不會執行install.sh 請問一下大家... 這檔案是不是要打指令 怎麼打啊... 網路上寫的我看不太懂== ...

把兩個資夾裡,如何取出相同的檔案

Kelly avatar
By Kelly
at 2014-07-09T10:25
我有A跟B兩個資料夾 裡面有很多檔案,還有子目錄 我想要把A跟B裡相同的檔案都取出來放在一個叫common的資料夾裡 請問該怎麼做? 由於這兩個資料夾是embedded system的rootfs 裡面有busybox建立的soft link 我有試著用find -type l先把soft link找出來, ...

請問一個我從沒看過的狀況問題..

Anonymous avatar
By Anonymous
at 2014-07-09T00:17
剛螢幕開起來看發現已經當機多時.. 重開機後是這樣的畫面 http://ppt.cc/n0WC 請問這是什麼狀況? thx~ - ...