close

目錄


一: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表中的內容:

[root@xuegod63 ~]# iptables -t raw -LChain PREROUTING (policy ACCEPT)targetprotoptsourcedestinationChain OUTPUT (policy ACCEPT)target prot opt source destination

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

[root@xuegod63~]#systemctlstopfirewalld.service#停止firewall[root@xuegod63 ~]# systemctl disable firewalld.service #禁止firewall開機啟動

安裝安裝iptables防火牆:

[root@xuegod63 ~]# yum install iptables-services #安裝

2.2 iptables配置文件位置




[root@xuegod63 ~]# ls /etc/sysconfig/iptables/etc/sysconfig/iptables

2.3 啟動服務




[root@xuegod63 ~]# systemctl start iptables.service[root@xuegod63 ~]# systemctl enable iptables.service

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,追加一條規則(放到最後)

例如:

[root@xuegod63 ~]# iptables -t filter -A INPUT -j DROP #拒絕所有人訪問服務器

在 filter 表的 INPUT 鏈里追加一條規則(作為最後一條規則)

匹配所有訪問本機 IP 的數據包,匹配到的丟棄

iptables -L -n 查看

iptables -Ln 不生效,但是iptables -nL可以

-I <鏈名> [規則號碼] INSERT,插入一條規則

[root@xuegod63 ~]# iptables -I INPUT -j DROP

在 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條規則

[root@xuegod63 ~]# iptables -LChain INPUT (policy ACCEPT)targetprotoptsourcedestination[root@xuegod63 ~]# iptables -D INPUT -j DROP #按內容匹配。iptables -D INPUT -s 192.168.0.1 -j DROP

刪除 filter 表 INPUT 鏈中內容為「-s 192.168.0.1 -j DROP」的規則(不管其位置在哪裡)

注意:

若規則列表中有多條相同的規則時,按內容匹配只刪除序號最小的一條

按號碼匹配刪除時,確保規則號碼 ≤ 已有規則數,否則報錯

按內容匹配刪除時,確保規則存在,否則報錯

-P <鏈名> <動作> POLICY,設置某個鏈的默認規則

[root@xuegod63 ~]# iptables -L #查看默認規則是ACCEPTChain INPUT (policy ACCEPT)target prot opt source des ation tin[root@xuegod63 ~]# iptables -P INPUT DROP設置 filter 表 INPUT 鏈的默認規則是 DROP[root@xuegod63 ~]# iptables -L #查看已經變為DROPChain INPUT (policy DROP)target prot opt source destination

注意:

當數據包沒有被規則列表里的任何規則匹配到時,按此默認規則處理。動作前面不能加 –j,這也是唯一 一種匹配動作前面不加 –j 的情況。

-F [鏈名] FLUSH,清空規則

添加規則:

iptables -P INPUT ACCEPT(防止xshell斷開)[root@xuegod63 ~]# iptables -t filter -A INPUT -j DROP[root@xuegod63 ~]# iptables -F INPUT #清除INPUT鏈上的規則[root@xuegod63~]#iptables-F#清除filter表中所有鏈上的規則立即生效,xshell會斷開[root@xuegod63~]#iptables-tnat-F#清空NAT表中所有鏈上的規則[root@xuegod63~]#iptables-tnat-FPREROUTING#清空NAT表中PREROUTING鏈上的規則

注意:

-F 僅僅是清空鏈中規則,並不影響 -P 設置的默認規則。

[root@xuegod63 ~]# iptables -P INPUT ACCEPT -P 設置了 DROP 後,使用 -F 一定要小心!!

#在生產環境中,使用-P DROP 這條規則,一定要小心,設置之前最好配置下面兩個任務計劃,否則容易把自己drop掉,鏈接不上遠程主機。

配置crontab :

*/15 * * * * iptables -P INPUT ACCEPT

-Z 將封包計數器歸零,封包計數器是用來計算同一封包出現次數

[root@xuegod63 ~]# iptables -Z INPUT

-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 地址)

例如:

[root@xuegod63~]#iptables-tnat-APOSTROUTING-s192.168.0.0/24-jSNAT--to1.1.1.1 #將內網 192.168.0.0/24 的原地址修改為 1.1.1.1,用於 NATiptables-tnat-APOSTROUTING-s192.168.0.0/24-jSNAT--to1.1.1.1-1.1.1.10同上,只不過修改成一個地址池裡的 IP-j DNAT --to IP[-IP][:端口-端口](nat 表的 PREROUTING 鏈)目的地址轉換,DNAT支持轉換為單IP,也支持轉換到IP地址池(一組連續的IP地址)

例如:

表達方式1:

把從 ens33進來的要訪問 TCP/80 的數據包目的地址改為 192.168.0.1.

[root@xuegod63~]#iptables-tnat-APREROUTING-iens33-ptcp--dport80-jDNAT--to192.168.0.1

表達方式2:

[root@xuegod63~]#iptables-tnat-APREROUTING-iens33-ptcp--dport81-jDNAT--to192.168.0.1:81

表達方式3:

把從 ens33進來的要訪問 TCP/80 的數據包目的地址改為192.168.0.1-192.169.0.10

[root@xuegod63~]#iptables-tnat-APREROUTING-iens33-ptcp--dport80-jDNAT--to192.168.0.1-192.169.0.10

-j MASQUERADE 偽裝

動態源地址轉換(動態 IP 的情況下使用)

例如:

[root@xuegod63~]#iptables-tnat-APOSTROUTING-s192.168.0.0/24-oens33-jMASQUERADE

將源地址是 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:不能被識別屬於哪個連接或沒有任何狀態

例如:

iptables-AINPUT-mstate--stateRELATED,ESTABLISHED-jACCEPT

四個狀態詳解:

這些狀態可以一起使用,以便匹配數據包。這可以使我們的防火牆非常強壯和有效。以前,我們經常打 開1024以上的所有端口來放行應答的數據。現在,有了狀態機制,就不需再這樣了。因為我們可以只開放那些有應答數據的端口,其他的都可以關閉。這樣就安全多了。

按來源 MAC 匹配(mac)

-m mac --mac-source MAC

匹配某個 MAC 地址

例如:

iptables-AFORWARD-mmac--mac-sourcexx:xx:xx:xx:xx:xx-jDROP

阻斷來自某 MAC 地址的數據包通過本機

注意:

報文經過路由後,數據包中原有的 mac 信息會被替換,所以在路由後的 iptables 中使用 mac 模塊是沒有意義的

按包速率匹配(limit)

-m limit --limit 匹配速率 [--burst 緩衝數量]

用一定速率去匹配數據包

例如:

iptables-AFORWARD-d192.168.0.1-mlimit--limit50/s-jACCEPTiptables -A FORWARD -d 192.168.0.1 -j DROP

注意:

limit 英語上看是限制的意思,但實際上只是按一定速率去匹配而已,50/s表示1秒中轉發50個數據包,要想限制的話後面要再跟一條 DROP

多端口匹配(multiport)

-m multiport <--sports|--dports|--ports> 端口1[,端口2,..,端口n]

一次性匹配多個端口,可以區分源端口,目的端口或不指定端口

例如:

iptables -A INPUT -p tcp -m multiport --dports 21,22,25,80,110 -j ACCEPT

注意:必須與 -p 參數一起使用

保存到配置文件:

先看一下/etc/sysconfig/iptables內容

[root@xuegod63~]#serviceiptablessaveiptables:Savingfirewallrulesto/etc/sysconfig/iptables:[確定]

保存後對比/etc/sysconfig/iptables之前內容

贈書福利

一:架構基礎:從需求到架構


本書主要內容包括大型互聯網架構設計的四大原則、分布式微服務架構設計、登錄功能架構設計、用戶安全架構設計、系統日誌架構設計、系統攻防架構設計、系統消息架構設計、監控預警架構設計、關係型大數據架構設計、批處理調度架構設計、系統配置架構設計、企業級核心架構設計實戰等,詳細講解了各種場景的架構方案。


二:Python數據分析與可視化從入門到精通


(1)沒有高深理論,每章都以實例為主,讀者參考書中源碼運行,就能得到與書中一樣的結果。
(2)專注於Python數據分析與可視化操作中實際用到的技術。相比大而全的書籍資料,本書能讓讀者儘快上手,開始項目開發。
(3)書中的「新手問答」和「小試牛刀」欄目能讓讀者鞏固知識,舉一反三,學以致用。

三:R語言數據分析與可視化從入門到精通


R是一個自由、免費、源代碼開放的編程語言和環境,它提供了強大的數據分析功能和豐富的數據可視化手段。隨着數據科學的快速發展,R已經成為數據分析領域大熱的通用語言。全書分3篇12章內容,具體如下。 第1篇:入門篇(第1章~第3章)。本篇將帶領讀者逐步走進R的世界,幫助讀者對R形成初步的認識,並學會如何獲取和安裝R,以及如何在需要的時候獲取幫助。然後介紹R的一些基礎知識,這些知識是靈活應用R的必要前提。最後重點介紹R函數的使用方法,同時也會涉及一些其他相關內容,如流程控制和R環境等。 第2篇:進階篇(第4章~第10章)。本篇內容系統地介紹R語言數據管理、數據分析和數據可視化等。具體包括通過數據獲取、導出、整合和清理等操作將零散的數據整合為可以分析處理的數據集的許多方法;一些常用的基礎統計和高級統計的實現方法;以及R的圖形生成、圖形修飾、外部繪圖插件和圖形展示等功能。 第3篇:實戰篇(第11章)。本篇通過一個實戰案例,綜合講解R語言在數據處理與可視化分析方面的實戰技能。

贈書規則

為了感謝大家一直以來的關注與支持,會有三本書籍免費贈送

規則如下:

1. 本文末點『在看』,不需要轉發朋友圈,點個『在看』就可以。

2.私聊文末公眾號發送「贈書」即可掃描參與抽獎,注意看是發送暗號「贈書」。

3. 中獎者不滿足條件1,視為放棄中獎資格。

4. 活動截止時間為4月12日 16:00點,到時候還要中獎者及時聯繫號主發送你的中獎核驗二維碼、收貨地址、姓名、手機號以及想要的書籍,好給您發送書籍哦!24小時內未聯繫號主視為自動放棄!騙書行為出版社會永久拉黑!

先點「再看」,然後點擊下方公眾號私聊發送「贈書」即可馬上掃描參與抽獎


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()