Linux firewalld 防火牆安全
簡介服務器
RHEL 7 系統中集成了多款防火牆管理工具,其中 firewalld(Dynamic Firewall Manager of Linux systems,Linux 系統的動態防火牆管理器)服務是默認的防火牆配置管理工具,它擁有基於 CLI(命令行界面)和基於 GUI(圖形用戶界面)的兩種管理方式。網絡
相較於傳統的防火牆管理配置工具,firewalld 支持動態更新技術並加入了區域(zone)的概念。簡單來講,區域就是 firewalld 預先準備了幾套防火牆策略集合(策略模板),用戶能夠根據生產場景的不一樣而選擇合適的策略集合,從而實現防火牆策略之間的快速切換。ssh
例如:咱們有一臺筆記本電腦,天天都要在辦公室、咖啡廳和家裏使用。按常理來說,這三者的安全性按照由高到低的順序來排列,應該是家庭、公司辦公室、咖啡廳。當前,咱們但願爲這檯筆記本電腦指定以下防火牆策略規則:在家中容許訪問全部服務;在辦公室內僅容許訪問文件共享服務;在咖啡廳僅容許上網瀏覽。在以往,咱們須要頻繁地手動設置防火牆策略規則,而如今只須要預設好區域集合,而後只需輕點鼠標就能夠自動切換了,從而極大地提高了防火牆策略的應用效率。firewalld 中常見的區域名稱(默認爲 public)以及相應的策略規則。tcp
firewalld 中經常使用的區域名稱及策略規則
區域 |
默認策略規則 |
trusted |
容許全部的數據包 |
home |
拒絕流入的流量,除非與流出的流量相關;而若是流量與 ssh、mdns、ipp-client、amba-client 與 dhcpv6-client 服務相關,則容許流量 |
internal |
等同於 home 區域 |
work |
拒絕流入的流量,除非與流出的流量數相關;而若是流量與 ssh、ipp-client 與 dhcv6-client 服務相關則容許流量 |
public |
拒絕流入的流量,除非與流出的流量相關;而若是流量與 ssh、dhcpv6-client 服務 相關則容許流量 |
external |
拒絕流入的流量,除非與流出的流量相關;而若是流量與 ssh 服務相關,則容許流量 |
dmz |
拒絕流入的流量,除非與流出的流量相關;而若是流量與 ssh 服務相關,則容許流量 |
block |
拒絕流入的流量,除非與流出的流量相關 |
drop |
拒絕流入的流量,除非與流出的流量相關 |
終端管理工具 firewall-cmd工具
firewall-cmd 是 firewalld 防火牆配置管理工具的 CLI(命令行界面)版本。它的參數通常都是以「長格式」來提供。spa
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 |
關閉應急情況模式
|
知識點命令行
與 Linux 系統中其餘的防火牆策略配置工具同樣,使用 firewalld 配置的防火牆策略默認爲運行時(Runtime)模式,又稱爲當前生效模式,並且隨着系統的重啓會失效。若是想讓配置策略一直存在,就須要使用永久(Permanent)模式了,方法就是在用 firewall-cmd 命令正常設置防火牆策略時添加--permanent 參數,這樣配置的防火牆策略就能夠永久生效了。可是,永久生效模式有一個「不近人情」的特色,就是使用它設置的策略只有在系統重啓以後才能自動生效。若是想讓配置的策略當即生效,須要手動執行 firewall-cmd --reload 命令。dns
注意:Runtime 模式與 Permanent 模式。若是不關注這個細節,就算是正確配置了防火牆策略,也可能沒法達到預期的效果。ip
使用
查詢操做
- # 查看當前所使用的區域
- firewall-cmd --get-default-zone
- # 查看指定網卡在firewalld服務中的區域
- firewall-cmd --get-zone-of-interface=網卡名
- # 查詢指定服務在指定區域下當前是否容許請求服務協議的流量
- firewall-cmd --zone=區域 --query-service=服務名
- # 查看指定服務在指定區域下當前的端口全部狀態
- firewall-cmd --zone=區域 --list-ports
- # 查看指定區域下當前全部狀態
- firewall-cmd --zone=區域 --list-all
配置策略
- # 修改指定網卡內使用的永久模式區域、系統重啓後生效
- firewall-cmd --permanent --zone=區域 --change-interface=網卡名稱
- # 修改當前區域修改爲指定區域
- firewall-cmd --set-default-zone=區域
- # 修改指定服務在指定區域下當前容許協議流量訪問、當即生效、重啓後失效
- firewall-cmd --zone=區域 --add-service=服務名
- # 修改指定服務在指定區域下永久容許協議流量訪問、重啓後生效
- firewall-cmd --permanent --zone=區域 --add-service=服務名
- # 修改指定服務再指定區域下當前拒絕協議流量訪問、當即生效、重啓後失效
- firewall-cmd --zone=區域 --remove-service=服務名
- # 修改指定服務再指定區域下永久拒絕協議流量訪問、重啓生效
- firewall-cmd --permanent --zone=區域 --remove-service=服務名
- # 容許指定端口再指定區域下當前容許訪問、當即生效
- firewall-cmd --zone=區域 --add-port=端口號/tcp
- # 容許指定端口再指定區域下永久容許訪問、重啓生效
- firewall-cmd --permanent --zone=區域 --add-port=端口號/tcp
- # 把訪問指定源端口再指定區域下臨時轉發到指定目標端口、當即生效
- firewall-cmd --zone=區域 --add-forward-port=port=源端口:proto=tcp:toport=目標端口:toaddr=目標IP地址
- # 把訪問指定源端口再指定區域下永久轉發到指定目標端口、重啓生效
- firewall-cmd --permanent --zone=區域 --add-forward-port=port=源端口:proto=tcp:toport=目標端口:toaddr=目標IP地址
- # 把指定源端口再指定區域下臨時轉發到目標網段端口、當即生效
- firewall-cmd --zone=區域 --add-rich-rule 'rule family="ipv4" source address="網段/掩碼位" forward-port port="源端口" protocol="tcp" to-port="目標端口"'
- # 把指定源端口再指定區域下永久轉發到目標網段端口、重啓生效
- firewall-cmd --permanent --zone=區域 --add-rich-rule 'rule family="ipv4" source address="網段/掩碼位" forward-port port="源端口" protocol="tcp" to-port="目標端口"'
- # 指定區域下臨時禁用指定IP地址的訪問、accept 爲容許
- firewall-cmd --zone=區域 --add-rich-rule='rule family=ipv4 source address="IP地址" reject'
- # 指定區域下永久禁用指定IP地址的訪問、重啓生效、accept 爲容許
- firewall-cmd --permanent --zone=區域 --add-rich-rule='rule family="ipv4" source address="IP地址" reject'
- # 指定區域下指定服務臨時拒絕一個網段訪問、適用於單個IP、accept 爲容許
- firewall-cmd --zone=區域 --add-rich-rule="rule family="ipv4" source address="網段/掩碼位" service name="服務名" reject"
- # 指定區域下指定服務永久拒絕一個網段訪問、重啓生效、適用於單個IP、accept 爲容許
- firewall-cmd --permanent --zone=區域 --add-rich-rule="rule family="ipv4" source address="網段/掩碼位" service name="服務名" reject"
- # 指定區域下指定端口臨時拒絕一個網段訪問、適用於單個IP、accept 爲容許
- firewall-cmd --zone=區域 --add-rich-rule="rule family="ipv4" source address="網段/掩碼位" port protocol="tcp" port="端口號" reject"
- # 指定區域下指定端口永久拒絕一個網段訪問、重啓生效、適用於單個IP、accept 爲容許
- firewall-cmd --permanent --zone=區域 --add-rich-rule="rule family="ipv4" source address="網段/掩碼位" port protocol="tcp" port="端口號" reject"
其餘操做
- # 啓動/關閉 firewalld 防火牆服務的應急情況模式,阻斷一切網絡鏈接(當遠程控制服務器時請慎用)
- firewall-cmd --panic-on
- firewall-cmd --panic-off
- # 保存設置、可當即生效permanent配置
- firewall-cmd --reload
- # 刪除操做、將參數籤的 add 改成 remove
- firewall-cmd .. --zone=區域 --remove-..
其餘知識
REJECT 與 DROP
一、REJECT動做會返回一個拒絕(終止)數據包(TCP FIN或UDP-ICMP-PORT-UNREACHABLE),明確的拒絕對方的鏈接動做。
二、DROP動做只是簡單的直接丟棄數據,並不反饋任何迴應。須要Client等待超時,Client容易發現本身被防火牆所阻擋。