一步一步搞懂Linux上firewalld防火牆的使用

目錄

1. 什麼是firewalld,與iptables之間的關係

2. 安裝與啓動firewalld

3. firewalld功能介紹

4. firewalld常用命令

5. 簡單實例,使用firewalld開啓nginx 80端口


1. 什麼是firewalld,與iptables之間的關係

  • firewalld是iptables的前端控制器,firewalld提供一個daemon和service,底層使用iptables;
  • firewalld是基於內核Netfilter的;
  • firewalld是動態防火牆,策略變更時不需要重載所有配置,只需要將變更部分加載到iptables中,不丟失現有鏈接;
  • iptables是靜態防火牆,任何策略變更時都不要重載(reload)所有配置,會丟失現有鏈接;

2. 安裝與啓動firewalld

安裝:

yum -y install firewalld firewall-config

管理:

systemctl enable firewalld        //設置開機自啓
systemctl start firewalld         //啓動firewalld
systemctl status firewalld        //查看firewalld運行狀態

安裝完了後應該會有一個防火牆圖形界面的管理工具:

3. firewalld功能介紹

我們來打開這個軟件進去看看它的界面,以此來了解一下它的功能;

首先左邊這塊有一欄區域,這些區域定義了一些策略的模板。比如block,加入這個區域的端口或者服務,是被防火牆攔截的。

1. 具體區域的介紹

Zone 名稱 Zone 描述
block 所有進入的網絡連接都會被拒絕。對於 IPV4,回覆 icmp-host-prohibited 消息。對於 IPV6,回覆 icmp6-adm-prohibited 消息。只有由內部發起的網絡連接可以通行。
dmz 對於在非軍事區域的服務器,外部網絡可以在受限制的情況下進入內網,只有特定的網絡連接請求被接受。
drop 所有的進入的網絡包都會被丟掉,並且沒有任何的迴應。只有向發起的連接請求可以被放行。
external 用於開始僞裝的外部網絡,特別是作爲路由器。任務外部的網絡會損壞你的計算機,只有特定的網絡連接請求被接受。
home 在家使用,信任網絡上的大多數計算機。只有特定的網絡連接請求被接受。
internal 在內部網絡使用,信任當前網絡下其他的計算機。只有特定的網絡連接請求被接受。
public 在公共網絡使用,不信任網絡上的其他計算機。只有特定的網絡連接請求被接受。
trusted 所有的網絡連接都會被接受。
work 在工作網絡中使用,信任網絡上的其他計算機。只有特定的網絡連接請求被接受

 

2. 策略制定的規則

如圖,我們可以根據服務的類型,端口號,協議號,源端口,接口,來源等等來設定防火牆的規則;

 

3. 策略的有效期

運行時:本次運行有效,防火牆重啓後失效;

永久:永久有效;

用命令怎麼實現呢?我們假設現在要添加smtp服務到public區域中:

firewall-cmd -zone=public -add-service=smtp                //運行時有效,重啓失效
firewall-cmd -permanent -zone=public -add-service=stmp     //永久有效,重啓後開始生效
firewall-cmd -runtime-to-permanent                         //將運行時配置轉爲永久配置

4. firewalld常用命令

firewalld-cmd --version        //查看firewalld版本
firewalld-cmd --help           //查看firewalld用法
man firewalld-cmd              //查看firewalld用法

systemctl status firewalld     //查看firewalld狀態
firewalld-cmd --reload         //重載firewalld,當前已經生效的連接不中斷
firewalld-cmd --compulete-reload    //重載firewalld,當前連接中斷

firewalld-cmd --get-services   //列出所有預設服務,如上圖的“3”
firewalld-cmd --list-services  //列出當前正在生效的服務
firewalld-cmd --permanent --zone=public --add-service=smtp      //在public區域中的永久配置中啓用smtp服務
firewalld-cmd --permanent --zone=public --remove-service-smtp   //在public區域中的永久配置中移除smtp服務

firewalld-cmd --zone=public --list-ports    //列出public區域中已經啓用的端口號
firewalld-cmd --permanent --zone=public --add-port=8080/tcp     //在public區域中的永久配置中啓用8080端口
firewalld-cmd --permanent --zone=public --remove-port=8080/tcp  //在public區域中的永久配置中移除8080端口

firewalld-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=90    //將本機的80端口流量轉發到90端口,區域爲public

//將本機80端口的流量轉發到192.168.1.1這臺主機的8080端口上
firewall-cmd --zone=public --add-masquerade       //不同服務器端口轉發,要先開啓 masquerade
firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.1

firewall-cmd --get-zones                          //查看所有可用區域
firewall-cmd --get-active-zones                   //查看當前活動的區域
firewall-cmd --list-all-zones                     //列出所有區域的所有配置
firewall-cmd --zone=work --list-all               //列出指定區域(如:work區域)的所有配置
firewall-cmd --get-default-zone                   //查看默認區域
firewall-cmd --set-default-zone=public            //設定默認區域

//設定某一網段爲內網段(然後可以創建策略爲只允許內網訪問呀)
firewall-cmd --permanent --zone=internal --add-source=192.168.122.0/24
firewall-cmd --permanent --zone=internal --remove-source=192.168.122.0/24    //移除

富規則:

firewall-cmd –list-rich-rules         //列出所有規則

複雜規則配置案例:

//允許來自主機 192.168.0.14 的所有 IPv4 流量
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept'

//拒絕來自主機 192.168.1.10 到 22 端口的 IPv4 的 TCP 流量
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject' 

//允許來自主機 10.1.0.3 到 80 端口的 IPv4 的 TCP 流量,並將流量轉發到 6532 端口上
firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.1.0.3 forward-port port=80 protocol=tcp to-port=6532' 

//將主機 172.31.4.2 上 80 端口的 IPv4 流量轉發到 8080 端口(需要在區域上激活 masquerade)
firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=172.31.4.2' 

//允許192.168.122.0/24主機所有連接
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.122.0" accept' 

//每分鐘允許2個新連接訪問ftp服務
firewall-cmd --add-rich-rule='rule service name=ftp limit value=2/m accept' 

//同意新的IPv4和IPv6連接FTP ,並使用審覈每分鐘登錄一次
firewall-cmd --add-rich-rule='rule service name=ftp log limit value="1/m" audit accept' 

//允許來自1192.168.122.0/24地址的新IPv4連接連接TFTP服務,並且每分鐘記錄一次
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.122.0/24" service name=ssh log prefix="ssh" level="notice" limit value="3/m" accept' 

//丟棄所有icmp包
firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop' 

//當使用source和destination指定地址時,必須有family參數指定ipv4或ipv6。如果指定超時,規則將在指定的秒數內被激活,並在之後被自動移除
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 reject' --timeout=10 

//拒絕所有來自2001:db8::/64子網的主機訪問dns服務,並且每小時只審覈記錄1次日誌
firewall-cmd --add-rich-rule='rule family=ipv6 source address="2001:db8::/64" service name="dns" audit limit value="1/h" reject' --timeout=300 

//允許192.168.122.0/24網段中的主機訪問ftp服務
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 service name=ftp accept' 

//轉發來自ipv6地址1:2:3:4:6::TCP端口4011,到1:2:3:4:7的TCP端口4012
firewall-cmd --add-rich-rule='rule family="ipv6" source address="1:2:3:4:6::" forward-portto-addr="1::2:3:4:7" to-port="4012" protocol="tcp" port="4011"' 

5. 簡單實例,使用firewalld開啓nginx 80端口

說了那麼多理論和命令,我們小小的實驗一下:

1. 現在我沒有在防火牆上開啓任何端口,到另外一臺電腦上訪問nginx試試

2. 我們到防火牆上開啓80端口,區域呢,直接放到public區域,永久開啓

開啓後別忘了重載防火牆使其生效

3. 我們在用另一臺電腦瀏覽器訪問一下試試

4. 我們再打開圖形界面的防火牆看看

 

 

歐了,以後有什麼使用感受再更。

命令參考文章:https://blog.csdn.net/xiazichenxi/article/details/80169927

 

 

 

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