Firewalld--防火牆----------------江南好,風景舊曾諳
阿新 • • 發佈:2021-09-13
Firewalld防火牆
一、防火牆介紹
## 1.1.防火牆概述
在CentOS7系統中集成了多款防火牆管理工具,預設啟用的是firewalld(動態防火牆管理器)防火牆管理工具,Firewalld支援CLI(命令列)以及GUI(圖形)的兩種管理方式。
對於接觸Linux較早的人員對Iptables比較熟悉,但由於Iptables的規則比較的麻煩,並且對網路有一定要求,所以學習成本較高。但firewalld的學習對網路並沒有那麼高的要求,相對iptables來說要簡單不少,所以建議剛接觸CentOS7系統的人員直接學習Firewalld。
需要注意的是:如果開啟防火牆工具,並且沒有配置任何允許的規則,那麼從外部訪問防火牆裝置預設會被阻止,但是如果直接從防火牆內部往外部流出的流量預設會被允許
firewalld只能做和IP/port相關的限制,web相關的限制無法實現
1.2、防火牆使用區域管理
相較於傳統的iptables防火牆,firewalld支援動態更新,並加入了區域zone的概念
簡單來說,區域就是firewalld預先準備了幾套防火牆策略集合(策略模板),使用者可以根據不同的場景選擇不同的策略模板,從而實現防火牆策略之間的快速切換
需要注意的是Firewalld的區域與介面
一個網絡卡僅能繫結一個區域,eth0--> A區域
但一個區域可以繫結多個網絡卡 A區域--->eth0 ,eth1 , eth2
**還可以根據來源的地址設定不同的規則,比如:所有人能訪問80埠,但只有公司的IP才允許訪問22埠
區域選項 | 預設規則策略** |
---|---|
trusted | 允許所有的資料包流入流出 |
home | 拒絕流入的流量,除非與流出的流量相關。而如果流量與ssh、mdns、ipp-client、amba-client與dhcpv6-client服務相關,則允許流量 |
internal | 等同於home區域 |
work | 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh,ipp-client、dhcpv6-client服務相關,則允許流量 |
piblic | 拒絕流入的流量,除非與流出的流量相關;二如果流量與ssh,ipp-client、dhcpv6-client服務相關,則允許流量 |
external | 拒絕流入的流量,除非與流出的流量相關;二圖過流量與ssh服務相關,則允許流量 |
dmz | 拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh服務相關,則允許流量 |
block | 拒絕流入的流量,除非與流出的流量相關 |
drop | 拒絕流入的流量,除非與流出的流量相關 |
1.3、防火牆基本指令引數
firewall-cmd命令分類列表
引數 | 作用 |
---|---|
zone區域相關指令 | |
--get-default-zone | 獲取預設的區域名稱 |
--set-default-zone=區域名稱 | 設定預設的區域,使其永久生效 |
--get-active-zones | 顯示當前正在使用的區域與網絡卡名稱 |
--get-zones | 顯示總共可用的區域 |
--get-zone= | 新增區域 |
service服務相關命令 | |
--get-services | 列出服務列表中所有可管理的服務 |
--add-service= | 設定預設區域允許該新增服務的流量 |
--remove-service= | 設定預設區域不允許該刪除服務的流量 |
port埠相關指令 | |
--add-port=埠號/協議 | 設定預設區域允許該新增埠的流量 |
--remove-port=埠號/協議 | 設定預設區域不允許該刪除埠的流量 |
interface網站相關指令 | |
--add-interface=網絡卡名稱 | 將源自該網絡卡的所有流量都導向某個指定區域 |
--change-interface=網絡卡名稱 | 將某個網絡卡與區域進行關聯 |
其他相關指令 | |
--list-all | 顯示當前區域的網絡卡配置引數,資源,埠以及服務等資訊 |
--reload | 讓 永久生效 的配置規則立即生效,並覆蓋當前的規則 |
二、防火牆區域配置策略
1.為了保證正常使用firewalld服務和相關工具去管理防火牆,必須啟動firewalld服務,同時關閉以前舊的防火牆相關服務,需要注意firewalld的規則分為兩種狀態:
'runtime'執行時:修改的規則馬上生效,但如果重啟服務則馬上失效,'測試建議'.
'permanent'持久配置:修改規則後需要reliad過載服務才會生效,'生產建議'。
2.1、禁用與取消禁用防火牆
禁用舊版防火牆服務或保證沒啟動
# systemctl mask iptables
# systemctl mask ip6tables
取消禁用防火牆
# systemctl unmask iptables
2.2、操作防火牆
systemctl start firewalld
systemctl stop firewalld
systemctl enable firewalld
# 過載防火牆配置或清理臨時的防火牆配置
firewalld-cmd --reload
2.3、firewalld常用命令
1)檢視預設使用區域
# firewall-cmd --get-default-zone
2)檢視預設區域的規則
# firewall-cmd --listi-all
3)檢視指定區域的預設規則
[root@web01 ~]# firewall-cmd --list-all --zone=trusted
trusted #區域的名字
target: ACCEPT #狀態:允許
icmp-block-inversion: no #icmp塊設定
interfaces: #區域繫結的網絡卡
sources: #允許流量通過的網段
services: #允許流量通過的服務
ports: #允許流量通過的埠
protocols: #允許流量通過的協議
masquerade: no #IP偽裝
forward-ports: #埠轉發
source-ports: #埠轉發的來源埠
icmp-blocks: #icmp塊設定
rich rules: #富規則
4)檢視區域是否允許某服務
firewall-cmd --zone=public --query-service=ssh
firewall-cmd --zone=public --query-service=http
三、防火牆配置
3.1firewalld放行服務
1)放行一個服務
firewall-cmd --add-service=ssh
2)放行多個服務
firewall-cmd --add-service={http,nginx}
3)自己新增服務,配置規則
1.複製定製規則格式
cp /usr/lib/firewalld/service/http.xml suibian.xml
2.過載防火牆規則
firewall-cmd --reload
3.新增規則
firewall-cmd --add-service=suibian
success
1.2、firewalld放行埠
1)放行一個埠
firewall-cmd --add-port=80/tcp
success
2)放行多個埠
firewall-cmd --add-port={80/tcp,82/tcp}
success
3)放行網段
firewall-cmd --add-source=172.16.1.0/24 --zone=trusted
四、防火牆埠轉發
埠轉發是指傳統的目標地址對映,實現外網訪問內網資源
流量轉發命令語法為:
firewall-cmd --permanent --zone=區域 --add-forward-port=port=源埠:proto=協議:toport=目標埠:toaddr=目標IP地址
4.1、埠轉發實踐
需要將本地的172.16.1.7:5555埠轉發至172.16.1.4:22埠
1.新增埠轉發
firewall-cmd --add-forward-port=port=5555:proto=tcp:toport=22:toaddr=172.16.1.4
2.開啟ip偽裝
firewall-cmd --add-masquerade
3.檢視防火牆配置
firewall-cmd --list-all
測試連結
五、防火牆富規則
firewalld中的富語言規則表示更細緻,更詳細的防火牆策略配置,它可以針對系統服務、埠號、源地址和目標地址等諸多資訊進行更有針對性的策略配置,優先順序在所有的防火牆策略中也是最高的。
富語言規則幫助手冊
# man firewalld-cmd
# man firewalld.richlanguage
[root@m01 ~]# man firewall-cmd
[root@m01 ~]# man firewalld.richlanguage
rule
[source]
[destination]
service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|source-port
[log]
[audit]
[accept|reject|drop|mark]
rule [family="ipv4|ipv6"]
source address="address[/mask]" [invert="True"]
service name="service name"
port port="port value" protocol="tcp|udp"
protocol value="protocol value"
forward-port port="port value" protocol="tcp|udp" to-port="port value" to-addr="address"
accept | reject [type="reject type"] | drop
#富語言規則相關命令
--add-rich-rule='<RULE>' #在指定的區域新增一條富語言規則
--remove-rich-rule='<RULE>' #在指定的區域刪除一條富語言規則
--query-rich-rule='<RULE>' #找到規則返回0,找不到返回1
--list-rich-rules #列出指定區域裡的所有富語言規則
例項一:
允許172.16.1.1主機能夠訪問http服務,允許172.16.1.0/24能訪問111埠
firewalld-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.1 service name=http accept'
firewalld-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 port port=111 protocol=tcp accept'
例項二:
預設public區域對外開放所有人能通過ssh服務連線,但拒絕172,16.1.0、24網段通過ssh連線伺服器
firewalld-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 service name=ssh reject'
# drop 直接丟棄,不返回任何內容
# reject 拒絕,會返回拒絕的內容
例項三:
使用firewalld,允許所有人能訪問http,https服務,但只有10.0.0.1主機可以訪問ssh服務
firewalld-cmd --add-service={http,https}
firewalld-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1 service name=ssh accept'
例項四:
當用戶來源IP地址是10.0.0.1主機,則將使用者請求的5555埠轉發至後端172.16.1.4的22埠
firewalld-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1 forward-port port=5555 protocol=tcp to-port=22 to-add=172.16.1.4'
5.1、檢視富規則
# 檢視富規則
firewalld-cmd --list-rich-rules
firewalld-cmd --list-all
5.2、禁ping
firewalld-cmd -add-rich-rule='rule family=ipv4 protocol value=icmp drop'
5.3、開啟vrrp協議
firewalld-cmd --zone=public --add-protocol=vrrp --permanent
六、防火牆備份
我們的防火牆規則,配置永久生效後,會儲存在/etc/firewalld/zones/目錄下,我們如果要進行同樣的防火牆配置,只需要將該檔案推送至新伺服器,並啟動防火牆即可
備份也是如此,備份上面的目錄就可以了
七、防火牆內部共享上網
7.1、開啟IP偽裝
firewalld-cmd --add-masquerade
firewalld-cmd --add-masquerade --permanent
7.2、開啟核心轉發
# CentOS 6 需要手動開啟,CentOS 7預設就是開啟的
cat /etc/sysctl.conf
net.ipv4.ip_forward = 1
7.3、修改內網伺服器的網絡卡
vim /etc/sysconfig/network-script/ifcfg-eth1
GATEWAY=172.16.1.4
DNS=223.5.5.5
# 重啟網絡卡
ifdown eth1 & ifup eth1