CentOS7 防火牆firewall-cmd命令配置
阿新 • • 發佈:2020-12-26
技術標籤:LinuxCentos7防火牆firewall-cmd
firewalld(Dynamic Firewall Manager of Linux systems,Linux系統的動態防火牆管理器)服務是預設的防火牆配置管理工具。
firewall-cmd 是 firewalld的字元介面管理工具,firewalld是centos7的一大特性,最大的好處有兩個:支援動態更新,不用重啟服務;第二個就是加入了防火牆的“zone”概念。
firewalld自身並不具備防火牆的功能,而是和iptables一樣需要通過核心的netfilter來實現,也就是說firewalld和 iptables一樣,他們的作用都是用於維護規則,而真正使用規則幹活的是核心的netfilter。
1、firewall-cmd 主要引數
--get-default-zone 查詢預設的區域名稱 --set-default-zone=<區域名稱> 設定預設的區域,使其永久生效 --get-zones 顯示可用的區域 --get-services 顯示預先定義的服務 --get-active-zones 顯示當前正在使用的區域與網絡卡名稱 --add-source= 將源自此 IP 或子網的流量導向指定的區域 --remove-source= 不再將源自此 IP 或子網的流量導向某個指定區域 --add-interface=<網絡卡名稱> 將源自該網絡卡的所有流量都導向某個指定區域 --change-interface=
<網絡卡名稱> 將某個網絡卡與區域進行關聯 --list-all 顯示當前區域的網絡卡配置引數、資源、埠以及服務等資訊 --list-all-zones 顯示所有區域的網絡卡配置引數、資源、埠以及服務等資訊 --add-service=<服務名> 設定預設區域允許該服務的流量 --add-port=<埠號/協議> 設定預設區域允許該埠的流量 --remove-service=<服務名> 設定預設區域不再允許該服務的流量 --remove-port=<埠號/協議> 設定預設區域不再允許該埠的流量 --reload 讓“永久生效”的配置規則立即生效,並覆蓋當前的配置規則 --panic-on 開啟應急狀況模式 --panic-off 關閉應急狀況模式
2、常用命令
# 檢視設定:
firewall-cmd --state # 顯示狀態
firewall-cmd --get-active-zones # 檢視區域資訊
firewall-cmd --get-zone-of-interface=eth0 # 檢視指定介面所屬區域
firewall-cmd --panic-on # 拒絕所有包
firewall-cmd --panic-off # 取消拒絕狀態
firewall-cmd --query-panic # 檢視是否拒絕
firewall-cmd --reload # 更新防火牆規則
firewall-cmd --complete-reload
# 兩者的區別就是第一個無需斷開連線,就是firewalld特性之一動態新增規則,第二個需要斷開連線,類似重啟服務
# 將介面新增到區域,預設介面都在public
firewall-cmd --zone=public --add-interface=eth0
# 永久生效再加上 --permanent 然後reload防火牆
# 設定預設介面區域,立即生效無需重啟
firewall-cmd --set-default-zone=public
# 檢視所有開啟的埠:
firewall-cmd --zone=dmz --list-ports
# 加入一個埠到區域:
firewall-cmd --zone=dmz --add-port=8080/tcp
# 若要永久生效方法同上
# 開啟一個服務,類似於將埠視覺化,服務需要在配置檔案中新增,/etc/firewalld 目錄下有services資料夾,這個不詳細說了,詳情參考文件
firewall-cmd --zone=work --add-service=smtp
# 移除服務
firewall-cmd --zone=work --remove-service=smtp
# 顯示支援的區域列表
firewall-cmd --get-zones
# 設定為家庭區域
firewall-cmd --set-default-zone=home
# 檢視當前區域
firewall-cmd --get-active-zones
# 設定當前區域的介面
firewall-cmd --get-zone-of-interface=enp03s
# 顯示所有公共區域(public)
firewall-cmd --zone=public --list-all
# 臨時修改網路介面(enp0s3)為內部區域(internal)
firewall-cmd --zone=internal --change-interface=enp03s
# 永久修改網路介面enp03s為內部區域(internal)
firewall-cmd --permanent --zone=internal --change-interface=enp03s
服務管理
# 顯示服務列表
Amanda, FTP, Samba和TFTP等最重要的服務已經被FirewallD提供相應的服務,可以使用如下命令檢視:
firewall-cmd --get-services
# 允許SSH服務通過
firewall-cmd --enable service=ssh
# 禁止SSH服務通過
firewall-cmd --disable service=ssh
# 開啟TCP的8080埠
firewall-cmd --enable ports=8080/tcp
# 臨時允許Samba服務通過600秒
firewall-cmd --enable service=samba --timeout=600
# 顯示當前服務
firewall-cmd --list-services
# 新增HTTP服務到內部區域(internal)
firewall-cmd --permanent --zone=internal --add-service=http
firewall-cmd --reload # 在不改變狀態的條件下重新載入防火牆
埠管理
# 開啟443/TCP埠
firewall-cmd --add-port=443/tcp
# 永久開啟3690/TCP埠
firewall-cmd --permanent --add-port=3690/tcp
# 永久開啟埠需要reload一下,reload後臨時開啟的埠就失效了
firewall-cmd --reload
# 檢視防火牆,新增的埠也可以看到
firewall-cmd --list-all
直接模式
# FirewallD包括一種直接模式,使用它可以完成一些工作,例如開啟TCP協議的9999埠
firewall-cmd --direct -add-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j ACCEPT
firewall-cmd --reload
控制埠 / 服務
可以通過兩種方式控制埠的開放,一種是指定埠號另一種是指定服務名。雖然開放 http 服務就是開放了 80 埠,但是還是不能通過埠號來關閉,也就是說通過指定服務名開放的就要通過指定服務名關閉;通過指定埠號開放的就要通過指定埠號關閉。
firewall-cmd --add-service=mysql # 開放mysql埠
firewall-cmd --remove-service=http # 阻止http埠
firewall-cmd --list-services # 檢視開放的服務
firewall-cmd --add-port=3306/tcp # 開放通過tcp訪問3306
firewall-cmd --remove-port=80tcp # 阻止通過tcp訪問3306
firewall-cmd --add-port=233/udp # 開放通過udp訪問233
firewall-cmd --list-ports # 檢視開放的埠
偽裝 IP
firewall-cmd --query-masquerade # 檢查是否允許偽裝IP
firewall-cmd --add-masquerade # 允許防火牆偽裝IP
firewall-cmd --remove-masquerade# 禁止防火牆偽裝IP
埠轉發
埠轉發可以將指定地址訪問指定的埠時,將流量轉發至指定地址的指定埠。轉發的目的如果不指定 ip 的話就預設為本機,如果指定了 ip 卻沒指定埠,則預設使用來源埠。 如果配置好埠轉發之後不能用,可以檢查下面兩個問題:
比如我將 80 埠轉發至 8080 埠,首先檢查本地的 80 埠和目標的 8080 埠是否開放監聽了
其次檢查是否允許偽裝 IP,沒允許的話要開啟偽裝 IP
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 # 將80埠的流量轉發至8080
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1 # 將80埠的流量轉發至192.168.0.1
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 將80埠的流量轉發至192.168.0.1的8080埠
當我們想把某個埠隱藏起來的時候,就可以在防火牆上阻止那個埠訪問,然後再開一個不規則的埠,之後配置防火牆的埠轉發,將流量轉發過去。
埠轉發還可以做流量分發,一個防火牆拖著好多臺執行著不同服務的機器,然後用防火牆將不同埠的流量轉發至不同機器。