firewall


翻譯

  public (active)                     公共(防火牆)
  target: default                     目標: 默認
  icmp-block-inversion: no            ICMP塊反演:NO
  interfaces: eth0 eth1               接口
  sources:						               資料來源
  services: ssh dhcpv6-client         服務  ssh dhcpv6 客戶端
  ports:                               端口
  protocols:                           協議
  masquerade: no                       偽裝 ip
  forward-ports:                       前向端口  
  source-ports:                        源端口
  icmp-blocks:                          ICMP塊
  rich rules:                           豐富的規則   
  default				                       	默認
  trusted								               可信的
  drop                                   忘掉,停止,丟掉不管
  rule 							                    規則
  source						                    來源
  destination						                目的地
  service								                服務
  forward-port					                 前向端口
  audit										              審計
  accept                					       接受
  reject									              拒絕
  family								                家庭
  invert    							              使…前后倒置;使反轉
  protocol							                協議
  forward   						                向前;前進地
	rich								                 富有的
	
  • [1.防火牆安全基本概述]
  • [2.防火牆使用區域管理]
  • [3.防火牆基本指令參數]
  • [4.防火牆區域配置策略]
  • [5.防火牆端口訪問策略]
  • [6.防火牆服務訪問策略]
  • [7.防火牆端口轉發策略]
  • [8.防火牆富規則策略]
  • [9.防火牆開啟內部上網]

1.防火牆安全基本概述

RHEL/CentOS 7系統中集成了多款防火牆管理工具,其中firewalld(Dynamic Firewall Manager of Linux systems, Linux系統的動態防火牆管理器)服務是默認的防火牆配置管理工具,它擁有基於CLI(命令行界面)和基於GUI(圖形用戶界面)的兩種管理方式。

![img](day65 firewall.assets/15230185799633.png)

Firewalld規則配置

從外訪問服務器內部如果沒有添加規則默認是阻止
從服務器內部訪問服務器外部默認是允許

![img](day65 firewall.assets/15319190627314.jpg)

那么相較於傳統的Iptables防火牆,firewalld支持動態更新,並加入了區域zone的概念。
簡單來說,區域就是firewalld預先准備了幾套防火牆策略集合(策略模板),用戶可以根據生產場景的不同而選擇合適的策略集合,從而實現防火牆策略之間的快速切換。

![img](day65 firewall.assets/15230251111120.jpg)

注意:Firewalld中的區域與接口

一個zone區域僅能綁定一個網卡, 設定不同的匹配規則
一個zone區域又可以針對不同的源地址設定不同的規則

Firewalld相關配置文件

默認定義的模板配置文件/usr/lib/firewalld
存儲規則配置文件 /etc/firewalld/

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.防火牆基本指令參數

為了能夠使用firwalld服務和相關工具去管理防火牆,必須啟動firwalld服務,並且需要禁用以前舊防火牆相關服務, firewall-config(圖形界面), firewall-cmd
firewalld的規則分兩種狀態:

runtime運行時: 修改規則馬上生效,但是臨時生效 [不建議]
permanent持久配置: 修改后需要reload重載才會生效 [強烈推薦]

firewall-cmd命令分類

參數 作用
zone區域相關指令
--get-default-zone 查詢默認的區域名稱
--set-default-zone=<區域名稱> 設置默認的區域,使其永久生效
--get-active-zones 顯示當前正在使用的區域與網卡名稱
--get-zones 顯示總共可用的區域
--new-zone= 新增區域
services服務相關指令
--get-services 顯示預先定義的服務
--add-service=<服務名> 設置默認區域允許該服務的流量
--remove-service=<服務名> 設置默認區域不再允許該服務的流量
Port端口相關指令
--add-port=<端口號/協議> 設置默認區域允許該端口的流量
--remove-port=<端口號/協議> 設置默認區域不再允許該端口的流量
Interface網卡相關指令
--add-interface=<網卡名稱> 將源自該網卡的所有流量都導向某個指定區域
--change-interface=<網卡名稱> 將某個網卡與區域進行關聯
其他相關指令
--list-all 顯示當前區域的網卡配置參數、資源、端口以及服務等信息
--reload 讓“永久生效”的配置規則立即生效,並覆蓋當前的配置規則

4.防火牆區域配置策略

1.為了能正常使用firwalld服務和相關工具去管理防火牆,必須啟動firwalld服務, 同時關閉以前舊防火牆相關服務

# 禁用舊版防火牆服務
[root@Firewalld ~]# systemctl mask iptables
[root@Firewalld ~]# systemctl mask ip6tables

# 啟動firewalld防火牆, 並加入開機自啟動服務
[root@Firewalld ~]# systemctl start firewalld
[root@Firewalld ~]# systemctl enable firewalld

2.zone區域相關指令

//查看當前默認區域
[root@Firewalld ~]# firewall-cmd --get-default-zone 
public

//查看當前活躍的區域
[root@Firewalld ~]# firewall-cmd --get-active-zone
public
  interfaces: eth0 eth1 

3.使用firewalld中各個區域規則結合

1.設定默認區域為drop(拒絕所有)
2.設置白名單IP訪問,將源10.0.0.0/24網段加入trusted區域

//將當前默認區域修改為drop
[root@Firewalld ~]# firewall-cmd --set-default-zone=drop

//將網絡接口關聯至drop區域
[root@Firewalld ~]# firewall-cmd --permanent  --change-interface=eth0 --zone=drop

//將10.0.0.0/24網段加入trusted白名單
[root@Firewalld ~]# firewall-cmd --permanent --add-source=10.0.0.0/24 --zone=trusted
[root@Firewalld ~]# firewall-cmd --reload
success

//查看當前處於活動的區域
[root@Firewalld ~]# firewall-cmd --get-active-zones
drop    # 默認區域, eth0接口流量都由drop區域過濾
  interfaces: eth0
trusted # 數據包的源IP是10.0.0.0網段走trusted區域
  sources: 10.0.0.0/24

4.使用firewalld中各個區域規則結合

1.設定來源IP是192.168.20.0/24網段允許訪問http
2.設定來源IP是10.0.0.0/24 僅允許訪問ssh服務
3.其他網段走默認區域

#1.允許10.0.0.1IP地址能訪問ssh
[root@Firewalld ~]# firewall-cmd --add-source=10.0.0.0/24 --permanent --zone=public
[root@Firewalld ~]# firewall-cmd --reload

#2.將192.168.20.0網段加入白名單
[root@Firewalld ~]# firewall-cmd --add-source=192.168.20.0/24 --permanent --zone=trusted
[root@Firewalld ~]# firewall-cmd --reload

[root@Firewalld ~]# firewall-cmd --get-active-zone
drop
  interfaces: eth0 eth1
public
  sources: 10.0.0.1/32
trusted
  sources: 192.168.20.0/24

5.查詢firewald指定區域的明細

[root@Firewalld ~]# firewall-cmd  --list-all --zone=drop
drop (active)
  target: DROP
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources:
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

[root@Firewalld ~]# firewall-cmd  --list-all --zone=trusted
trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces:
  sources: 10.0.0.0/24
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

6.查詢public區域是否允許請求SSH HTTPS協議的流量

[root@Firewalld ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@Firewalld ~]# firewall-cmd --zone=public --query-service=https
no

7.最后將配置恢復至默認規則

[root@Firewalld ~]# firewall-cmd --set-default-zone=public
[root@Firewalld ~]# firewall-cmd --remove-source=10.0.0.0/24 --zone=public --permanent
[root@Firewalld ~]# firewall-cmd --remove-source=192.168.20.0/24  --zone=trusted --permanent
[root@Firewalld ~]# firewall-cmd --reload

5.防火牆端口訪問策略

1.配置防火牆, 訪問8080/tcp 8080/udp端口的流量策略設置為永久允許, 並立即生效

#1.添加運行規則
[root@Firewalld ~]# firewall-cmd --permanent --add-port=8080/udp --add-port=8080/tcp
#2.重載配置生效
[root@Firewalld ~]# firewall-cmd --reload
success
#3.檢查開放的端口
[root@Firewalld ~]# firewall-cmd --list-ports
8080/tcp 8080/udp

2.配置防火牆, 訪問8080/udp的端口流量設置為永久拒絕,並立即生效

[root@Firewalld ~]# firewall-cmd --permanent --remove-port=8080/udp
success
[root@Firewalld ~]# firewall-cmd --reload && firewall-cmd --list-ports
success
8080/tcp

6.防火牆服務訪問策略

1.配置防火牆, 允許請求http https協議的流量設置為永久允許,並立即生效

[root@Firewalld ~]# firewall-cmd --permanent --add-service=http --add-service=https
success
# 重啟加載生效
[root@Firewalld ~]# firewall-cmd --reload
success
# 檢查相關配置
[root@Firewalld ~]# firewall-cmd --list-services
ssh dhcpv6-client 'http https'

2.配置防火牆, 允許請求php-fpm服務的流量設置為永久允許,並立即生效

#1.拷貝相應的xml文件
[root@Firewalld ~]# cd /usr/lib/firewalld/services/
[root@Firewalld services]# cp http.xml php-fpm.xml

#2.修改端口為9000
[root@Firewalld services]# cat php-fpm.xml 
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>PHP-FPM</short>
  <description> php-fpm </description>
  <port protocol="tcp" port="9000"/>
</service>

#3.防火牆增加規則
[root@Firewalld ~]# firewall-cmd --permanent --add-service=php-fpm
[root@Firewalld ~]# firewall-cmd --list-services
ssh dhcpv6-client 'http https php-fpm'

#4.安裝php-fpm, 並監聽9000端口
[root@Firewalld ~]# yum install php-fpm -y
[root@Firewalld ~]# systemctl start php-fpm

#5.測試驗證
~ telnet  10.0.0.61 9000
Trying 10.0.0.61...
Connected to 10.0.0.61.
Escape character is '^]'.

3.配置防火牆, 請求https協議的流量設置為永久拒絕,並立即生效

[root@Firewalld ~]# firewall-cmd --permanent --remove-service=https --remove-service=php-fpm --zone=public
success
[root@Firewalld ~]# firewall-cmd --reload
success

//檢查當前活動服務
[root@Firewalld ~]# firewall-cmd --list-service
ssh dhcpv6-client http

7.防火牆端口轉發策略

端口轉發是指傳統的目標地址映射,實現外網訪問內網資源

流量轉發命令格式為

firewall-cmd --permanent --zone=<區域> --add-forward-port=port=<源端口號>:proto=<協議>:toport=<目標端口號>:toaddr=<目標IP地址>

1.轉發本機555/tcp端口的流量至22/tcp端口,要求當前和長期有效

[root@Firewalld ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=555:proto=tcp:toport=22:toaddr=10.0.0.61
success
[root@Firewalld ~]# firewall-cmd --reload
success

2.移除本機轉發的555/tcp端口策略, 要求當前和長期有效

[root@Firewalld ~]# firewall-cmd --remove-forward-port=port=555:proto=tcp:toport=22:toaddr=10.0.0.61
success
[root@Firewalld ~]# firewall-cmd --reload
success

3.如果需要將本地的10.0.0.61:6666端口轉發至后端10.0.0.9:22端口

#1.開啟IP偽裝
[root@Firewalld ~]# firewall-cmd --add-masquerade --permanent

#2.配置轉發
[root@Firewalld ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=6666:proto=tcp:toport=22:toaddr=10.0.0.9
[root@Firewalld ~]# firewall-cmd --reload

8.防火牆富規則策略

firewalld中的富規則表示更細致、更詳細的防火牆策略配置,它可以針對系統服務、端口號、源地址和目標地址等諸多信息進行更有針對性的策略配置, 優先級在所有的防火牆策略中也是最高的。

1.富規則幫助手冊

man firewall-cmd
man firewalld.richlanguage
           rule
             [source]
             [destination]
             service|port|protocol|icmp-block|masquerade|forward-port
             [log]
             [audit]
             [accept|reject|drop]

rule [family="ipv4|ipv6"]
source address="address[/mask]" [invert="True"]
destination address="address[/mask]" invert="True"
service name="service name"
port port="port value" protocol="tcp|udp"
protocol value="protocol value"
forward-port port="port value" protocol="tcp|udp" to-port="port value" to-addr="address"
log [prefix="prefix text"] [level="log level"] [limit value="rate/duration"]
accept | reject [type="reject type"] | drop


//區里的富規則按先后順序匹配,按先匹配到的規則生效。
--add-rich-rule='<RULE>'    //在指定的區添加一條富規則
--remove-rich-rule='<RULE>' //在指定的區刪除一條富規則
--query-rich-rule='<RULE>'  //找到規則返回0 ,找不到返回1
--list-rich-rules       //列出指定區里的所有富規則
--list-all 和 --list-all-zones 也能列出存在的富規則

1.允許10.0.0.0/24網段中10.0.0.1主機訪問http服務, 其他同網段主機無法訪問,當前和永久生效

#1.加入10.0.0.0/24所有主機至public區域 (可省略,只要public是當前活動active區域就行)
[root@m01 ~]# firewall-cmd --permanent --add-source=10.0.0.0/24 --zone=public

#2.僅允許public中的10.0.0.1主機訪問http
[root@m01 ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.0.0.1/32 port port=80 protocol=tcp accept'

#3.重載firewalld防火牆
[root@m01 ~]# firewall-cmd --reload

2.拒絕10.0.0.0/24網段中的10.0.0.9主機發起的ssh請求, 當前和永久生效

[root@m01 ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.0.0.9/32 service name=ssh drop'

[root@m01 ~]# firewall-cmd --reload
success

3.將遠程10.0.0.1主機請求firewalld5551端口,轉發至firewalld防火牆的22端口

[root@m01 ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.0.0.1/32 forward-port port=5551 protocol=tcp to-port=22'
[root@m01 ~]# firewall-cmd --reload
success

4.將遠程10.0.0.1主機請求firewalld6661端口,轉發至后端主機10.0.0.922端口

[root@m01 ~]# firewall-cmd --add-masquerade --permanent
[root@m01 ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.0.0.1/32 forward-port port=6661 protocol=tcp to-port=22 to-addr=10.0.0.9'
success

[root@m01 ~]# firewall-cmd --reload

9.防火牆開啟內部上網

在指定的帶有公網IP的實例上操作,啟動NAT網關的SNAT源地址轉換功能。

1.firewalld防火牆開啟ip偽裝, 實現地址轉換

# 網卡默認是在public的zones內,也是默認zones。永久添加源地址轉換功能
[root@m01 ~]# firewall-cmd --add-masquerade --permanent
[root@m01 ~]# firewall-cmd --reload

2.客戶端配置共享上網

#1.修改網關指向firewalld
[root@web03 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
GATEWAY=172.16.1.61

#2.填寫對應的dns服務器
[root@web03 ~]# cat /etc/resolv.conf
nameserver 223.5.5.5

#3.重啟網絡
[root@web03 ~]# nmcli connection reload
[root@web03 ~]# nmcli connection down eth1 && nmcli connection up eth1

#4.測試網絡
[root@web03 ~]# ping baidu.com
PING baidu.com (123.125.115.110) 56(84) bytes of data.
64 bytes from 123.125.115.110 (123.125.115.110): icmp_seq=1 ttl=127 time=9.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM