CSS檔案屬性設定
Centos7 防火牆
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