當前位置: 妍妍網 > 碼農

沒有掌握這些,不用輕易說精通iptables防火墻~

2024-05-07碼農

關註上方 浩道Linux ,回復 資料 ,即可獲取海量 L inux Python 網路通訊、網路安全 等學習資料!

前言

大家好,這裏是 浩道Linux ,主要給大家分享 L inux P ython 網路通訊、網路安全等 相關的IT知識平台。

好多朋友面試時經常在簡歷上宣稱自己精通iptables防火墻了,但是如果沒有掌握到其方方面面,不要輕易說精通。因為很容易被面試官拿捏,本文浩道就跟大家分享Linux系統iptables硬核幹貨,透過對其概念、工作流程、其結構、其添加規則相關用法去開展,讓大家朝著精通邁進!

一、iptables簡介

iptables是linux系統內建的一款優秀,並且是開放原始碼的完全的自由的軟體工具。這是一款 基於包過濾的防火墻工具 ,具有功能強大、使用靈活等特點,可以對流入和流出伺服器的封包進行靈活控制。

1、表(tables)的概念

表(tables)是用來存放鏈的,即看作是鏈的一個容器。

2、鏈(chains)的概念

鏈(chains)是用來存放規則的,即看作是規則的一個容器。

3、規則(policy)的概念

規則(policy)就是iptables用於過濾相關封包的一種規範。

二、iptables工作流程

1、防火墻是一層層過濾的,就是按照配置規則的順序從上到下,從前到後進行過濾的。

2、如果匹配上了相應的規則,即明確表明是阻止還是透過,此時封包就不再向下匹配新的規則了。

3、如果所有的規則中沒有明確表明是阻止還是透過這個封包,也就是沒有匹配上規則,則繼續向下進行匹配,直到匹配預設規則得到明確的阻止還是透過。

4、防火墻的預設規則是對應連結串列的所有規則執行完成後,才會執行的規則。

三、iptables中的四表五鏈

1、iptables中存在的4種表:

1) f ilter :主要用於過濾的,控制封包是否允許進出及轉發。

filter表中的鏈有 INPUT FORWARD OUTPUT

2) nat :主要用於控制封包中地址轉換,即來源IP和埠與目的IP和埠

的轉換。

nat表中的鏈有 PREROUTING INPUT OUTPUT POSTROUTING

3) mangle :主要用於修改封包中的原數據,如打標記。

mangle表中的鏈有 PREROUTING 、IN PUT FORWARD OUTPUT

POSTROUTING

4) raw :主要用於控制nat表中連線追蹤機制的啟用狀況。

raw表中的鏈有 PREROUTING OUTPUT


2、iptables中的存在的5種鏈,這裏必須是大寫:

1) PREROUTING :指的是進入路由之前的封包。

2) INPUT :指的是過濾進來的封包。

3) FORWARD :指的是轉發。

4) OUTPUT :指的是發出去的封包。

5) POSTROUTING :指的是路由之後修改的封包。

四、iptables安裝

iptables是centos5或centos6版本內建的軟體,而centos7是不內建的,因為centos7預設安裝了firewalld。所以我們需要安裝下iptables。

1、yum安裝命令如下

[root@haodaolinux1 ~]# yum install -y iptables iptables-services

2、啟動iptables防火墻

先關閉系統內建的firewalld,再啟動iptables服務,具體命令如下所示:

[root@haodaolinux1 ~]# systemctl stop firewalld[root@haodaolinux1 ~]# systemctl disable firewalld[root@haodaolinux1 ~]# systemctl start iptables

3、iptables配置檔

配置檔 位置/etc/sysconfig/iptables-config

記錄規則檔 位置/etc/sysconfig/iptables

五、iptables命令參數

1、可以 透過iptables --help檢視iptables具體參數用法 以下羅列常見參數:

1、 -n :以數位形式顯示地址及埠等相關資訊;

2、 -L :列出一個鏈或所有鏈中的規則相關資訊;

3、 -v :以更詳細的方式顯示規則相關資訊;

4、 -F :清空所有的規則資訊;

5、 -D :刪除鏈內指定內容(如序號)的一條規則資訊;

6、 -P :為指定的鏈設定預設規則;

7、 -t :指定表名,如果不指定-t,預設使用filter表;

8、 -I :在鏈的開頭或者指定序號插入一條規則資訊;

9、 -A :在鏈的末尾追加一條規則資訊;

10、 --line-number :用於檢視規則時,顯示其在鏈上的相應的編號;

11、 -S :用於顯示指定鏈的所有規則資訊;

12、 -m iprange --src-range :用於IP匹配,指定多個連續的源IP地址;

13、 -m multiport --sports :用於埠匹配,指定多個源埠;

14、 -m multiport --dports :用於埠匹配,指定多個目的埠;

15、 -m mac --mac-source :用於mac地址匹配,指定某個mac地址;

2、參數使用例項講解:

1、 預設檢視規則 ,命令如下:

[root@haodaolinux1 ~]# iptables -L

2、 指定表名檢視規則 ,命令如下:

[root@haodaolinux1 ~]# iptables -t nat -L

3、 以數位形式顯示地址及埠等相關資訊 ,命令如下:

[root@haodaolinux1 ~]# iptables -nL

4、 顯示規則行號 ,命令如下:

[root@haodaolinux1 ~]# iptables -nL --line

5、 清空所有規則資訊 ,命令如下:

[root@haodaolinux1 ~]# iptables -F

6、 清空某一個鏈裏面的規則資訊 ,命令如下:

[root@haodaolinux1 ~]# iptables -F 鏈名

7、 將規則保存到檔中 ,命令如下:

[root@haodaolinux1 ~]# service iptables save

[root@haodaolinux1 ~]# iptables-save > /etc/sysconfig/iptables

六、iptables語法詳解

1、 iptables基本語法格式 ,如下命令所示:

iptables -t 表名 動作規則 [鏈名] [匹配條件] [-j 控制型別]

參數解釋:

-t :用於指定表名,不寫預設是使用filter表;

動作規則 :表示要添加規則還是刪除規則;

常用動作規則 有如下:

-D :表示刪除規則;

-R :表示修改規則;

-A :表示追加規則,預設追加到鏈的末尾;

-I :表示插入規則,在鏈的開頭或者指定序號處插入一條規則;

-N :表示自訂鏈;

-P(大寫) :表示修改預設規則;

[鏈名] :表示實際鏈名;

[匹配條件] :表示實際匹配條件,可以匹配封包ip,埠,tcp等特征,如透過 -p (小寫)指定 報文型別

[-j 控制型別] :用於控制型別,表示透過前面匹配到之後是丟棄還是保留相關封包的處理方式;

常用的控制型別 有如下:

ACCEPT :表示允許;

REJECT :表示拒絕;

DROP :表示丟棄;

2、iptables規則添加例項

1、 指定filter表INPUT鏈末尾添加一條規則 ,命令如下:

[root@haodaolinux1 ~]# iptables -t filter -A INPUT -p udp -j ACCEPT

檢視規則,如下圖所示:

2、 在INPUT鏈中第一行添加1條規則 ,命令如下所示:

[root@haodaolinux1 ~]# iptables -I INPUT -p tcp -j ACCEPT

檢視規則,如下圖所示:

3、 在INPUT鏈中第2行添加一條規則 ,如下命令所示:

[root@haodaolinux1 ~]# iptables -I INPUT 2 -p icmp -j ACCEPT

檢視規則,如下圖所示:

4、 刪除INPUT鏈中的第一條規則 ,命令如下所示:

[root@haodaolinux1 ~]# iptables -D INPUT 1

檢視規則,如下圖所示:

註意,以上添加刪除相關規則,需要保存,否則重新開機防火墻後規則將遺失。

3、iptables結合匹配條件規則添加例項

1、 本機上添加一條防火墻規則,禁止其它主機ping通本機 ,命令如下所示:

[root@haodaolinux1 ~]# iptables -I INPUT -p icmp -j REJECT

2、 本機上添加一條防火墻規則,拒絕192.168.3.110的主機透過SSH連線本機 ,命令如下所示:

[root@haodaolinux1 ~]# iptables-IINPUT-s 192.168.3.110-ptcp--dport 22 -jREJECT

這裏規則主要是拒絕192.168.3.100主機存取本機的22埠;

3、 本機上添加一條防火墻規則,拒絕192.168.3.110的主機存取本機的22埠及3306埠 ,命令如下所示:

[root@haodaolinux1 ~]# iptables-IINPUT-s 192.168.3.110-ptcp--dport 22:3306-jREJECT

4、 本機上添加一條防火墻規則,禁止多個主機ping通本機(透過逗號隔開多個主機) ,命令如下所示:

[root@haodaolinux1 ~]# iptables-tfilter-IINPUT-s 192.168.3.110,192.168.3.119-picmp-jREJECT

5、 本機上添加一條防火墻規則,丟棄192.168.4.0網段的封包 ,命令如下所示:

[root@haodaolinux1 ~]# iptables -I INPUT -s 192.168.4.0/24 -j DROP

6、 本機上添加一條防火墻規則,拒絕192.168.3.110-192.168.3.140連續的主機透過SSH連線本機 ,命令如下所示:

[root@haodaolinux1 ~]# iptables-IINPUT-ptcp--dport 22 -miprange--src-range 192.168.3.110-192.168.3.140-jREJECT

這裏主要透過 -m iprange --src-range 進行源IP地址的指定;

7、 本機上添加一條防火墻規則,拒絕192.168.3.110的主機存取本機的22埠及3306埠 ,命令如下所示:

[root@haodaolinux1 ~]# iptables-IINPUT-ptcp--dport 22 -mmultiport--dports 22,3306 -s 192.168.3.110-jREJECT

這裏主要透過 -m multiport --dports 進行目的埠的指定;

4、 iptables規則修改例項

1、 首先本機上新增規則 在已有規則基礎上進行修改

[root@haodaolinux1 ~]# iptables-tfilter-IINPUT-s 192.168.3.110-picmp-jREJECT[root@haodaolinux1 ~]# iptables-tfilter-IINPUT-s 192.168.3.110-ptcp--dport 22 -jREJECT

檢視已有規則,如下圖所示:

2、 本機上修改第二條規則,使得192.168.3.110主機可以ping通本機 ,命令如下所示:

[root@haodaolinux1 ~]# iptables-RINPUT 2 -picmp-s 192.168.3.110-jACCEPT

檢視已修改規則,如下圖所示:

5、針對icmp型別匹配制定規則例項

眾所周知, 禁止ping策略原則 無非 就是禁止本機ping其它主機,或者禁止其它主機ping本機

iptables中可以透過策略指定網卡的流量進入或者網卡的流量出去。分別透過以下兩個參數進行指定。

-i :即--in--interface:用於在 INPUT鏈 配置規則中,指定從哪一塊網卡 進入的流量

-o :即--out--interface:用於在 OUTPUT鏈 配置規則中,指定從哪一塊網卡 出去的流量

ping對應的報文型別 icmp ,而icmp報文型別眾多,這裏針對以下例項做兩個型別講解。

0 :Echo reply,對應的是ping的應答報文;

8 :Echo request,對應的是ping的請求報文;

iptables中可以透過 --icmp-type 來指定相關的icmp報文型別;

1、 新增規則,使得本機不能ping通其它主機,其它主機可以ping通本機,本機也可以自己ping通自己 ,命令如下所示:

[root@haodaolinux1 ~]# iptables -A INPUT -i eno16777736 -p icmp --icmp-type 0 -j DROP [root@haodaolinux1 ~]# iptables -A OUTPUT -o eno16777736 -p icmp --icmp-type 8 -j DROP

更多精彩

關註公眾號 浩道Linux

浩道Linux ,專註於 Linux系統 的相關知識、 網路通訊 網路安全 Python相關 知識以及涵蓋IT行業相關技能的學習, 理論與實戰結合,真正讓你在學習工作中真正去用到所學。同時也會分享一些面試經驗,助你找到高薪offer,讓我們一起去學習,一起去進步,一起去漲薪!期待您的加入~~~ 關註回復「資料」可 免費獲取學習資料 (含有電子書籍、視訊等)。

喜歡的話,記得 點「贊」 「在看」