
目錄
一:iptables常見概念
二:iptables服務器安裝及相關配置文件
三:實戰:iptables使用方法
說明:
Centos7.X 開始,系統自帶的防火牆管理工具是firewalld,但是也同樣支持iptables,本節課我們仍然用iptables來作為防火牆來主講,下次課我們也會給大家詳細講解firewalld的常用配置。
iptables服務端:xuegod63 IP:192.168.1.63
iptables客戶端:xuegod64 IP:192.168.1.64
No.1
iptables常見概念
netfilter/iptables是集成在內核中的包過濾防火牆系統。該架構可以實現數據包過濾,網絡地址轉換以及數據包管理功能。linux中防火牆分為兩部分:netfilter和iptables。netfilter位於內核空間,目前是Linux內核的組成部分。netfilter可以對本機所有流入,流出,轉發的數據包進行查看,修改,丟棄,拒絕等操作。netfilter位於內核空間中,用戶無法接觸內核和修改內核,需要使用iptables或Firewalld等工具來進行管理。
1.1 iptables概述
netfilter/iptables:IP信息包過濾系統,它實際上由兩個組件netfilter 和 iptables 組成。
netfilter/iptables 關係:
netfilter 組件也稱為內核空間(kernelspace),是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。
iptables 組件是一種工具,也稱為用戶空間(userspace),它使插入、修改和除去信息包過濾表中的規則變得容易。
netfilter/iptables 後期簡稱為:iptables。iptables是基於內核的防火牆,功能非常強大,iptables內置了filter,nat和mangle、raw四張表。所有規則配置後,立即生效,不需要重啟服務。
1.2 四張表介紹
filter負責過濾數據包,包括的規則鏈有,input,output和forward;
nat則涉及到網絡地址轉換,包括的規則鏈有,prerouting,postrouting和output;
mangle表則主要應用在修改數據包內容上,用來做流量整形的,給數據包打個標識,默認的規則鏈有:INPUT,OUTPUT、 forward,POSTROUTING,PREROUTING;
raw表優先級最高(不常用),只使用在PREROUTING鏈和OUTPUT鏈上,會跳過NAT表。
1.3 iptables的五個鏈
input:匹配目標IP是本機的數據包。
output:出口數據包,一般不在此鏈上做配置
forward:匹配流經本機的數據包,
prerouting:用來修改目的地址,用來做DNAT。
如:把內網中的80端口映射到路由器外網端口上
postrouting用來修改源地址用來做SNAT。
如:內網通過路由器NAT轉換功能實現內網PC機通過一個公網IP地址上網
1. iptables四個表,5個鏈接,結構如圖:

raw 表:用於處理異常,包括的規則鏈有,prerouting,output;一般使用不到,raw在整個防火牆體系優先級最高,如果啟動用raw表,數據將會跳過conntrack(連接跟蹤機制)
例:查看raw表中的內容:
2. Iptables過濾封包流程,表->鏈->規則
數據走向:
外部訪問本機
本機訪問外部
本機負責轉發

3. 整體數據包分兩類:發給防火牆本身的數據包,和需要經過防火牆的數據包。
當一個數據包進入網卡時,它首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否需要轉送出去。
如果數據包就是進入本機的,它就會沿着圖向下移動,到達INPUT鏈。數據包到了INPUT鏈後,任何進程都會收到它。
本機上運行的程序可以發送數據包,這些數據包會經過OUTPUT鏈,然後到達POSTROUTING鏈輸出。
如果數據包是要轉發出去的,且內核允許轉發,數據包就會如圖所示向右移動,經過FORWARD鏈,然後到達POSTROUTING鏈輸出。
4. 表、鏈、規則處理的順序
表間的優先順序
raw > mangle > nat > filter
鏈間的匹配順序
入站數據:PREROUTING、INPUT
出站數據:OUTPUT、POSTROUTING
轉發數據:PREROUTING、FORWARD、POSTROUTING
鏈內的匹配順序:
自上向下按順序依次進行檢查,找到相匹配的規則即停止
若在該鏈內找不到的相匹配的規則,則按該鏈的默認策略處理(未修改的情況下,默認策略為允許)
注意:規則的次序非常關鍵,誰的規則越嚴格,應該放的越靠前,而檢查規則的時候,是按照從上往下的方式進行檢查的。
No.2
iptables服務器安裝及相關配置文件
Iptables部署
Iptables是邏輯性比較強的服務,所以我們一個一個的實驗疏通。
2.1 安裝iptables
關閉firewall
安裝安裝iptables防火牆:
2.2 iptables配置文件位置
2.3 啟動服務
No.3
實戰:iptables使用方法
iptables命令的語法格式
Iptables [-t 表名] 管理選項 [鏈名] [條件匹配] [-j 目標動作或跳轉]
注意事項
不指定表名時,默認表示filter表
不指定鏈名時,默認表示該表內所有鏈
除非設置規則鏈的缺省策略,否則需要指定匹配條件
iptables語法總結:

3.1 iptables命令使用方法
iptables [-t 要操作的表]
<操作命令>
[要操作的鏈]
[規則號碼]
[匹配條件]
[-j 匹配到以後的動作]
操作命令
-A 添加規則
-Inum 插入,把當前規則插入為第幾條
-Dnum 刪除,明確指定刪除第幾條規則
-P 設置默認策略的
-F 清空規則鏈的
查看命令
-[vn]L
-L列出規則
-n以數字格式顯示ip和port,需要配合-L選項使用
-v 顯示信息,以詳細信息顯示
-A <鏈名> APPEND,追加一條規則(放到最後)
例如:
在 filter 表的 INPUT 鏈里追加一條規則(作為最後一條規則)
匹配所有訪問本機 IP 的數據包,匹配到的丟棄
iptables -L -n 查看
iptables -Ln 不生效,但是iptables -nL可以
-I <鏈名> [規則號碼] INSERT,插入一條規則
在 filter 表的 INPUT 鏈里插入一條規則(插入成第 1 條)立即生效,xshell會斷開。
iptables -I INPUT 5-j DROP
在 filter 表的 INPUT 鏈里插入一條規則(插入成第 5條)
注意:
-t filter 可不寫,不寫則自動默認是 filter 表
-I 鏈名 [規則號碼],如果不寫規則號碼,則默認是 1
確保規則號碼 ≤ (已有規則數 + 1),否則報錯
-R num:Replays替換/修改第幾條規則
格式:iptables –t filter -R INPUT 3 ……… 修改filter的INPUT鏈第三條規則
iptables -R INPUT 5 -j ACCEPT
-D <鏈名> <規則號碼 | 具體規則內容> DELETE,刪除一條規則
例如:
iptables -D INPUT 1(按號碼匹配)
刪除 filter 表 INPUT 鏈中的第1條規則
刪除 filter 表 INPUT 鏈中內容為「-s 192.168.0.1 -j DROP」的規則(不管其位置在哪裡)
注意:
若規則列表中有多條相同的規則時,按內容匹配只刪除序號最小的一條
按號碼匹配刪除時,確保規則號碼 ≤ 已有規則數,否則報錯
按內容匹配刪除時,確保規則存在,否則報錯
-P <鏈名> <動作> POLICY,設置某個鏈的默認規則
注意:
當數據包沒有被規則列表里的任何規則匹配到時,按此默認規則處理。動作前面不能加 –j,這也是唯一 一種匹配動作前面不加 –j 的情況。
-F [鏈名] FLUSH,清空規則
添加規則:
注意:
-F 僅僅是清空鏈中規則,並不影響 -P 設置的默認規則。
#在生產環境中,使用-P DROP 這條規則,一定要小心,設置之前最好配置下面兩個任務計劃,否則容易把自己drop掉,鏈接不上遠程主機。
配置crontab :
-Z 將封包計數器歸零,封包計數器是用來計算同一封包出現次數
-L [鏈名] LIST,列出規則
v:顯示詳細信息,包括每條規則的匹配包數量和匹配字節數
x:在 v 的基礎上,禁止自動單位換算(K、M)
n:只顯示 IP 地址和端口號碼,不顯示域名和服務名稱
--line-number:可以查看到規則號
例如:
iptables -L
粗略列出 filter 表所有鏈及所有規則
iptables -t nat -vnL
用詳細方式列出 nat 表所有鏈的所有規則,只顯示 IP 地址和端口號
iptables -t nat -vxnL PREROUTING
用詳細方式列出 nat 表 PREROUTING 鏈的所有規則以及詳細數字,不反解
iptables -t nat -xvnL --line-number
3.2 iptables匹配條件
流入、流出接口(-i、-o)
來源、目的地址(-s、-d)
協議類型 (-p)
來源、目的端口(--sport、--dport)
1. 按網絡接口匹配
-i <匹配數據進入的網絡接口>
#此參數主要應用於nat表,例如目標地址轉換
例如:
-i ens33
匹配是否從網絡接口 ens33進來
-i ppp0
匹配是否從網絡接口 ppp0 進來
-o 匹配數據流出的網絡接口
例如:
-o ens33
-o ppp0
2. 按來源目的地址匹配
-s <匹配來源地址>
可以是 IP、網段、域名,也可空(任何地址)
例如:
-s 192.168.0.1 匹配來自 192.168.0.1 的數據包
-s 192.168.1.0/24 匹配來自 192.168.1.0/24 網絡的數據包
-s 192.168.0.0/16 匹配來自 192.168.0.0/16 網絡的數據包
例:iptables -A INPUT -s 192.168.0.1 -j DROP
查看:iptables -vnL
-d <匹配目的地址>
可以是 IP、網段、域名,也可以空
例如:
-d 202.106.0.20,匹配去202.106.0.20 的數據包
-d 202.106.0.0/16,匹配去202.106.0.0/16 網絡的數據包
-d www.abc.com,匹配去域名 www.abc.com 的數據包
例:iptables -A INPUT -d 202.106.0.20 -j DROP
查看:iptables -vnL
3. 按協議類型匹配
-p <匹配協議類型>
可以是 TCP、UDP、ICMP 等,也可為空
例如:
-p tcp
-p udp
-p icmp --icmp-type 類型
ping: type 8 pong: type 0
4. 按來源目的端口匹配
--sport <匹配源端口>
可以是個別端口,可以是端口範圍
例如:
--sport 1000:匹配源端口是 1000 的數據包
--sport 1000:3000:匹配源端口是 1000-3000 的數據包(含1000、3000)
--sport :3000:匹配源端口是 3000 以下的數據包(含 3000)
--sport 1000:匹配源端口是 1000 以上的數據包(含 1000)
--dport <匹配目的端口>可以是個別端口,可以是端口範圍
例如:
--dport 80:匹配目的端口是 80 的數據包
--dport 6000:8000:匹配目的端口是 6000-8000 的數據包(含6000、8000)
--dport :3000:匹配目的端口是 3000 以下的數據包(含 3000)
--dport 1000:匹配目的端口是 1000 以上的數據包(含 1000)
注意:--sport 和 --dport 必須配合 -p 參數使用
5. 匹配應用舉例
端口匹配
-p udp --dport 53
匹配網絡中目的端口是 53 的 UDP 協議數據包
地址匹配:
-s 10.1.0.0/24 -d 172.17.0.0/16
匹配來自 10.1.0.0/24 去往 172.17.0.0/16 的所有數據包
端口和地址聯合匹配
-s 192.168.0.1 -d www.abc.com -p tcp --dport 80
匹配來自 192.168.0.1,去往 www.abc.com 的 80 端口的 TCP 協議數據包

注意:
--sport、--dport 必須聯合 -p 使用,必須指明協議類型是什麼
條件寫的越多,匹配越細緻,匹配範圍越小
3.3 iptables動作(處理方式)
ACCEPT
DROP
REJECT
SNAT
DNAT
MASQUERADE
-j ACCEPT
通過,允許數據包通過本鏈而不攔截它
例如:
iptables -A INPUT -j ACCEPT
允許所有訪問本機 IP 的數據包通過
-j DROP
丟棄,阻止數據包通過本鏈而丟棄它
例如:
iptables -A FORWARD -s 192.168.80.39 -j DROP
阻止來源地址為 192.168.80.39 的數據包通過本機
-j SNAT --to IP[-IP][:端口-端口](nat 表的 POSTROUTING 鏈)
源地址轉換,SNAT 支持轉換為單 IP,也支持轉換到 IP 地址池(一組連續的 IP 地址)
例如:
例如:
表達方式1:
把從 ens33進來的要訪問 TCP/80 的數據包目的地址改為 192.168.0.1.
表達方式2:
表達方式3:
把從 ens33進來的要訪問 TCP/80 的數據包目的地址改為192.168.0.1-192.169.0.10
-j MASQUERADE 偽裝
動態源地址轉換(動態 IP 的情況下使用)
例如:
將源地址是 192.168.0.0/24 的數據包進行地址偽裝,轉換成ens33上的IP地址。ens33為路由器外網出口IP地址
3.4 擴展:附加模塊
按包狀態匹配:(state)
按來源 MAC 匹配:(mac)
按包速率匹配:(limit)
按多端口匹配:(multiport)
按包狀態匹配:(state)
-m state --state 狀態
狀態:NEW、RELATED、ESTABLISHED、INVALID
NEW:有別於 tcp 的 syn #如果我們發送一個流的初始化包,狀態就會在OUTPUT鏈 里被設置為NEW,當我們收到回應的包時,狀態就會在PREROUTING鏈里被設置為ESTABLISHED。如果第一個包不是本地產生的,那就會在PREROUTING鏈里被設置為NEW狀 態。
ESTABLISHED:連接態
RELATED:衍生態,與 conntrack 關聯(FTP)
INVALID:不能被識別屬於哪個連接或沒有任何狀態
例如:
四個狀態詳解:

這些狀態可以一起使用,以便匹配數據包。這可以使我們的防火牆非常強壯和有效。以前,我們經常打 開1024以上的所有端口來放行應答的數據。現在,有了狀態機制,就不需再這樣了。因為我們可以只開放那些有應答數據的端口,其他的都可以關閉。這樣就安全多了。
按來源 MAC 匹配(mac)
-m mac --mac-source MAC
匹配某個 MAC 地址
例如:
阻斷來自某 MAC 地址的數據包通過本機
注意:
報文經過路由後,數據包中原有的 mac 信息會被替換,所以在路由後的 iptables 中使用 mac 模塊是沒有意義的
按包速率匹配(limit)
-m limit --limit 匹配速率 [--burst 緩衝數量]
用一定速率去匹配數據包
例如:
注意:
limit 英語上看是限制的意思,但實際上只是按一定速率去匹配而已,50/s表示1秒中轉發50個數據包,要想限制的話後面要再跟一條 DROP
多端口匹配(multiport)
-m multiport <--sports|--dports|--ports> 端口1[,端口2,..,端口n]
一次性匹配多個端口,可以區分源端口,目的端口或不指定端口
例如:
注意:必須與 -p 參數一起使用
保存到配置文件:
先看一下/etc/sysconfig/iptables內容
保存後對比/etc/sysconfig/iptables之前內容
贈書福利

一:架構基礎:從需求到架構
本書主要內容包括大型互聯網架構設計的四大原則、分布式微服務架構設計、登錄功能架構設計、用戶安全架構設計、系統日誌架構設計、系統攻防架構設計、系統消息架構設計、監控預警架構設計、關係型大數據架構設計、批處理調度架構設計、系統配置架構設計、企業級核心架構設計實戰等,詳細講解了各種場景的架構方案。
二:Python數據分析與可視化從入門到精通
三:R語言數據分析與可視化從入門到精通
為了感謝大家一直以來的關注與支持,會有三本書籍免費贈送。
規則如下:
1. 本文末點『在看』,不需要轉發朋友圈,點個『在看』就可以。
2.私聊文末公眾號發送「贈書」即可掃描參與抽獎,注意看是發送暗號「贈書」。
3. 中獎者不滿足條件1,視為放棄中獎資格。
4. 活動截止時間為4月12日 16:00點,到時候還要中獎者及時聯繫號主發送你的中獎核驗二維碼、收貨地址、姓名、手機號以及想要的書籍,好給您發送書籍哦!24小時內未聯繫號主視為自動放棄!騙書行為出版社會永久拉黑!
先點「再看」,然後點擊下方公眾號私聊發送「贈書」即可馬上掃描參與抽獎