關註上方 浩道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,讓我們一起去學習,一起去進步,一起去漲薪!期待您的加入~~~ 關註回復「資料」可 免費獲取學習資料 (含有電子書籍、視訊等)。
喜歡的話,記得 點「贊」 和 「在看」 哦