Linux包過濾防火墻概述
Linux 系統的防火墻 :IP信息包過濾系統,它實際上由兩個組件netfilter 和 iptables組成。
主要工作在網絡層,針對IP數據包。體現在對包內的IP地址、端口、協議等信息的處理上。
兩大組件?netfilter內核組件?iptables應用組件
netfilter :屬于內核態的功能體系,是一個內核模塊,由多個數據包過濾表組成,其中包含數據包的過濾處理規則集,并根據規則過濾處理IP數據包
iptables :屬于用戶態的管理工具,如同firewalld、ufw,是一個防火墻應用管理程序,用來實現防火墻規則集的增刪改查
四表五鏈
四表:raw(數據包狀態跟蹤) ? ? mangle(修改數據包內容,設置標記) ? ? ?nat(數據包地址轉換) ? ? ? filter(過濾數據包)
五鏈:INPUT(處理入站數據) ? OUTPUT(處理出戰數據) ? FORWARD(處理轉發數據) ? PREROUTING(修改目的地址) ? ?POSTROUTING(修改源地址)
raw 表包含?OUTPUT、PREROUTING
mangle 表包含?INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
nat 表包含?OUTPUT、PREROUTING、POSTROUTING
filter 表包含?INPUT、FORWARD、OUTPUT
數據包過濾的匹配流程
表的匹配順序: raw -> mangle -> nat -> filter
鏈的匹配順序:入站數據 PREROUTING -> INPUT -> 本機的應用程序
? ? ? ? ? ? ? 出站數據 本機的應用程序 -> OUTPUT -> POSTROUTING
?? ??? ??? ? ?轉發數據 PREROUTING -> FORWARD -> POSTROUTING
規則的匹配順序:從上往下依次匹配鏈中的規則,匹配到即停止;若沒有匹配的規則,則按照鏈的默認規則處理
過濾入站數據包 ?filter(INPUT)
過濾出站數據包 ?filter(OUTPUT)
過濾轉發數據包 ?filter(FORWARD)
修改內網轉發到外網數據包 的源IP地址 ? ?nat(POSTROUTING)
修改外網轉發到內網數據包的目的IP地址 ?nat(PREROUTING)
iptables的安裝
CentOS 7默認使用firewalld防火墻,沒有安裝 iptables,若想使用iptables防火墻。必須先關閉firewalld防火墻,再安裝 iptables
systemctl stop firewalld.service
systemctl disable firewalld.service
yum -y install iptables iptables-services
systemctl start iptables.service
iptables操作管理
命令格式: iptables -t ?表名 ? ?操作選項 ? 鏈名 ? ? ? ? 匹配條件選項 ? -j ?控制類型
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?filter? ? ? ? ? ? ? ? ? ? ?INPUT? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ACCEPT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?nat? ? ? ? ? ? ? ? ? ? ? OUTPUT? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? REJECT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? mangle? ? ? ? ? ? ? ? ?FORWARD? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DROP
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?raw? ? ? ? ? ? ? ? ? PREROUTING? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SNAT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? POSTROUTING? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DNAT
注意事項:
不指定表名時,默認指filter表
不指定鏈名時,默認指表內的所有鏈
除非設置鏈的默認策略,否則必須指定匹配條件
控制類型和鏈名使用大寫字母,其余均為小寫
常用的控制類型:
ACCEPT:允許數據包通過。
DROP:直接丟棄數據包,不給出任何回應信息。
REJECT:拒絕數據包通過,會給數據發送端一個響應信息。
SNAT:修改數據包的源地址。
DNAT:修改數據包的目的地址。
REDIRECT:重定向改變目的端口,將接受的包轉發至本機的不同端口
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 命令圖解
添加規則
iptables -t 表名 -A 鏈名 匹配條件 -j 控制類型
iptables -t 表名 -I 鏈名 序號 匹配條件 -j 控制類型
ping命令是使用icmp傳輸協議
給他指定一個規則 拒絕數據包通過
刪除規則
iptables -t 表名 -D 鏈名 序號/內容
iptables -t 表名 -F [鏈名] ? ? ? ? ? ? ?#如果不指定鏈名則刪除清空所有鏈的規則
改變規則
iptables -t 表名 -R 鏈名 序號 新規則內容
iptables -t 表名 -P 鏈名 ACCEPT/DROP/REJECT
查看規則
iptables -t 表名 -L -n -v --line-numbers [鏈名]?
? ? ? ? ? ? ? ? ? ? -nvL
生產環境中通常使用白名單方式設置規則 ?
? ?iptables -t 表名 -A 鏈名 匹配條件 -j ACCEPT ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #先配置需要放行的規則
? ?....
? ?iptables -t 表名 -A 鏈名 -j DROP ?或 ?iptables -t 表名 -P 鏈名 DROP ? ? ? #最后配置默認禁止所有的規則
iptables -t filter -A INPUT -p tcp -m multiport --dport 22,80,443 -j ACCEPT
規則的匹配條件
通用匹配:條件選項可直接使用
-p 協議 ? ? ? ?
-s 源IP/網段/域名 ? ? ? ?
-d 目的IP/網段/域名 ? ? ? ? ? ?
-i 入站網卡接口
-o 出站網卡接口?? ?
隱含匹配:需要使用 -p 指定協議作為前提?? ??? ??? ??? ??? ?
-p tcp/udp --dport 目的端口/端口范圍
-p tcp/udp --sport 源端口/端口范圍
-p icmp --icmp-type 8(請求)/0(回顯)/3(目標不可達)
顯式匹配:需要使用 -m 指定模塊
-m multiport --sport/--dport 端口列表
-m iprange --src-range(源)/--dst-range (目的) IP范圍
-m mac --mac-source 源MAC地址
-m state --state RELATED,ESTABLISHED[,NEW,INVALID] ? ? ? ? ?#RELATED,ESTABLISHED 用于放行返回的應答包進站
常見的連接狀態:
NEW :主機連接目標主機,在目標主機上看到的第一個想要連接的包
ESTABLISHED :主機已與目標主機進行通信,判斷標準只要目標主機回應了第一個包,就進入該狀態
RELATED :主機已與目標主機進行通信,目標主機發起新的鏈接方式,一般與ESTABLISHED 配合使用
INVALID :無效的封包,例如數據破損的封包狀態
iptables規則修改后會立即生效