防火墻的基礎知識入門

文章目錄

  • 防火墻
    • 基于實現方式,防火墻的發展分為四個階段:
  • Linux 環境中主要的防火墻形式
  • TCP wrappers~~詳解~~ 粗解
    • Tcp wrappers的認識
      • 它的基本過程是這樣的:
  • iptable
  • 攻擊和防御
    • DDOS 攻擊
      • 常見的可能受到 DDOS 攻擊體現的癥狀有:
      • 而常見的 DDOS 攻擊有以下幾種
  • SYN 攻擊
    • SYN flood(SYN 洪水攻擊)

防火墻

防火墻指的是一個由 軟件和硬件設備組合而成、在內部網和外部網之間、專用網與公共網之間的界面上構造的保護屏障。

基于實現方式,防火墻的發展分為四個階段:

  • 第一代防火墻:基于路由器的防火墻,由于多數路由器中本身就包含有分組過濾功能,故網絡訪問控制可通過路由控制來實現,從而使具有分組過濾功能的路由器成為第一代防火墻產品。
  • 第二代防火墻:用戶化的防火墻,將過濾功能從路由器中獨立出來,并加上審計和告警功能。針對用戶需求,提供模塊化的軟件包,是純軟件產品。
  • 第三代防火墻:建立在通用操作系統上的防火墻,近年來在市場上廣泛使用的就是這一代產品。包括分組過濾和代理功能。第三代防火墻有以純軟件實現的,也有以硬件方式實現的。
  • 第四代防火墻:具有安全操作系統的防火墻:具有安全操作系統的防火墻本身就是一個操作系統,因而在安全性上得到提高

Linux 環境中主要的防火墻形式

  • Netfilter 的數據包過濾機制
    • Netfilter 這個機制主要就是分析進入主機的數據包,也就是將包的報頭信息提取出來進行分析,以決定該鏈接是應該放行或阻擋下來。
      由于這種方式可以直接分析數據報頭的信息,而報頭的信息主要就是 OSI 參考模型中的數據鏈路層,網絡層,以及傳輸層的信息,如 MAC 地址, IP 地址 , TCP, UDP, ICMP 等的信息都可以進行分析過濾,并且 Netfilter 提供了 iptables 來作為防火墻封包過濾的指令。十分強大
  • TCP Wrappers 的程序管理
    • TCP Wrappers 主要是分析TCP的報頭信息,并與/etc/hosts.allow和/etc/hosts.deny中的規則進行匹配,從而決定哪些主機可以訪問系統服務或資源。他的功能并沒有 Netfilter 那么強大,但是他的配置相對于 Netfilter 的 iptables 要簡單許多。
  • Proxy 的代理服務器
    • 其實代理服務器這樣的防火墻相對于 Netfilter 是更安全一些,若是外面的人給小姐的物品是有毒的(外面發送有害的數據,或者想獲取 server 信息),那也是丫鬟先中毒,小姐很安全呀(代理服務器中招,內網還是安全的)。

但是這是因為所有的鏈接,所有的數據包都中轉過一層,多了一個環境,就需要多消耗一些時間,效率便降低了,高帶寬也會到達瓶頸,并且因為通過代理服務器的轉發那么便需要修改表頭中的信息,地址轉換,這樣的話對 VPN 的使用也會增加一定的難度。所以相對來說 Netfilter 比 代理服務器式的防火墻應用的更加的廣泛

而為什么上文說相較而言,proxy 形式比 Netfilter 要安全些,是因為數據包式的防火墻主要是在網絡的七層模型中處理這樣的事情:

  • 拒絕讓外部網絡的數據包進入主機的部分敏感的端口:比如我的 FTP 只是供給公司內部人員使用的,外面的人不能從中獲取消息,那么添加規則讓所有想訪問該端口的請求數據包全部丟棄。

  • 拒絕某些 IP 來源的數據包進入主機:就如我知道有一個 IP 地址屬于某個黑客的常用 IP,這個 IP 的請求一定是來攻擊我或者對我不利的,便可添加規則將只要是由這個 IP 地址發來的請求數據包全部丟棄

  • 拒絕帶有某些特殊標簽(flag)的數據包進入:最常見的便是帶有 SYN 的主動連接標簽了,便可添加規則只有一發現這個標簽,就把這個帶有該標簽的數據包丟掉

  • 拒絕某些 MAC 地址的鏈接與數據包:如果內網中有人中病毒,或者他是有意搗亂網絡的,封 IP 地址他可以更換,那么我們就直接封掉其 MAC 地址,這樣即使更換 IP 地址也沒有用。
    這樣的處理雖然可以阻擋大部分不利的數據,或者說攻擊,但是還有許多的問題是無法防范的:

  • 防火墻不能有效的阻擋病毒或者木馬程序:

    • 比如內網中的 DMZ 區域有一臺 web 服務器,有 web 服務供給外網訪問勢必我們就需要將80端口開放出去,讓外部網絡能夠請求,否則外部網絡得不到數據,該服務器的功能根本無法起作用,而80端口的開放是的外部網絡的數據包可以進入主機中,若是web服務有漏洞,數據包中有病毒利用該漏洞做一些事情。
  • 防火墻主要是針對外網的攻擊添加規則,所以對于內網的攻擊并無太強的招架之力。

TCP wrappers詳解 粗解

TCP wrappers 是 Linux 中兩大防護措施的其中之一,這層保護通過定義哪些主機允許或不允許連接到網絡服務上來實現。

Tcp wrappers的認識

它被設計為一個介于外來服務請求和服務回應的中間處理

它的基本過程是這樣的:

當服務器或主機接收到一個外來服務請求的時候,
先由TCP Wrapper 來對請求進行分析處理,TCP Wrapper 會根據請求所需要的服務和對這個服務所設定的規則來判斷請求方是否有權限,
如果有,TCP Wrapper 會把這個請求按照配置文件所設定的規則轉交給相應的守護進程去處理,同時記錄這個請求動作。

TCP Wrappers雖然能對 TCP 協議的報文做過濾動作,
但是并不是所有的 TCP 協議報文 TCP Wrappers 都可以過濾掉。
只有該服務鏈接到TCP Wrappers的函式庫才可以使用TCP Wrappers進行報文過濾。

因為 TCP Wrapper 的功能主要來自于 libwrap.a這個靜態庫,它是一個服務庫。
像 xinetd、sshd 和 portmap 等許多服務編譯時都依賴于 libwrap.so 這個動態鏈接庫,其他的網路服務甚至你自己編寫的服務都可以加上這個編譯選項來提供 TCP Wrapper 的功能。

iptable

這個是Linux內核到了2.4才有的,很復雜,另開一篇文章研究吧

攻擊和防御

DDOS 攻擊

在計算中,拒絕服務( DOS,denial-of-service )攻擊是試圖消耗一臺機器或網絡的資源,例如去暫時或無限期中斷甚至去暫停服務的主機連接到互聯網,使其無法給予真正需求的用戶。拒絕服務通常是通過 flood 攻擊有針對性的嘗試對目標機器或資源的多余請求,以使得系統過載,并防止一些或所有合法的請求。因為早期的服務器的性能和網絡剛發展,性能并不高,所以由一臺主機去不斷地請求服務,就可以導致服務器應付不過來

后來硬件與網絡飛速的發展,一臺主機發動再多的請求,服務器也能夠從容地應對,既然一臺不夠,那就成千上萬臺的來,所以有了分布式拒絕服務(DDoS,distributed denial-of-service)。

一個分布式拒絕服務(DDoS,distributed denial-of-service)攻擊源往往不止一個,又往往成千上萬個,并且都是真實唯一的IP地址。

它類似于一群人擁擠的堵在一家商店里面,就連門口都是人,而且這些人什么也不干,不買東西,無所事事,而真正需要買東西的人卻堵在門口,進不去,這樣便擾亂了商店或者企業的正常的運作。DDoS攻擊的規模仍在不斷增長

常見的可能受到 DDOS 攻擊體現的癥狀有:

  • 網絡堵塞,打開網站的速度異常的緩慢,或者平時都能打開,卻打不開了
  • 服務器的 CPU 長期處于滿負荷
  • 服務器的頻繁死機,重啟

而常見的 DDOS 攻擊有以下幾種

  • Ping flood :發送ping包的攻擊者壓倒性的數量給受害者
  • Ping of Death:攻擊者發送修改后的 ping 數據包,如添加分包使前后的邏輯不正確,或者加長數據包使其超過 IP 報文的限制
  • Teardrop attacks:向目標機器發送損壞的IP包,諸如重疊的包或過大的包載荷。
  • UDP flood:利用大量UDP小包沖擊服務器
  • SYN flood:利用 TCP 的連接過程,來消耗系統資源。
  • CC(challenge Collapsar):通過構造有針對性的、對最為消耗服務器端資源的業務請求,讓服務器“勞累過度”而停止服務等等

SYN 攻擊

據統計,在所有黑客攻擊事件中,SYN攻擊是最常見又最容易被利用的一種攻擊手法。在2000年時 YAHOO 的網站遭受的攻擊,就是黑客利用的就是簡單而有效的 SYN 攻擊,而 SYN 攻擊依靠的就是 TCP 三次握手

TCP( Transmission Control Protocol 傳輸控制協議)是一個 Internet 協議套件的核心協議。它起源于最初的網絡實現,它補充了互聯網協議(IP,網絡層的 IP 協議,IPv4、IPv6)。因此,整個套件通常被稱為 TCP/IP。TCP 提供可靠的,有序的,和錯誤檢查流在 IP 網絡上的主機通信的運行的應用程序之間傳遞數據。

TCP是面向連接的,可靠的進程通信的協議,提供全雙工服務,即數據可在同一時間雙向傳輸,也正是因為 TCP 的可靠連接,所以廣泛應用在大多數的應用層協議,而 TCP 在建立一個連接,需要客戶端與服務器端發送3個數據包,這個過程叫 Three-way Handshake(三次握手)。

在這之前,服務器必須先綁定到一個端口并監聽一個端口,以打開它的連接:這被稱為被動打開。一旦被動打開,客戶端可以啟動一個主動打開,建立連接

1.由客戶端使用一個隨機的端口號,向服務器端特定的端口號發送 SYN 建立連接的請求,并將 TCP 的SYN 控制位置為1。SYN(synchronous)是TCP/IP建立連接時使用的握手信號,客戶端將該段的序列號設置為一個隨機值。
2.服務器端收到了客戶端的請求,會向客戶端發送一個確認的信息,表示已收到請求,這是的數據包里會將 ACK 設置為客戶端請求序列號+1,同時服務器端還會向客戶端發送一個 SYN 建立連接的請求,SYN 的序列號為另外一個隨機的值
3.客戶端在收到了服務器端的確認型號以及請求信號之后,也會向服務器端發送一個確認信號,確認信號的序列號為服務器端發送來的請求序列號+1。在這一點上,客戶端和服務器都已收到了連接的確認。步驟1,2建立一個方向的連接參數(序列號),它是公認的。步驟2、3建立了另一個方向的連接參數(序列號),并被確認。有了這些,便建立了一個全雙工通信。

SYN flood(SYN 洪水攻擊)

這樣是一次完整的 TCP 連接過程,而若是我的客戶端發送了 SYN 的請求連接的信號,然后服務器從關閉變成監聽狀態,然后響應了我的請求,發送來了確認信息以及他的請求信號,并將該信息加入未連接的隊列中,變成SYN_RCVD的狀態若是客戶端若是不處理,不給予響應,那么服務器便會一直的等待,只有等待超過了一定的時間,才會將此信息從隊列中移除,而當有很多這樣的事情發生時是非常耗費資源的。這是整個服務器建立連接時 TCP 狀態的變化過程:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382553.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382553.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382553.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ 常用算數生成算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <vector> using namespace std; #include <algorithm> //不好使 #include <numeric> //好使 #include <iterator> /* accumulate算法 計算容器元素累計總和 param beg 容器開始迭代…

fork()請問下面的程序一共輸出多少個“A”?多少個-?

題目&#xff1a;請問下面的程序一共輸出多少個“-”&#xff1f; #include #include #include int main(void) { int i; for(i0; i<2; i){ fork(); printf("-"); } return 0; } 解析&#xff1a;一共輸出8個。 首先程序一開始&am…

C++ 常用集合算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <algorithm> #include <vector> #include <iterator> using namespace std;/* set_intersection算法 求兩個set集合的交集 注意:兩個集合必須是有序序列 param beg1 容器1開始迭代器 par…

本能富可敵國,最后卻選擇拯救世界!Bram的Vim和烏干達兒童

他本能富可敵國&#xff0c;最后卻選擇拯救世界 在命令行界面輸入vim會出現一堆文件&#xff0c;但是一直有這么一句話 Help poor children in Uganda! “幫助可憐的烏干達兒童” 查詢了一下這里面相關的歷史背景和知識 在Vim許可證文件結束后的部分翻譯 &#xff0d;如果…

linux 常用命令01

/bin/bash 就是linux默認的shell ls命令 ls -a 顯示所有文件 包含隱藏文件 ls -R 遞歸顯示子目錄 ls -l 顯示詳細信息 ls -lrt 按照時間排序&#xff0c;顯示文件信息 配合通配符使用 ls *.c *匹配任意多個字符 ls xx.? 匹配任意一個字符 cd 命令 cd - 為切換到上次目錄 cd 回…

Linux基礎查漏補缺

文章目錄第二遍重新回顧Linux基礎查看主機名修改主機名查看IP地址Linux的 “--”和“-”根目錄文件的意義和作用alias直接在命令行界面輸入firefox數組越界發生什么命令行光標移動的幾個操作重定向第二遍重新回顧Linux基礎 1.查找忽略的知識點 2.再次記憶一些基礎知識 3.鞏固基…

linux 常用命令02--文件屬性 以及軟硬鏈接

文件屬性和用戶用戶組 通過ls-l 顯示文件詳細信息 drwxrwxr-x 2 user usergroup 4096 10月 30 20:55 stu1drwxrwxr-x d代表目錄文件&#xff0c; -代表普通文件 rwx rwx r-x 歸屬用戶的權限 歸屬組的權限 其他用戶的權限 權限位數字表示法(8進制數…

linux查漏補缺之常用命令

wc命令 -c, --bytes, --chars輸出字節統計數。-l, --lines輸出換行符統計數。-L, --max-line-length輸出最長的行的長度。-w, --words輸出單詞統計數。grep命令 圖解

linux 常用命令03--修改文件的權限與歸屬

chmod 命令 改變文件權限 第一種&#xff1a; chmod [u|g|o|a] [|-] [r|w|x] filename 比如&#xff1a; chmod ux filename 給所屬用戶增加執行的權限第二種&#xff1a; 給a.out 文件&#xff0c;所屬用戶可讀可寫&#xff0c;所屬組可讀可寫&#xff0c;其他的讀 chmod 06…

思維導圖:面試小結

文件&#xff1a;思維導圖

linux 常用命令04 查找和檢索

先說一下 文件的基本類型 文件類型 l 符號鏈接文件&#xff08;軟連接&#xff09; b 塊設備 &#xff08;磁盤文件&#xff09;c 字符設備p 管道設備&#xff08;pipe&#xff09;s 本地套接字&#xff08;網絡編程&#xff09;- 普通文件 用find命令的時候&…

linux 常用命令05 常用的壓縮與解壓縮文件

zip/unzip ----zip格式 使用方式&#xff1a;zip -r 壓縮包名 原材料 -r代表遞歸子目錄 原材料可以有多個 例如&#xff1a;zip -r bb.zip bb hello 對應的解壓縮&#xff1a;unzip bb.zip .gz格式的壓縮包 gzip和gunzip tar 最常用打包工具 .tar.gz tar相應參數介紹 -c 壓縮…

apt-howto

https://www.debian.org/doc/manuals/apt-howto/index.zh-cn.html#contents

Linux系統監控shell腳本

開源項目 https://github.com/atarallo/TECMINT_MONITOR #! /bin/bash # unset any variable which system may be usingunset tecreset os architecture kernelrelease internalip externalip nameserver loadaveragewhile getopts iv name docase $name ini)iopt1;;v)vopt1…

linux ubuntu 軟件安裝的三種方式

apt-get 自動安裝軟件&#xff0c;解決依賴關系 sudo apt-get update 更新源 源在 /etc/apt/sources.list 文件中sudo apt-get install softwarename sudo apt-get remove softwarenamedpkg 根據deb安裝包來安裝軟件 dpkg 是“Debian Packager ”的簡寫 sudo dpkg -i xxx.de…

linux 用戶管理以及其他命令

設置用戶組 sudo groupadd test 增加test用戶組創建用戶 選項&#xff1a; -s 指定shell -g 指定組 -d 用戶家目錄 -m 家目錄不在時&#xff0c;自動創建 sudo useradd -s /bin/bash -g test -d /home/newuser -m newuser設置密碼 sudo passwd newuser切換用戶 su xiaowan…

蒙特卡洛法求圓周率100億數據

代碼 import time import random hits0 pi0 DARTS100000*100000 starttime.perf_counter() for i in range(DARTS):x,yrandom.random(),random.random()distpow(x ** 2y**2,0.5)if dist < 1.0:hits1 pi4*(hits/DARTS) print("圓周率的值是{:.10f}".format(pi)) p…

linux gcc 簡單使用記錄01

大體編譯流程 gcc 參數&#xff1a; I 包含頭文件路徑 L 包含庫文件路徑 l 庫名 比如libxxx.so 對應著 -lxxx(掐頭去尾) O 優化選項 1&#xff0c;3 W 警告 all 顯示更多的 c 編譯成 .o 文件&#xff08;二進制&#xff09; E 輸出到標準輸出&#xff0c;宏替換&#xff0c…

No module named 'Tkinter'

sudo apt install python3-tk這一句就搞定了。網上長篇大論也真是醉了

Linux gcc 制作靜態庫01

制作步驟 編譯為 .o 文件 createliba目錄下 結構為 ├── head │ └── test.h ├── jia.c ├── jian.c ├── cheng.c ├── chu.c 這4個源文件&#xff0c;提供 - * /算數運算&#xff0c; 使用了 head目錄下 test.h文件 先編譯為.o文件 gcc -c *.c -I./head l…