1. 程式人生 > 其它 >CentOS7 防火牆firewall-cmd命令配置

CentOS7 防火牆firewall-cmd命令配置

技術標籤: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埠

當我們想把某個埠隱藏起來的時候,就可以在防火牆上阻止那個埠訪問,然後再開一個不規則的埠,之後配置防火牆的埠轉發,將流量轉發過去。
埠轉發還可以做流量分發,一個防火牆拖著好多臺執行著不同服務的機器,然後用防火牆將不同埠的流量轉發至不同機器。