Linux 防火牆及防火牆規則

防火牆的分類

包過濾型防火牆

工作在OSI參考模型的網絡層 它根據數據包頭源地址、目的地址、端口號和協議類型 等標誌確定是否允許數據包通過

 

代理型防火牆

主要工作在OSI的應用層 代理服務在確認客戶端連接請求有效後接管代理 代爲向服 務器發出連接請求

代理型防火牆可以允許或拒絕特定的應用程序或服務,還可以實施數據流監控、過濾、 記錄和報告功能

代理服務器通常有高速緩存功能

代理防火牆的最大缺點是速度較慢(客戶機請求的地址沒有存在於緩存中)

 

狀態檢測型防火牆

可以動態地根據實際應用需求 自動生成或刪除包過濾規則

不但能根據數據包的源地址、目標地址、協議類型、源端口、目標端口等對數據包進行 控制 而且能記錄通過防火牆的連接狀態 直接對包裏的數據進行處理

 

網關防火牆

DMZ網關防火牆

 

 

netfilter

位於Linux內核中的包過濾防火牆功能體系

稱爲Linux防火牆的”內核態”

 

iptables

位於/sbin/iptables 是用來管理防火牆的命令工具

爲防火牆體系提供過濾規則/策略 決定如何過濾或處理到達防火牆主機的數據包

成爲Linux防火牆的”用戶態”

 

-------習慣上 上述兩種稱呼都可以代表Linux防火牆

 

規則鏈

規則的作用在於對數據包進行過濾或處理 根據處理時機的不同 各種規則被組織在不 同的”鏈”中

規則鏈是防火牆規則/策略的集合

 

默認的5種規則鏈

INPUT 處理入站數據包 (外網入 內網出 箭頭指向防火牆 進入防火牆)

OUTPUT 處理出站數據包

FORWARD 處理轉發數據包

POSTROUTING 在進行路由選擇後處理數據包

PREROUTING 在進行路由選擇前處理數據包

 

規則表

具有某一類相似用途的防火牆規則 按照不同處理時機區分到不同的規則鏈以後 被歸 置到不同的”表”中

規則表是規則鏈的集合

 

默認的4個規則表

raw 表 確定是否對該數據包進行狀態跟蹤

mangle 表 爲數據包設置標記

nat 表 修改數據包中的源、目的IP地址或端口(網關型防火牆 至少兩個網卡)

filter表 確定是否放行該數據包(過濾)

 

 

iptables 的規則表、鏈結構

 

規則表間的優先順序

raw、mangle、nat、filter

 

規則鏈間的匹配順序

入站數據 PREROUTING、INPUT

出站數據 OUTPUT、POSTROUTING

轉發數據 PREROUTING、FORWARD、POSTROUTING

 

規則鏈內的匹配順序

按順序依次進行檢查 找到相匹配的規則即停止(LOG策略會有例外)

若在該鏈內找不到相匹配的規則 則按該鏈的默認策略處理

 

iptables命令的語法格式

ipatables [-t 表名] 管理選項 [鏈名] [條件匹配] [-j目標動作或跳轉]

不指定表名時 默認爲filter表

不指定鏈名時,默認表示該表內所有鏈

除非設置規則鏈的缺省策略(如果不是設置默認規則) 否則一定需要條件匹配

 

設置規則內容:

-A在鏈尾追加一條新的規則

-I 在指定位置(或鏈首)插入一條新的規則

-R 修改、替換指定位置或內容的規則

-P 設置指定鏈的默認策略

 

列表查看規則

-L 列表查看各規則信息

--line-numbers 查看規則信息時顯示規則的行號

-n以數字形式顯示IP地址、端口等信息

-v 顯示數據包個數、字節數等詳細信息

 

 

清除規則

-D 刪除指定位置或內容規則

-F 清空規則鏈內的所有規則

 

自定義規則鏈

-N 創建一條新的規則鏈

-X 刪除自定義的規則鏈

 

-h 查看iptables命令的使用幫助

 

刪除指定位置的規則

 

清空所有規則

 

指定表格清空規則

 

創建一條新的規則鏈

 

設置匹配數據包的條件

通用條件匹配

可直接使用 不依賴於其他的條件或擴展模塊

包括網絡協議、IP地址、網絡接口等匹配方式

 

隱含條件匹配

一般需要以特定的協議匹配作爲前提

包括端口、TCP標記、ICMP類型等匹配方式

 

顯式條件匹配

需要使用”-m擴展模塊”的形式明確指定匹配方式

包括多端口、MAC地址、IP地址範圍、數據包狀態等匹配方式

 

 

通用條件匹配

可直接使用,不依賴於其他的條件或擴展模塊

包括網絡協議、IP地址、網絡接口等匹配方式

 

協議匹配

使用"-p協議名"的形式

協議名可使用在"/etc/protocols"文件中定義的名稱

常用的協議包括tcp、udp、icmp等

 

地址匹配

使用"-s源地址"、"-d目標地址的形式"

地址可以使單個IP地址、網絡地址(帶掩碼長度)

 

接口匹配

使用"-i網絡接口名"、"-o網絡接口名"形式 分別對應接收、發送數據包的網絡接口

 

拒絕進入防火牆的所有ICMP包

 

允許防火牆轉發除ICMP以外的所有包

 

拒絕轉發來自192.168.1.11主機的數據

 

丟棄從外網接口(eth1)進入防火牆主機的源地址爲172.16.0.0/12的數據包

 

拒絕轉發從eth1口出去的目標地址爲61.35.4.3的數據包

 

隱含條件匹配

一般需要以特定的協議匹配作爲前提

包括端口、TCP標記、ICMP類型等匹配方式

 

端口匹配

使用"-sport源端口"、"-dport"目的端口的形式

採用"端口1:端口2"的形式可以指定一個範圍的端口

 

允許轉發使用22端口的ssh數據包

 

允許本機開放從TCP端口20-80出去的端口

 

禁止其他主機ping

 

允許ping其他主機

 

或者  iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j DROP

  iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT

 

  iptables -I INPUT -i eth1 -p tcp - -tcp-flags SYN,RST,ACK SYN -j REJECT

  iptables -I INPUT -i eth1 -p tcp - -syn -j REJECT

 

ICMP類型匹配

使用”--icmp-type ICMP類型”的形式

ICMP類型可以使用類型字符串或者對應的數值 例如Echo-Request、Echo-Reply

 

TCP標記匹配

使用”--tcp-flags 檢查範圍 被設置的標記”的形式

如”--tcp-flags SYN,RST,ACK SYN”表示檢查SYN,RST,ACK這3個標記 只有SYN爲1時滿足條件

 

顯式條件匹配

需要使用“-m 擴展模塊”的形式明確指定匹配方式

包括多端口、MAC地址、IP地址範圍、數據包狀態等匹配方式

 

MAC地址匹配

使用“-m mac”結合“--mac-source MAC地址”的形式來表示數據包的源MAC地址

 

多端口匹配

使用“-m multiport”結合“--sports 源端口列表”或者“--dports 目標端口列表”的形式

多個端口之間使用逗號“,”分隔 連續的端口也可以使用冒號“:”分隔

 

IP地址範圍匹配

使用“-m iprange”結合“--src-range 源IP範圍”或者“--dst-range 目標IP範圍”的形式

以“-”符號連接起始IP地址、結束IP地址

 

數據包狀態匹配

使用“-m state”結合“--state 狀態類型”的形式

同時表示多種狀態時以逗號“,”分隔

常見的數據包狀態包括:NEW、ESTABLISHED、RELATED、INVALID

 

禁止轉發來自MAC地址爲00:0C:29:27:55:3F的主機的數據包

 

允許防火牆本機對外開放端口20 21 25 110以及被動模式FTP端口1250-1280

 

禁止轉發源地址爲192.168.1.20-192.168.1.99的TCP數據包

 

禁止轉發與正常TCP連接無關的非—syn請求數據包

 

拒絕訪問防火牆的新數據包 但允許響應連接或與已有連接相關的數據包

 

“ESTABLISHED”表示已經響應請求或者已經建立連接的數據包,”RELATED”表示與已建立的連接有相關性的,比如FTP數據連接等

 

常見的數據包處理方式

ACCEPT 放行數據包

DROP 丟棄數據包

REJECT 拒絕數據包

LOG 記錄日誌信息 並傳遞給下一條規則處理(防止SSH爆破)

用戶自定義鏈名 傳遞給自定義鏈內的規則進行處理

 

SNAT 修改數據包的源地址信息

DNAT 修改數據包的目標地址信息

 

導入、導出防火牆規則

導出規則 iptables-save

結合重定向輸出”>”符號保存規則信息

導入規則 iptables-restore

結合重定向輸入”<”符號恢復規則信息

 

編寫防火牆腳本文件

預先加載擴展模塊 設置環境參數

引入可控變量 增強腳本的可移植性、可重用性

通過shell語句靈活控制防火牆策略

 

防火牆的一般結構

設置網段、網卡、IP地址等變量

加載包過濾相關的內核模塊 FTP相關: ip_nat_ftp、ip_conntrack_ftp

用於添加的具體防火牆規則內容

清空原有規則,建立新的規則

確認開啓路由轉發功能

方法1    /sbin/sysctl -w net.ipv4.ip_forward=1

方法2    echo 1 > /proc/sys/net/ipv4/ip_forward

方法3    修改/etc/sysctl.conf,設置net.ipv4.ip_forward=1

設置iptables腳本中的自定義變量

定義變量名對應內外網卡對應的ip和接口名稱

INTERNET_IP=”212.13.24.23”

INTERNET_IF=”eth1”

LAN_IP=”192.168.200.1”

LAN_IF=”eth0”

 

加載模塊

加載支持ftp連接跟蹤的功能模塊:/sbin/modprobe ip_conntrack ftp

加載支持對ftp連接進行NAT轉換的功能模塊:/sbin/modprobe ip_nat_ftp

 

iptables腳本開頭初始化語句

/sbin/iptables -F

/sbin/iptables -t nat -F

/sbin/iptables -t mangle -F

/sbin/iptables -t raw -F

/sbin/iptables -X

/sbin/iptables -t nat -X

/sbin/iptables -t mangle -X

/sbin/iptables -t raw -X

/sbin/iptables -P INPUT ACCEPT

/sbin/iptables -P OUTPUT ACCEPT

/sbin/iptables -P FORWARD ACCEPT

 

綜合實驗

1   配置入站鏈默認拒絕,其它鏈都是允許

    

 

允許入站接口是本地迴環接口的任何數據

 

允許所有客戶機訪問Linux服務器的Samba共享

 

允許響應所有客戶機的DNS請求

 

只允許一臺客戶機ping通服務器

 

2   配置入站和出站鏈默認是拒絕,其它鏈都是允許

 

禁止某一個客戶機訪問Linux服務器的共享(只能使用--tcp-flag實現)

 

但允許服務器訪問那個客戶機上的共享(只能使用--tcp-flag實現)

 

禁止服務器ping那臺客戶機,但允許那臺客戶機ping通服務器(只能使用--icmp-type)

 

3   配置服務器出站鏈默認是拒絕,其它鏈都是允許

 

客戶機不能訪問服務器上任何資源

 

要求服務器能訪問任意客戶機上的所有資源,例如能ping通客戶機,也可以ssh和http 訪問客戶機(只能使用--state實現)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章