1. 程式人生 > >Firewalld 用法解析

Firewalld 用法解析

其實還是我寫的啦 https://www.jianshu.com/p/3444d9413461

1.防火牆firewall的基本概述

現在的RedHat/CentOS7版本預設都使用firewall防火牆了,firewall的配方法大致可以分為圖形化和命令列。firewalld跟iptables比起來,不好的地方是每個服務都需要去設定才能放行,因為預設是拒絕。而iptables裡預設是每個服務是允許,需要拒絕的才去限制。
firewalld自身並不具備防火牆的功能,而是和iptables一樣需要通過核心的netfilter來實現,也就是說firewalld和 iptables一樣,他們的作用都是用於維護規則,而真正使用規則幹活的是核心的netfilter,只不過firewalld和iptables的結構以及使用方法不一樣罷了。
wiki百科↓
https://fedoraproject.org/wiki/Firewalld

2.防火牆使用區域管理

image.png

阻塞區域(block):任何傳入的網路資料包都將被阻止。
工作區域(work):相信網路上的其他計算機,不會損害你的計算機。
家庭區域(home):相信網路上的其他計算機,不會損害你的計算機。
公共區域(public):不相信網路上的任何計算機,只有選擇接受傳入的網路連線。
隔離區域(DMZ):隔離區域也稱為非軍事區域,內外網路之間增加的一層網路,起到緩衝作用。對於隔離區域,只有選擇接受傳入的網路連線。
信任區域(trusted):所有的網路連線都可以接受。
丟棄區域(drop):任何傳入的網路連線都被拒絕。
內部區域(internal):信任網路上的其他計算機,不會損害你的計算機。只有選擇接受傳入的網路連線。
外部區域(external):不相信網路上的其他計算機,不會損害你的計算機。只有選擇接受傳入的網路連線。

注:FirewallD的預設區域是public。
firewalld預設提供了九個zone配置檔案:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他們都儲存在“/usr/lib /firewalld/zones/”目錄下。

image.png

3.防火牆基本指令引數

firewall-cmd #是命令列配置
firewall-config #是圖形化配置 預設中文不支援福規則的動作設定需要LANG=C 轉一下英文ASCII環境

firewall -cmd 
1、域zone相關的命令
--get-default-zone  查詢預設的區域名稱
--set-default-zone=<區域名稱>   設定預設的區域
--get-active-zones  顯示當前正在使用的區域與網絡卡名稱
--get-zones 顯示總共可用的區域
--new-zone= 新增區域
2、services管理的命令
--get-services  顯示預先定義的服務
--add-service=<服務名> 設定預設區域允許該服務的流量
--remove-service=<服務名>  設定預設區域不再允許該服務的流量
3、Port相關命令
--add-port=<埠號/協議> 設定預設區域允許該埠的流量
--remove-port=<埠號/協議>  設定預設區域不再允許該埠的流量
4、網絡卡相關的命令
--add-interface=<網絡卡名稱>  將源自該網絡卡的所有流量都導向某個指定區域
--change-interface=<網絡卡名稱>   將某個網絡卡與區域進行關聯
5、檢視所有規則的命令
--list-all  顯示當前區域的網絡卡配置引數、資源、埠以及服務等資訊
加上--permanent 檢視永久生效的配置引數、資源、埠以及服務等資訊
6、過載防火牆的策略 
--reload    讓“永久生效”的配置規則立即生效,並覆蓋當前的配置規則
...

4.防火牆區域配置策略

image.png
開始之前確認防火牆是開啟的狀態

1、zone區域相關指令
//檢視當前預設區域
[[email protected] ~]# firewall-cmd --get-default-zone 
public
//檢視當前活躍的區域
[[email protected] ~]# firewall-cmd --get-active-zone
public
interfaces: eth0 eth1 
//將當前預設區域修改為drop
firewall-cmd --set-default-zone=drop
//將網路介面關聯至drop區域
firewall-cmd --permanent  --change-interface=eth0 --zone=drop
//將192.168.122.0/24網段加入trusted白名單
 firewall-cmd --permanent --add-source=192.168.122.0/24 --zone=trusted
//過載防火牆
 firewall-cmd --reload
success
//檢視當前處於活動的區域
firewall-cmd --get-active-zones
drop    # 預設區域, eth0介面流量都由drop區域過濾
  interfaces: eth0
trusted # 資料包的源IP是192.168.122.0/24網段走trusted區域
  sources: 192.168.122.0/24
2、使用firewalld中各個區域的應用
//允許10.0.0.1IP地址能訪問ssh
 firewall-cmd --add-source=10.0.0.0/24 --permanent --zone=public #預設zone在public
firewall-cmd --reload

//將192.168.20.0網段加入白名單
firewall-cmd --add-source=192.168.20.0/24 --permanent --zone=trusted
firewall-cmd --reload
//檢視設定項
firewall-cmd --get-active-zone
drop
  interfaces: eth0 eth1
public
  sources: 10.0.0.1/32
trusted
  sources: 192.168.20.0/24
3、查詢firewald指定區域的明細
firewall-cmd  --list-all --zone=drop #指明要查的zone 加上--permanent檢視永久生效的區域的明細
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:

4、查詢public區域是否允許請求SSH協議的流量 #對應服務對應狀態
firewall-cmd --zone=public --query-service=ssh
yes

5、恢復預設規則操作
firewall-cmd --set-default-zone=public
firewall-cmd --remove-source=192.168.1.0/24 --zone=public --permanent
firewall-cmd --remove-source=192.168.1.0/24 --zone=trusted --permanent
firewall-cmd --reload

5.防火牆埠訪問策略

1、開放80埠
firewall-cmd --permanent --add-port=80/udp --add-port=80/tcp
firewall-cmd --reload #過載配置生效
firewall-cmd --list-ports #檢查開放的埠
2、配置防火牆, 訪問80udp的埠流量設定為永久拒絕,並立即生效
firewall-cmd --permanent --remove-port=80/udp
firewall-cmd --reload && firewall-cmd --list-ports #過載並檢視

6.防火牆服務訪問策略

1、開放httpd服務
firewall-cmd --permanent --add-service=http --add-service=https
firewall-cmd --reload ; firewall-cmd --list-services # 過載生效並檢視
2、配置防火牆, 請求https協議的流量設定為永久拒絕,並立即生效
firewall-cmd --permanent --remove-service=https 
firewall-cmd --reload ; firewall-cmd --list-services # 過載生效並檢視

7.防火牆埠轉發策略

埠轉發需要用到forward-port

轉發本機80/tcp埠的流量至8080/tcp埠,要求當前和長期有效
firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:to port=8080:toaddr=10.0.0.61
移除轉發
firewall-cmd --remove-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.0.0.61
開啟IP偽裝
firewall-cmd --add-masquerade --permanent #IP地址轉換

8.防火牆富規則策略

到重點了,這裡上面的條目富規則都可實現
具體配置案例查詢firewalld.richlanguage

//區裡的富規則按先後順序匹配,按先匹配到的規則生效。#firewall-cmd ↓
--add-rich-rule='<RULE>'    //在指定的區新增一條富規則
--remove-rich-rule='<RULE>' //在指定的區刪除一條富規則
--query-rich-rule='<RULE>'  //找到規則返回0 ,找不到返回1
--list-rich-rules       //列出指定區裡的所有富規則
--list-all 和 --list-all-zones 也能列出存在的富規則
//在192.168.0.0/24這個段裡可以訪問tftp服務
rule family="ipv4" source address="192.168.0.0/24" service name="tftp" log prefix="tftp" accept
//來自192.168.0.0/24這個段的8080埠資料轉發到本地的80埠
rule family="ipv4" source address="192.168.0.0/24" forward-port to-addr="local" to-port="8080" protocol="tcp" port="80"
//拒絕192.168.2.4這個ip訪問
rule family="ipv4" source address="192.168.2.4" drop
...

9.防火牆開啟內部上網

firewalld防火牆開啟ip偽裝
1、網絡卡預設是在public的zones內,也是預設zones。永久新增源地址轉換功能
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload
2、共享上網
開啟的ip轉發後,相當了一臺本地的nat伺服器。
將client的閘道器指向你配置的ip轉發伺服器的IP。
只要你的ip轉發伺服器可以正常解析公網IP(dns可解析公網地址)。
Clent伺服器就可以藉助IP轉發伺服器實現上網(前提是中間路由可達)。