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