一、安全技術(shù)
-
入侵檢測系統(tǒng)(Intrusion Detection Systems):特點(diǎn)是不阻斷任何網(wǎng)絡(luò)訪問,量化、定位來自內(nèi)外網(wǎng)絡(luò)的威脅情況,主要以提供報警和事后監(jiān)督為主,提供有針對性的指導(dǎo)措施和安全決策依據(jù),類 似于監(jiān)控系統(tǒng)一般采用旁路部署(默默的看著你)方式。
-
入侵防御系統(tǒng)(Intrusion Prevention System):以透明模式工作,分析數(shù)據(jù)包的內(nèi)容如:溢出攻擊、拒絕服務(wù)攻擊、木馬、系統(tǒng)漏洞等進(jìn)行準(zhǔn)確的分析判斷,在判定為攻擊行為后立即予以 阻斷,主動而有效的保護(hù)網(wǎng)絡(luò)的安全,一般采用在線部署方式。(必經(jīng)之路)
-
防火墻( FireWall ):隔離功能,工作在網(wǎng)絡(luò)或主機(jī)邊緣,對進(jìn)出網(wǎng)絡(luò)或主機(jī)的數(shù)據(jù)包基于一定的規(guī)則檢查,并在匹配某規(guī)則時由規(guī)則定義的行為進(jìn)行處理的一組功能的組件,基本上的實(shí)現(xiàn)都是默 認(rèn)情況下關(guān)閉所有的通過型訪問,只開放允許訪問的策略,會將希望外網(wǎng)訪問的主機(jī)放在DMZ (demilitarized zone)網(wǎng)絡(luò)中.
防水墻
廣泛意義上的防水墻:防水墻(Waterwall),與防火墻相對,是一種防止內(nèi)部信息泄漏的安全產(chǎn)品。 ? 網(wǎng)絡(luò)、外設(shè)接口、存儲介質(zhì)和打印機(jī)構(gòu)成信息泄漏的全部途徑。防水墻針對這四種泄密途徑,在事前、事 ?中、事后進(jìn)行全面防護(hù)。其與防病毒產(chǎn)品、外部安全產(chǎn)品一起構(gòu)成完整的網(wǎng)絡(luò)安全體系。
二、防火墻的分類
1.按保護(hù)范圍劃分:
-
主機(jī)防火墻:服務(wù)范圍為當(dāng)前一臺主機(jī)
-
網(wǎng)絡(luò)防火墻:服務(wù)范圍為防火墻一側(cè)的局域網(wǎng)
2.按實(shí)現(xiàn)方式劃分:
-
硬件防火墻:在專用硬件級別實(shí)現(xiàn)部分功能的防火墻;另一個部分功能基于軟件實(shí)現(xiàn),如:華為, 啟明星辰,綠盟,深信服?)等
-
軟件防火墻:運(yùn)行于通用硬件平臺之上的防火墻的應(yīng)用軟件,Windows 防火墻 ISA --> Forefront
3.按網(wǎng)絡(luò)協(xié)議劃分:
-
網(wǎng)絡(luò)層防火墻:OSI模型下四層,又稱為包過濾防火墻? ?(通過協(xié)議端口號、ip、mac)
-
應(yīng)用層防火墻/代理服務(wù)器:proxy 代理網(wǎng)關(guān),OSI模型七層? ? ? (通過應(yīng)用層數(shù)據(jù))
補(bǔ)充:
應(yīng)用層 ? ? 進(jìn)程 程序
表示層
會話層傳輸層? ? ? ? ? ? ? 協(xié)議/端口號? ? ? ? ? ?防火墻
網(wǎng)絡(luò)層? ? ? ? ? ? ? ?ip頭部? ? ? ? ? ? ? ? ? ?路由器? ? ?三層?
數(shù)據(jù)鏈路層 ? ? ? ?mac頭部? ? ? ? ? ? ? ?交換機(jī)物理層? ? ? ? ? ? ? ?定義標(biāo)準(zhǔn)
包過濾防火墻
網(wǎng)絡(luò)層對數(shù)據(jù)包進(jìn)行選擇,選擇的依據(jù)是系統(tǒng)內(nèi)設(shè)置的過濾邏輯,被稱為訪問控制列表(ACL),通過檢查數(shù)據(jù)流中每個數(shù)據(jù)的源地址,目的地址,所用端口號和協(xié)議狀態(tài)等因素,或他們的組合來確定是否 允許該數(shù)據(jù)包通過
優(yōu)點(diǎn):對用戶來說透明,處理速度快且易于維護(hù)
缺點(diǎn):無法檢查應(yīng)用層數(shù)據(jù),如病毒等
應(yīng)用層防火墻
應(yīng)用層防火墻/代理服務(wù)型防火墻,也稱為代理服務(wù)器(Proxy Server)
將所有跨越防火墻的網(wǎng)絡(luò)通信鏈路分為兩段,內(nèi)外網(wǎng)用戶的訪問都是通過代理服務(wù)器上的“鏈接”來實(shí)現(xiàn)
優(yōu)點(diǎn):在應(yīng)用層對數(shù)據(jù)進(jìn)行檢查,比較安全
缺點(diǎn):增加防火墻的負(fù)載
提示:現(xiàn)實(shí)生產(chǎn)環(huán)境中所使用的防火墻一般都是二者結(jié)合體,即先檢查網(wǎng)絡(luò)數(shù)據(jù),通過之后再送到應(yīng)用 層去檢查
三、Linux 防火墻的基本認(rèn)識
1.Netfilter
Linux防火墻是由Netfilter組件提供的,Netfilter工作在內(nèi)核空間,集成在linux內(nèi)核中
Netfilter 是Linux 2.4.x之后新一代的Linux防火墻機(jī)制,是linux內(nèi)核的一個子系統(tǒng)。
Netfilter采用模塊化設(shè)計,具有良好的可擴(kuò)充性,提供擴(kuò)展各種網(wǎng)絡(luò)服務(wù)的結(jié)構(gòu)化底層框架。
Netfilter與IP協(xié)議棧是無縫契合,并允許對數(shù)據(jù)報進(jìn)行過濾、地址轉(zhuǎn)換、處理等操作。
2.netfilter 中五個勾子函數(shù)和報文流向
Netfilter在內(nèi)核中選取五個位置放了五個hook(勾子) function(INPUT、OUTPUT、FORWARD、
PREROUTING、POSTROUTING),而這五個hook function向用戶開放,用戶可以通過一個命令工具(iptables)向其寫入規(guī)則。
由信息過濾表(table)組成,包含控制IP包處理的規(guī)則集(rules),規(guī)則被分組放在鏈(chain)上
提示:從 Linux kernel 4.2 版以后,Netfilter 在prerouting 前加了一個 ingress 勾子函數(shù)??梢允褂眠@個新的入口掛鉤來過濾來自第2層的流量,這個新掛鉤比預(yù)路由要早,基本上是 tc 命令(流量控制工具)的替代品。
3.iptables
由軟件包iptables提供的命令行工具,工作在用戶空間,用來編寫規(guī)則,寫好的規(guī)則被送往netfilter,告訴內(nèi)核如何去處理信息包
[root@zzh ~]#iptables --version
iptables v1.4.21
四、iptables
Linux 的防火墻體系主要工作在網(wǎng)絡(luò)層,針對 TCP/IP 數(shù)據(jù)包實(shí)施過濾和限制,屬于典型的包過濾防火墻(或稱為網(wǎng)絡(luò)層防火墻)。Linux 系統(tǒng)的防火墻體系基于內(nèi)核編碼實(shí)現(xiàn), 具有非常穩(wěn)定的性能和高效率,也因此獲得廣泛的應(yīng)用。
包過濾的工作層次
主要是網(wǎng)絡(luò)層,針對IP數(shù)據(jù)包體現(xiàn)在對包內(nèi)的IP地址、端口等信息的處理上
1.包過濾防火墻概述
netfilter/iptables:IP 信息包過濾系統(tǒng),它實(shí)際上由兩個組件 netfilter 和 iptables組成。 主要工作在網(wǎng)絡(luò)層,針對IP數(shù)據(jù)包,體現(xiàn)在對包內(nèi)的IP地址、端口等信息的處理。
netfilter
- 位于Linux內(nèi)核中的包過濾功能體系
- 稱為Linux防火墻的“內(nèi)核態(tài)”(內(nèi)核空間)
- 是內(nèi)核的一部分,由一些數(shù)據(jù)包過濾表組成,這些表包含內(nèi)核用來控制數(shù)據(jù)包過濾處理的規(guī)則集。
iptables
- 位于/sbin/iptables
- 用來管理防火墻規(guī)則的工具
- 稱為Linux防火墻的“用戶態(tài)”
- 它使插入、修改和刪除數(shù)據(jù)包過濾表中的規(guī)則變得容易
2.iptables由五表和五鏈
iptables 防火墻默認(rèn)的規(guī)則表、鏈結(jié)構(gòu) 如下圖:
iptables由五個表table和五個鏈chain以及一些規(guī)則組成
五個表(table)
security表:用于強(qiáng)制訪問控制(MAC)網(wǎng)絡(luò)規(guī)則,由Linux安全模塊(如SELinux)實(shí)現(xiàn)?
raw表:關(guān)閉啟用的連接跟蹤機(jī)制,加快封包穿越防火墻速度
mangle表:修改數(shù)據(jù)標(biāo)記位規(guī)則表
nat表:地址轉(zhuǎn)換規(guī)則表
filter表:地址過濾規(guī)則表,根據(jù)預(yù)定義的規(guī)則過濾符合條件的數(shù)據(jù)包,默認(rèn)表為filter表
優(yōu)先級由高到低的順序?yàn)椋?/strong> security -->raw-->mangle-->nat-->filter
五鏈(chain)
INPUT鏈:處理入站數(shù)據(jù)包
OUTPUT: 處理出站數(shù)據(jù)包,一般不在此鏈上做配置。
FORWARD: 處理轉(zhuǎn)發(fā)數(shù)據(jù)包,匹配流經(jīng)本機(jī)的數(shù)據(jù)包。
PREROUTING鏈: 在進(jìn)行路由選擇前處理數(shù)據(jù)包,用來修改目的地址,用來做DNAT。相當(dāng)于把內(nèi)網(wǎng)服務(wù)器的IP和端口映射到路由器的外網(wǎng)IP和端口上。
POSTROUTING鏈: 在進(jìn)行路由選擇后處理數(shù)據(jù)包,用來修改源地址,用來做SNAT。相當(dāng)于內(nèi)網(wǎng)通過路由器NAT轉(zhuǎn)換功能實(shí)現(xiàn)內(nèi)網(wǎng)主機(jī)通過一個公網(wǎng)IP地址上網(wǎng)。
規(guī)則:
規(guī)則表的作用:容納各種規(guī)則鏈
規(guī)則鏈的作用:容納各種防火墻規(guī)則
規(guī)則的作用:對數(shù)據(jù)包進(jìn)行過濾或處理
鏈的分類依據(jù):處理數(shù)據(jù)包的不同時機(jī)
總結(jié):表里有鏈,鏈里有規(guī)則
3.內(nèi)核中數(shù)據(jù)包的傳輸過程
-
當(dāng)一個數(shù)據(jù)包進(jìn)入網(wǎng)卡時,數(shù)據(jù)包首先進(jìn)入PREROUTING鏈,內(nèi)核根據(jù)數(shù)據(jù)包目的IP判斷是否需要 轉(zhuǎn)送出去
-
如果數(shù)據(jù)包是進(jìn)入本機(jī)的,數(shù)據(jù)包就會沿著圖向下移動,到達(dá)INPUT鏈。數(shù)據(jù)包到達(dá)INPUT鏈后, 任何進(jìn)程都會收到它。本機(jī)上運(yùn)行的程序可以發(fā)送數(shù)據(jù)包,這些數(shù)據(jù)包經(jīng)過OUTPUT鏈,然后到達(dá)
-
如果數(shù)據(jù)包是要轉(zhuǎn)發(fā)出去的,且內(nèi)核允許轉(zhuǎn)發(fā),數(shù)據(jù)包就會向右移動,經(jīng)過FORWARD鏈,然后到達(dá)POSTROUTING鏈輸出
三種報文流向
-
流入本機(jī)(來自外界的數(shù)據(jù)包,且目標(biāo)地址是防火墻本機(jī)):PREROUTING --> INPUT-->本機(jī)應(yīng)用程序 用戶空間進(jìn)程
-
流出本機(jī):用戶空間進(jìn)程 -->OUTPUT--> POSTROUTING
-
轉(zhuǎn)發(fā)(需要經(jīng)過防火墻轉(zhuǎn)發(fā)的數(shù)據(jù)包):PREROUTING --> FORWARD --> POSTROUTING
4.iptables 選項? ??
1.準(zhǔn)備工作
CentOS7默認(rèn)使用firewalld防火墻,沒有安裝iptables,若想使用iptables防火墻。必須先關(guān)閉firewalld防火墻,再安裝iptables
[root@zzh ~]#systemctl stop firewalld #關(guān)閉防火墻
[root@zzh ~]#systemctl disable --now firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@zzh ~]#yum install iptables iptables-services -y #安裝
?[root@zzh ~]#rpm -q iptables-services
iptables-services-1.4.21-35.el7.x86_64
[root@zzh ~]#iptables --version
iptables v1.4.21
[root@zzh ~]#systemctl start iptables.service
[root@zzh ~]#systemctl status iptables.service
2.iptables基本語法
①格式:
iptables [-t 表名 ] 選項 [ 鏈名 ] [ 匹配條件 ] [-j 控制類型 ]
表名、鏈名用來指定 iptables 命令所操作的表和鏈,未指定表名時將默認(rèn)使用 filter 表
選項:表示iptables規(guī)則的操作方式,如插入、增加、刪除、查看等
匹配條件:用來指定要處理的數(shù)據(jù)包的特征,不符合指定條件的數(shù)據(jù)包將不會處理
控制類型指的是數(shù)據(jù)包的處理方式,如允許、拒絕、丟棄等。
②基本語法:
③注意事項:
不指定表名時,默認(rèn)指filter表
不指定鏈名時,默認(rèn)指表內(nèi)的所有鏈
除非設(shè)置鏈的默認(rèn)策略,否則必須指定匹配條件
選項、鏈名、控制類型使用大寫字母,其余均為小寫
5.iptables選項
-F? ?清空防火墻規(guī)則,默認(rèn)情況filter表,加-t 表名可以情況其他表
-v? ? ?顯示規(guī)則表的詳細(xì)信息。
-L∶列出 (–list)指定鏈中所有的規(guī)則,若未指定鏈名,則列出表中的所有鏈
-n? ? 數(shù)字化顯示規(guī)則表,多用于和-n? -L選項配合看表。
iptables -L -n
#分開寫 L與n不分前后順序
或
iptables -nL
#合起來 L必須在后面
-A ∶ 在指定鏈的末尾追加 添加一條新的規(guī)則
-D ∶ 刪除 (–delete)指定鏈中的某一條規(guī)則, 可指定規(guī)則序號或具體內(nèi)容
-I ∶ 在指定鏈的開頭插入(–insert)一條新的規(guī)則, 未指定序號時默認(rèn)作為第一條規(guī)則
?-P? 修改默認(rèn)鏈的默認(rèn)規(guī)則,默認(rèn)都是ACCEPT,使用格式:iptables -P 修改的鏈? ? ?修改的默認(rèn)規(guī)則
iptables 的各條鏈中,默認(rèn)策略是規(guī)則匹配的最后一個環(huán)節(jié)——當(dāng)找不到任何一條能夠匹配數(shù)據(jù)包的規(guī)則時,則執(zhí)行默認(rèn)策略。默認(rèn)策略的控制類型為 ACCEPT(允許)、DROP(丟棄)兩種
-R ∶ 修改、替換(–replace)指定鏈中的某一條規(guī)則,可指定規(guī)則序號或具體內(nèi)容
[root@zzh ~]#iptables -R INPUT 1 -s 192.168.246.0/24 -j ACCEPT
--line--numbers? 查看規(guī)則編號
-Z 清空鏈的計數(shù)器 (匹配到的數(shù)據(jù)包的大小和總和) iptables -Z
6.數(shù)據(jù)包的常見控制類型
ACCEPT:允許數(shù)據(jù)包通過。?
DROP:直接丟棄數(shù)據(jù)包,不給出任何回 應(yīng)信息。?
REJECT:拒絕數(shù)據(jù)包通過,必要時會給數(shù)據(jù)發(fā)送端一個響應(yīng)信息。?
LOG:在/var/log/messages 文件中記錄日志信息,然后將數(shù)據(jù)包傳遞給下一條規(guī)則。防火墻規(guī)則的“匹配即停止”
詳細(xì)講解下:
ACCEPT:允許數(shù)據(jù)包通過。?
[root@zzh ~]#iptables -t filter -A INPUT -s 192.168.246.8 -j ACCEPT
REJECT:拒絕數(shù)據(jù)包通過,必要時會給數(shù)據(jù)發(fā)送端一個響應(yīng)信息。
[root@zzh ~]#iptables -t filter -A INPUT -s 192.168.246.8 -j REJECT
DROP:直接丟棄數(shù)據(jù)包,不給出任何回 應(yīng)信息。
[root@zzh ~]#iptables -t filter -A INPUT -s 192.168.246.8 -j DROP
如果即匹配了REJECT 又匹配ACCET,如下圖:
7.實(shí)驗(yàn):
添加新的防火墻規(guī)則
添加新的防火墻規(guī)則時,使用管理選項“-A”、“-I”,前者用來追加規(guī)則,后者用來插入規(guī)則。
刪除、清空、替換規(guī)則
1.按內(nèi)容刪除:
2.按編號刪除
3.清空規(guī)則
查看規(guī)則表
[root@zzh ~]#iptables -vnL
[root@zzh ~]#iptables -vnL --line-numbers
注意事項:
1.若規(guī)則列表中有多條相同的規(guī)則時,按內(nèi)容匹配只刪除的序號最小的一條
2.按號碼匹配刪除時,確保規(guī)則號碼小于等于已有規(guī)則數(shù),否則報錯
3.按內(nèi)容匹配刪數(shù)時,確保規(guī)則存在,否則報錯
8.通用匹配 (匹配條件)
直接使用不依賴于其他條件或擴(kuò)展,包括網(wǎng)絡(luò)協(xié)議、IP地址、網(wǎng)絡(luò)接口等條件。
協(xié)議匹配:? ? ?-p? 協(xié)議名? ? ? ? ? ? ?
地址匹配:? ? ?-s? 源地址? ? ? ? ? ? ? ? ? ? -d? 目的地址? ? ? ? ? #可以是IP、網(wǎng)段、域名、空(任何地址)
接口匹配:? ? ?-i? 入站網(wǎng)卡? ? ? ? ? ? ? ? ? ? -o? 出站網(wǎng)卡?
只有tcp 、udp有端口號53
實(shí)驗(yàn)1:不允許另一臺主機(jī)通過icmp協(xié)議來ping本機(jī)
ping所使用的協(xié)議為icmp
準(zhǔn)備工作,目前192.168.246.8可以通過icmp協(xié)議來ping通192.168.246.7
設(shè)置拒絕192.168.246.8機(jī)通過icmp協(xié)議來ping
此時看到192.168.246.8主機(jī)無法通過icmp協(xié)議來ping192.168.246.7主機(jī),但是其它協(xié)議不影響
實(shí)驗(yàn)2:
[root@localhost ~]#iptables -I INPUT 2 -i lo -j ACCEPT
#添加網(wǎng)卡
實(shí)驗(yàn)3:
黑白名單
①黑名單:默認(rèn)全部允許通過,添加誰才不允許誰通過。
②白名單:默認(rèn)全部不允許通過,添加誰允許誰通過。
市場環(huán)境不會改成DROP
進(jìn)入虛擬的配置:
由于xhell在真機(jī)里,所以地址是真機(jī)地址,設(shè)置白名單
又可以使用 -F選項
9.設(shè)置默認(rèn)策略
iptables 的各條鏈中,默認(rèn)策略是規(guī)則匹配的最后一個環(huán)節(jié)——當(dāng)找不到任何一條能夠匹配數(shù)據(jù)包的規(guī)則時,則執(zhí)行默認(rèn)策略。默認(rèn)策略的控制類型為 ACCEPT(允許)、DROP(丟棄)兩種。例如,執(zhí)行以下操作可以將 filter 表中 FORWARD 鏈的默認(rèn)策略設(shè)為丟棄, OUTPUT 鏈的默認(rèn)策略設(shè)為允許。
iptables [-t表名] -P <鏈名> <控制類型>
iptables -P INPUT DROP 輸入后沒顯示 清除所有規(guī)則之后生效,因?yàn)橄旅嬷皇O翫ROP 添加遠(yuǎn)程端口22
iptables -P FORWARD DROP
#--般在生產(chǎn)環(huán)境中設(shè)置網(wǎng)絡(luò)型防火墻、主機(jī)型防火墻時都要設(shè)置默認(rèn)規(guī)則為DROP,并設(shè)置白名單
##################################################
拒絕所有前 先將 22 端口 放開
##################################################
[root@localhost ~]# iptables -t filter -P FORWARD DROP
[root@localhost ~]# iptables -P OUTPUT ACCEPT
#需要注意的是,當(dāng)使用管理選項“-F”清空鏈時,默認(rèn)策略不受影響。因此若要修改默認(rèn) 策略,必須通過管理選項“-P”重新進(jìn)行設(shè)置。另外,默認(rèn)策略并不參與鏈內(nèi)規(guī)則的順序編排, 因此在其他規(guī)則之前或之后設(shè)置并無區(qū)別。
10.模塊
[root@zzh ~]#rpm -ql iptables |grep -i tcp
/usr/lib64/xtables/libxt_TCPMSS.so
/usr/lib64/xtables/libxt_TCPOPTSTRIP.so
/usr/lib64/xtables/libxt_tcp.so
/usr/lib64/xtables/libxt_tcpmss.so
[root@zzh ~]#
[root@zzh ~]#
[root@zzh ~]#
[root@zzh ~]#rpm -ql iptables |grep -i udp
/usr/lib64/xtables/libxt_udp.so
[root@zzh ~]#
.so結(jié)尾的均為模塊,也就是說在使用配置防護(hù)墻規(guī)則的時候,調(diào)用的是.so結(jié)尾的配置文件?
如果想禁用tcp或者udp協(xié)議進(jìn)行防火墻配置,那么必須要有tcp模塊或者udp模塊才可以使用限制功能
1.隱含擴(kuò)展
- iptables 在使用-p選項指明了特定的協(xié)議時,無需再用-m選項指明擴(kuò)展模塊的擴(kuò)展機(jī)制,不需要手動加載擴(kuò)展模塊
- 要求以特定的協(xié)議匹配作為前提,包括端口、TCP標(biāo)記、ICMP類型等條件。
- 端口匹配: --sport 源端口、--dport 目的端口(可以是個別端口、端口范圍)
隱含擴(kuò)展可以通過man iptables-extension查看擴(kuò)展幫助
[root@localhost ~]#man iptables-extensions
tcp協(xié)議的擴(kuò)展選項
①TCP模塊
[!] --source-port, --sport port[:port]:匹配報文源端口,可為端口連續(xù)范圍
[!] --destination-port,--dport port[:port]:匹配報文目標(biāo)端口,可為連續(xù)范圍
[!] --tcp-flags mask comp
? ? mask 需檢查的標(biāo)志位列表,用,分隔 , 例如 SYN,ACK,FIN,RST
? ? comp 在mask列表中必須為1的標(biāo)志位列表,無指定則必須為0,用,分隔tcp協(xié)議的擴(kuò)展選項
--tcp-flags SYN,ACK,FIN,RST SYN 表示要檢查的標(biāo)志位為SYN,ACK,FIN,RST四個,其中SYN必須為1,余下的必須為0,第一次握手
--tcp-flags SYN,ACK,FIN,RST SYN,ACK 第二次握手
#錯誤包
--tcp-flags ALL ALL ?
--tcp_flags ALL NONE
--sport 1000 匹配源端口是1000的數(shù)據(jù)包
--sport 1000:3000 匹配源端口是1000-3000的數(shù)據(jù)包
--sport :3000 匹配源端口是3000及以下的數(shù)據(jù)包
--sport 1000: 匹配源端口是1000及以上的數(shù)據(jù)包
注意: --sport和--dport 必須配合-p <協(xié)議類型>使用
注意:
--sport和--dport 必須配合-p <協(xié)議類型>使用
端口可以使用的范圍 0-65535
--sport? 指明源端口,使用格式: --sport? 端口或 端口1:端口2(端口1到端口2的連續(xù)端口范圍指定)
--dport? 指明目的端口,使用格式: --dport? 端口或 端口1:端口2(端口1到端口2的連續(xù)端口范圍指定)。
實(shí)驗(yàn):控制目標(biāo)主機(jī)192.168.246.8不想讓其訪問本機(jī)(192.168.246.7)的80 端口(httpd服務(wù))
[root@zzh ~]#rpm -q httpd
未安裝軟件包 httpd
[root@zzh ~]#yum install httpd -y
[root@zzh ~]#systemctl start httpd
[root@zzh ~]#systemctl status httpd
沒設(shè)置前192.168.246.8 可以訪問192.168.246.7的80端口
接下來去192.168.246.7 服務(wù)端配置
[root@zzh ~]#iptables -A INPUT -m tcp -p tcp --dport 80 -s 192.168.246.8 -j REJECT
[root@zzh ~]#iptables -A INPUT -m tcp -p tcp --dport 22 -s 192.168.246.8 -j REJECT
如果不寫地址,拒絕了所有主機(jī)訪問
[root@localhost ~]#iptables -A INPUT -p tcp --dport 80 -j REJECT
#拒絕任何主機(jī)通過tcp協(xié)議來連接本機(jī)的80端口的httpd服務(wù)
[root@localhost ~]#iptables -A INPUT -p tcp --dport 22 -j REJECT
#拒絕任何主機(jī)通過tcp協(xié)議來連接22端口
這樣也可以2選1
[root@zzh ~]#iptables -A INPUT -m tcp -p tcp --dport 22:80 -s 192.168.246.8 -j REJECT
去目標(biāo)192.168.246.8去檢測:
②ICMP
?ICMP類型匹配∶–icmp-type ICMP類型? ? ?#可以是字符串、數(shù)字代碼
"Echo-Request"(代碼為 8)表示 請求
"Echo-Reply"(代碼為 0)表示 回復(fù)
"Destination-Unreachable"(代碼為 3)表示 目標(biāo)不可達(dá)
關(guān)于其它可用的 ICMP 協(xié)議類型,可以執(zhí)行"iptables -p icmp -h"命令,查看幫助信息
實(shí)驗(yàn)要求:(192.168.246.7) 能ping通 (192.168.246.8)
? ? ? ? ? ? ? ? ? (192.168.246.8)不 能ping通 (192.168.246.7)
實(shí)驗(yàn)前:
添加規(guī)則:
方法一:
[root@zzh ~]#iptables -A INPUT -s 192.168.246.8 -p icmp --icmp-type 8 -j REJECT
[root@zzh ~]#iptables -vnL
#添加防火墻規(guī)則,在INPUT鏈中加入禁止來自192.168.246.8的8包使用icmp協(xié)議,拒絕并回復(fù)
實(shí)驗(yàn)結(jié)果:
方法二:
也可以這樣添加,在192.168.246.7添加如下規(guī)則
[root@zzh ~]#iptables -A OUTPUT -d 192.168.246.8 -p icmp --icmp-type 0 -j REJECT
[root@zzh ~]#iptables -vnL
11.顯示 擴(kuò)展模塊
顯示擴(kuò)展即必須使用-m選項指明要調(diào)用的擴(kuò)展模塊名稱,需要手動加載擴(kuò)展模塊
[-m matchname [per-match-options]]
①multiport擴(kuò)展
以離散方式定義多端口匹配,最多指定15個端口
[!] --source-ports,--sports port[,port|,port:port]...
#指定多個源端口 逗號隔開
[!] --destination-ports,--dports port[,port|,port:port]...
# 指定多個目標(biāo)端口 逗號隔開
[!] --ports port[,port|,port:port]...
#多個源或目標(biāo)端
[root@zzh ~]#iptables -t filter -A INPUT -s 192.168.246.8 -p tcp --dport 22,80 -j REJECT
iptables v1.4.21: invalid port/service `22,80' specified
Try `iptables -h' or 'iptables --help' for more information.
[root@zzh ~]#iptables -A INPUT -s 192.168.246.8 -p tcp -m multiport --dports 22,80,3306 -j REJECT
[root@zzh ~]#iptables -vnL
②iprange擴(kuò)展
指明連續(xù)的(但一般不是整個網(wǎng)絡(luò))ip地址范圍
[!] --src-range from[-to] 源IP地址范圍
[!] --dst-range from[-to] 目標(biāo)IP地址范圍
[root@zzh ~]#iptables -A INPUT -m iprange --src-range 192.168.246.8-192.168.246.9 -j REJECT
[root@zzh ~]#iptables -vnL
Chain INPUT (policy ACCEPT 6 packets, 364 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 192.168.91.8-192.168.91.9 reject-with icmp-port-unreachable
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 192.168.246.8-192.168.246.9 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 4 packets, 488 bytes)
pkts bytes target prot opt in out source destination
[root@zzh ~]#
分別去檢測一下:
③mac地址
mac 模塊可以指明源MAC地址,,適用于:PREROUTING, FORWARD,INPUT chains
--mac-source? ? 源mac地址,只能指定源mac地址
-m mac [!] --mac-source XX:XX:XX:XX:XX:XX
[root@zzh ~]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:e7:53:3a brd ff:ff:ff:ff:ff:ff
inet 192.168.246.7/24 brd 192.168.246.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::183e:c32:9272:8ece/64 scope link
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
link/ether 52:54:00:0a:c7:71 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
link/ether 52:54:00:0a:c7:71 brd ff:ff:ff:ff:ff:ff
[root@zzh ~]#iptables -A INPUT -m mac --mac-source 00:0c:29:e7:53:3a -j ACCEPT
[root@zzh ~]#iptables -vnL
Chain INPUT (policy ACCEPT 10 packets, 612 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 MAC 00:0C:29:E7:53:3A
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 6 packets, 624 bytes)
pkts bytes target prot opt in out source destination
[root@zzh ~]#
④string 字符串
對報文中的應(yīng)用層數(shù)據(jù)做字符串模式匹配檢測
--algo {bm|kmp} 字符串匹配檢測算法
bm:Boyer-Moore 算法
kmp:Knuth-Pratt-Morris 算法
--from offset 開始查詢的地方
--to offset ? 結(jié)束查詢的地方
[!] --string pattern 要檢測的字符串模式
[!] --hex-string pattern要檢測字符串模式,16進(jìn)制格式
實(shí)驗(yàn):
先去另一臺主機(jī)192.168.246.8檢測一下?
假設(shè)我們現(xiàn)在不給訪問bai.html? ?設(shè)置防火墻規(guī)則
[root@zzh html]#iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "bai" -j REJECT
[root@zzh html]#iptables -vnL
Chain INPUT (policy ACCEPT 6 packets, 364 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 4 packets, 520 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:80 STRING match "bai" ALGO name bm FROM 62 TO 65535 reject-with icmp-port-unreachable
表示使用了string模塊,其中--algo bm是一種算法,可以理解為是模塊的子命令--from表示從多少字節(jié)開始去匹配敏感字 62表示是去掉前面的 mac頭部 ip頭部 tcp/udp頭部前面有62字節(jié)匹配,--string 是子命令 后面跟著關(guān)鍵字"bai”
再去檢測下
⑤time模塊
根據(jù)將報文到達(dá)的時間與指定的時間范圍進(jìn)行匹配(有 bug ubuntu沒問題)
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss] ? ? ? 時間
--timestop hh:mm[:ss]
[!] --monthdays day[,day...] ? 每個月的幾號
[!] --weekdays day[,day...] ? 星期幾,1 – 7 分別表示星期一到星期日
--kerneltz:內(nèi)核時區(qū)(當(dāng)?shù)貢r間),不建議使用,CentOS 7版本以上系統(tǒng)默認(rèn)為 UTC
注意: centos6 不支持kerneltz ,--localtz指定本地時區(qū)(默認(rèn))
man iptables-extensions
解釋:
語法分析,使用time模塊,時間從8:03到9:00限制訪問本機(jī)
-m time使用time模塊
--timestart 開始時間
--timestop 結(jié)束時間
這里的時間需要使用格林威治時間
使用date -u 可以查看
?
[root@zzcentos1 ~]#date
2024年 02月 18日 星期日 16:03:32 CST
[root@zzcentos1 ~]#date -u #協(xié)調(diào)世界時(UTC)
2024年 02月 18日 星期日 08:03:35 UTC
[root@zzcentos1 ~]#iptables -I INPUT -s 192.168.246.8 -m time --timestart 8:03 --timestop 9:00 -j REJECT
[root@zzcentos1 ~]#iptables -vnL
Chain INPUT (policy ACCEPT 12 packets, 736 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 192.168.246.8 0.0.0.0/0 TIME from 08:03:00 to 09:00:00 UTC reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 7 packets, 1060 bytes)
pkts bytes target prot opt in out source destination
[root@zzcentos1 ~]#
?
去驗(yàn)證:
⑥connlimit擴(kuò)展
根據(jù)每客戶端IP做并發(fā)連接數(shù)數(shù)量匹配
可防止Dos(Denial of Service,拒絕服務(wù))攻擊
--connlimit-upto N #連接的數(shù)量小于等于N時匹配
--connlimit-above N #連接的數(shù)量大于N時匹配
例子:
模擬攻擊
[root@localhost3 ~]# gcc flood_connect.c -o flood
#編譯安裝 黑客文件
[root@localhost3 ~]# ./flood 192.168.91.100
#運(yùn)行黑客腳本
[root@localhost 7-1]#ss
[root@localhost1 ~]#iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 2 -j REJECT
⑦state
狀態(tài)類型:
-
NEW:新發(fā)出請求;連接追蹤信息庫中不存在此連接的相關(guān)信息條目,因此,將其識別為第一次發(fā)出的請求
-
ESTABLISHED:NEW狀態(tài)之后,連接追蹤信息庫中為其建立的條目失效之前期間內(nèi)所進(jìn)行的通信狀態(tài)
-
RELATED:新發(fā)起的但與已有連接相關(guān)聯(lián)的連接,如:ftp協(xié)議中的數(shù)據(jù)連接與命令連接之間的關(guān)系
-
INVALID:無效的連接,如flag標(biāo)記不正確
-
UNTRACKED:未進(jìn)行追蹤的連接,如:raw表中關(guān)閉追蹤
格式: 老用戶繼續(xù)可以訪問,拒絕新用戶訪問
實(shí)驗(yàn)一:讓老用戶繼續(xù)可以訪問,拒絕新用戶訪問
先去模擬老用戶,用7-2 ping
去7-1(192.168.246.7)設(shè)置防火墻規(guī)則
[root@zzcentos1 ~]#iptables -A INPUT -m state --state NEW -j REJECT
[root@zzcentos1 ~]#iptables -vnL
Chain INPUT (policy ACCEPT 14 packets, 860 bytes)
pkts bytes target prot opt in out source destination
5 420 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 state Nle
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 13 packets, 1344 bytes)
pkts bytes target prot opt in out source destination
[root@zzcentos1 ~]#
解釋如下:
-m 使用state模塊--state 狀態(tài)
表示不允許新用戶訪問只允許老用戶訪問
老用戶斷開 就不能訪問了
去7-2老用戶去驗(yàn)證
如果7-2老用戶再去訪問也是不行的,不能訪問了
去新用戶7-3去訪問驗(yàn)證
實(shí)驗(yàn)二?讓 7-1(192.168.246.7)可以訪問7-2(192.168.246.8)的所有服務(wù)
? ? ? ? ? 但是7-2(192.168.246.8)不能訪問7-1(192.168.246.7)的所有服務(wù)
[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0
[root@localhost ~]#hostnamectl set-hostname zzcentos1
[root@localhost ~]#su
[root@zzcentos1 ~]#iptables -F
[root@zzcentos1 ~]#ssh 192.168.246.8
The authenticity of host '192.168.246.8 (192.168.246.8)' can't be established.
ECDSA key fingerprint is SHA256:ErvMhEgeFiKTKqfdLsxZIuAxMfy8F2bHpsY7rsqnwVI.
ECDSA key fingerprint is MD5:5f:e4:87:f1:cf:4a:99:23:d7:a0:be:be:f4:78:f7:14.
Are you sure you want to continue connecting (yes/no)? ^C
[root@zzcentos1 ~]#iptables -A INPUT -s 192.168.246.8 -m state --state NEW -j REJECT
[root@zzcentos1 ~]#ping 192.168.246.8
PING 192.168.246.8 (192.168.246.8) 56(84) bytes of data.
64 bytes from 192.168.246.8: icmp_seq=1 ttl=64 time=0.574 ms
64 bytes from 192.168.246.8: icmp_seq=2 ttl=64 time=0.884 ms
64 bytes from 192.168.246.8: icmp_seq=3 ttl=64 time=0.714 ms
^C
--- 192.168.246.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.574/0.724/0.884/0.126 ms
[root@zzcentos1 ~]#ssh 192.168.246.8
The authenticity of host '192.168.246.8 (192.168.246.8)' can't be established.
ECDSA key fingerprint is SHA256:ErvMhEgeFiKTKqfdLsxZIuAxMfy8F2bHpsY7rsqnwVI.
ECDSA key fingerprint is MD5:5f:e4:87:f1:cf:4a:99:23:d7:a0:be:be:f4:78:f7:14.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.246.8' (ECDSA) to the list of known hosts.
root@192.168.246.8's password:
Last login: Mon Feb 19 13:50:59 2024
[root@zzcentos2 ~]#
[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0
[root@localhost ~]#hostnamectl set-hostname zzcentos2
[root@localhost ~]#su
[root@zzcentos2 ~]#ssh 192.168.246.7
ssh: connect to host 192.168.246.7 port 22: Connection refused
[root@zzcentos2 ~]#ping 192.168.246.7
PING 192.168.246.7 (192.168.246.7) 56(84) bytes of data.
From 192.168.246.7 icmp_seq=1 Destination Port Unreachable
From 192.168.246.7 icmp_seq=2 Destination Port Unreachable
^C
--- 192.168.246.7 ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1000ms
總結(jié):重點(diǎn)哦,NEW
?
ipatables ?-A INPUT -m state --state ? NEW ? ? ? ? ? ?-j ?REJECT
ipatables ?-A INPUT ?-m state --state ?ESTABLISHED ? ?-j ? ACCEPT
? ? ? ? ? ? ? ? ??
?新用戶不可以訪問 ?舊用戶可以訪問?
故障案例:
啟用了iptables state 模塊 用戶訪問有問題 查看 日志 報錯table full drop pket
實(shí)驗(yàn):
補(bǔ)充:
centso6 有bug 使用iptables -vnL? 會啟用State 模塊,如果你啟用這個模塊,一定要把這個值調(diào)大寫
查看:
可以把它調(diào)大一些
12. 規(guī)則優(yōu)化,實(shí)踐
-
安全放行所有入站和出站的狀態(tài)為ESTABLISHED狀態(tài)連接,建議放在第一條,效率更高
-
謹(jǐn)慎放行入站的新請求
-
有特殊目的限制訪問功能,要在放行規(guī)則之前加以拒絕
-
同類規(guī)則(訪問同一應(yīng)用,比如:http ),匹配范圍小的放在前面,用于特殊處理
-
不同類的規(guī)則(訪問不同應(yīng)用,一個是http,另一個是mysql ),匹配范圍大的放在前面,效率更高
-
應(yīng)該將那些可由一條規(guī)則能夠描述的多個規(guī)則合并為一條,減少規(guī)則數(shù)量,提高檢查效率
-
設(shè)置默認(rèn)策略,建議白名單(只放行特定連接)
A:iptables -P,不建議,容易出現(xiàn)“自殺現(xiàn)象”文章來源:http://www.zghlxwxcb.cn/news/detail-829721.html
B:規(guī)則的最后定義規(guī)則做為默認(rèn)策略,推薦使用,放在最后一條文章來源地址http://www.zghlxwxcb.cn/news/detail-829721.html
到了這里,關(guān)于Linux系統(tǒng)安全:安全技術(shù) 和 防火墻 (一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!