iptables安全技術和防火墻

通信五元素

源ip和目標ip 源端口和目標端口 協議

通信四元素

源ip和目標ip 源端口和目標端口

iptables表鏈結構

Netfilter

Linux防火墻是由Netfilter組件提供的,Netfilter工作在內核空間,集成在linux內核中

Netfilter是Linux 2.4.x之后新一代的Linux防火墻機制,是linux內核的一個子系統。

Netfilter采用模塊化設計,具有良好的可擴充性,提供擴展各種網絡服務的結構化底層框架。

Netfilter與IP協議棧是無縫契合,并允許對數據報進行過濾、地址轉換、處理等操作。
?

netfilter/iptables關系

netfilter:屬于“內核態”又稱內核空間的防火墻功能體系。linux 好多東西都是內核態 用戶態,那我們運維人員關注的是用戶態, 內核我們關注不是很多,內核基本是我們開發人員關心的事情是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。

iptables :屬于“用戶態”的防火墻管理體系。
是一種用來管理Linux防火墻的命令程序,它使插入、修改和刪除數據包過濾表中的規則變得容易,通常位于/sbin/iptables目錄下。

netfilter/iptables后期簡稱為iptables。iptables是基于內核的防火墻,其中內置了raw、mangle、 nat和filter四個規則表。

表中所有規則配置后,立即生效,不需要重啟服務。


iptables的四表五鏈結構介紹

iptables由四個表table和五個鏈chain以及一些規則組成(SELinux也是一個表,但它是獨立的,不在我們討論的范圍內)

規則鏈

規則作用:對數據包進行過濾處理

? 規則表作用:容納各種規則鏈

? 鏈作用:容納各種防火墻規則

? 鏈分類依據:處理數據包不同時機

默認五種規則鏈

?INPUT:處理入棧數據包

? OUTPUT:處理出棧數據包

? FORWARD:處理轉發數據包

? POATROUTING鏈:在進行路由選擇后處理數據包

? PREROUTING鏈:在進行路由選擇前處理數據包

表作用:容納各種規則鏈

表劃分依據:防火墻規則相似

默認包括四個規則表
raw表:確定是否對該數據包進行狀態跟蹤

mangle表:為數據包設置標記

nat表:修改數據包中源目標IP地址或端口

filter表:確定是否放行該數據包(過濾)(ip地址,端口協議)

按照順序,依次查當前表中鏈,看鏈中是否有匹配規則,匹配到立即停止,找不到使用鏈默認策略處理

入棧:PREROUTING---------->INPUT

出棧:OUTPUT----------------->POSTROUTING

轉發:PREROUTING---------->FORWARD--------->POSTROUTING

規則鏈內匹配順序

按順序依次檢查,匹配即停止(LOG策略例外)
若找不到相匹配規則,則按該鏈默認策略處理
1.按照順序查
raw表------->mangle表--------->nat表--------->filter表(input讓不讓數據進來,進不來丟棄)-------->路由轉發(不允許轉發,直接丟棄)--------->一般不會對數據限制------->r m n f-------->nat(對數據進行地址轉換)--------->出去,送達
nat PREROUTING:目的地址轉換,把公網IP換成內網IP(外網訪問內網)
nat POSTROUTING:源地址轉換,把內網地址轉換成公網(內網轉成公網地址才能上網
?

總結

四表五鏈

規則表的作用:容納各種規則鏈
規則鏈的作用:容納各種防火墻規則
總結:表里有鏈,鏈里有規則

內核中數據包的傳輸過程
1. 當一個數據包進入網卡時,數據包首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否需要轉送出去。

2. 如果數據包是進入本機的,數據包就會沿著圖向下移動,到達INPUT鏈。
數據包到達INPUT鏈后, 任何進程都會收到它。本機上運行的程序可以發送數據包,這些數據包經過OUTPUT鏈,然后到達

3. 如果數據包是要轉發出去的,且內核允許轉發,數據包就會向右移動,經過FORWARD鏈,然后到達POSTROUTING鏈輸出

三種報文流向
流入本機:PREROUTING --> INPUT-->用戶空間進程 httpd服務-目的轉換-httpd
流出本機:用戶空間進程 -->OUTPUT--> POSTROUTING ?httpd服務-out-源地址
轉發:PREROUTING --> FORWARD --> POSTROUTING ?-----FOR------

nat PREROUTING ? 目的地址轉換,要把別人的公網IP換成你們內部的IP
nat POSTROUTING ?源地址轉換,要把你的內網地址轉換成公網地址才能上網,一般用于對外發布內網的服務


規則內的匹配順序
自上向下按順序依次進行檢查,找到相匹配的規則即停止(LOG策略例外,表示記錄相關日志)
若在該鏈內找不到相匹配的規則,則按該鏈的默認策略處理(未修改的狀況下,默認策略為允許)
?

iptables

iptables 安裝
CentOS7默認使用firewalld防火墻,沒有安裝iptables,若想使用iptables防火墻。必須先關閉firewalld防火墻,再安裝iptables。

1.關閉firewalld防火墻

systemctl stop firewalld.service

systemctl disable firewalld.service

2.安裝iptables 防火墻

yum -y install iptables iptables-services

3.設置iptables開機啟動

systemctl start iptables.service

systemctl enable iptables.service

4.iptables防火墻的配置方法:
1、使用iptables命令行。
2、使用system-config-firewall; centso7不能使用 centos 6可以使用
?

iptables的命令格式

iptables ?[-t 表名] ?管理選項 ?[鏈名] ?[匹配條件] ?[-j 控制類型]

-t:如果不指定 ?默認是filter
表名、鏈名用來指定 iptables 命令所操作的表和鏈,未指定表名時將默認使用 filter 表;

管理選項:表示iptables規則的操作方式,如插入、增加、刪除、查看等;
匹配條件:用來指定要處理的數據包的特征,不符合指定條件的數據包將不會處理;
控制類型指的是數據包的處理方式,如允許、拒絕、丟棄等。
?

注意事項:
不指定表名時,默認指filter表
不指定鏈名時,默認指表內的所有鏈,一般不這么操作
除非設置鏈的默認策略,否則必須指定匹配條件
選項、鏈名、控制類型使用大寫字母,其余均為小寫
?

數據包的常見控制類型
對于防火墻,數據包的控制類型非常關鍵,直接關系到數據包的放行、封堵及做相應的日志記錄等。
在 iptables 防火墻體系中,最常用的幾種控制類型如下
ACCEPT:允許數據包通過。?
DROP: ?直接丟棄數據包,不給出任何回 應信息。?
REJECT:拒絕數據包通過,必要時會給數據發送端一個響應信息。
SNAT: ? ?修改數據包的源地址
DNAT: ? ?修改數據包的本地地址?
LOG: ? 在/var/log/messages 文件中記錄日志信息,然后將數據包傳遞給下一條規則。

?iptables 命令的常用管理選項
管理選項 ? ? ? ? 用法示例 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

?-A ? ? ? ? ? ? 在指定鏈末尾追加一條 ? ?iptables -A INPUT (操作) ? ? ? ? ??
?-I ? ? ? ? ? ? 在指定鏈中插入一條新的,未指定序號默認作為第一條 ? ?iptables -I INPUT ?(操作)?
?-P ? ? ? ? ? ? 指定默認規則 ? ?iptables -P ?OUTPUT ACCEPT ? (操作) ? ? ? ?
?-D ? ? ? ? ? ? 刪除 ? ?iptables -t nat -D INPUT ? 2 (操作) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?-R ? ? ? ? ? ? 修改、替換某一條規則 ? ?iptables -t nat -R INPUT ? ?(操作)?
?-L ? ? ? ? ? ? 查看 ? ?iptables -t nat -L (查看) ? ? ? ? ? ? ? ? ? ? ? ? ?
?-n ? ? ? ? ? ? 所有字段以數字形式顯示(比如任意ip地址是0.0.0.0而不是anywhere,比如顯示協議 ? ? ? ? ? ? ? ? ? ? 端口號而不是服務名) ? ?iptables -L -n,iptables -nL,iptables -vnL (查看) |
?-v ? ? ? ? ? ? 查看時顯示更詳細信息,常跟-L一起使用 ? ?(查看) ? ? ? ? ? ??
?--line-numbers ?規則帶編號 ? ?iptables -t nat -L -n --line-number ?iptables -t nat -L --line-number
?-F ? ? ? ? ? ? 清除鏈中所有規則 ? ?iptables -F ? (操作) ? ? ? ? ? ? ? ? ??
?-X ? ? ? ? ? ? 清空自定義鏈的規則,不影響其他鏈 ? ? ?iptables -X ? ? ? ? ? ?
?-Z ? ? ? ? ? ? 清空鏈的計數器(匹配到的數據包的大小和總和)iptables -Z ? ? ?
?-S ? ? ? ? ? ? 看鏈的所有規則或者某個鏈的規則/某個具體規則后面跟編號

匹配的條件 ? ? ? ? ? ? ? ? ? 作用
-p ? ? ? ? ? ? ? ? 指定要匹配的數據包的協議類型
-s ? ? ? ? ? ? ? ? 指定要匹配的數據包的源IP地址
-d ? ? ? ? ? ? ? ? 指定要匹配的數據包的目的IP地址
-i ? ? ? ? ? ? ? ? 指定數據包進入本機的網絡接口
-o ? ? ? ? ? ? ? ? 指定數據包離開本機做使用的網絡接口
--sport ? ? ? ? ? ? 指定源端口號
--dport ? ? ? ? ? ? 指定目的端口號

添加規則?
添加規則的兩個常用選項:
-A,在末尾追加規則。
-I,在指定位置前插入規則。如果不指定,則在首行插入
添加新的防火墻規則時,使用管理選項“-A”、“-I”,前者用來追加規則,后者用來插入規則。

iptables -F #清空規則

iptables -t filter -A INPUT -p icmp -j REJECT #禁止所有主機ping本機

iptables -t filter -A INPUT -p icmp -j ACCEPT #允許ping通,-A在前一條規則后添加

iptables -t filter -I INPUT 1 -p icmp -j ACCEPT #指定序號插入,插入到第一條

iptables -t filter -A INPUT -p tcp -j REJECT ? #允許任何主機tcp

iptables -I INPUT 1 -p udp -j ACCEPT ? ? ? ?#允許任何主機udp

iptables ?-nL ?--line-number ?#查看行規則的位置

iptables -t filter -A INPUT -s 192.168.233.22 -p icmp -j REJECT#拒絕某一臺主機,其他的可以

iptables -t filter -A INPUT -s 192.168.233.22,192.168.233.23 -p icmp -j REJECT#拒絕多臺主機

iptables -t filter -A OUTPUT -s 192.168.233.21 -p icmp -j REJECT#不允許21的數據包出去,其他的就都ping不通了

iptables -t filter -A INPUT -p tcp --dport 22 -j REJECT#指定端口

iptables -t filter -A INPUT -s 192.168.233.22 -p tcp --dport 22 -j REJECT#指定IP地址的服務端口拒絕

iptables -t filter -A INPUT -s 192.168.233.22 -p tcp --dport 80 -j REJECT#禁止192.168.233.22:80的端口入訪問

刪除規則
D刪除 ?:
1.根據序號刪除內容
?iptables -D INPUT 1 #刪除指定的INPUT鏈中的第一條規則

2、內容匹配刪除(有兩個

相同的則作用為去重) 如果有兩個重復的規則,則刪除序號較小的

注意:按照內容匹配刪除規則,只能每次刪除內容相同序號較小的規則。
直到刪除最后一條時,才能將該規則全部清除 。
一定要報保證該匹配的內容存在,且完全匹配規則才能刪除,不然報錯。
?

修改規則
-R 直接修改

iptables -R INPUT 1 -p icmp -j REJECT#原本的ACCEPT替換成了REJECT

修改默認規則
默認策略是指四表五鏈中鏈的默認策略,INPUT,FORWARD,OUTPUT,filter三條鏈的默認值為ACCEPT
就像是設定黑名單一樣,默認其他的協議操作都是允許的,只有指定加入的且聲明權限的為(DROP 或 REJECT)是拒絕禁止的對象。

iptables -P INPUT DROP?

注意:

1.-F 僅僅是清空鏈中的規則,并不影響 -P 設置的規則,默認規則需要手動進行修改
2.-P 設置了DROP后,使用 -F 一定要小心!
#防止把允許遠程連接的相關規則清除后導致無法遠程連接主機,此情況如果沒有保存規則可重啟主機解決

此時的解決方案有三種:
第一種:我的防火墻設置只是臨時設置,并為保存,重啟服務器即可

第二種:操作服務器,重啟iptables服務?

第三種:進入機房操作該服務器(將設置恢復,重新修改規則)炸!

在生產中都是默認DROP

通用匹配
網絡協議、IP地址、網絡接口等條件。
協議匹配: -p協議名
地址匹配: -s 源地址、-d目的地址
#可以是IP、網段、域名、空(任何地址)
接口匹配: -i入站網卡、-o出站網卡 ?
感嘆號”!”表示取反

網絡協議

iptables -A INPUT ! -p icmp -j ACCEPT ?#除了icmp以外,所有的協議都可以進入

IP地址

iptables -A INPUT -s 192.168.233.22 -j DROP ? #禁止22的數據進入

使整個網段不能用指定的端口

iptables -t filter -A INPUT -s 192.168.233.0/24 -p tcp --dport 80 -j REJECT #禁止整個網段訪問80端口

顯示匹配
多端口匹配
要求以“-m 擴展模塊”的形式明確指出類型,包括多端口、MAC地址、IP范圍、數據包狀態等條件

-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表


iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j REJECT#多端口匹配,一次性禁止多個tcp網絡協議的端口匹配規則

iptables -A INPUT -p udp -m multiport --dport 53,54,55 -j ACCEP#多端口匹配,一次性放通多個udp網絡協議的端口匹配規則

IP范圍匹配
-m iprange --src-range ?源IP范圍
-m iprange --dst-range ?目的IP范圍
iptables -A INPUT -p icmp -m iprange --src-range 192.168.233.20-192.168.233.30 -j REJECT#禁止網段內的ip地址ping主機

MAC匹配
-m mac --mac-source MAC地址
iptables -A INPUT -m mac --mac-source 00:0c:29:f7:24:38 -j DROP

備份與還原
我們對iptables命令行中的設置,都是臨時設置,只要遇到服務器關機,或者服務重啟時,所有的設置都會清空且還原為原本的設置。
為此,我們可以對已經測試完畢符合我們需求的防火墻設置進行備份,在必要時,可以一鍵還原

備份iptables設置
格式:iptables-save >/指定的文件?

iptables-save >/opt/iptables.bak#備份到指定文件

iptables-restore </opt/iptables.bak #一鍵導入,設置為當前防火墻設置?

SNAT和DNAT
SNAT又稱源地址轉換。
源地址轉換是內網地址向外訪問時,發起訪問的內網ip地址轉換為指定的ip地址
(可指定具體的服務以及相應的端口或端口范圍),這可以使內網中使用保留ip地址的主機訪問外部網絡,
即內網的多部主機可以通過一個有效的公網ip地址訪問外部網絡。

就是把內網地址轉成指定的IP地址,這個iP地址可以訪問公網

DNAT:目的地址轉換的作用是將一組本地內部的地址映射到一組全球地址。
通常來說,合法地址的數量比起本地內部的地址數量來要少得多。

私網地址只能作為源地址來訪問公網IP,而無法作為目標地址被其他主機訪問
所以DNAT將私網中web服務器映射到公網IP,使其公網IP作為目標地址被公網中主機進行訪問
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39356.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39356.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39356.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CI/CD流水線實戰

不知道為什么&#xff0c;現在什么技術都想學&#xff0c;因為我覺得我遇到了技術的壁壘&#xff0c;大的項目接觸不到&#xff0c;做的項目一個字辣*。所以&#xff0c;整個人心浮氣躁&#xff0c;我已經得通過每天的騎行和長跑緩解這種浮躁了。一個周末&#xff0c;我再次宅在…

k8s問題匯總

作者前言 本文章為記錄使用k8s遇到的問題和解決方法&#xff0c;文章持續更新中… 目錄 作者前言正常配置ingress&#xff0c;但是訪問錯誤添加工作節點報錯安裝k8s報錯使用kubectl命令報錯container沒有運行安裝會出現kubelet異常&#xff0c;無法識別刪除k8s集群訪問dashboa…

Docker安裝RabbitMQ單機版

Docker安裝RabbitMQ單機版 先安裝Docker服務&#xff0c;可參考安裝Docker及學習 編寫rabbitmq-composefile.yml文件 這里以rabbitmq 3.11.16 版本為例 cat << \EOF > /opt/rabbitmq-composefile.yml version: 3 services:rabbitmq:image: rabbitmq:3.10.0-managem…

【Apollo】推動創新:探索阿波羅自動駕駛的進步(含安裝 Apollo的詳細教程)

前言 Apollo (阿波羅)是一個開放的、完整的、安全的平臺&#xff0c;將幫助汽車行業及自動駕駛領域的合作伙伴結合車輛和硬件系統&#xff0c;快速搭建一套屬于自己的自動駕駛系統。 開放能力、共享資源、加速創新、持續共贏是 Apollo 開放平臺的口號。百度把自己所擁有的強大、…

【密碼學】維京密碼

維京密碼 瑞典羅特布魯納巨石上的圖案看起來毫無意義&#xff0c;但是它確實是一種維京密碼。如果我們注意到每組圖案中長筆畫和短筆畫的數量&#xff0c;將得到一組數字2、4、2、3、3、5、2、3、3、6、3、5。組合配對得到24、23、35、23、36、35。現在考慮如圖1.4所示的內容&a…

【變形金剛03】使用 Pytorch 開始構建transformer

一、說明 在本教程中&#xff0c;我們將使用 PyTorch 從頭開始構建一個基本的轉換器模型。Vaswani等人在論文“注意力是你所需要的一切”中引入的Transformer模型是一種深度學習架構&#xff0c;專為序列到序列任務而設計&#xff0c;例如機器翻譯和文本摘要。它基于自我注意機…

iOS Epub閱讀器改造記錄

六個月前在這個YHEpubDemo閱讀器的基礎上做了一些優化&#xff0c;這里做一下記錄。 1.首行縮進修復 由于分頁的存在&#xff0c;新的一頁的首行可能是新的一行&#xff0c;則應該縮進&#xff1b;也可能是前面一頁段落的延續&#xff0c;這時候不應該縮進。YHEpubDemo基于XDS…

pycharm,VSCode 幾個好用的插件

pycharm Tabnine AI Code 可以在編寫程序的時候為你提供一些快捷方式&#xff0c;增加編程速度 Chinese 對英文不好的程序員來說是個不錯的選擇&#xff0c;可以將英文狀態下的pycharm變為中文版的 ChatGPT 可以跟ai聊天&#xff0c;ai可以解決你80%的問題 &#xff0c;也可以幫…

變形金剛:從零開始【01/2】

一、說明 在我們的日常生活中&#xff0c;無論你是否是數據科學家&#xff0c;你都在單向地使用變壓器模型。例如。如果您使用的是 ChatGPT 或 GPT-4 或任何 GPT&#xff0c;那么在為您回答問題的框中是變壓器的一部分。如果您是數據科學家或數據分析師&#xff0c;則可能正在使…

【BASH】回顧與知識點梳理(二十九)

【BASH】回顧與知識點梳理 二十九 二十九. 進程和工作管理29.1 什么是進程 (process)進程與程序 (process & program)子進程與父進程&#xff1a;fork and exec&#xff1a;進程呼叫的流程系統或網絡服務&#xff1a;常駐在內存的進程 29.2 Linux 的多人多任務環境多人環境…

SAP MM學習筆記23-購買發注的賬戶分配類型(勘定Category)

SAP中控制財務憑證過賬科目的是 賬號分配類型&#xff08;勘定Category&#xff09;欄目。 ?賬號分配類型&#xff08;勘定Category&#xff09;有&#xff1a; 1&#xff0c;K 原價Center&#xff08;成本中心。用于消耗物料采購 的過賬&#xff09; 2&#xff0c;E 得意先…

【云原生之Docker實戰】使用Docker部署Syncthing同步程序及基本使用

【云原生之Docker實戰】使用Docker部署Syncthing同步程序及基本使用 一、Syncthing介紹1.1 Syncthing簡介1.2 Syncthing特點1.3 備份和同步區別二、本地環境介紹2.1 本地環境規劃2.2 本次實踐介紹三、本地環境檢查3.1 檢查Docker服務狀態3.2 檢查Docker版本3.3 檢查docker comp…

LabVIEW對并行機器人結構進行建模仿真

LabVIEW對并行機器人結構進行建模仿真 為了對復雜機器人結構的數學模型進行建模、搜索、動畫和驗證&#xff0c;在工業機器人動態行為實驗室中&#xff0c;設計并實現了具有五個自由度的單臂型機器人。在研究臺上可以區分以下元素&#xff1a;帶有直流電機和編碼器的機器人;穩…

nvm管理node版本

nvm是什么&#xff1f; NVM全名叫做 nodejs version manage,即Node的版本管理工具。 使用NVM&#xff0c;可以通過命令很方便地在多個NodeJS版本之間進行切換。 nvm的下載與安裝 下載地址&#xff1a;Releases coreybutler/nvm-windows (github.com) windows系統下載nvm-setup…

Arcgis中直接通過sde更新sqlserver空間數據庫失敗

問題 背景 不知道有沒有人經歷過這樣一個情況,我們直接在Arcgis中通過sde更新serserver數據庫會失敗,就是雖然在sde更新sqlserver數據庫,但是在Navicat中通過sql語句來查詢,發現數據并沒有更新,如:上圖中,更新數據庫后,第一張圖是sde打開的sqlserver數據庫,它的數據庫…

項目管理工具和方法有哪些:了解項目管理的必備工具和有效方法

先談談什么是項目管理&#xff0c;簡單直白&#xff0c;就是對項目進行管理。項目管理涉及有效的計劃和對工作的系統管理&#xff0c;但很多工具可以使項目管理更有效、更高效。比如&#xff0c;Zoho Projects項目管理工具。 1.項目合理拆解 當確定了項目目標后&#xff0c;無疑…

我國農機自動駕駛系統需求日益增長,北斗系統賦能精準農業

中國現代農業的發展&#xff0c;離不開智能化、自動化設備&#xff0c;迫切需要自動駕駛系統與農用機械的密切結合。自動駕駛農機不僅能夠緩解勞動力短缺問題&#xff0c;提升勞作生產效率&#xff0c;同時還能對農業進行智慧化升級&#xff0c;成為解決當下農業痛點的有效手段…

Pycharm社區版連接WSL2中的Mysql8.*

當前時間2023.08.13&#xff0c;Windows11中默認的WSL版本已經是2了&#xff0c;在WSL2中默認的Ubuntu版本已經是22.04&#xff0c;而Ubuntu22.04中默認的Mysql版本已經是8.*。 Wsl 2 中安裝mysql WSL2中安裝Mysql的方法參考自微軟官方文檔【開始使用適用于 Linux 的 Windows …

vector【2】模擬實現(超詳解哦)

vector 引言&#xff08;實現概述&#xff09;接口實現詳解默認成員函數構造函數析構函數賦值重載 迭代器容量size與capacityreserveresizeempty 元素訪問數據修改inserterasepush_back與pop_backswap 模擬實現源碼概覽總結 引言&#xff08;實現概述&#xff09; 在前面&…

分布式定時任務系列5:XXL-job中blockingQueue的應用

傳送門 分布式定時任務系列1&#xff1a;XXL-job安裝 分布式定時任務系列2&#xff1a;XXL-job使用 分布式定時任務系列3&#xff1a;任務執行引擎設計 分布式定時任務系列4&#xff1a;任務執行引擎設計續 Java并發編程實戰1&#xff1a;java中的阻塞隊列 引子 這篇文章的…