https://blog.csdn.net/GMingZhou/article/details/78090963
實例
# 安裝firewalld yum install firewalld firewall-config systemctl start firewalld # 啟動 systemctl status firewalld # 或者 firewall-cmd --state 查看狀態 systemctl disable firewalld # 停止 systemctl stop firewalld # 禁用 # 你也可以關閉目前還不熟悉的FirewallD防火牆,而使用iptables,命令如下: yum install iptables-services systemctl start iptables systemctl enable iptables
配置firewalld
``` firewall-cmd --version # 查看版本 firewall-cmd --help # 查看幫助 # 查看設置: 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
控制端口 / 服務
可以通過兩種方式控制端口的開放,一種是指定端口號另一種是指定服務名。雖然開放 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 # 查看開放的端口
偽裝 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端口
- 當我們想把某個端口隱藏起來的時候,就可以在防火牆上阻止那個端口訪問,然后再開一個不規則的端口,之后配置防火牆的端口轉發,將流量轉發過去。
- 端口轉發還可以做流量分發,一個防火牆拖着好多台運行着不同服務的機器,然后用防火牆將不同端口的流量轉發至不同機器。