本文浩道跟大家分享Linux系統(tǒng)iptable硬核干貨,通過對其概念、工作流程、其結(jié)構(gòu)、其添加規(guī)則相關(guān)用法去開展,讓大家在Linux系統(tǒng)中的安全防范再添一塊技能磚!
一、iptables簡介
iptables是linux系統(tǒng)自帶的一款優(yōu)秀,并且是開放源代碼的完全的自由的軟件工具。這是一款基于包過濾的防火墻工具,具有功能強大、使用靈活等特點,可以對流入和流出服務(wù)器的數(shù)據(jù)包進(jìn)行靈活控制。
1、表(tables)的概念
表(tables)是用來存放鏈的,即看作是鏈的一個容器。
2、鏈(chains)的概念
鏈(chains)是用來存放規(guī)則的,即看作是規(guī)則的一個容器。
3、規(guī)則(policy)的概念
規(guī)則(policy)就是iptables用于過濾相關(guān)數(shù)據(jù)包的一種規(guī)范。
二、iptables工作流程 1、防火墻是一層層過濾的,就是按照配置規(guī)則的順序從上到下,從前到后進(jìn)行過濾的。 2、如果匹配上了相應(yīng)的規(guī)則,即明確表明是阻止還是通過,此時數(shù)據(jù)包就不再向下匹配新的規(guī)則了。 3、如果所有的規(guī)則中沒有明確表明是阻止還是通過這個數(shù)據(jù)包,也就是沒有匹配上規(guī)則,則繼續(xù)向下進(jìn)行匹配,直到匹配默認(rèn)規(guī)則得到明確的阻止還是通過。
4、防火墻的默認(rèn)規(guī)則是對應(yīng)鏈表的所有規(guī)則執(zhí)行完成后,才會執(zhí)行的規(guī)則。
三、iptables中的四表五鏈 1、iptables中存在的4種表:
1)filter:主要用于過濾的,控制數(shù)據(jù)包是否允許進(jìn)出及轉(zhuǎn)發(fā)。
filter表中的鏈有INPUT、FORWARD、OUTPUT。
2)nat:主要用于控制數(shù)據(jù)包中地址轉(zhuǎn)換,即來源IP和端口與目的IP和端口
的轉(zhuǎn)換。
nat表中的鏈有PREROUTING、INPUT、OUTPUT、POSTROUTING。
3)mangle:主要用于修改數(shù)據(jù)包中的原數(shù)據(jù),如打標(biāo)記。
mangle表中的鏈有PREROUTING、INPUT、FORWARD、OUTPUT、
????POSTROUTING。
4)raw:主要用于控制nat表中連接追蹤機制的啟用狀況。
raw表中的鏈有PREROUTING、OUTPUT。
2、iptables中的存在的5種鏈,這里必須是大寫:
1)PREROUTING:指的是進(jìn)入路由之前的數(shù)據(jù)包。
2)INPUT:指的是過濾進(jìn)來的數(shù)據(jù)包。
3)FORWARD:指的是轉(zhuǎn)發(fā)。
4)OUTPUT:指的是發(fā)出去的數(shù)據(jù)包。
5)POSTROUTING:指的是路由之后修改的數(shù)據(jù)包。
四、iptables安裝
iptables是centos5或centos6版本自帶的軟件,而centos7是不自帶的,因為centos7默認(rèn)安裝了firewalld。所以我們需要安裝下iptables。
1、yum安裝命令如下:
[root@haodaolinux1 ~]# yum install -y iptables iptables-services
2、啟動iptables防火墻
先關(guān)閉系統(tǒng)自帶的firewalld,再啟動iptables服務(wù),具體命令如下所示:
[root@haodaolinux1 ~]# systemctl stop firewalld [root@haodaolinux1 ~]# systemctl disable firewalld [root@haodaolinux1 ~]# systemctl start iptables
3、iptables配置文件
配置文件位置/etc/sysconfig/iptables-config
記錄規(guī)則文件位置/etc/sysconfig/iptables
五、iptables命令參數(shù)
1、可以通過iptables --help查看iptables具體參數(shù)用法,以下羅列常見參數(shù):
1、-n:以數(shù)字形式顯示地址及端口等相關(guān)信息;
2、-L:列出一個鏈或所有鏈中的規(guī)則相關(guān)信息;
3、-v:以更詳細(xì)的方式顯示規(guī)則相關(guān)信息;
4、-F:清空所有的規(guī)則信息;
5、-D:刪除鏈內(nèi)指定內(nèi)容(如序號)的一條規(guī)則信息;
6、-P:為指定的鏈設(shè)置默認(rèn)規(guī)則;
7、-t:指定表名,如果不指定-t,默認(rèn)使用filter表;
8、-I:在鏈的開頭或者指定序號插入一條規(guī)則信息;
9、-A:在鏈的末尾追加一條規(guī)則信息;
10、--line-number:用于查看規(guī)則時,顯示其在鏈上的相應(yīng)的編號;
11、-S:用于顯示指定鏈的所有規(guī)則信息;
12、-m iprange --src-range:用于IP匹配,指定多個連續(xù)的源IP地址;
13、-m multiport --sports:用于端口匹配,指定多個源端口;
14、-m multiport --dports:用于端口匹配,指定多個目的端口;
15、-m mac --mac-source:用于mac地址匹配,指定某個mac地址;
2、參數(shù)使用實例講解:
1、默認(rèn)查看規(guī)則,命令如下:
[root@haodaolinux1 ~]# iptables -L
2、指定表名查看規(guī)則,命令如下:
[root@haodaolinux1 ~]# iptables -t nat -L
3、以數(shù)字形式顯示地址及端口等相關(guān)信息,命令如下:
[root@haodaolinux1 ~]# iptables -nL
4、顯示規(guī)則行號,命令如下:
[root@haodaolinux1 ~]# iptables -nL --line
5、清空所有規(guī)則信息,命令如下:
[root@haodaolinux1 ~]# iptables -F
6、清空某一個鏈里面的規(guī)則信息,命令如下:
[root@haodaolinux1 ~]# iptables -F 鏈名
7、將規(guī)則保存到文件中,命令如下:
[root@haodaolinux1 ~]# service iptables save
[root@haodaolinux1 ~]# iptables-save > /etc/sysconfig/iptables
六、iptables語法詳解 1、iptables基本語法格式,如下命令所示:
iptables -t 表名 動作規(guī)則 [鏈名] [匹配條件] [-j 控制類型]
參數(shù)解釋:
-t:用于指定表名,不寫默認(rèn)是使用filter表;
動作規(guī)則:表示要添加規(guī)則還是刪除規(guī)則;
常用動作規(guī)則有如下:
-D:表示刪除規(guī)則;
-R:表示修改規(guī)則;
-A:表示追加規(guī)則,默認(rèn)追加到鏈的末尾;
-I:表示插入規(guī)則,在鏈的開頭或者指定序號處插入一條規(guī)則;
-N:表示自定義鏈;
-P(大寫):表示修改默認(rèn)規(guī)則;
[鏈名]:表示實際鏈名;
[匹配條件]:表示實際匹配條件,可以匹配數(shù)據(jù)包ip,端口,tcp等特征,如通過-p(小寫)指定報文類型;
[-j 控制類型]:用于控制類型,表示通過前面匹配到之后是丟棄還是保留相關(guān)數(shù)據(jù)包的處理方式;
常用的控制類型有如下:
ACCEPT:表示允許;
REJECT:表示拒絕;
DROP:表示丟棄;
2、iptables規(guī)則添加實例 1、指定filter表INPUT鏈末尾添加一條規(guī)則,命令如下:
[root@haodaolinux1 ~]# iptables -t filter -A INPUT -p udp -j ACCEPT
查看規(guī)則,如下圖所示:
2、在INPUT鏈中第一行添加1條規(guī)則,命令如下所示:
[root@haodaolinux1 ~]# iptables -I INPUT -p tcp -j ACCEPT
查看規(guī)則,如下圖所示:
3、在INPUT鏈中第2行添加一條規(guī)則,如下命令所示:
[root@haodaolinux1 ~]# iptables -I INPUT 2 -p icmp -j ACCEPT
查看規(guī)則,如下圖所示:
4、刪除INPUT鏈中的第一條規(guī)則,命令如下所示:
[root@haodaolinux1 ~]# iptables -D INPUT 1
查看規(guī)則,如下圖所示:
注意,以上添加刪除相關(guān)規(guī)則,需要保存,否則重啟防火墻后規(guī)則將丟失。
3、iptables結(jié)合匹配條件規(guī)則添加實例: 1、本機上添加一條防火墻規(guī)則,禁止其它主機ping通本機,命令如下所示:
[root@haodaolinux1 ~]# iptables -I INPUT -p icmp -j REJECT
2、本機上添加一條防火墻規(guī)則,拒絕192.168.3.110的主機通過SSH連接本機,命令如下所示:
[root@haodaolinux1 ~]# iptables -I INPUT -s 192.168.3.110 -p tcp --dport 22 -j REJECT
這里規(guī)則主要是拒絕192.168.3.100主機訪問本機的22端口;3、本機上添加一條防火墻規(guī)則,拒絕192.168.3.110的主機訪問本機的22端口及3306端口,命令如下所示:
[root@haodaolinux1 ~]# iptables -I INPUT -s 192.168.3.110 -p tcp --dport 22:3306 -j REJECT
4、本機上添加一條防火墻規(guī)則,禁止多個主機ping通本機(通過逗號隔開多個主機),命令如下所示:
[root@haodaolinux1 ~]# iptables -t filter -I INPUT -s 192.168.3.110,192.168.3.119 -p icmp -j REJECT??
5、本機上添加一條防火墻規(guī)則,丟棄192.168.4.0網(wǎng)段的數(shù)據(jù)包,命令如下所示:
[root@haodaolinux1 ~]# iptables -I INPUT -s 192.168.4.0/24 -j DROP
6、本機上添加一條防火墻規(guī)則,拒絕192.168.3.110-192.168.3.140連續(xù)的主機通過SSH連接本機,命令如下所示:
[root@haodaolinux1 ~]# iptables -I INPUT -p tcp --dport 22 -m iprange --src-range 192.168.3.110-192.168.3.140 -j REJECT
這里主要通過-m iprange --src-range進(jìn)行源IP地址的指定;7、本機上添加一條防火墻規(guī)則,拒絕192.168.3.110的主機訪問本機的22端口及3306端口,命令如下所示:
[root@haodaolinux1 ~]# iptables -I INPUT -p tcp --dport 22 -m multiport --dports 22,3306 -s 192.168.3.110 -j REJECT?
這里主要通過-m multiport --dports?進(jìn)行目的端口的指定;4、iptables規(guī)則修改實例 1、首先本機上新增規(guī)則,在已有規(guī)則基礎(chǔ)上進(jìn)行修改:
[root@haodaolinux1 ~]# iptables -t filter -I INPUT -s 192.168.3.110 -p icmp -j REJECT [root@haodaolinux1 ~]# iptables -t filter -I INPUT -s 192.168.3.110 -p tcp --dport 22 -j REJECT
查看已有規(guī)則,如下圖所示:
2、本機上修改第二條規(guī)則,使得192.168.3.110主機可以ping通本機,命令如下所示:
[root@haodaolinux1 ~]# iptables -R INPUT 2 -p icmp -s 192.168.3.110 -j ACCEPT
查看已修改規(guī)則,如下圖所示:
5、針對icmp類型匹配制定規(guī)則實例
眾所周知,禁止ping策略原則無非就是禁止本機ping其它主機,或者禁止其它主機ping本機。
iptables中可以通過策略指定網(wǎng)卡的流量進(jìn)入或者網(wǎng)卡的流量出去。分別通過以下兩個參數(shù)進(jìn)行指定。
-i:即--in--interface:用于在INPUT鏈配置規(guī)則中,指定從哪一塊網(wǎng)卡進(jìn)入的流量;
-o:即--out--interface:用于在OUTPUT鏈配置規(guī)則中,指定從哪一塊網(wǎng)卡出去的流量;
ping對應(yīng)的報文類型是icmp,而icmp報文類型眾多,這里針對以下實例做兩個類型講解。
0:Echo reply,對應(yīng)的是ping的應(yīng)答報文;
8:Echo request,對應(yīng)的是ping的請求報文;
iptables中可以通過--icmp-type來指定相關(guān)的icmp報文類型;
1、新增規(guī)則,使得本機不能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
編輯:黃飛
評論