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.防火牆使用區域管理
阻塞區域(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/”目錄下。
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.防火牆區域配置策略
開始之前確認防火牆是開啟的狀態
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轉發伺服器實現上網(前提是中間路由可達)。