何謂防火牆
防火牆:一種位於內部網絡與外部網絡之間的網絡安全系統。

防火牆的判斷依據(一)
各層數據包包頭內的信息
鏈路層
比如將網卡的MAC地址作為過濾規則
網絡層
比如將IP包頭的相關數據作為過濾規則
網絡傳輸層
比如將TCP包頭的內容信息作為過濾規則



防火牆的判斷依據(二)
數據包所承載的數據內容
如一個HTTP協議應用的數據包,客戶端想要訪問的對象是www.baidu.com這台主機,可以在防火牆上使用www.baidu.com字符串作為過濾條件。
防火牆的判斷依據(三)
連接狀態
xt_state.ko 提供的數據包連接狀態
NEW
ESTABLISHED
RELATED
INVALID
iptables 的state模塊有更詳細的介紹
防火牆的分類
數據包過濾防火牆
優點:檢查范圍是一個數據包,對內存及CPU性能要求低。
缺點:無法對連接中的數據進行更精確的過濾操作。
應用層防火牆
優點:安全性高,提供應用層的安全。
缺點:性能差,只支持有限的應用,不透明,不檢查報頭,不建立連接狀態表,檢查數據區,網絡層保護較弱。
常見的防火牆結構
單機防火牆
單機防火牆保護本機,凡是進出本機的數據包,都會受到這個防火牆 的監控,達到維護本機安全的目的。
網關式防火牆
布置在網關位置的防火牆,保護的范圍是整個網絡。
透明防火牆
簡單來說,透明防火牆就是一個網橋設備,並且在網橋設備上賦予了過濾器的功能。好處是,網橋是工作在L2的網絡設備,不會有任何路由問題。
Netfilter/iptables
Netfilter可以說是Linux的第三代防火牆,是運行在Linux中的一個功能。Netfilter也是以模塊的形式存在於Linux中。每當Linux多一個Netfilter的模塊,就代表Linux防火牆的功能多了一項。
Netfilter所需要的規則是存放在內存中的,防火牆管理人員如何將規則放到內存中呢?所以防火牆管理人員需要一個規則編輯工具。
Iptables 是在IPV4網絡環境中使用
Ip6tables是在IPV6網絡環境中使用
Netfilter 是 Linux 核心中一個通用架構,它提供了一系列的 “表”(tables),每個表由若干 “鏈”(chains)組成,而每條鏈中可以有一條或數條 “規則”(rule)組成。
內核中的鈎子函數
Netfilter框架之所以能實現許多強大的功能,是因為它在內核若干網絡轉發的關鍵函數,設計了許多巧妙的鈎子函數,比如數據轉發,由兩個主要函數A 和B函數實現,流程為A->B ,現在改變為A->鈎子函數->B.比如
return NF_HOOK(PF_INET, NF_IP_PRE_ROUTING, skb, dev, NULL,ip_rcv_finish);
內核在網絡堆棧的重要節點,引入了NF_HOOK宏,搭起了整個Netfilter的框架

iptables工具使用方法
filter/nat/mangle/raw
filter,用於一般的數據包過濾;iptables默認的表;鏈:INPUT、FORWARD、OUTPUT;
nat,僅用於NAT,也就是轉換數據包的源地址或目標地址;鏈:PREROUTING、POSTROUTING、OUTPUT;
mangle,用來修改流經防火牆的數據包內容,不能做任何NAT,它只是改變數據包的 TTL,TOS或MARK,而不是其源目地址。鏈:PREROUTING、POSTROUTING、OUTPUT、INPUT和 FORWARD;
raw, 負責加快數據包穿越防火牆的速度,借此提高防火牆的性能;
Iptables命令參數(一)

Iptables命令參數(二)

Iptables命令參數(三)


一般原則及性能優化
撰寫防火牆規則的原則:
先拒絕所有連接,再逐一開放對外提供的服務。
性能優化:
原則:盡量減少不必要的規則匹配
調整防火牆規則順序
巧妙使用multiport和iprange
巧妙使用用戶自定義鏈
例子(一)
1.刪除現有規則
iptables -F
2.配置默認鏈策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
3.允許遠程主機進行SSH連接
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
4.允許本地主機進行SSH連接
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
5.允許HTTP請求
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
例子(二)
黑白名單設置
白名單配置:比如只允許訪問URL中帶baidu的網頁
iptables -t filter -I INPUT 1 -p udp -m string --algo bm ! --string "baidu" -j REJECT
黑名單配置:比如禁止訪問URL中帶sina的網頁
iptables -t filter -I INPUT 1 -p udp -m string --algo bm --string "sina" -j REJECT
