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