2019-08-18網絡
關鍵字:iptables、Linux 防火牆運維
iptables 是 Linux 上的一款防火牆配置軟件。ssh
防火牆的基本概念tcp
防火牆是指工做在計算機設備系統邊緣或網絡設備邊緣,能根據既定的規則對數據報文進行檢測並作出相應處理的模塊。這一模塊既能夠是軟件也能夠是硬件。iptables 是屬於軟件防火牆的範疇。工具
在 cent os 中防火牆分爲內核態組件與用戶態組件。其中,內核態的組件是真正用於定義規則並檢測數據報文的模塊,而用戶態的防火牆一般只直到配置內核態的規則的做用。內核態的防火牆名稱爲 netfilter,用戶態的就是 iptables。但這些組件的名稱在不一樣版本的 cent os 上會有不一樣的叫法。這種 netfileter 和 iptables 的名稱是在 cent os 6 上的名稱。但一般,咱們就簡單地認爲 iptables 就是 Linux 的防火牆就能夠了。post
Linux 防火牆的簡介學習
對於計算機設備而言,只有它須要與外界進行數據交換時它纔有必要去安裝防火牆模塊。而數據報文的流轉方向無非就三種:一、從外部流至本機應用;二、從本機應用發送至外部網絡環境;三、從外部經由本機發送至外部網絡環境。所以,防火牆最基本的幾道「檢查門坎」就是輸入、輸出與轉發了。而在 Linux 防火牆中,檢查門坎有專有詞彙,稱爲「鏈」。即「輸入鏈」、「輸出鏈」與「轉發鏈」。但真實的數據報文流轉又遠不止這麼簡單,因此還有另一些有其它用途的鏈。在 Linux 防火牆中,它們被稱爲「四表五鏈」。spa
四表:命令行
一、raw 表日誌
二、mangle 表
三、nat 表
四、filter 表
五鏈:
一、Input Chain
二、Output Chain
三、Forward Chain
四、PreRouting Chain
五、PostRouting Chain
不一樣的表中記載的是用於不一樣場景下的過濾規則。raw表下的規則是用於肯定是否對該數據包進行狀態跟蹤的,它一般涉及到 prerouting chain 和 output chain。mangle表則用於爲數據包設置標記,它一般涉及到所有的五個鏈。nat表則用於修改數據包中的源、目標地址或端口,它一般涉及到 prerouting chain, postrouting chain 與 output chain。而 filter 表則用於肯定是否放行 該數據包,它一般涉及到 input chain, forward chain 與 output chain。
在這四張表中,filter 表是用的最多的表,它也是 iptables 默認的表,在你不指定表名時,所寫的規則就默認應用到 filter 表下。而對咱們非 Linux 運維人員來講,就更是隻用的上 filter 表了,甚至於大多數時候都是將防火牆給關掉的。
Linux 的防火牆在檢查數據包時是按表按鏈順序檢查的,而且採用一種「匹配即中止」的檢查方式,若所配置的規則列表中沒有匹配的項,則按默認策略處理。Linux 防火牆表檢查順序爲:raw表、mangle表、nat表、filter表。鏈檢查順序就不說了。
iptables語法規則
首先必再次強調,iptables 其實僅僅只是一個配置工具而已,真正起到數據包過濾做用的實際上是運行於內核態的 netfilter 模塊。咱們對 iptables 的操做僅僅是配置過濾規則而已。iptables 的基本語法以下所示
iptables [-t 表名] 選項 [鏈] [條件] [-j 控制類型]
可選擇的選項有如下幾種:
一、-A
在指定鏈的末尾添加一條規則。
二、-I
在指定鏈的開頭或指定序號處插入一條規則。
三、-L
列出全部的規則條目。
四、-n
以數字形式顯示IP地址與端口。
五、-v
以更詳細的形式顯示當前規則信息。
六、--line-numbers
顯示規則的序號。
七、-D
刪除指定序號的規則。
八、-F
清空指定表內的全部規則。
九、-P
爲指定的鏈設置默認的規則。
可選擇的控制類型有如下幾種:
一、ACCEPT
容許數據包經過。
二、DROP
丟棄數據包,但不會給出任何迴應。
三、REJECT
丟棄數據包,而且給源端發送迴應。
四、LOG
記錄日誌信息,而後傳遞給下一條規則繼續匹配。
五、SNAT
修改數據包源端地址。
六、DNAT
修改數據包目的端地址。
七、REDIRECT
重定向。
DROP 與 REJECT 選項對於本機來講效果徹底同樣,都是丟棄數據包。但這兩個選項對源端來說就有很大區別了。DROP 與 REJECT 惟一的區別就是會不會給源端做出迴應。而源端在發出一個數據包時一般都會等待目的端的響應信息。若目的端對數據包採起的是 DROP 操做,則源端就只能在那苦等,直至超時。而若目的端採起的是 REJECT,源端就能當即獲得響應結果。目的端的兩種處理方式對源端的體驗就有很大的差異了。
iptables 語句要輸入的參數還挺多的,但它有一些選項有默認值,在某些狀況下能夠減小輸入量。例如,默認的表名是 filter 表,默認的鏈是全部鏈。
iptables實例
iptables -t filter -A INPUT -p tcp -j ACCEPT
上面命令表示,在 filter 表中的 input chain 追加一條規則,放行全部的 tcp 入站請求數據包。
iptables -I INPUT -p udp -j ACCEPT
上面命令表示,在 filter 表中的 input chain 插入一條規則,放行全部的 udp 入站請求。而若要在指定位置插入規則,則直接在 INPUT 後面加序號便可。在 iptables 的規則中,序號是從 1 開始的。假設咱們要將上面的規則插入到第 2 條的位置上,則能夠用:
iptables -I INPUT 2 -p udp -j ACCEPT
一樣地,刪除規則也是直接在鏈名後面加要刪除的規則序號便可,假設咱們如今要刪除規則列表中的第 3 條規則,則:
iptables -D INPUT 3
若是規則比較多,數序號很差數,則能夠在查詢時經過 --line-numbers 參數來列出每條規則的序號,例如:
[chorm@cos101 ~]$ sudo iptables --line-numbers -L Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh 2 ACCEPT tcp -- anywhere anywhere Chain FORWARD (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination
查看當前全部規則信息可使用 iptables -L 命令,加多一個 -v 參數會多顯示幾列數據出來。
iptables -L -v [chorm@cos1 ~]$ sudo iptables -L -v Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 1157 79453 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED 0 0 ACCEPT icmp -- any any anywhere anywhere 0 0 ACCEPT all -- lo any anywhere anywhere 0 0 ACCEPT tcp -- any any anywhere anywhere state NEW tcp dpt:ssh 14 862 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited 0 0 DROP tcp -- any any anywhere anywhere Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 99 packets, 12603 bytes) pkts bytes target prot opt in out source destination
加多一個 -v 參數多顯示出來的幾列數據,值得咱們關注的是最前面兩列 pkts 與 bytes。它們表示的是當前規則匹配過的包數量與字節數量(不論是否成功匹配)。一般運維人員能夠經過這些信息來調整規則順序,將比較少出現的數據包類型移到後面,高頻類型數據包規則移到前面,這樣能夠減小規則匹配次數,從而減小系統資源的浪費狀況。
經過命令行設置的過濾規則都是一次性生效的。在你重啓系統之後這些規則就沒有了。若是想要讓本身配置的規則永久生效,則須要將當前規則導出到外部配置記錄文件中。這個用於記錄 iptables 配置規則的外部文件位於
/etc/sysconfig/iptables
而保存規則的命令爲
service iptables save
還有更多高級規則的設置暫時就不列了,例如 iptables 的通用匹配規則、隱含匹配規則與顯式匹配規則。有須要的話再自行查詢詳細用法就行了,筆者這邊關於 Linux 的防火牆也僅僅是出於拓展知識面的目的來學習的,能達到掃盲的效果就能夠了,反正我平時用 Linux 時也是要關掉防火牆的。