1. 程式人生 > 其它 >Firewalld--防火牆----------------江南好,風景舊曾諳

Firewalld--防火牆----------------江南好,風景舊曾諳

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