Linux防火墻之基本原理

本系列文章主要講述Linux防火墻的基本原理和基礎使用方法:

1.什么是防火墻:

當我們把計算機連入互聯網與其他計算機進行通信時,這無疑也將自己的信息暴露了,那就意味著可能會有一些心懷不軌的人會利用這些信息來攻擊自己的主機,尤其是作為一臺服務器向互聯網用戶提供服務時,就迫切需要一種隔離和保護機制,來隔離外部網絡,達到保護自我的目的。而這種隔離機制就叫做防火墻。那顯而易見,既然要達到隔離機制,那就要工作在邊緣地帶,根據其所處的位置,我們可以將其分為網絡防火墻(工作在網絡入口位置)和主機防火墻(工作于主機之上)。

2.Linux之上的防火墻:

在Linux之上,為了達到隔離機制,同樣需要防火墻,Linux之上的實現方式是工作于內核空間的netfilter,以及工作于用戶空間提供給用戶定義防火墻策略的iptables,那他們基本的工作原理是什么呢?

對一個數據包的基本處理過程是:

 主機通過物理網卡接收數據包,通過解分裝數據包,查看數據包的ip首部信息判斷是否是發送給本機的,如果是則數據包從內核空間轉交給監聽在某個對應端口號上的應用程序,從而完成通信。

 當本機要向某主機發送數據時,從tcp/ip協議棧的上層通過層層分裝之后,通過向內核發起系統調用,從而將數據包交給物理網卡,由物理網卡向外發送數據包。

 當解分裝數據包查看ip首部信息后,發現該數據包是要通過本機進行轉發,那么本機通過查看路由表,從而進行對數據包的轉發。

正是基于對數據包的處理機制,Linux防火墻正是在這些數據包必經之處對其進行檢查,然后根據用戶定義的規則進行相應的處理。linux上通過五個鉤子函數prerouting,iuput,output,forward,postrouting對應五條定義規則的鏈prerouting,input,output,forward,postrouting從而實現對數據包進行處理,之所以叫做鉤子函數是因為當一個數據包到達時,這幾個函數像鉤子一樣將其勾住,從上而下對其進行檢查,從而決定對數據包的處理動作。如下圖所示,在linux內核之中,對數據包的處理要經過prerouting,路由選擇,從而判斷數據是進入本機,或者是通過本機轉發,對于本機發送的數據則是從用戶空間進入內核空間,經過postrouting之后流出本機。而linux之中的防火墻netfilter不僅提供fileter(數據包過濾)功能,還有其他三個功能,分別是raw(與連接追蹤機制有關),mangle(修改數據包的首部信息),nat(地址轉換),這四個功能對應四個表。于是總結來說就是:linux的netfilter功能提供四個表對應四個功能,通過往每個功能上的鏈來指定規則,從而達到對數據包實現不同的處理。

iptables-routing.jpg

(該圖取自互聯網)

根據上圖我們可以清晰的看到:

數據報文的流向:

 . 流入本機:PREROUTING –> INPUT 

 . 由本機流出:OUTPUT –> POSTROUTING

 . 轉發:PREROUTING –> FORWARD –> POSTROUTING

路由功能發生的時刻:

 . 報文進入本機后:判斷目標主機是本機或其他主機

 . 報文離開本機之前:判斷經由哪個接口送往下一站

每個表上所能對應的鏈,需要強調的是每個位置能實現的表(功能)在圖中從上而下代表處理的優先級是遞減的,總結為:

 . raw:prerouting,output

 . mangle:prerouting,forward,postrouting,input,output

 . nat:prerouting,postrouting,output

 . filter:input,output,forward

以上就是netfilter的基本工作原理,而要想通過netfilter來實現安全策略,重點就是選擇數據包經過的不同位置上基于端口號,目的地址,源地址等來實現過濾以保證主機的安全。

原創文章,作者:zhangbao,如若轉載,請注明出處:http://www.www58058.com/54775

(0)
zhangbaozhangbao
上一篇 2016-12-27
下一篇 2016-12-27

相關推薦

  • Linux網絡管理命令的使用

    網絡管理命令 ip命令 配置Linux網絡屬性:ip命令,不過該命令的操作只是臨時操作,重啟以后配置丟失 ip-show / manipulate routing, devices, policy routing and tunnels ip [ OPTIONS ] OBJECT { COMMAND | help }    &n…

    Linux干貨 2016-09-11
  • bash腳本初探

                              (注)$@和$*的區別,以及$0..$n [root@ _6_ ~]# cat weizhi.sh  #!/bin/bash e…

    Linux干貨 2016-08-15
  • 文件查找命令Find

    文件查找命令find Find:在文件上查找符合條件的文件,是個實時的查找工具,通過遍歷指定路徑完成文件查找 工作特點: l  查找速度慢 l  精度查找 l  實時查找 l  可能只搜索用戶具有讀取和執行權限的目錄   語法: find [option]…[查找路徑][查找條件][處理動作]   …

    Linux干貨 2016-08-16
  • Linux用戶管理相關

    Q1列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@radio_freshman ~]# who root     tty1         201…

    Linux干貨 2016-11-13
  • 自動化運維之Cobbler

    自動化運維:         隨著信息時代的持續發展,IT運維已經成為IT服務內涵中重要的組成部分。面對越來越復雜的業務,面對越來越多樣化的用戶需求,不斷擴展的IT應用需要越來越合理的模式來保障IT服務能靈活便捷、安全穩定地持續保障,這種模式中的保障因素就是IT運維(其他因素是更…

    Linux干貨 2016-04-21
  • CentOS下獲取幫助

    CentOS中獲取幫助 在使用和學習CentOS系統時,我們可能會遇上不熟悉的命令,需要獲取幫助。在很多情況下,我們無法通過網絡獲取幫助,這個時候我們就需要自己通過查看系統幫助文檔來解決問題。下面就來介紹獲取幫助的方法: 1、 獲取簡單的幫助信息:whatis COMMAND   2、獲取比較詳細的命令幫助信息:help COMMAND;COMMA…

    2017-07-15
欧美性久久久久