linux-iptables增、刪、改、保存


iptables基礎:
iptables的5條鏈分別是:
prerouting 路由前
input 發到本機進程的報文
ouput 本機某進程發出的報文
forword 轉發
postrouting 路由后
iptables的4張表:
filter 負責過濾工程,防火牆; 內核模塊:iptables_filter
nat 網絡地址轉換功能,內核模塊:iptables_nat
mangle 拆解報文,做出修改,並重新封裝,內核模塊:iptables_mangle
raw 關閉nat表上啟用的連接追蹤機制,iptables_raw

postrouting    路由后
iptables其實不是真正的防火牆,我們可以將其理解為一個客戶端代理,用戶通過iptables這個代理,將用戶的安全設定執行到對一個的“安全框架”(netfilter)中,這個框架才是真正的防火牆。
netfilter是防火牆真正的框架,netfilter位於內核空間。
iptables其實是一個命令工具,位於用戶空間,我們用這個工具操作真正的框架。
鏈與表對應的功能:
prerouting的規則可以存在於:raw表、mangle表、nat表。
input的規則可以存在於:mangle表、filter表、(centos7中還有nat表,centos6中沒有)
forword的規則可以存在於:mangle表、filter表。
output的規則可以存在於:raw表、mangle表、nat表、filter表。
postrouting的規則可以存在於:mangle表、nat表。

在實際的使用過程中,通常是以表作為操作入口,對規則進行定義,表與鏈的關系羅列:
raw表的規則可以被prerouting、output使用
mangle表的規則可以被prerouting、input、forword、output、postrouting使用
nat表中的規則可以被prerouting、output、postrouting使用
filter表中的規則可以被input、forword、output使用

一. 對iptables進行查詢
1.查詢每張表中的含有的鏈:
iptables -t 表名 -L
-t 指定要操作的表;-L 列出規則

![](https://img2018.cnblogs.com/blog/1890094/201912/1890094-20191216102646054-132322971.png)
2.查詢每張表中的鏈里面對一個的規則:
iptables -t filter -L INPUT/OUTPUT/FORWORD/PREROUTING/POSTROUTING
![](https://img2018.cnblogs.com/blog/1890094/201912/1890094-20191216104105146-888823344.png)
pkts:對應的規則匹配到的報文數
bytes:對應匹配到的報文包的大小總和
target:規則對應的target,往往表示規則對應的“動作”,即規則匹配成功后需要采取的措施
prot:表示規則對應的協議,是否只針對某些協議應用此規則
opt:表示規則對應的選項
in:表示數據包由哪個接口網卡接入,我們可以設置通過哪塊網卡流入的報文需要匹配當前的規則
out:表示數據包由哪個接口(網卡)流出,我們可以設置通過哪塊網卡流出的報文需要匹配當前的規則
source:表示規則對應的源頭地址,可以是一個IP,也可以是一個網段
destination:表示規則對應的目標地址,可以是一個ip,可以是一個網段
3.iptables --line-number -t 表名 -L 鏈名   查看某張表中的某條鏈
![](https://img2018.cnblogs.com/blog/1890094/201912/1890094-20191216110140036-553929005.png)
--line-number 表示顯示規則的序號; -n 表示不解析ip地址

二. 對iptables進行“增、刪、改”操作

iptables -F INPUT 清空filter表中的規則
1.增加規則
iptables -t filter -I INPUT -s 192.168.2.85 -j DROP
-t 指定要操作的表
-I 表示insert,即插入的意思,指定插入到哪一條鏈中
-s 指明匹配條件中的(source)源地址,如果報文的源地址屬於-s對應的地址,那么報文滿足匹配條件
-j 指明當匹配條件被滿足時,所對應的動作,上例中指定的動作為DROP,在上例中,當報文的的源地址為192.168.2.85時,報文則被DROP(丟棄)
再次查看filter表中的INPUT鏈,發現規則已經被添加了,,在iptables中,動作被稱之為“target”,所以上圖中target字段對應的動作為DROP
此時,通過192.168.2.85去ping主機93

如上圖所示,ping 93主機時。沒有回應,iptables已經生效,ping發送的報文沒有被93主機接受,而是被丟棄了。
現在INPUT鏈中已經存在了一條規則,它拒絕所有的192.168.2.85主機中的報文,此時,我們在這條規則之后再配置一條規則,后面的規則規定規定接受所有來自192.168.2.85的報文,測試此時iptables是否會接受來自192.168.2.85的報文?

-A 在鏈的尾部追加一條規則
此時查看INPUT鏈,發現規則已經成功追加至INPUT鏈的末尾,此時ping192.168.2.85主機

發現仍然ping不通,第二條規則沒有生效。計數器上也可以看到沒有任何報文被第二條規則匹配到。
現在,添加一條新規則到鏈首,新規則仍定義接受所有192.168.2.85的報文

現在第一條規則就是可以接受來自192.168.2.85的所有報文,而且此時計數是0,此刻,再從85上向93發起請求

93主機上已經可以正常接收到響應報文了,此時93主機上的INPUT鏈,第一條規則的計數器顯示已經匹配到的報文數量。

所以說匹配規則的順序很重要,如果報文已經被前面的規則匹配到,iptables則會執行對應的動作,及時后面的規則也能匹配到當前的報文,很有可能沒有機會再對報文執行相應的動作了。以上圖為例,報文被第一條規則匹配到,於是當前報文就被放行了,因為報文已經被執行了,所以,即使上圖中的第二條規則能夠匹配到剛才放行的報文,也沒有機會再對剛才的報文進行丟棄動作了,這就是iptables的工作機制。
使用--line-number選項可以列出規則的序號,如下圖所示

我們也可以在添加規則時,指定新增的規則的編號,這樣我們就能在任意位置插入規則了
iptables -t filter -I INPUT 2 -s 192.168.2.85 -j ACCEPT

2.刪除規則
刪除匹配規則有如下兩種方法:
方法一 根據規則編號去刪除
方法二 根據具體的匹配條件與動作刪除規則
使用方法一刪除第三條規則:

-D 表示刪除指定鏈中的某條規則,-D INPUT 3表示刪除INPUT鏈中的第三條規則
使用方法二刪除第三條規則:

不過刪除時一次匹配一條規則
3.修改規則
修改某條規則中動作,例如將INPUT中的DROP動作改為REJECT
iptables -t filter -R INPUT 1 -s 192.168.2.235 -j REJECT

-R 表示修改指定的鏈,—R INPUT 1表示修改INPUT鏈中的第一條規則,-j REJECT表示將INPUT鏈中的第一條規則的動作修改為REJECT
再次從235主機向93主機發起ping請求

如圖所示,直接提示目標不可達,而DROP是直接卡在那里。REJECT比DROP更加干脆
其實,我們還可以修改指定鏈的“默認策略”

每張表的每條鏈中都有默認策略,我們可以理解為默認動作。
當報文中么有被任何規則時,防火牆會按照默認動作處理報文,我們可以修改指定鏈的默認策略。

-P 指定要修改的表,-P FORWARD DROP表示將FORWARD鏈的默認策略改為DROP
4.保存規則
在默認情況下,我們對防火牆所做出的修改都是臨時的,換句話說就是重啟iptables服務或者重啟服務器后,平常添加的規則或者對規則做出的修改都將消失,為了防止這種情況的發生,我們需要將規則保存。
centos6中: service iptables save 規則默認被保在/etc/sysconfig/iptables文件中
centos7中:
#配置好yum源以后安裝iptables-service
# yum install -y iptables-services
#停止firewalld
# systemctl stop firewalld
#禁止firewalld自動啟動
# systemctl disable firewalld
#啟動iptables
# systemctl start iptables
#將iptables設置為開機自動啟動,以后即可通過iptables-service控制iptables服務
# systemctl enable iptables


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM