Linux防火牆firewall-cmd學習筆記.2021年1月25日

當下的主流紅帽系Linux版本是 Red Hat Enterprise Linux 8 和 CentOS 8,系統默認的防火牆也從iptables換成firewalld。firewalld最大的好處有兩個:支持動態更新,不用重啓服務;第二個就是加入了防火牆的“zone”概念。firewalld可以動態修改單條規則,而不需要像iptables那樣,在修改了規則後必須得全部刷新纔可以生效。firewalld在使用上要比iptables人性化很多,即使不明白“四表五鏈”而且對TCP/ip協議也不理解也可以實現大部分功能。firewalld自身並不具備防火牆的功能,而是和iptables一樣需要通過內核的netfilter來實現,也就是說firewalld和iptables一樣,他們的作用都是用於維護規則,而真正使用規則幹活的是內核的netfilter,只不過firewalld和iptables的結構以及使用方法不一樣罷了。firewall-config、firewall-cmd是firewalld的管理工具,通過配置文件“/usr/lib/firewalld”下面的xml配置信息,在啓動時自動載入配置並應用到系統中,當使用firewalld-cmd添加防火牆規則時,它實際是轉換成iptables規則後,再應用到系統中。

firewalld定義了幾個概念:
zone: 它是安全域的範圍,就類似於Window上的域網絡,工作網絡,家庭網絡,Internet網絡等,不同的安全作用域其安全級別不同,安全程度不同,家庭zone的安全規則就是最寬鬆的。
service: 它是zone裏面的定義一個規則集,它將iptables中單獨根據 入接口,出接口,源目端口,協議等定義單獨規則整合爲一個規則集合,方便識別和管理。
protocol: 定義協議規則
port,source-port :基於端口定義規則,port我的理解:定義源和目標爲指定端口的規則。
source: 定義源地址規則
interface: 定義基於出入接口的規則。
direct: 直接定義原始iptables規則。

全局選項:
--state //顯示當前firewalld服務的運行狀態。
--runtime-to-permanent //將運行時配置保存爲永久配置。

全局刷新配置:
--reload //重新加載防火牆permanent的規則配置,覆蓋當前runtime的規則配置,runtime的規則配置都將丟失。
--complete-reload //完全重新加載防火牆,甚至netfilter內核模塊。這很可能會終止活動連接,因爲狀態信息會丟失。此選項僅在出現嚴重防火牆問題時使用。例如,如果存在狀態信息問題,則無法使用正確的防火牆規則建立連接。

全局開啓日誌記錄功能:
--get-log-denied //查看是否啓用了在所有規則中啓用拒絕日誌記錄。
--set-log-denied=[all|unicast|broadcast|multicast|off] //設置啓用或禁用在所有規則添加拒絕或刪除日誌記錄功能。

命令格式

firewall-cmd [選項 ... ]

選項

通用選項
-h, --help //顯示幫助信息
-V, --version //顯示版本信息(這個選項不能與其他選項組合)
-q, --quiet //不打印狀態消息

狀態選項
--state //顯示firewalld的狀態
--reload //不中斷服務的重新加載
--complete-reload //中斷所有連接的重新加載
--runtime-to-permanent //將當前防火牆的規則永久保存
--check-config //檢查配置正確性

日誌選項
--get-log-denied //獲取記錄被拒絕的日誌
--set-log-denied=<value> //設置記錄被拒絕的日誌,只能爲 'all','unicast','broadcast','multicast','off' 其中的一個

安裝firewalld
dnf install firewalld firewall-config
systemctl start  firewalld     //啓動
systemctl status firewalld     //查看狀態
firewall-cmd --state     //查看狀態
systemctl disable firewalld     //禁用
systemctl stop firewalld     //停止
配置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     //更新防火牆規則,無需斷開連接,就是firewalld特性之一,動態添加規則
firewall-cmd --complete-reload     //需要斷開連接,類似重啓服務
firewall-cmd --zone=public --add-interface=eth0     //將接口添加到區域,默認接口都在public,永久生效再加上“--permanent”然後reload防火牆
firewall-cmd --set-default-zone=public     //設置默認接口區域,立即生效無需重啓
firewall-cmd --zone=dmz --list-ports     //查看所有打開的端口
firewall-cmd --zone=dmz --add-port=8080/tcp     //加入一個端口到區域
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     //設置當前區域的接口
firewall-cmd --zone=public --list-all     //顯示所有公共區域(public)
firewall-cmd --zone=internal --change-interface=enp03s     //臨時修改網絡接口(enp0s3)爲內部區域(internal)
firewall-cmd --permanent --zone=internal --change-interface=enp03s     //永久修改網絡接口enp03s爲內部區域(internal)
服務管理

Amanda,ftp,Samba和tftp等最重要的服務已經被firewalld提供相應的服務,可以使用如下命令查看:

firewall-cmd --get-services     //顯示服務列表  
firewall-cmd --enable service=ssh     //允許ssh服務通過
firewall-cmd --disable service=ssh     //禁止SSH服務通過
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     //查看開放的端口
firewall-cmd --enable ports=8080/tcp     //打開TCP的8080端口
firewall-cmd --enable service=samba --timeout=600     //臨時允許Samba服務通過600秒
firewall-cmd --list-services     //顯示當前服務
firewall-cmd --permanent --zone=internal --add-service=http     //添加HTTP服務到內部區域(internal)
firewall-cmd --reload     //在不改變狀態的條件下重新加載防火牆
端口管理
firewall-cmd --add-port=443/tcp     //打開443/TCP端口
firewall-cmd --permanent --add-port=3690/tcp     //永久打開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
僞裝IP
firewall-cmd --query-masquerade     //檢查是否允許僞裝IP
firewall-cmd --add-masquerade     //允許防火牆僞裝IP
firewall-cmd --remove-masquerade     //禁止防火牆僞裝IP
端口轉發

端口轉發可以將指定地址訪問指定的端口時,將流量轉發至指定地址的指定端口。轉發的目的如果不指定IP的話就默認爲本機,如果指定了IP卻沒指定端口,則默認使用來源端口。 將 80 端口轉發至 8080 端口,如果配置好端口轉發之後不能用,可以檢查下面兩個問題:
1、檢查本地的 80 端口和目標的 8080 端口是否開放監聽了。
2、檢查是否允許僞裝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端口

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章