1. 程式人生 > 其它 >Linux防火牆netfilter iptables 簡介

Linux防火牆netfilter iptables 簡介

一、Linux防火牆基礎

1.1 ptables的表、鏈結構 1.1.1 Linux包過濾防火牆概述 netfilter 位於Linux核心中的包過濾功能體系 稱為Linux防火牆的"核心態" iptables 位於/sbiniptables,用來管理防火牆規則的工具 稱為Linux防火牆的"使用者態" 上述2種稱呼都可以表示Linux防火牆 1.2 資料包控制的匹配流程 資料包到達防火牆時,規則表之間的優先順序: raw > mangle > nat > filter 四表 raw表∶ 確定是否對該資料包進行狀態跟蹤。包含兩個規則鏈, OUTPUT、PREROUTING。 mangle表∶修改資料包內容,用來做流量整形的,給資料包設定標記。包含五個規則鏈,INPUT、oUTPUT、FORWARD、PRERoUTTNG、PosTRou TING。 nat表∶ 負責網路地址轉換,用來修改資料包中的源、目標IP地址或埠。包含三個規則鏈, oUTPUT、PRERoUTING、PoSTRoUTING。 filter表;負責過濾資料包, 確定是否放行該資料包(過濾)。 包含三個規則鋅鏈,INPUT、FORWARD、OUTPUT。 五鏈 INPUT∶ 處理入站資料包,匹配目標IP為本機的資料包。 OUTPUT∶處理出站資料包,一般不在此鋅上,做配置。 FORWARD∶ 處理轉發資料包,匹配流經本機的資料包。 PREROUTING鏈∶ 在進行路由選擇前處理資料包,用來修改目的地址,用來做DNAT。相當於把內網伺服器的工P和埠對映到路由器的外網IP和埠上。 POSTROUTING鏈∶ 在進行路由選擇後處理資料包,用來修改源地址,用來做SNAT。相當於內網通過路由器NAT轉換功能實現內網主機通過一個公網工iP地址上網。 規則鏈之間的匹配順序 主機型防火牆∶ 入站資料(來自外界的資料包,且目標地址是防火牆本機)∶ PREROUTING --> INPUT --> 本機的應用程式 出站資料(從防火牆本機向外部地址傳送的資料包)∶ 本機的應用程式 --> OUTPUT --> POSTROUTING網路型防火牆∶ 轉發資料(需要經過防火牆轉發的資料包)∶ PREROUTING --> FORWARD --> POSTROUTING 規則鏈內的匹配順序∶ 自上向下按順序依次進行檢查,找到相匹配的規則即停 止 (LoG策略例外, 表示記錄相關日誌) 若在該鏈內找不到相匹配的規則,則按該鏈的預設策略處理(未修改的狀況下,預設策略為允許)

二、編寫防火牆規則

1.iptables的安裝 CentOS 7預設使用firewalld防火牆,沒有安裝 iptables,若想使用iptables防火牆。必須先關閉firewalld防火牆,再安裝 iptables systemctl stop firewalld.service #關閉防火牆 systemctl disable firewalld.service #設為開機不自啟 yum -y install iptables iptables-services #安裝iptables systemctl start iptables. Service #開啟服務 基本語法、控制型別 iptables防火牆的配置方法∶ 使用iptables 命令列。 使用system-config-firewall iptables 命令列配置方法∶ 命令格式 iptables [-t 表名 ] 管理選項 [ 鏈名 ] [ 匹配條件 ] [-j 控制型別 ] 常用的控制型別∶ ACCEPT∶允許資料包通過。 DROP∶直接丟棄資料包,不給出任何迴應資訊。 REJECT∶ 拒絕資料包通過,會給資料傳送端一個響應資訊。 SNAT∶修改資料包的源地址。 DNAT∶修改資料包的目的地址。 MASQUERADE∶偽裝成一個非固定公網IP地址。 LOG∶ 在/var/log/messages檔案中記錄日誌資訊,然後將資料包傳遞給下一條規則。LOG只是一種輔助動作,並沒有真正處理資料包。 常用的管理選項∶ -A ∶ 在指定鏈的末尾追加 (–append)一條新的規則 -I ∶ 在指定鏈的開頭插入(–insert)一條新的規則, 未指定序號時預設作為第一條規則 -R ∶ 修改、替換(–replace)指定鏈中的某一條規則,可指定規則序號或具體內容 -P ∶設定指定鏈的預設策略(–policy) -D ∶ 刪除 (–delete)指定鏈中的某一條規則, 可指定規則序號或具體內容 -F ∶ 清空(–flush)指定鏈中的所有規則,若未指定鏈名,則清空表中的所有鏈 -L∶列出 (–list)指定鏈中所有的規則,若未指定鏈名,則列出表中的所有鏈 -n ∶ 使用數字形式(–numeric)顯示輸出結果,如顯示 IP 地址而不是主機名 -v ∶ 顯示詳細資訊,包括每條規則的匹配包數量和匹配位元組數 –line-numbers∶ 檢視規則時,顯示規則的序號 新增、檢視、刪除規則 新增新的規則∶ iptables -t filter -A INPUT -p icmp -j REJECT 禁止ping通本主機(有響應) iptables -t filter -A INPUT -p icmp -j DROP 禁止ping通本主機(無響應) iptables -I INPUT 2 -p tcp--dport 22 -jACCEPT 檢視規則列表∶ iptables [-t 表名 ]-n -L[ 鏈名][--line-numbers] 或 iptables -[vn]L #注意∶不可以合寫為 -Ln iptables -n -L --line-numbers 設定預設策略∶ iptlables [-t 表名 ] -P <鏈名><控制型別> iptables -P INPUT DROp iptables -P FORWARD DROp 刪除規則∶ iptables -D INPUT 2 iptables -t filter -D INPUT -p icmp -jREJECT #一般在生產環境中設定網路型防火牆、主機型防火牆時都要設定預設規則為DROP,並設定白名單 注意∶ 若規則列表中有多條相同的規則時, 按內容匹配只刪除的序號最小的一條 按號碼匹配刪除時, 確保規則號碼小於等於已有規則數,否則報錯 按內容匹配刪數時, 確保規則存在, 否則報錯 清空規則∶ iptables 【-t 表名】 -F 【鏈名】 iptables -F INPUT iptables -F 注意: -F 僅僅是清空鏈中的規則,並不影響 -P 設定的預設規則,預設規則需要手動進行修改 -P 設定了DROP後,使用-F 一定要小心 防止把允許遠端連線的相關規則清除後導致無法遠端連線主機,此情況如果沒有儲存規則可重啟主機解決 如果不寫表名和鏈名,預設清空filter表中所有鏈裡的所有規則 規則的匹配條件 通用匹配 可直接使用,不依賴於其他條件或擴充套件,包括網路協議、IP地址、網路介面等條件。 協議匹配∶ -p 協議名 地址匹配∶ -s 源地址、-d 目的地址 #可以是IP、網段、域名、空(任何地址) 介面匹配∶ -i 入站網絡卡、-o 出站網絡卡 iptables -A FORWARD !-p icmp -j ACCEPT iptables -A INPUT -s 192.168.80.11 -j DROP iptables -I INPUT -i ens33 -s 192.168.80.0/24 -j DROP 隱含匹配 要求以特定的協議匹配作為前提,包括埠、TCP標記、ICMP型別等條件。 埠匹配∶ --sport 源埠、--dport 目的埠 #可以是個別埠、埠範圍 –sport 1000 匹配源端 口是1000的資料包 –sport 1000:3000 匹配源端 口是1000-3000的資料包 –sport : 3000 匹配源端 口是3000及以下的資料包 –sport 1000: 匹配源端 口是1000及以上的資料包 注意∶ --sport 和 --dport 必須配合 -p <協議型別> 使用 iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT iptables-I FORWARD -d 192.168.80.0/24 -p tcp --dport 24500:24600 -j DROP TCP標記匹配∶ --tcp-flags TCP標記 iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -jACCEPT #丟棄SYN請求包,放行其他包 ICMP型別匹配∶–icmp-type ICMP型別 #可以是字串、數字程式碼 "Echo-Request"(程式碼為 8)表示 請求 "Echo-Reply"(程式碼為 0)表示 回顯 "Destination-Unreachable"(程式碼為 3)表示 目標不可達 關於其它可用的 ICMP 協議型別,可以執行"iptables -p icmp -h"命令,檢視幫助資訊 iptables -A INPUT -p icmp --icmp-type 8 -j DROP #禁止其它主機ping 本機 iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT #允許本機ping 其它主機 iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT #當本機ping 不通其它主機時提示目標不可達 #此時其它主機需要配置關於icmp協議的控制型別為 REJECT iptables -A INPUT-p icmp -j REJECT 顯式匹配 要求以"-m 擴充套件模組"的形式明確指出型別,包括多埠、MAC地址、IP範圍、資料包狀態等條件。 多埠匹配∶ -m multiport --sport 源埠列表 -m multiport --dport 目的埠列表 iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -i ACCEPT iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT IP範圍匹配∶ -m iprange --src-range IP範圍 iptables -A FORWARD -p udp -m iprange--src-range 192.168.80.100-192.168.80.200-j DROP #禁止轉發源地址位於192.168.80.100-192.168.80.200的udp資料包 MAC地址匹配∶-m mac --mac-source MAC地址 iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xX:xx-j DROP #禁止來自某MAC 地址的資料包通過本機轉發 狀態匹配∶-m state_–state 連線狀態 常見的連線狀態∶ NEW ∶與任何連線無關的,還沒開始連線 ESTABLISHED ∶響應請求或者已建立連線的,連線態 RELATED ∶ 與已有連線有相關性的(如FTP 主被動模式的資料連線),衍生態,一般與ESTABLISHED 配合使用 INVALID ∶ 不能被識別屬於哪個連線或沒有任何狀態 iptables -A FORWARD -m state --state NEW -p tcp !--syn -j DROP #禁止轉發與正常 TCP 連線無關的非–syn 請求資料包(如偽造的網路攻擊資料包) iptables -I INPUT -p tcp -m multiport --dport 80, 22,21,20,53 -j ACCEPT iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT iptables -A INPUT -p tcp -m state --state ESTABLISHED, RELATED -j ACCEPT