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主機