1、Linux防火牆基礎
1.1 ptables的表、鏈結構
1.1.1 Linux包過濾防火牆概述
netfilter
位於Linux內核中的包過濾功能體系
稱爲Linux防火牆的"內核態"
iptables
位於/sbiniptables,用來管理防火牆規則的工具
稱爲Linux防火牆的"用戶態"
上述2種稱呼均可以表示Linux防火牆
1.2 數據包控制的匹配流程
數據包到達防火牆時,規則表之間的優先順序:
raw > mangle > nat > filter
1.2.1 四表
raw表∶ 肯定是否對該數據包進行狀態跟蹤。包含兩個規則鏈, OUTPUT、PREROUTING。
mangle表∶修改數據包內容,用來作流量整形的,給數據包設置標記。包含五個規則鏈,INPUT、oUTPUT、FORWARD、PRERoUTTNG、PosTRou TING。
nat表∶ 負責網絡地址轉換,用來修改數據包中的源、目標IP地址或端口。包含三個規則鏈, oUTPUT、PRERoUTING、PoSTRoUTING。
filter表;負責過濾數據包, 肯定是否放行該數據包(過濾)。 包含三個規則鋅鏈,INPUT、FORWARD、OUTPUT。
1.2.2 五鏈
INPUT∶ 處理入站數據包,匹配目標IP爲本機的數據包。
OUTPUT∶處理出站數據包,通常不在此鋅上,作配置。
FORWARD∶ 處理轉發數據包,匹配流經本機的數據包。
PREROUTING鏈∶ 在進行路由選擇前處理數據包,用來修改目的地址,用來作DNAT。至關於把內網服務器的工P和端口映射到路由器的外網IP和端口上。
POSTROUTING鏈∶ 在進行路由選擇後處理數據包,用來修改源地址,用來作SNAT。至關於內網經過路由器NAT轉換功能實現內網主機經過一個公網工iP地址上網。
1.2.3 四表五鏈總結
規則表的做用∶容納各類規則鏈
規則鏈的做用∶容納各類防火牆規則
總結∶表裏有鏈,鏈裏有規則
1.2.4 規則鏈之間的匹配順序
1)主機型防火牆∶
入站數據(來自外界的數據包,且目標地址是防火牆本機)∶ PREROUTING --> INPUT --> 本機的應用程序
出站數據(從防火牆本機向外部地址發送的數據包)∶ 本機的應用程序 --> OUTPUT --> POSTROUTING網絡型防火牆∶
轉發數據(須要通過防火牆轉發的數據包)∶ PREROUTING --> FORWARD --> POSTROUTING
1.2.5 規則鏈內的匹配順序∶
自上向下按順序依次進行檢查,找到相匹配的規則即停 止 (LoG策略例外, 表示記錄相關日誌)
若在該鏈內找不到相匹配的規則,則按該鏈的默認策略處理(未修改的情況下,默認策略爲容許)
2、編寫防火牆規則
準備工做:
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 #開啓服務
2.1 基本語法、控制類型
2.1.1 iptables防火牆的配置方法∶
使用iptables 命令行。
使用system-config-firewall
2.1.2 iptables 命令行配置方法∶
命令格式
iptables [-t 表名 ] 管理選項 [ 鏈名 ] [ 匹配條件 ] [-j 控制類型 ]
注意事項:
不指定表名時,默認指filter表
不指定鏈名時,默認指表內的全部鏈
除非設置鏈的默認策略,不然必須指定匹配條件
控制類型使用大寫字母,其他均爲小寫
2.1.3 經常使用的控制類型∶
ACCEPT∶容許數據包經過。
DROP∶直接丟棄數據包,不給出任何迴應信息。
REJECT∶ 拒絕數據包經過,會給數據發送端一個響應信息。 SNAT∶修改數據包的源地址。 DNAT∶修改數據包的目的地址。
MASQUERADE∶假裝成一個非固定公網IP地址。
LOG∶ 在/var/log/messages文件中記錄日誌信息,而後將數據包傳遞給下一條規則。LOG只是一種輔助動做,並無真正處理數據包。
2.1.4 經常使用的管理選項∶
-A ∶ 在指定鏈的末尾追加 (–append)一條新的規則
-I ∶ 在指定鏈的開頭插入(–insert)一條新的規則, 未指定序號時默認做爲第一條規則
-R ∶ 修改、替換(–replace)指定鏈中的某一條規則,可指定規則序號或具體內容
-P ∶設置指定鏈的默認策略(–policy)
-D ∶ 刪除 (–delete)指定鏈中的某一條規則, 可指定規則序號或具體內容
-F ∶ 清空(–flush)指定鏈中的全部規則,若未指定鏈名,則清空表中的全部鏈
-L∶列出 (–list)指定鏈中全部的規則,若未指定鏈名,則列出表中的全部鏈
-n ∶ 使用數字形式(–numeric)顯示輸出結果,如顯示 IP 地址而不是主機名
-v ∶ 顯示詳細信息,包括每條規則的匹配包數量和匹配字節數
–line-numbers∶ 查看規則時,顯示規則的序號
2.2 添加、查看、刪除規則
2.2.1 添加新的規則∶
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
2.2.2 查看規則列表∶
iptables [-t 表名 ]-n -L[ 鏈名][--line-numbers]
或
iptables -[vn]L #注意∶不能夠合寫爲 -Ln
iptables -n -L --line-numbers
2.2.3 設置默認策略∶
iptlables [-t 表名 ] -P <鏈名><控制類型>
iptables -P INPUT DROp iptables -P FORWARD DROp
2.2.4 刪除規則∶
iptables -D INPUT 2
iptables -t filter -D INPUT -p icmp -jREJECT
#通常在生產環境中設置網絡型防火牆、主機型防火牆時都要設置默認規則爲DROP,並設置白名單
注意∶
若規則列表中有多條相同的規則時, 按內容匹配只刪除的序號最小的一條
按號碼匹配刪除時, 確保規則號碼小於等於已有規則數,不然報錯
按內容匹配刪數時, 確保規則存在, 不然報錯
2.2.5 清空規則∶
iptables 【-t 表名】 -F 【鏈名】
iptables -F INPUT
iptables -F
注意:
-F 僅僅是清空鏈中的規則,並不影響 -P 設置的默認規則,默認規則須要手動進行修改
-P 設置了DROP後,使用-F 必定要當心
防止把容許遠程鏈接的相關規則清除後致使沒法遠程鏈接主機,此狀況若是沒有保存規則可重啓主機解決
若是不寫表名和鏈名,默認清空filter表中全部鏈裏的全部規則
2.3 規則的匹配條件
2.3.1 通用匹配
可直接使用,不依賴於其餘條件或擴展,包括網絡協議、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
2.3.2 隱含匹配
要求以特定的協議匹配做爲前提,包括端口、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
2.3.4 TCP標記匹配∶ --tcp-flags TCP標記
iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -jACCEPT
#丟棄SYN請求包,放行其餘包
2.3.5 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
2.3.6 顯式匹配
要求以"-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
2.3.7 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數據包
2.3.6=8 MAC地址匹配∶-m mac --mac-source MAC地址
iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xX:xx-j DROP
#禁止來自某MAC 地址的數據包經過本機轉發
2.3.8 狀態匹配∶-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