該怎么描述防火墻的實現呢?既然說不明白那就不說了,自己領悟吧!
一、防火墻是什么?
通過一些規則在網絡數據報文必經的幾個鉤子上做端口的限制,實現數據過濾的功能。
二、數據報文傳輸的路徑是怎樣的?
1、 客戶端發出數據報文---->到達服務器的網絡接口-----(判斷目標是服務器自己)將報文送入內核處理---->將處理好的數據報文轉發出去---->通過網絡接口發還給客戶端
2、客戶端發出數據報文---->到達服務器的網絡接口-----(判斷目標不是服務器)將數據轉發出去---->通過網絡接口送去目標地址

三、哪些地方是數據流必經的點?
1.報文進入網卡,但是還沒有經過路由,這個點叫做prerouting
2.報文經過路由后送入內核之前,這個點叫做input
3.路由功能節點,這個點叫forward
4.報文由內核處理完畢,發送給路由之前,這個點叫output
5.報文經過路由后,就要經過網卡發送出去,這個點叫postrouting
這些點在專業術語中稱為hooks funcation即鉤子函數,因為所有的數據流必經這五個點,所以我們的防火墻規則寫在這5個點上就可以了。

四、有哪些規則可以防火?
這就要談一下防火墻的歷史了,最開始linux是沒有防火墻設計的,基于安全的考慮OpenBSD最先將防火墻的概念在其unix內核中實現。后來linux的維護者看到有這么好的東西,就把它移植到linux的內核中去了,最開始這個規則叫做firewall,但是其太簡陋了,只能起到數據報文過濾filter的功能。隨著時間的發展其功能得到了非常多的擴展,比如實現了nat、mangle、raw等功能,所以后來給這些功能統一一起來起了個好聽的名字——netfilter,怎么樣?好聽吧......
netfilter叫做規則,它有四種功能:
1.filter 過濾
2.nat 網絡地址轉換
3.mangle 修改數據報文首部的可修改信息
4.raw 關閉net表上啟動的連接追蹤功能
五、什么是鏈?chain?
在一個鉤子上添加了很多規則功能,這些規則功能連起來就叫chain。但是有些功能只有在特定的鉤子上才起作用,下面是五個鏈的對應表:
| prerouting | raw | mangle | nat | |
| input | mangle | filter | ||
| output | raw | mangle | nat | filter |
| forward | mangle | filter | ||
| postrouting | mangle | nat |
鏈上面的規則檢查是要按順序檢查的:
1.同類規則匹配范圍小的方上面
2.不同類規則,匹配次數頻繁的方上面
3.應該設定默認的規則
六、什么是表?table
每個功能都對應幾個鏈,把這些鏈排起來就是表,下面是四個功能表:
| filter | input | forward | output | ||
| nat | prerouting | output | postrouting | ||
mangle | prerouting | input | output | forward | postrouting |
| raw | prerouting | output |
七、上面所說的規則功能怎么添加到linux中?
iptables是一個接口,也是一個工具,可以讓程序員使用命令行模式輸入設定的規則到指定的hooks funcation上,實現防火墻的功能。
格式:
# iptables [-t TABLE] SUBCOMMAND CHAIN CRETERIA -j TARGET
TABLE: filter, nat, mangle, raw
SUBCOMMAND:
-P 設置鏈的默認處理 #iptables -P INPUT DROP
-F 清空指定鏈上的所有規則 #iptables -F INPUT
-Z 將鏈上的流經的數據報文數據清零
-N 新建一個鏈,自定義的鏈
-X 刪除用戶自定義的空鏈
-E 重命名自定義鏈
-A 在指定鏈的最后添加一條規則
-I 插入一條規則,默認插入為第一條
-D 刪除指定的規則
-R 替換指定的規則
-L 列出指定鏈上的所有規則
-L -n 以數字方式列出
-L -n -v 更相信的信息
-L -n --line-numbers 顯示規則編號
-L -n -v -x 顯示計數器的精確值
CHAIN: PREROUTING INPUT FORWARD OUTPUT POSTROUTING
CRETERIA:
通用:-p 檢查協議tcp,udp,icmp
-s 源IP
-d 目標IP
-i 進入網卡接口
-o 出去網卡接口
隱式:(如果-p指明了協議-m 和協議可以省略)
-m tcp --dport|sport|syn|tcp-flags LIST1 LIST2

-m udp --dport|sport
-m icmp --icmp-type 8|0(8為ping請求,0為ping響應)


顯示:
-m multiport 指定多個端口
--sports
--dports

-m iprange 指定IP范圍
--src-range 源 (注意:前面可使用 ! 表示否定含義)
--dst-range 目標

-m string 指定過濾的字符串
--algo {kmp|bm} 指定解析算法
--string 字符串
--hex-string 十六進制編碼后的字符串

-m time 基于時間做限制
--datestart
--datestop
--timestart
--timestop
--weekdays

-m connlimit 基于并發連接數做限制
--connlimit-above

-m limit 基于鏈接速率做限制
--limit n[/second|/minit|/hour|/day] 限制鏈接速度多久一次
--limit-burst n 突發鏈接速率最快每秒n個

TARGET:
內置目標:ACCEPT(接受),DROP(不響應),REJECT(拒絕)
自定義的鏈chain
八、未完待續
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。