自學linux——8.firewall-cmd的命令使用

叫我Ghost就好了發表於2020-11-26

firewall-cmd使用方法

1.firewall-cmd的含義

firewall-cmd 是 firewalld的字元介面管理工具,firewalld是centos7之後版本的一大特性, 最大的好處有兩個:支援動態更新,不用重啟服務;加入了防火牆的“zone”概念。

2.firewall-cmd的用法

   命令格式:firewall-cmd [選項 ... ]

(1)通用選項

-h                  顯示幫助資訊

-V                  顯示版本資訊(這個選項不能與其他選項組合)

-q                  不列印狀態訊息

(2)狀態選項

--state                        顯示防火牆的狀態

--reload                      不中斷服務的重新載入(重啟)

--complete-reload            中斷所有連線的重新載入

--runtime-to-permanent      將當前防火牆的規則永久儲存

--check-config                檢查配置正確性

(3)日誌選項

--get-log-denied              獲取記錄被拒絕的日誌

--set-log-denied=<value>     設定記錄被拒絕的日誌

3.例項用法

(1)    安裝防火牆

yum install firewalld firewall-configf            下載防火牆

systemctl start  firewalld                             啟動防火牆

systemctl status firewalld                 檢視狀態

systemctl disable firewalld                停止

systemctl stop firewalld                   禁用

(2)    檢視設定

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                  更新防火牆規則

(3)    新增介面

# 將介面新增到區域,預設介面都在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

# 永久生效再加上 --permanent 然後reload防火牆

 

# 移除服務

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

(4)    服務管理

# 顯示服務列表 

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     # 在不改變狀態的條件下重新載入防火牆

(5)    埠管理

# 開啟443/TCP埠

firewall-cmd --add-port=443/tcp

 

# 永久開啟3690/TCP埠

firewall-cmd --permanent --add-port=3690/tcp

永久開啟埠firewall-cmd --reload

 

# 檢視防火牆,新增的埠也可以看到

firewall-cmd --list-all

(6)    直接模式

# FirewallD包括一種直接模式,使用它可以完成一些工作,例如開啟TCP協議的9999埠

firewall-cmd --direct -add-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j accept

firewall-cmd --reload

(7)    自定義服務管理

選項

(末尾帶有 [P only] 的話表示該選項除了與(--permanent)之外,不能與其他選項一同使用!)

--new-service=<服務名> 新建一個自定義服務 [P only]

--new-service-from-file=<檔名> [--name=<服務名>]

                      從檔案中讀取配置用以新建一個自定義服務 [P only]

--delete-service=<服務名>

                      刪除一個已存在的服務 [P only]

--load-service-defaults=<服務名>

                      Load icmptype default settings [P only]

--info-service=<服務名>

                      顯示該服務的相關資訊

--path-service=<服務名>

                      顯示該服務的檔案的相關路徑 [P only]

--service=<服務名> --set-description=<描述>

                      給該服務設定描述資訊 [P only]

--service=<服務名> --get-description

                      顯示該服務的描述資訊 [P only]

--service=<服務名> --set-short=<描述>

                      給該服務設定一個簡短的描述 [P only]

--service=<服務名> --get-short

                      顯示該服務的簡短描述 [P only]

 

--service=<服務名> --add-port=<埠號>[-<埠號>]/<protocol>

                      給該服務新增一個新的埠(埠段) [P only]

 

--service=<服務名> --remove-port=<埠號>[-<埠號>]/<protocol>

                      從該服務上移除一個埠(埠段) [P only]

 

--service=<服務名> --query-port=<埠號>[-<埠號>]/<protocol>

                      查詢該服務是否新增了某個埠(埠段) [P only]

 

--service=<服務名> --get-ports

                      顯示該服務新增的所有埠 [P only]

 

--service=<服務名> --add-protocol=<protocol>

                      為該服務新增一個協議 [P only]

 

--service=<服務名> --remove-protocol=<protocol>

                      從該服務上移除一個協議 [P only]

 

--service=<服務名> --query-protocol=<protocol>

                      查詢該服務是否新增了某個協議 [P only]

 

--service=<服務名> --get-protocols

                      顯示該服務新增的所有協議 [P only]

 

--service=<服務名> --add-source-port=<埠號>[-<埠號>]/<protocol>

                      新增新的源埠(埠段)到該服務 [P only]

 

--service=<服務名> --remove-source-port=<埠號>[-<埠號>]/<protocol>

                      從該服務中刪除源埠(埠段) [P only]

 

--service=<服務名> --query-source-port=<埠號>[-<埠號>]/<protocol>

                      查詢該服務是否新增了某個源埠(埠段) [P only]

 

--service=<服務名> --get-source-ports

                      顯示該服務所有源埠 [P only]

 

--service=<服務名> --add-module=<module>

                      為該服務新增一個模組 [P only]

--service=<服務名> --remove-module=<module>

                      為該服務移除一個模組 [P only]

--service=<服務名> --query-module=<module>

                      查詢該服務是否新增了某個模組 [P only]

--service=<服務名> --get-modules

                      顯示該服務新增的所有模組 [P only]

--service=<服務名> --set-destination=<ipv>:<address>[/]

                      Set destination for ipv to address in service [P only]

--service=<服務名> --remove-destination=<ipv>

                      Disable destination for ipv i service [P only]

--service=<服務名> --query-destination=<ipv>:<address>[/]

                      Return whether destination ipv is set for service [P only]

--service=<服務名> --get-destinations

                      List destinations in service [P only]

(8)    控制埠 / 服務

可以通過兩種方式控制埠的開放,一種是指定埠號另一種是指定服務名。雖然開放 http 服務就是開放了 80 埠,但是還是不能通過埠號來關閉,也就是說通過指定服務名開放的就要通過指定服務名關閉;通過指定埠號開放的就要通過指定埠號關閉。還有一個要注意的就是指定埠的時候一定要指定是什麼協議,tcp 還是 udp。知道這個之後以後就不用每次先關防火牆了,可以讓防火牆真正的生效。

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                   # 檢視開放的埠

(9)    偽裝 IP

firewall-cmd --query-masquerade      # 檢查是否允許偽裝IP

firewall-cmd --add-masquerade        # 允許防火牆偽裝IP

firewall-cmd --remove-masquerade    # 禁止防火牆偽裝IP

(10)  埠轉發

埠轉發可以將指定地址訪問指定的埠時,將流量轉發至指定地址的指定埠。轉發的目的如果不指定 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=port=80:proto=tcp:toaddr=192.168.0.1 # 將80埠的流量轉發至192.168.0.1

firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 將80埠的流量轉發至192.168.0.1的8080埠

 

 

相關文章