略談iptables用法

2021-09-21 02:54:43 字數 3588 閱讀 2848

linux上的iptables是基於其kernel內建的netfilter,netfilter工作在核心。因此使用者一般無法直接跟核心打交道,為了解決這個問題,提供了iptables這個軟體來設定netfilter。也就是說,當我們設定規則時,要通過iptables。iptables會檢查我們設定的語法有沒有錯誤,如果沒有錯誤,這個規則會立即生效。為了實現不同的功能,iptables提供4個表,分別為raw,mangle,filter,nat。在這幾個表中的,由raw的優先順序最大,依次類推。由於raw,mangle用得少,因此這裡就不討論raw,只討論後面三個。filter表主要設定跟本主機的安全性,也是iptables中預設指定的表。在linux中提供了五個鏈,分別分input,output,forword,postrouting,prerouting。input表示請求訪問本機的資源必須經過的鏈,output表示響應客戶端的請求資源,必須經過的鏈。forword,表示要通過這個臺主機去訪問另外乙個網路必須經過的鏈。postrouting和prerouting這個兩個鏈表示,乙個做snat,乙個做dnat。snat表示,當內網的客戶機去訪問公網時,將客戶機的ip替換成linux外網的ip,從而達到連上網際網路的目的;dnat表示,當內網的主機提供一些服務時,而外網的客戶機要想訪問內網提供的資源,需要將linux與外網相連的ip替換成linux與內網相連的ip,這樣外面的客戶機才能訪問內網提供的服務。

1,表與鏈的關係,filte表用於過濾,因此應用於input,output,forward這三個鏈。而nat主要用於做位址替換,應用prerouting,postrouting,output。如下圖

2,iptables語法

iptables  [-t table] command chain [criteria] -j action

(1) table :主要用filter,nat,mangle(比較少用),如果不指定表,則預設表示filter表。

(2)command:比較常用有以下幾個,

-i(insert): 插入,如果不指定插入到第幾條,則缺省會變成鏈的第一條

-d(delete): 刪除鏈中的第幾條

-r(replace): 替換鏈的哪一條規則

-f(flush): 清空鏈的規則,如果不指定鏈,所有的鏈中的規則都會被清空

-n (new) :新建鏈,自己定義乙個鏈 

-x (delete):刪除自定義的空鏈,鏈中沒有規則和沒有被使用時,才能被刪除

-e(rename):重新命名自定義鏈

-p(policy):定義鏈的預設處理動作

-z(zero): 清空鏈的計數器

-l(list):檢視鏈中的規則 下面-n,-v,-x,--line-numbers是-l的子選項

-n(numeric):不做解析以數字的方式來顯示

-x(exactly):精確匹配,對計數器中的資料報大小不做單位換算

--line-numbers 編號顯示鏈中的規則

(3)chain鏈:預設有input,output,forward,prorouting,prerouting。必須大寫

(4)criteria:匹配條件有兩類,基本匹配和擴充套件匹配

一,基本匹配:

-o(inte***ce): 資料報的流出介面   input,forward,prerouting

(一)隱含擴充套件

--sport port 22:80表示(22到80的埠)

--tcp-flags

-p udp

--icmp-type 型別

(二)顯式擴充套件

-m state  --state (state狀態有以下常用四種)

new:tcp三次握手的第一次請求的狀態

established:tcp三次握手從第二次開始以後的狀態

--timestop  停止時間

(5) -j action(動作有以下幾中)

accept:接受

drop:拒絕

reject:拒絕(這個兩個拒絕區別在於,drop語氣沒那麼強烈)

snat  --to-source  ip 將源位址轉換成後面的ip

dnat  --to-destination ip  將目標位址轉換成後面ip

log  記錄日誌,可以將某些規則記錄下來。

3,現在舉例說明上面的用法: 

(1)檢視表中的已經定義好的規則:

iptables -l -n 或iptables -l --line-numbers 由於沒有指定檢視哪個表,預設是filter表。

iptables -t nat -l -n 查個nat表中的規則,如果要檢視更詳細的資訊則加-v

iptables -t nat -l -n -vv(v越多越詳細,表要指定)

(2)定義鏈的預設規則

iptables -p input drop(定義filter表的input鏈預設規則這drop)

(3)允許任意客戶端通過ssh連線本機(192.168.0.130是我linux的ip)

iptables -a input -d 192.168.0.130 -p tcp --dport 22 -j accept

iptables -a output -s 192.168.0.130 -p tcp --sport 22 -j accept

第一條表示允許訪問linux,第二條表示linux允許出去。由於-j 為accept,則input和output預設規則要設定為drop才有作用。

(4)允許某些客戶端通過ssh連線本機

iptables -a input -d 192.168.0.130 -p tcp --dport 22 -m iprange --src-range 192.168.0.240-192.168.0.241 -j accept

iptables -a output -s 192.168.0.130 -p tcp --sport 22 -m iprange --src-range 192.168.0.240-192.168.0.241 -j accept

(5)不允許客戶ping這台主機

iptables -a input -d 192.168.0.130 -p icmp --icmp-type 8 -j drop當執行這條命令後,本機回環測試也會無法ping通。由於規則匹配是從上往下,因此下面將使用-i命令插入到input和output鏈的最前面。

iptables -i input -i lo -j accept  預設將會插在input鏈規則的前面

iptables -i output  -o lo -j accept此時ping 自己就ok了。

(6)利用狀態檢測來放行。

iptables -i input -m state --state new,established -j accept表示如果客戶端為第乙個新發起的請求時和已建立連線的狀態則接受,當然也要放行output鏈

iptables -i output -m state --state established -j accept 在output鏈上,只放行已經建立連線的請求,絕不允許服務端主動發起new狀態。

(7)放行多個埠

iptables -a input -p tcp -m multiport --destination-port 22,53,80 -j accept

當對多個服務開放埠時,由於(6)規則,所以會只需新增input鏈

iptables 用法總結

一 iptables ip和mac繫結 方法一 iptables iptables a forward s 10.10.0.2 m mac mac source 00 10 4b 15 16 6c j accept 就將 10.10.0.2 與其mac位址繫結了 方法二 arp 192.168.0....

iptables用法總結

1.iptables的規則寫法 iptables t table command chain cretiria j action 2.t table table 表 有三個,即 filter表,nat表,mangle表,它們分別代表對經過iptables的資料報進行篩選 filter 轉譯 nat ...

各編碼格式略談

1 ascii 計算機和網路這東西嘛,大家都知道,發源於美國,而美國呢是用英語的,而英語呢 嗯,算著大小寫,字母總共就52個,再加上些別的符號,也不會很多,當通訊在美國萌芽的時候,需要表示的符號並沒有多少,用8位也就足夠了,標準ascii碼在這時應運而生了。每個字元它只用乙個位元組 即8位 來表示,...