1.介紹
在centos7中,有幾種防火墻共存:firewald , iptables . 默認(rèn)情況下,CentOS是使用firewalld來管理netfilter子系統(tǒng),不過底層調(diào)用的命令仍然是iptables
2.firewalld 和 iptables區(qū)別
firewalld 可以動(dòng)態(tài)修改單挑規(guī)則,而不像iptables那樣,在修改了規(guī)則后必須全部刷新才可以生效。
firewalld在使用上比iptables人性化很多,即使不明白"五張表五條鏈"而且對(duì)TCP/IP協(xié)議也不理解也可以實(shí)現(xiàn)大部分功能。
firewalld跟iptables比起來,不好的地方是每個(gè)服務(wù)都需要去設(shè)置才能放行,因?yàn)槟J(rèn)是拒絕。而iptables里默認(rèn)每個(gè)服務(wù)是允許,需要拒絕才去限制。
firewalld自身并不具備防火墻的功能,而是和iptables一樣需要通過內(nèi)核的netfilter來實(shí)現(xiàn),也就是說firewalld和iptables一樣,他們的作用是用于維護(hù)規(guī)則,而真正使用規(guī)則干活的是內(nèi)核的netfilter,只不過firewalld和iptables的結(jié)構(gòu)以及使用方法不一樣罷了。
3.區(qū)域管理概念
區(qū)域管理
通過將網(wǎng)絡(luò)劃分成不同的區(qū)域,制定不同區(qū)域之間的訪問控制策略來控制不同程序間傳送的數(shù)據(jù)流。例如,互聯(lián)網(wǎng)不是可信任的區(qū)域,而內(nèi)部網(wǎng)絡(luò)是高度信任的區(qū)域。網(wǎng)絡(luò)安全模型可以在安裝,初次啟動(dòng)和首次建立網(wǎng)絡(luò)連接時(shí)選擇初始化。該模型描述了主機(jī)所連接的整個(gè)網(wǎng)絡(luò)環(huán)境的可信級(jí)別,并定義了新連接的處理方式。
有如下幾種不同的初始化區(qū)域:
阻塞區(qū)域(block):任何傳入的網(wǎng)絡(luò)數(shù)據(jù)包都將被阻止
工作區(qū)域(work):相信網(wǎng)絡(luò)上的其他計(jì)算機(jī),不會(huì)損害你的計(jì)算機(jī)
家庭區(qū)域(home):相信網(wǎng)絡(luò)上的其他計(jì)算機(jī),不會(huì)損害你的計(jì)算機(jī)
公共區(qū)域(public):不相信網(wǎng)絡(luò)上的任何計(jì)算機(jī),只有選擇接受傳入的網(wǎng)絡(luò)連接
隔離區(qū)域(DMZ):隔離區(qū)域也稱為非軍事區(qū)域,內(nèi)外網(wǎng)絡(luò)之間增加的一層網(wǎng)絡(luò),起到緩沖作用。對(duì)于隔離區(qū)域,只有選擇接受傳入的網(wǎng)絡(luò)連接。
信任區(qū)域(trusted):所有的網(wǎng)絡(luò)連接都可以接受
丟棄區(qū)域(drop):任何傳入的網(wǎng)絡(luò)連接都被拒絕
內(nèi)部區(qū)域(internal):信任網(wǎng)絡(luò)上的其他計(jì)算機(jī),不會(huì)損害你的計(jì)算機(jī)。只有選擇接受傳入的網(wǎng)絡(luò)連接
外部區(qū)域(external):不相信網(wǎng)絡(luò)上的其他計(jì)算機(jī),不會(huì)損害你的計(jì)算機(jī)。只有選擇接受傳入的網(wǎng)絡(luò)連接
注:Firewalld的默認(rèn)區(qū)域是public
firewalld默認(rèn)提供了九個(gè)zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他們都保存在“/usr/lib /firewalld/zones/”目錄下。
4.iptables的配置
1.簡(jiǎn)述
iptables防火墻由Netfilter項(xiàng)目(http://www.netfilter.org) 開發(fā),自2001年1月在Linux2.4內(nèi)核發(fā)布以來就是Linux的一部分了。
Netfilter是由Linux提供的所有包過濾和包修改設(shè)施的官方項(xiàng)目名稱,但這個(gè)術(shù)語同時(shí)也指Linux內(nèi)核的一個(gè)框架,他可以用于在不同的階段將函數(shù)掛接(hook)進(jìn)網(wǎng)絡(luò)棧。另一方面,iptables使用Netfilter框架指在將對(duì)數(shù)據(jù)包進(jìn)行操作(如過濾)的函數(shù)掛接進(jìn)網(wǎng)絡(luò)棧。
所以,你可以認(rèn)為Netfilter提供了一個(gè)框架,而iptables在它之上建立了防火墻功能
2.基本原理
規(guī)則(rules)其實(shí)就是網(wǎng)絡(luò)管理員預(yù)定義的條件,規(guī)則一般的定義為“如果數(shù)據(jù)包頭符合這樣的條件,就這樣處理這個(gè)數(shù)據(jù)包”。規(guī)則存儲(chǔ)在內(nèi)核空間的信息 包過濾表中,這些規(guī)則分別指定了源地址、目的地址、傳輸協(xié)議(如TCP、UDP、ICMP)和服務(wù)類型(如HTTP、FTP和SMTP)等。當(dāng)數(shù)據(jù)包與規(guī) 則匹配時(shí),iptables就根據(jù)規(guī)則所定義的方法來處理這些數(shù)據(jù)包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火墻的 主要工作就是添加、修改和刪除這些規(guī)則
3.iptables傳輸數(shù)據(jù)包的過程
當(dāng)一個(gè)數(shù)據(jù)包進(jìn)入網(wǎng)卡時(shí),它首先進(jìn)入PREROUTING鏈,內(nèi)核根據(jù)數(shù)據(jù)包目的IP判斷是否需要轉(zhuǎn)送出去
如果數(shù)據(jù)包就是進(jìn)入本機(jī)的,它就會(huì)沿著圖向下移動(dòng),到達(dá)INPUT鏈。數(shù)據(jù)包到了INPUT鏈后,任何進(jìn)程都會(huì)收到它。本機(jī)上運(yùn)行的程序可以發(fā)送數(shù)據(jù)包,這些數(shù)據(jù)包會(huì)經(jīng)過OUTPUT鏈,然后到達(dá)POSTROUTING鏈輸出
如果數(shù)據(jù)包是要轉(zhuǎn)發(fā)出去的,且內(nèi)核允許轉(zhuǎn)發(fā),數(shù)據(jù)包就會(huì)如圖所示向右移動(dòng),經(jīng)過FORWARD鏈,然后到達(dá)POSTROUTING鏈輸出
4、iptables規(guī)則表和鏈
表(tables):
iptables一共有四張表,稱為filter, nat, mangle, raw。filter用于過濾,nat用于網(wǎng)絡(luò)地址轉(zhuǎn)換,mangle用于給數(shù)據(jù)包做標(biāo)記以修改分組數(shù)據(jù)的特定規(guī)則,raw表則獨(dú)立于Netfilter連接跟蹤子系統(tǒng)
因此,如果你的目標(biāo)是保護(hù)主機(jī)安全,那么著重考慮的是filter表,而如果像OpenStack那樣,目的是做網(wǎng)絡(luò)地址轉(zhuǎn)換,就用NAT表,而mangle則用于QoS(服務(wù)質(zhì)量控制),如對(duì)打上某個(gè)標(biāo)記的分組數(shù)據(jù)分配較多帶寬等等
鏈(chains):
是數(shù)據(jù)包傳播的路徑,每個(gè)鏈其實(shí)就是眾多規(guī)則中的一個(gè)檢查清單,每一條鏈中可以有1條或者數(shù)條規(guī)則。當(dāng)一個(gè)數(shù)據(jù)包到達(dá)一個(gè)鏈時(shí),iptables就會(huì)從鏈中第一條規(guī)則開始檢查,看數(shù)據(jù)包是否滿足規(guī)則所定義的條件,如果滿足,就會(huì)根據(jù)該規(guī)則所定義的方法處理該數(shù)據(jù)包。否則iptables將繼續(xù)檢查下一條規(guī)則,如果數(shù)據(jù)包不符合鏈中任一條規(guī)則,iptables就會(huì)根據(jù)該鏈預(yù)先定義的策略來處理數(shù)據(jù)包。
5.規(guī)則表處理的優(yōu)先順序
Raw--mangle--nat--filter
對(duì)filter表來說,最重要的是內(nèi)置鏈INPUT/OUTPUT/FORWARD。顧名思義,INPUT應(yīng)用于外部網(wǎng)絡(luò)進(jìn)入到本地主機(jī)的數(shù)據(jù)包,OUPTU則應(yīng)用于從本地主機(jī)發(fā)送到外部網(wǎng)絡(luò)的數(shù)據(jù)包。FORWARD則可以理解為將本地主機(jī)作為路由器,數(shù)據(jù)包從本地主機(jī)經(jīng)過,但目標(biāo)位于本地主機(jī)的下游。
6.管理和設(shè)置iptables規(guī)則
7.配置iptables之前firewalld的關(guān)閉
CentOS7默認(rèn)的防火墻是firewall,所以要使用iptables得先將默認(rèn)的firewall關(guān)閉,并另安裝iptables進(jìn)行防火墻的規(guī)則設(shè)定
[root@localhost ~]# systemctl stop firewalld.service //停止firewall [root@localhost ~]# systemctl disable firewalld.service //禁止firewall開機(jī)啟動(dòng)
8.iptables的安裝
先檢查iptables是否有安裝:
[root@localhost ~]# rpm –qa | grep iptables
iptables-1.4.21-16.el7.x86_64 //如果有顯示這個(gè),則說明已經(jīng)安裝了iptables
安裝iptables
[root@localhost ~]# yum install –y iptables [root@localhost ~]# yum install –y iptables-services
9.iptables的基本語法格式
iptables [-t 表名] 命令選項(xiàng) [鏈名][條件匹配] [-j 目標(biāo)動(dòng)作或跳轉(zhuǎn)]
說明:表名、鏈名用于指定 iptables命令所操作的表和鏈,命令選項(xiàng)用于指定管理iptables規(guī)則的方式(比如:插入、增加、刪除、查看等;條件匹配用于指定對(duì)符合什么樣 條件的數(shù)據(jù)包進(jìn)行處理;目標(biāo)動(dòng)作或跳轉(zhuǎn)用于指定數(shù)據(jù)包的處理方式(比如允許通過、拒絕、丟棄、跳轉(zhuǎn)(Jump)給其它鏈處理。
10.iptables命令的管理控制選項(xiàng)
-A 在指定鏈的末尾添加(append)一條新的規(guī)則
-D 刪除(delete)指定鏈中的某一條規(guī)則,可以按規(guī)則序號(hào)和內(nèi)容刪除
-I 在指定鏈中插入(insert)一條新的規(guī)則,默認(rèn)在第一行添加
-R 修改、替換(replace)指定鏈中的某一條規(guī)則,可以按規(guī)則序號(hào)和內(nèi)容替換
-L 列出(list)指定鏈中所有的規(guī)則進(jìn)行查看
-E 重命名用戶定義的鏈,不改變鏈本身
-F 清空(flush)
-N 新建(new-chain)一條用戶自己定義的規(guī)則鏈
-X 刪除指定表中用戶自定義的規(guī)則鏈(delete-chain)
-P 設(shè)置指定鏈的默認(rèn)策略(policy)
-Z 將所有表的所有鏈的字節(jié)和數(shù)據(jù)包計(jì)數(shù)器清零
-n 使用數(shù)字形式(numeric)顯示輸出結(jié)果
-v 查看規(guī)則表詳細(xì)信息(verbose)的信息
-V 查看版本(version)
-h 獲取幫助(help)
11.iptables命令的保存
[root@localhost ~]# service iptables save
12.iptables的基本操作
清除所有規(guī)則
⑴清除預(yù)設(shè)表filter中所有規(guī)則鏈中的規(guī)則
[root@localhost ~]# iptables -F
⑵清除預(yù)設(shè)表filter中使用者自定義鏈中的規(guī)則
[root@localhost ~]# iptables –X [root@localhost ~]# iptables -Z
⑶清除NAT表規(guī)則
[root@localhost ~]# iptables –F –t nat
設(shè)置鏈的默認(rèn)策略,一般有二種方法
⑴允許所有的包,然后再禁止所有危險(xiǎn)的包通過防火墻
[root@localhost ~]# iptables –P INPUT ACCEPT [root@localhost ~]# iptables –P OUTPUT ACCEPT [root@localhost ~]# iptables –P FORWARD ACCEPT
⑵首先禁止所有的包,然后根據(jù)需要的服務(wù)允許特定的包通過防火墻
[root@localhost ~]# iptables –P INPUT DROP [root@localhost ~]# iptables –P OUTPUT DROP [root@localhost ~]# iptables –P FORWARD DROP
向鏈中添加規(guī)則(下面的語句用于允許SSH連接本服務(wù)器)
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT [root@localhost ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
向鏈中添加規(guī)則(下面的語句用于允許PING命令測(cè)試本服務(wù)器)
[root@localhost ~]# iptables -A INPUT -p icmp -j ACCEPT [root@localhost ~]# iptables -A OUTPUT -p icmp -j ACCEPT
iptables的配置文件
直接編輯iptables的配置文件:
[root@localhost ~]# vim /etc/sysconfig/iptables
[root@localhost ~]# systemctl restart iptables.service //最后重啟防火墻使配置生效 [root@localhost ~]# systemctl enable iptables.service //設(shè)置防火墻開機(jī)啟動(dòng)
[root@localhost ~]# iptables -L //查看防火墻規(guī)則,默認(rèn)的是-t filter,如果是nat表查看,即iptables -t nat -L
審核編輯:黃飛
評(píng)論