1. 程式人生 > >linux系統中的防火牆(iptables與firewalld)——firewalld

linux系統中的防火牆(iptables與firewalld)——firewalld

防火牆

防火牆是整個資料包進入主機前的第一道關卡。防火牆主要通過Netfilter與TCPwrappers兩個機制來管理的。
1)Netfilter:資料包過濾機制
2)TCP Wrappers:程式管理機制
關於資料包過濾機制有兩個軟體:firewalld與iptables
centos7/redhat7已經預設使用firewalld作為防火牆,其使用的方式已經變化,基於iptables的防火牆預設不啟用,但是仍可以繼續使用
注意:centos7/redhat7中有幾種防火牆共存:firewalld、iptables、ebtablesd
預設使用的是firewalld作為防火牆,管理工具是firewalld

firewalld與iptables

firewalld

相關概念

firewalld提供了支援網路/防火牆**區域(zone)**定義網路連結以及介面安全等級的防火牆管理工具。擁有執行時配置和永久配置選項。它也支援允許服務或者應用程式直接新增防火牆規則的介面。以前的system-config-firewall防火牆模型是靜態的,每次修改都要求防火牆完全重啟。這個過程包括核心netfilter防火牆模組的解除安裝和新配置所需模組的裝載等。 相反,firewall daemon動態管理防火牆,不需要重啟整個防火牆便可應用更改。因而也就沒有必要過載所有核心防火牆模組了。
在此版本的核心裡防火牆的包過濾機制是firewalld,使用firewalld來管理netfilter,不過底層呼叫的還是iptables,因為這幾種damon是衝突的,所以建議禁用其他服務
在這裡插入圖片描述


區域:
網路區域定義了網路連線的等級
在這裡插入圖片描述
資料包要想進入到核心裡必須通過某一個區域zone中的一個區域,而不同的區域裡定義的規則不一樣(即信任度不一樣,過濾籤強度也不一樣),可以根據網絡卡所連線的安全性來判斷,這張網絡卡的流量到底使用哪一個區域。
例如: 上圖網絡卡eth0的流量全部使用zone區域1過濾規則,網絡卡eth1的流量全部使用zone區域2過濾規則 。。。。。
注意:一張網絡卡只能繫結到一個區域,而一個區域可以繫結多塊網絡卡
區域的概念:
firewalld分為九個區域,含義如下:

區域名稱 含義
trust(信任) 可接受所有的網路連線
home(家庭) 用於家庭網路,僅接受ssh、mdns、ipp-client、samba-client或dhcpv6-client服務連線
internal(內部) 用於內部網路,僅接受ssh、ipp-client、mdns、samba-client或dhcpv6-client服務連線
work(工作區) 用於工作區,僅接受ssh、ipp-client、dhcpv6-client服務連線
public(公共) 用於公共區域的使用,僅接受ssh、dhcpv6-client服務,為firewalld的預設區域
external(外部區域) 出去的ipv4的網路連線經過此區域的偽裝和轉發,只支援ssh服務
dmz(非軍事區) 僅接受ssh服務
block(限制) 拒絕所有的網路服務
drop(丟棄) 任何訪問的網路資料包都會被丟棄,沒有任何迴應

firewalld的配置方法主要有三種:firewall-config、firewall-cmd和直接編輯xml檔案,其中 firewall-config是圖形化工具,firewall-cmd是命令列工具。

firewalld服務的主要控制命令

firewall-cmd --state #####檢視防火牆的狀態
在這裡插入圖片描述
firewall-cmd --get-active-zones ####檢視新增的網絡卡介面
在這裡插入圖片描述
firewall-cmd --get-default-zone ####檢視當前的預設區域
在這裡插入圖片描述
firewall-cmd --get-zones #####檢視所有的域
在這裡插入圖片描述
firewall-cmd --zone=public --list-all ####檢視指定域的資訊
在這裡插入圖片描述
firewall-cmd --get-services #######檢視可通過火牆的服務
在這裡插入圖片描述
firewall-cmd --list-all-zones #######檢視所有域的設定資訊
在這裡插入圖片描述
firewall-cmd --set-default-zone=dmz #######設定預設域 (dmz(非軍事區)即只可允許ssh服務)
在這裡插入圖片描述
firewall-cmd --add-source=172.25.66.250 –zone=trusted ##將指定ip主機加入trusted域
firewall-cmd --list-all –zone=trusted ##列出所有域為trusted的資訊
在這裡插入圖片描述
firewall-cmd --list-interfaces ##列出所有網絡卡介面
firewall-cmd --get-zone-of-interface=eth0 ##顯示eth0的域
在這裡插入圖片描述
firewall-cmd --change-interface=eth0 --zone=trusted ##修改eth0的域為trusted
在這裡插入圖片描述
firewall-cmd --remove-interface=eth0 --zone=trusted ##移除eth0的域
在這裡插入圖片描述
firewall-cmd –permanent –add-source=172.25.66.250 --zone=trusted ## --permanent表示將該ip永久加入
使用–permanent引數後必須執行firewall-cmd --reload(重新整理)後才能生效
在這裡插入圖片描述
firewall-cmd --add-port=8080/tcp --zone=public ## 將8080埠加入public域
在這裡插入圖片描述
firewall-cmd --permanebt –remove-service=ssh
firewall-cmd --reload 對移除之後的訪問有影響,如果移除之前有主機通過ssh連線到本機,其不會被中斷,在移除之後,其他主機則不能使用ssh連線本機
在這裡插入圖片描述
firewall-cmd --complete-reload 對移除之後和之前的訪問都有影響,我們可以重新將ssh服務新增進火牆允許服務內,然後用其他主機ssh連線本機,然後在移除ssh服務,並使用此條命令重新載入
在這裡插入圖片描述
此刻,使用ssh連線本機的主機已經不能在本機做任何操作
在這裡插入圖片描述

firewalld相關實驗操作

一、只允許特定ip訪問特定服務(httpd)
1:檢視火牆狀態並開啟火牆
2:下載httpd服務並開啟
3:將172.25.66.250主機設定為可忽略火牆訪問本機80埠(httpd服務)的主機
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 172.25.66.250 -j ACCEPT
##ipv4(使用的網路協議) filter(表)、 INPUT(鏈)、 1(第一行)、 -p (使用的傳輸協議tcp/udp)、–dport(目標服務埠) 、-s(來源ip)、 -j(動作『ACCEPT /REJECT /DROP』)
firewall-cmd --direct --get-all-rules ###檢視##
在這裡插入圖片描述
4:分別用250主機和另外一臺主機訪問本機http服務
172.25.66.250主機:
在這裡插入圖片描述
172.25.66.12主機:
在這裡插入圖片描述
二、埠轉發
埠轉發(Port forwarding),有時被叫做隧道,是安全殼(SSH) 為網路安全通訊使用的一種方法。埠轉發是轉發一個網路埠從一個網路節點到另一個網路節點的行為,其使一個外部使用者從外部經過一個被啟用的NAT路由器到達一個在私有內部IP地址(區域網內部)上的一個埠。
1:在別人訪問本主機ip的時候自動轉入172.25.66.12主機
firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:tport=22:toaddr=172.25.66.12
在這裡插入圖片描述
2:開啟masquerade
MASQUERADE,地址偽裝
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
在這裡插入圖片描述
在這裡插入圖片描述
3:到172.25.66.250主機
rm -fr ~/.ssh/know.host
ssh [email protected]
在這裡插入圖片描述
可以看到,火牆自動將本機的22埠轉發到了172.25.66.12主機上
三、偽裝(訪問不同網段的主機ip,在目標主機中顯示的ip為用來偽裝的ip)
(一、)在本機172.25.66.11中
1:新增網絡卡並設定ip網段為172.25.0.*(0-255之間),重啟網路
在這裡插入圖片描述
2:編輯/etc/sysctl.conf
寫入:net.ipv4.ip_forward = 1
在這裡插入圖片描述
儲存退出後執行:sysctl -p
在這裡插入圖片描述
(二、)在172.25.66.12主機中
1:編輯ifcfg-eth0
寫入:GATEWAY=172.25.0.11
ip改為172.25.0.12
重啟網路
在這裡插入圖片描述
在這裡插入圖片描述
2:ping 172.25.66.X
在這裡插入圖片描述
可以看到,172.25.0.12主機可以訪問172.25.66.250主機,因為通過設定的閘道器是172.25.66.11主機的另一個IP地址,通過這個閘道器,172.25.0.12將自己偽裝成了172.25.66.11主機,所以可以訪問172.25.66.250主機