1. 程式人生 > >selinux 、firewalld 、 netfilter 及其5表5鏈

selinux 、firewalld 、 netfilter 及其5表5鏈

selinux firewalld netfilter 及其5表5鏈

什麽是防火墻

防火墻是指設置在不同網絡或網絡安全域之間的一系列部件的組合, 它能增強機構內部網絡的安全性.
防火墻通過訪問控制機制, 從而決定:

  • 哪些內部請求允許訪問外部服務(即出去的包),
  • 哪些外部請求允許訪問內部服務(即進入的包).
    它可以根據網絡傳輸的類型決定IP包是否可以傳進或傳出內部網.
    通過使用防火墻可以實現以下功能:
  • 可以保護易受攻擊的服務;
  • 控制內外網之間網絡系統的訪問;
  • 集中管理內網的安全性, 降低管理成本;
  • 提高網絡的保密性和私有性;
  • 記錄網絡的使用狀態, 為安全規劃和網絡維護提供依據.

技術分享圖片

  1. selinux 命令

selinux 是 Redhat/CentOS 系統特有的安全機制。不過因為這個東西限制太多,配置也特別繁瑣所以幾乎沒有人去真正應用它。所以裝完系統,我們一般都要把selinux關閉,以免引起不必要的麻煩。關閉 selinux 的方法為,使 “SELINUX=disabled”, 默認為 enforcing。

輸入命令 vi /etc/selinux/config ,回車,見下圖,
技術分享圖片
將上圖紅色框框的內容改為 disable 之後,保存退出。保存該配置文件後,重啟機器方可生效。我們可以使用 getenforce 命令獲得當前 selinux 的狀態,見下圖,
技術分享圖片

2、 netfilter 防火墻

Netfilter是Linux 2.4.x引入的一個子系統,它作為一個通用的、抽象的框架,提供一整套的hook函數的管理機制,使得諸如數據包過濾、網絡地址轉換(NAT)和基於協議類型的連接跟蹤成為了可能。
netfilter的架構就是在整個網絡流程的若幹位置放置了一些檢測點(HOOK),而在每個檢測點上登記了一些處理函數進行處理。

centos6和centos7都有iptables,這裏的iptables是一個工具(或者叫命令),在centos6上的防火墻叫做netfilter,centos7上防火墻叫做firewalld,而它們底層都是基於iptables的。三者的具體關系見下圖,
技術分享圖片

怎麽關閉 firewalld 防火墻,見下圖,
技術分享圖片
systemctl disable firewalld 命令表示先停止防火墻服務,然後 systemctl stop firewalld 命令表示關閉防火墻服務。
接著開啟 netfilter 防火墻,開啟之前,需要先安裝一個包,輸入命令 yum install -y iptables-services ,回車,見下圖,

技術分享圖片
技術分享圖片
安裝完成之後,就可以開啟 iptables 服務,即開啟 netfilter 防火墻服務,見下圖,
技術分享圖片
使用命令 iptables -nvL ,可以查看 iptables 的默認規則,見下圖,
技術分享圖片

3、netfilter 的5表5鏈

技術分享圖片
技術分享圖片

先 man iptables 查看,回車,見下圖,
技術分享圖片
往下翻,見下圖,
技術分享圖片
以上就是 netfilter 防火墻的5個表,filter,nat,mangle,raw,security(Centos7之前沒有這個表) 。
filter 表用於過濾包,最常用的表,有INPUT、FORWARD、OUTPUT三個鏈
nat 表用於網絡地址轉換,有PREROUTING、OUTPUT、POSTROUTING三個鏈
managle 表用於給數據包做標記,然後根據標記去操作那些包,幾乎用不到
raw 表可以實現不追蹤某些數據包,幾乎用不到
security 表在centos6中並沒有,用於強制訪問控制(MAC)的網絡規則,幾乎用不到

五個鏈:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
PREROUTING:作用是在包剛剛到達防火墻時改變它的目的地址,如果需要的話
INPUT:作用於進入本機的包
FORWARD:作用於那些跟本機無關的包
OUTPUT:作用於本機送出的包,改變本地產生的包的目的地址
POSTROUTING:在包就要離開防火墻之前改變其源地址

iptables簡介
netfilter/iptables(簡稱為iptables)組成Linux平臺下的包過濾防火墻,與大多數的Linux軟件一樣,這個包過濾防火墻是免費的,它可以代替昂貴的商業防火墻解決方案,完成封包過濾、封包重定向和網絡地址轉換(NAT)等功能。
iptables基礎
規則(rules)其實就是網絡管理員預定義的條件,規則一般的定義為“如果數據包頭符合這樣的條件,就這樣處理這個數據包”。規則存儲在內核空間的信息 包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當數據包與規 則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火墻的 主要工作就是添加、修改和刪除這些規則。
iptables和netfilter的關系:
這是第一個要說的地方,Iptables和netfilter的關系是一個很容易讓人搞不清的問題。很多的知道iptables卻不知道 netfilter。其實iptables只是Linux防火墻的管理工具而已,位於/sbin/iptables。真正實現防火墻功能的是 netfilter,它是Linux內核中實現包過濾的內部結構。
iptables傳輸數據包的過程
① 當一個數據包進入網卡時,它首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否需要轉送出去。
② 如果數據包就是進入本機的,它就會沿著圖向下移動,到達INPUT鏈。數據包到了INPUT鏈後,任何進程都會收到它。本機上運行的程序可以發送數據包,這些數據包會經過OUTPUT鏈,然後到達POSTROUTING鏈輸出。
③ 如果數據包是要轉發出去的,且內核允許轉發,數據包就會如圖所示向右移動,經過FORWARD鏈,然後到達POSTROUTING鏈輸出。
技術分享圖片

下面說法是4表5鏈的內容,現在是5表5鏈,多出來的表也幾乎用不到。
iptables的規則表和鏈:
表(tables)提供特定的功能,iptables內置了4個表,即filter表、nat表、mangle表和raw表,分別用於實現包過濾,網絡地址轉換、包重構(修改)和數據跟蹤處理。
鏈(chains)是數據包傳播的路徑,每一條鏈其實就是眾多規則中的一個檢查清單,每一條鏈中可以有一 條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該數據包是否滿足規則所定義的條件。如果滿足,系統就會根據 該條規則所定義的方法處理該數據包;否則iptables將繼續檢查下一條規則,如果該數據包不符合鏈中任一條規則,iptables就會根據該鏈預先定 義的默認策略來處理數據包。
Iptables采用“表”和“鏈”的分層結構。具體見下圖,
技術分享圖片

規則表:
1.filter表——三個鏈:INPUT、FORWARD、OUTPUT
作用:過濾數據包 內核模塊:iptables_filter.
2.Nat表——三個鏈:PREROUTING、POSTROUTING、OUTPUT
作用:用於網絡地址轉換(IP、端口) 內核模塊:iptable_nat
3.Mangle表——五個鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改數據包的服務類型、TTL、並且可以配置路由實現QOS內核模塊:iptable_mangle(別看這個表這麽麻煩,咱們設置策略時幾乎都不會用到它)
4.Raw表——兩個鏈:OUTPUT、PREROUTING
作用:決定數據包是否被狀態跟蹤機制處理 內核模塊:iptable_raw

規則鏈:
1.INPUT——進來的數據包應用此規則鏈中的策略
2.OUTPUT——外出的數據包應用此規則鏈中的策略
3.FORWARD——轉發數據包時應用此規則鏈中的策略
4.PREROUTING——對數據包作路由選擇前應用此鏈中的規則
(記住!所有的數據包進來的時侯都先由這個鏈處理)
5.POSTROUTING——對數據包作路由選擇後應用此鏈中的規則
(所有的數據包出來的時侯都先由這個鏈處理)
規則表之間的優先順序:
Raw——mangle——nat——filter
規則鏈之間的優先順序(分三種情況):
第一種情況:入站數據流向
從外界到達防火墻的數據包,先被PREROUTING規則鏈處理(是否修改數據包地址等),之後會進行路由選擇(判斷該數據包應該發往何處),如果數據包 的目標主機是防火墻本機(比如說Internet用戶訪問防火墻主機中的web服務器的數據包),那麽內核將其傳給INPUT鏈進行處理(決定是否允許通 過等),通過以後再交給系統上層的應用程序(比如Apache服務器)進行響應。
第二沖情況:轉發數據流向
來自外界的數據包到達防火墻後,首先被PREROUTING規則鏈處理,之後會進行路由選擇,如果數據包的目標地址是其它外部地址(比如局域網用戶通過網 關訪問QQ站點的數據包),則內核將其傳遞給FORWARD鏈進行處理(是否轉發或攔截),然後再交給POSTROUTING規則鏈(是否修改數據包的地 址等)進行處理。
第三種情況:出站數據流向
防火墻本機向外部地址發送的數據包(比如在防火墻主機中測試公網DNS服務器時),首先被OUTPUT規則鏈處理,之後進行路由選擇,然後傳遞給POSTROUTING規則鏈(是否修改數據包的地址等)進行處理。

以上內容,詳見 http://www.cnblogs.com/metoy/p/4320813.html

總結:
getenforce 查看當前 selinux 的狀態,Enforcing 表示開啟,Permissive 表示關閉。
setenforce 0 臨時關閉 selinux
vi /etc/selinux/config 進入配置selinux文件,更改SELINUX=disabled,可以永久關閉selinux
systemctl disable firewalld 表示先停止防火墻服務
systemctl stop firewalld 表示關閉防火墻服務
5個表: filter,nat,mangle,raw,security
5個鏈: PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
本機: PREROUTING →INPUT →OUTPUT →POSTROUTING
非本機:PREROUTING→FORWARD→POSTROUTING

selinux 、firewalld 、 netfilter 及其5表5鏈