Firewalld防火牆安全、基本指令、區域配置
安全
1.按OSI七層模型
物理層
數據鏈路層
網絡層
傳輸層
會話層
表示層
應用層
安全公司:
安全狗
知道創宇
牛盾雲
物理環境:
物理環境:
硬件安全 機櫃上鎖,避免電源被拔(UPS, 可以雙電源),網線被拔(打標簽) 溫度,硬件檢查
網絡安全 (硬件防火牆(防DOS),軟件防火牆 (iptables/firewalld/selinux (僅允許公司的IP地址能連接服務器的22端口))做規則限制
服務安全 更新有漏洞的版本 nginx mysql redis... 所有主機都沒有公網ip,大大的降低被攻擊的風險
系統安全 沒有公網ip,ssh安全(修改ssh默認端口號),權限控制(禁用root遠程登錄)。
web nginx,apache必須對外,除了80/443端口,其他都不要對外waf防火牆 防DDOS攻擊 漏洞注入 SQL注入
雲環境
硬件 無需關心
網絡 硬件防火牆 --> 高防DDOS 軟件防火牆---->安全組
系統 SSH安全、權限控制、更新補丁、安騎士、堡壘機
web SSL、阿里雲提供WAF、雲安全中心
數據 備份 敏感數據保護
安全公司:
安全狗 www.safe.dog
牛盾雲www.newdefend.com
知道創宇
牛盾雲
知道創宇
安全狗
1. 防火牆安全基本概述
RHEL/CentOS 7系統中集成了多款防火牆管理工具,其中Firewalld(Dynamic Firewall Manager of Linux systems, Linux系統的動態防火牆管理器)服務是默認的防火牆配置管理工具,它擁有基於CLI(命令行界面)和基於GUI(圖形用戶界面)的兩種管理方式。
那么相較於傳統的Iptables防火牆,Firewalld支持動態更新,並加入了區域zone的概念。簡單來說,區域就是Firewalld預先准備了幾套防火牆策略集合(策略模板),用戶可以根據生產場景的不同而選擇合適的策略集合,從而實現防火牆策略之間的快速切換。
Firewalld規則配置,從外訪問服務器內部如果沒有添加規則默認是阻止,從服務器內部訪問服務器外部默認是允許
需要注意的是Firewalld中的區域與接口.
一個網卡僅能綁定一個區域,但一個區域可以綁定多個網卡。還可以根據來源的地址設定不同的規則。
比如:所有人能訪問80端口,但只有公司的IP才可以訪問22端口。
2. 防火牆使用區域管理
划分不同的區域,制定出不同區域之間的訪問控制策略來控制不同程序區域間傳送的數據流。
區域 | 默認規則策略 |
---|---|
trusted | 允許所有的數據包流入與流出 |
home | 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、mdns、ipp-client、amba-client與dhcpv6-client服務相關,則允許流量 |
internal | 等同於home區域 |
work | 拒絕流入的流量,除非與流出的流量數相關;而如果流量與ssh、ipp-client與dhcpv6-client服務相關,則允許流量 |
public | 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、dhcpv6-client服務相關,則允許流量 |
external | 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh服務相關,則允許流量 |
dmz | 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh服務相關,則允許流量 |
block | 拒絕流入的流量,除非與流出的流量相關 |
drop | 拒絕流入的流量,除非與流出的流量相關 |
3. 防火牆基本指令參數
Firewall-cmd命令分類列表
參數 | 作用 |
---|---|
zone區域相關指令 | |
--get-default-zone | 查詢默認的區域名稱 |
--set-default-zone=<區域名稱> | 設置默認的區域,使其永久生效 |
--get-active-zones | 顯示當前正在使用的區域與網卡名稱 |
--get-zones | 顯示總共可用的區域 |
--new-zone= | 新增區域 |
--delete-zone= | 刪除區域 |
services服務相關指令 | |
--get-services | 顯示預先定義的服務 |
--add-service=<服務名> | 設置默認區域允許該服務的流量 |
--remove-service=<服務名> | 設置默認區域不再允許該服務的流量 |
--list-services | 顯示默認區域允許的服務 |
Port端口相關指令 | |
--add-port=<端口號/協議> | 設置默認區域允許該端口的流量 |
--remove-port=<端口號/協議> | 設置默認區域不再允許該端口的流量 |
--list-port | 顯示默認區域允許的端口 |
Interface網卡相關指令 | |
--get-zone-of-interface=<網卡名稱> | 查看接口在哪個區域 |
--add-interface=<網卡名稱> | 將源自該網卡的所有流量都導向某個指定區域 |
--remove-interface=<網卡名稱> | 刪除接口 |
--change-interface=<網卡名稱> | 將接口與區域進行關聯 |
地址源相關命令 | |
--add-source= | 添加來源地址 |
--remove-source= | 移除來源地址 |
其他相關指令 | |
--list-all | 顯示當前區域的網卡配置參數、資源、端口以及服務等信息 |
--reload | 讓"永久生效"的配置規則立即生效,並覆蓋當前的配置規則 |
--panic-on | 阻斷一切網絡連接 |
--panic-off | 恢復網絡連接 |
4.防火牆區域配置策略
1). 為了能正常使用Firwalld服務和相關工具去管理防火牆,必須啟Firewalld服務,同時關閉以前舊防火牆相關服務,同時需要注意Firewalld的規則分兩種狀態:
runtime運行時: 修改規則馬上生效,但是是臨時生效 [不建議]
permanent持久配置: 修改后需要reload重載才會生效 [強烈推薦]
#禁用舊版防火牆服務
[root@firewalld ~]# systemctl mask iptables
[root@firewalld ~]# systemctl mask ip6tables
#啟動firewalld防火牆, 並加入開機自啟動服務
[root@firewalld ~]# systemctl start firewalld
[root@firewalld ~]# systemctl enable firewalld
2). Firewalld啟動后,我們需要知道使用的是什么區域,區域的規則明細又有哪些?
#默認當前使用的zone
[root@firewalld ~]# firewall-cmd --get-default-zone
public
#查看當前區域的規則有哪些
[root@firewalld ~]# firewall-cmd --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
#顯示所有的zone
[root@web01 ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
#詳細的顯示所有zone的默認規則
[root@web01 ~]# firewall-cmd --list-all-zones
block
target: %%REJECT%%
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
設置zone
#設置默認的區域
[root@web01 ~]# firewall-cmd --set-default-zone=trusted
success
#查看默認的區域
[root@web01 ~]# firewall-cmd --get-default-zone
trusted
#顯示當前活動的區域及接口
[root@web01 ~]# firewall-cmd --get-active-zone
public
interfaces: eth0 eth1
#添加一個新的zone
[root@web01 ~]# firewall-cmd --new-zone=test --permanent
success
#查看所有的zone
[root@web01 ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
#重啟firewalld的設置規則
[root@web01 ~]# firewall-cmd --reload
success
#查看所有的zone
[root@web01 ~]# firewall-cmd --get-zones
block dmz drop external home internal public test trusted work
#刪除zone
[root@web01 ~]# firewall-cmd --delete-zone=test --permanent
success
[root@web01 ~]# firewall-cmd --get-zones
block dmz drop external home internal public test trusted work
#重啟才會生效
[root@web01 ~]# firewall-cmd --reload
success
[root@web01 ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
3).使用Firewalld中各個區域規則結合,當前默認區域拒絕所有的流量,但如果來源IP是10.0.0.0/24網段則允許。
#1.臨時移除策略
[root@firewalld ~]# firewall-cmd --remove-service=ssh --remove-service=dhcpv6-client
success
#或者:
[root@web01 ~]# firewall-cmd --remove-service={ssh,dhcpv6-client}
success
#2.添加來源是10.0.0.0/24網段,將其加入白名單
[root@firewalld ~]# firewall-cmd --add-source=10.0.0.0/24 --zone=trusted
success
#3.檢查當前活動的區域及接口
[root@web01 ~]# firewall-cmd --get-active-zone
public
interfaces: eth0 eth1
trusted
sources: 10.0.0.0/24
[root@web01 ~]# firewall-cmd --reload #重啟服務之后,臨時生效的失效
success
[root@web01 ~]# firewall-cmd --get-active-zone
public
interfaces: eth0 eth1
拒絕10.0.0.0/24網段的所有服務
[root@web01 ~]# firewall-cmd --add-source=10.0.0.0/24 --zone=drop
success
[root@web01 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@web01 ~]# firewall-cmd --get-active-zone
drop
sources: 10.0.0.0/24
public
interfaces: eth0 eth1
添加多個服務
#添加多個服務
[root@web01 ~]# firewall-cmd --add-service={https,mysql,redis}
success
[root@web01 ~]# firewall-cmd --list-services
ssh http https mysql redis
移除多個服務
[root@web01 ~]# firewall-cmd --remove-service={http,https,mysql,redis}
success
[root@web01 ~]# firewall-cmd --list-services
ssh
4). 查詢public區域yi是否允許請求SSH、HTTPS協議的流量
[root@firewalld ~]# firewall-cmd --zone=public --query-service=ssh
no
[root@firewalld ~]# firewall-cmd --zone=public --query-service=https
no
5). 開啟public區域服務的流量
[root@firewalld ~]# firewall-cmd --zone=public --add-service=ssh
success
[root@firewalld ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@firewalld ~]# firewall-cmd --zone=public --remove-service=ssh
success
[root@firewalld ~]# firewall-cmd --zone=public --query-service=ssh
no
6). 修改其他區域的服務流量限制
[root@firewalld ~]# firewall-cmd --zone=trusted --query-service=ssh
no
[root@firewalld ~]# firewall-cmd --zone=trusted --add-service=ssh
success
[root@firewalld ~]# firewall-cmd --zone=trusted --query-service=ssh
yes
7). 最后將配置恢復至默認規則,--reload參數僅能恢復臨時添加的規則策略
[root@firewalld ~]# firewall-cmd --reload
success
[root@firewalld ~]# firewall-cmd --zone=public --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules: