CentOS7 防火牆配置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端口 當我們想把某個端口隱藏起來的時候,就可以在防火牆上阻止那個端口訪問,然后再開一個不規則的端口,之后配置防火牆的端口轉發,將流量轉發過去。 端口轉發還可以做流量分發,一個防火牆拖着好多台運行着不同服務的機器,然后用防火牆將不同端口的流量轉發至不同機器。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM