天天看點

Linux 防火牆配置(iptables和firewalld)

作者:老李講安全

大家好,我是老李。今天和大家聊聊Linux系統常見的防火牆,目前常見的防火牆有iptables和firewalld兩款。其中Centos7以下的版本預設都裝的是iptables,而centos7以上的版本是firewalld。

一、防火牆基本概念

防火牆就是根據系統管理者設定的規則來控制資料包的進出,主要是保護内網的安全,目前 Linux 系統的防火牆類型主要有兩種:分别是 [iptables] 和 firewalld

1、Iptables-靜态防火牆

早期的 Linux 系統中預設使用的是 iptables 防火牆,配置檔案在 / etc/sysconfig/iptables主要工作在網絡層,使用鍊式規則,隻可以過濾網際網路的資料包,無法過濾從内網到内網的資料包 Iptables 隻可以通過指令行進行配置 Iptables 預設是允許所有,需要通過拒絕去做限制 Iptables 在修改了規則之後必須得全部重新整理才可以生效,還會丢失連接配接(無法守護程序)

2、Firewalld-動态防火牆

取代了之前的 iptables 防火牆,配置檔案在 / usr/lib/firewalld 和 / etc/fiewalld 中,主要工作在網絡層,新增區域概念,不僅可以過濾網際網路的資料包,也可以過濾内網的資料包,Firewalld 不僅可以通過指令行進行配置,也可以通過圖形化界面配置,Firewalld 預設是拒絕所有,需要通過允許去放行,Firewalld 可以動态修改單條規則,動态管理規則集(允許更新規則而不破環現有會話和連接配接,可以守護程序)

注意事項

iptables 和 firewaldl 都隻是 linux 防火牆的管理程式,真正的防火牆執行者是位于核心的 netfilter,隻不過 firwalld 和 iptables 的結果以及使用方法不一樣 在配置防火牆時,不建議兩種配置方法結合使用(建議隻使用其中的一種)

二、Iptables 講解

1、iptables防火牆的組成

Iptables 配置防火牆依靠四個部分實作:表、規則鍊、規則(比對條件)、控制類型組成。

Iptables 表,處理優先級由高到低,表與表之間都是獨立的

raw表,是否對某個資料包進行狀态追蹤(包含 OUTPUT、PREAUTING 兩個規則鍊)

mangle表,修改資料包内容;可以做流量整形、對資料包設定标記(包含所有規則鍊)

nat表,負責位址轉換功能;修改資料包中的源目 IP 位址或端口(包含 IN、OU、PR、PO 三個規則鍊)

filter表,負責過濾資料包;對資料包時允許放行還是不允許放行(包含 IN、OU、FO 三個規則鍊) Iptables 規則鍊

什麼是規則鍊,很多個規則組成一個規則鍊,資料包從上往下做比對,比對成功就結束比對,并執行相應的控制類型(建議需要将精準的政策放在上面)

規則鍊類型,INPUT 處理入站的資料包(處理目标是本機的資料包) OUTPUT 處理出站的資料包(處理源是本機的資料包,一般不在此鍊上做規則) PREROUTING 在進行路由選擇前處理資料包(一般用來做 NAT Server) POSTROUTING 在進行路由選擇後處理資料包(一般用來做源 NAT) FORWARD 處理轉發的資料包(處理經過本機的資料包)

Iptables 控制類型,ACCEPT 允許資料包通過 DROP 丢棄資料包(不給對方回應,一般工作時用這個) REJCET 拒絕資料包通過(會給對方回應,對方知道自己被拒絕) SNAT 修改資料包的源位址 DNAT 修改資料包的目的位址 MASQUERADE 僞裝程一個非固定的公網 IP 位址 LOG 在 / var/log/messages 檔案中記錄日志資訊,然後将資料包傳遞給下一條規則

資料包到達防火牆根據下圖進行比對,iptables 進行資料處理關心的是四表五鍊以及流量的進出

Linux 防火牆配置(iptables和firewalld)

2、Iptables 指令配置

配置 iptables 防火牆時需要将防火牆服務開啟,systemctl start firewalld 開啟防火牆 systemctl status firewalld 檢視防火牆狀态

Linux 防火牆配置(iptables和firewalld)

Iptables指令檢視防火牆,iptables -nL -t nat 檢視 nat 表的規則鍊 -n 使用數字形式顯示輸出結果(如:通過 IP 位址) -L 檢視目前防火牆有哪些政策 -t 指定檢視 iptables 的哪個表(預設是 filter 表)

Linux 防火牆配置(iptables和firewalld)

Iptables指令配置防火牆

> iptables -P INPUT DROP将 INPUT 規則鍊的預設流量更改為拒絕
> -P 設定 / 修改預設政策
> iptables -t filter -I INPUT -s 192.168.10.0/24 -j ACCEPT在 filter 表下的 INPUT 規則鍊中配置規則
> -I num 插入規則(大寫 i,預設在鍊的開頭加入規則,可以指定序号)
> -i  從這塊網卡流入的資料
> -o 從這塊網卡流出的資料
> -s  源位址(加!表示取反)
> -d 目的位址
> -j  限制動作
> iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT拒絕 tcp 端口号為 1000~1024 的資料包
> -A 在鍊的末尾加入規則
> -p 指定協定類型
> --sport 源端口
> --dport 目的端口
> iptables -D INPUT 1删除 INPUT 規則鍊的第一條規則
> -D num 删除規則鍊
> -R 修改規則
> iptables -F清空已有的政策
> iptables-save來儲存防火牆政策
           

注意事項

當建立的規則内容與已有規則一緻時,不會覆寫原先的規則,會直接加入到現有規則鍊中(即此時此規則鍊下有兩條一摸一樣的規則,隻是順序不同) 以上關于防火牆的配置是 runtime 模式,即配置成功後立即生效,但是重新開機後會失效(需要将配置儲存,重新開機後才不會失效)

三、firewalld 講解

frewalld 是服務名稱,firewall-cmd 和 firewall-config 是配置工具名稱

firewall-cmd 基于指令行配置

firewall-config 基于圖形化界面配置(這兩個配置方式實時同步)

1、Firewalld 區域概念

預設所有網卡都是 public 區域,可以根據需要将網卡設定為不同的區域

> Trust信任區域
> 允許所有流量(所有的網絡連接配接都可以接受)
> Public公共區域
> 僅接受 ssh、dhcpv6-client 服務連接配接(預設區域)
> External外部區域
> 僅接收 ssh 服務連接配接(預設通過此區域轉發的 IPv4 流量将會進行位址僞裝)
> Home家庭區域
> 僅接受 ssh、msdns、ipp-client、samba-client、dhcpv6-client 服務網絡連接配接
> Internal内部區域
> 同 home 區域
> Work工作區域
> 僅接受 ssh、ipp-client、dhcpv6-client 服務連接配接
> Dmz隔離區域(非軍事區域)
> 僅接收 ssh 服務連接配接
> Block限制區域
> 拒絕所有傳入流量(有回應)
> Drop丢棄區域
> 丢棄所有傳入流量(無回應)
           

2、資料包到達防火牆比對規則

firewall 進行資料處理隻關心區域

  • 1.根據資料包的源 IP 位址比對,根據源位址綁定區域的區域規則進行比對(如果沒有綁定區域則比對預設區域的規則)
  • 2.根據傳入的網絡接口比對,進入此接口綁定區域的區域規則進行比對(如果沒有綁定區域則比對預設區域的規則)綁定源位址的區域規則>網卡綁定的區域規則>預設區域的規則

3、Firewalld 兩種配置方法

臨時配置(runtime 目前生效表)

立即生效,重新開機後失效,不中斷現有連接配接,無法修改服務配置永久配置(permanent 永久生效表)

不立即生效,重新開機後生效,或者立即同步後生效 會終端現有連接配接 可以修改服務配置

firewall-cmd 指令行基礎配置

如何實作永久配置

--permanent表示此配置加入到永久生效(預設臨時生效) 或者在配置結束後執行此指令 firewall-cmd --runtime-to-permanent 将臨時更改為永久 永久配置完成後需要立即同步 firewall-cmd --reload立即同步永久配置

檢視預設區域并進行更改

> firewall-cmd --get-zones               查詢可用的區域
> firewall-cmd --get-default-zone          查詢預設區域的名稱
> firewall-cmd --get-active-zone           顯示目前正在使用的區域與網卡名稱
> firewall-cmd --set-default-zone=trusted    設定預設區域為 trusted 區域
           
Linux 防火牆配置(iptables和firewalld)

将網卡 / 子網與區域綁定(允許 / 拒絕此子網通過)

> firewall-cmd --zone=drop --add-source=192.168.20.0/24将此子網與 drop 區域綁定(拒絕從此子網發來的流量)
> firewall-cmd --zone=trusted--add-interface=ens160  将此網卡與 trusted 區域綁定(允許從此網卡發來的流量)
> --remove-source  删除子網與區域的綁定
> --change-source  更改子網與區域的綁定
           
Linux 防火牆配置(iptables和firewalld)

配置區域允許 / 拒絕的協定 / 端口号

> firewall-cmd --list-all顯示目前區域的端口号、網卡、服務等資訊
> --list-all-zones        顯示所有區域的
> firewall-cmd --get-services                     列舉出來目前所有被允許的協定
> firewall-cmd --zone=public --add-service http    配置 public 區域允許通過 http 協定
> --remove-service ssh    拒絕通過 ssh 協定
> --add-port=123/tcp     允許通過 tcp 的 123 端口
> --remove-port=123/tcp  拒絕通過 tcp 的 123 端口
> cat /etc/services     儲存的協定類型和端口号
           
Linux 防火牆配置(iptables和firewalld)

配置協定端口轉換(端口映射)

> firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.1
> 将 192.168.10.1 主機的 tcp 22 端口号轉為 888 端口号(public 區域接收 ssh)
> --remove-forward-port 删除此端口映射
           
Linux 防火牆配置(iptables和firewalld)

其它配置

> --panic-on  緊急模式,切斷一切的網絡連接配接(特殊情況去使用)
> --panic-off 恢複一切的網絡連接配接
           

配置富規則 rich(更複雜、更詳細的防火牆政策配置)

優先級最高(高于預設規則,兩個并不沖突) 能夠根據源目位址、端口号來限制使用者
> firewall-cmd  --zone=public --list-rich-rule  顯示 public 區域已經配置的富規則
> firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4"source address="192.168.100.1/24"service 允許來自 192.168.
           

100.1 的主機通路 22 端口

> --add-rich-rule         添加一個富規則
> --remove-ruch-rule     删除一個富規則
> reject                  拒絕通路
           
Linux 防火牆配置(iptables和firewalld)

四、firewall-config 圖形化配置

1、安裝 firewall-config

配置 Yum 源(軟體倉庫),安裝軟體 dnf install firewall-config

Linux 防火牆配置(iptables和firewalld)

2、系統界面講解

  • 1:選擇運作時(Runtime)或永久(Permanent)模式的配置
  • 2:選擇區域
  • 3:目前正在使用的區域(黑色加粗)
  • 4:管理目前被選中區域中的服務
  • 5:管理目前被選中區域中的端口
  • 6:設定允許被通路的協定
  • 7:設定允許被通路的端口
  • 8:開啟或關閉 SNAT(源網絡位址轉換)技術
  • 9:設定端口轉發政策
  • 10:控制請求 icmp 服務的流量
  • 11:被選中區域的服務,若勾選了相應服務前面的複選框,則表示允許與之相關的流量
Linux 防火牆配置(iptables和firewalld)
  • 12:管理防火牆的富規則
  • 13:網卡資訊(網卡與區域綁定資訊)
  • 14:子網資訊(子網與區域綁定資訊)
Linux 防火牆配置(iptables和firewalld)
  • 15:檢視常用的服務協定清單
Linux 防火牆配置(iptables和firewalld)
  • 16:主機位址的黑白名單
Linux 防火牆配置(iptables和firewalld)
Linux 防火牆配置(iptables和firewalld)

繼續閱讀