一、 概述
按表現形式劃分:
軟件防火墻: 集成在系統內部,Linux系統: iptables、firewalld、ufw; windows系統下:
windows defender
硬件防火墻: 華為防火墻、思科防火墻、奇安信防火墻、深信服防火墻等
按技術劃分:
包過濾防火墻: 檢查數據包的源IP、目的IP、源端口、目的端口、TCP的syn控制位
七層防火墻: 除了上述檢查外,還會檢查數據內容
防火墻的作用:
阻止來自網絡外部的攻擊、進行流量控制
二、 Linux防火墻
防火墻結構
用戶態:
iptables: 使用iptables命令對防火墻規則進行管理,必須深度理解網絡技術和四表五鏈,對
于初學者或者網絡技術不達標的人員不友好
firewalld:使用firewall-cmd命令對防火墻進行管理,采用的是區域劃分的形式。不需要連接
底層的四表五鏈,對于初學者比較友好
ufw: 使用ufw命令對防火墻進行管理,命令簡單易懂。
內核態:
四表: 從內核->用戶的順序: raw -> mangle -> nat -> filter
五鏈: input、output、forward、prerouting、postrouting
firewalld防火墻
區域分類
九大區域: block、dmz、drop、external、home、internal、public、trusted、work
區域功能:
public: 公共區域,默認區域
public (active)target: default #區域類型規則icmp-block-inversion: nointerfaces: ens33 #屬于該區域的接口sources: #來源services: dhcpv6-client ssh #放行服務的名稱ports: #放行端口號protocols: #放行協議masquerade: no #NAT地址轉換forward-ports: #轉發端口source-ports: #源端口icmp-blocks: #ICMP的阻塞類型,ping的阻塞rich rules: #富規則
home: 家庭區域
hometarget: defaulticmp-block-inversion: nointerfaces:sources:services: dhcpv6-client mdns samba-client sshports:protocols:masquerade: noforward-ports:source-ports:icmp-blocks:rich rules:
work: 工作區域
worktarget: defaulticmp-block-inversion: nointerfaces:sources:services: dhcpv6-client sshports:protocols:masquerade: noforward-ports:source-ports:icmp-blocks:rich rules:
trusted: 完全信任區域
trustedtarget: ACCEPT #不采用默認規則,放行一切icmp-block-inversion: nointerfaces:sources:services:ports:protocols:masquerade: noforward-ports:source-ports:icmp-blocks:rich rules:
internal: 內部區域 (連接內部網絡)
internaltarget: defaulticmp-block-inversion: nointerfaces:sources:services: dhcpv6-client mdns samba-client sshports:protocols:masquerade: noforward-ports:source-ports:icmp-blocks:rich rules:
external: 外部區域 (連接外部網絡,例如: internet網絡)
ternaltarget: defaulticmp-block-inversion: nointerfaces:sources:services: sshports:protocols:masquerade: yes #默認進行NAT地址轉換forward-ports:source-ports:icmp-blocks:rich rules:
dmz: 非軍事化管理區域(內部的服務器放于該區域)
dmztarget: defaulticmp-block-inversion: nointerfaces:sources:services: sshports:protocols:masquerade: noforward-ports:source-ports:icmp-blocks:rich rules:
drop: 丟棄區域 (丟棄一切流量,不給出任何回應)
droptarget: DROPicmp-block-inversion: nointerfaces:sources:services:ports:protocols:masquerade: noforward-ports:source-ports:icmp-blocks:rich rules:
block: 阻塞區域 (拒絕任何流量,但給出回應)
blocktarget: %%REJECT%%icmp-block-inversion: nointerfaces:sources:services:ports:protocols:masquerade: noforward-ports:source-ports:icmp-blocks:rich rules:
firewall-cmd命令用法
關鍵字:
--list-*--get-*--set-*--add-*--remove-*--change-*--zone=
命令分類:
查看
#查看所有區域的詳細信息
[root@localhost ~]# firewall-cmd --list-all-zones
#查看指定區域的詳細信息
[root@localhost ~]# firewall-cmd --list-all --zone=public
#查看指定區域的放行服務
[root@localhost ~]# firewall-cmd --list-services --zone=public
#查看指定區域的放行端口
[root@localhost ~]# firewall-cmd --list-ports --zone=public
#查看指定區域包含的網絡接口
[root@localhost ~]# firewall-cmd --list-interfaces --zone=public
#查看指定區域的放心協議
[root@localhost ~]# firewall-cmd --list-protocols --zone=public
#查看指定區域的ICMP阻塞類型
[root@localhost ~]# firewall-cmd --list-icmp-blocks --zone=public
#查看指定區域的放行源地址
[root@localhost ~]# firewall-cmd --list-sources --zone=public
#查看指定區域的源端口
[root@localhost ~]# firewall-cmd --list-source-ports --zone=public
#查看指定區域的富規則
[root@localhost ~]# firewall-cmd --list-rich-rules --zone=public
#查看指定區域的轉發端口
[root@localhost ~]# firewall-cmd --list-forward-ports --zone=public
#查看firewalld支持的服務類型
[root@localhost ~]# firewall-cmd --get-services
#查看firewalld的默認區域
[root@localhost ~]# firewall-cmd --get-default-zone
#查看firewalld支持的ICMP的阻塞類型
[root@localhost ~]# firewall-cmd --get-icmptypes
#查看firewalld所有的活動區域
[root@localhost ~]# firewall-cmd --get-active-zones
#查看指定網絡接口所屬區域
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
#查看所有區域名稱
[root@localhost ~]# firewall-cmd --get-zones
添加:
#添加指定服務到指定區域
[root@localhost ~]# firewall-cmd --add-service=http --zone=public
success
#添加端口到指定區域
[root@localhost ~]# firewall-cmd --add-port=80/tcp --zone=public
success
#添加指定協議到指定區域
[root@localhost ~]# firewall-cmd --add-protocol=ah --zone=public
success
#添加ICMP阻塞類型到指定區域
[root@localhost ~]# firewall-cmd --add-icmp-block=echo-request --zone=public
success
#windows端驗證
C:\Users\zzh>ping 192.168.115.129
正在 Ping 192.168.115.129 具有 32 字節的數據:
來自 192.168.115.129 的回復: 無法訪問目標主機。
來自 192.168.115.129 的回復: 無法訪問目標主機。
來自 192.168.115.129 的回復: 無法訪問目標主機。
#添加指定網絡接口到指定區域
[root@localhost ~]# firewall-cmd --add-interface=ens33 --zone=work
success
#添加指定區域的放行源地址
[root@localhost ~]# firewall-cmd --add-source=192.168.1.0/24 --zone=work
success
#添加指定區域的放行源端口
[root@localhost ~]# firewall-cmd --add-source-port=999/tcp --zone=work
success
#添加轉發端口到指定區域
[root@localhost ~]# firewall-cmd --add-forwardport=port=8080:proto=tcp:toport=80:toaddr=192.168.115.115 --zone=work
success
#添加地址轉換功能到指定區域
[root@localhost ~]# firewall-cmd --add-masquerade --zone=work
success
#驗證添加
[root@localhost ~]# firewall-cmd --list-all --zone=public
修改:
#修改默認區域
[root@localhost ~]# firewall-cmd --set-default-zone=work
success
#修改網絡接口所屬區域
[root@localhost ~]# firewall-cmd --change-interface=ens33 --zone=internal
success
[root@localhost ~]# firewall-cmd --change-zone=ens33 --zone=external
success
#追加指定區域的放行源地址
[root@localhost ~]# firewall-cmd --change-source=192.168.2.0/24 --zone=work
success
刪除:
#刪除指定服務到指定區域
[root@localhost ~]# firewall-cmd --remove-service=http --zone=public
success
#刪除端口到指定區域
[root@localhost ~]# firewall-cmd --remove-port=80/tcp --zone=public
success
#刪除指定協議到指定區域
[root@localhost ~]# firewall-cmd --remove-protocol=ah --zone=public
success
#刪除ICMP阻塞類型到指定區域
[root@localhost ~]# firewall-cmd --remove-icmp-block=echo-request --
zone=public
success
#刪除指定網絡接口到指定區域
[root@localhost ~]# firewall-cmd --remove-interface=ens33 --zone=work
success
#刪除指定區域的放行源地址
[root@localhost ~]# firewall-cmd --remove-source=192.168.1.0/24 --zone=work
success
#刪除指定區域的放行源端口
[root@localhost ~]# firewall-cmd --remove-source-port=999/tcp --zone=work
success
#刪除轉發端口到指定區域
[root@localhost ~]# firewall-cmd --remove-forwardport=port=8080:proto=tcp:toport=80:toremover=192.168.115.115 --zone=work
success
#刪除地址轉換功能到指定區域
[root@localhost ~]# firewall-cmd --remove-masquerade --zone=work
success
#驗證刪除
[root@localhost ~]# firewall-cmd --list-all --zone=public
保存規則:
#逐行規則保存
[root@localhost ~]# firewall-cmd --remove-masquerade --zone=work --permanent
#一次性保存所有規則
[root@localhost zones]# firewall-cmd --runtime-to-permanent
success
#保存的規則存儲路徑
/etc/firewalld/zones
案例:
禁止外部主機ping本機
#本機IP:192.168.115.129 ens33 NAT
#外部IP:192.168.115.128
#防火墻配置
[root@localhost ~]# firewall-cmd --add-interface=ens33 --zone=work
success
[root@localhost ~]# firewall-cmd --add-icmp-block=echo-request --zone=work
success
#驗證
[root@localhost ~]# ping -c 4 192.168.115.129
PING 192.168.115.129 (192.168.115.129) 56(84) bytes of data.
From 192.168.115.129 icmp_seq=1 Destination Host Prohibited
From 192.168.115.129 icmp_seq=2 Destination Host Prohibited
From 192.168.115.129 icmp_seq=3 Destination Host Prohibited
From 192.168.115.129 icmp_seq=4 Destination Host Prohibited
--- 192.168.115.129 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3001ms
允許外部主機訪問本機的http服務
#本機IP:192.168.80.128 ens34 vmnet3
#外部IP:192.168.80.129
#######環境配置 開始#########
##本機安裝httpd服務
#改變SElinux的規則
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install -y httpd
##啟動httpd服務
[root@localhost ~]# systemctl start httpd
##修改httpd服務的監聽IP
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
Listen 192.168.80.128:80
##重啟httpd服務
[root@localhost ~]# systemctl restart httpd
##驗證服務監聽狀態
[root@localhost ~]# netstat -naptu | grep :80
tcp 0 0 192.168.80.128:80 0.0.0.0:* LISTEN
5884/httpd
#######環境配置 結束#########
#防火墻配置
[root@localhost ~]# firewall-cmd --change-interface=ens34 --zone=dmz
succes
##客戶端驗證訪問##
[root@localhost ~]# curl 192.168.80.128
curl: (7) Failed connect to 192.168.80.128:80; 拒絕連接
##發現無法訪問###
#服務端查看dmz區域信息
[root@localhost ~]# firewall-cmd --list-all --zone=dmz
dmz (active)
target: default
icmp-block-inversion: no
interfaces: ens34
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
#發現沒有放心http服務
#配置dmz區域http服務放行策略
[root@localhost ~]# firewall-cmd --add-service=http --zone=dmz
success
dmz (active)
target: default
icmp-block-inversion: no
interfaces: ens34
sources:
services: http ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
允許外部主機訪問本機的某個端口號
#前置環境如上
#防火墻配置
[root@localhost ~]# firewall-cmd --add-port=801/tcp --zone=dmz
success
#放行服務的本質實際上是放行了該服務的默認端口號!!!
#假如服務改變了監聽端口號,只需放行對應的端口號即可!!!
#客戶端驗證
[root@localhost ~]# curl 192.168.80.128:801