1. 程式人生 > >中小型企業級防火牆部署

中小型企業級防火牆部署

防火牆

防火牆是由軟體和硬體組成的系統,它處於安全的網路(通常是內部區域網)和不安全的網路(通常是Internet,但不侷限於Internet)之間,根據由系統管理員設定的訪問控制規則,對資料流進行過濾。
  由於防火牆置於兩個網路之間,因此從一個網路到另一個網路的所有資料流都要流經防火牆。根據安全策略,防火牆對資料流的處理方式有3種:

(1)允許資料流通過;
(2)拒絕資料流通過;
(3)將這些資料流丟棄。

當資料流被拒絕時,防火牆要向傳送者回復一條訊息,提示傳送者該資料流已被拒絕。當資料流被丟棄時,防火牆不會對這些資料包進行任何處理,也不會向傳送者傳送任何提示資訊。丟棄資料包的做法加長了網路掃描所花費的時間,傳送者只能等待迴應直至通訊超時。

  防火牆是Internet安全的最基本組成部分。但是,我們必須要牢記,僅採用防火牆並不能給整個網路提供全域性的安全性。對於防禦內部的攻擊,防火牆顯得無能為力,同祥對於那些繞過防火牆的連線(如某些人通過撥號上網),防火牆則毫無用武之地。

IPTABLES

iptables簡介

netfilter/iptables(簡稱為iptables)組成Linux平臺下的包過濾防火牆,與大多數的Linux軟體一樣,這個包過濾防火牆是免費的,它可以代替昂貴的商業防火牆解決方案,完成封包過濾、封包重定向和網路地址轉換(NAT)等功能。

iptables基礎

規則(rules)其實就是網路管理員預定義的條件,規則一般的定義為“如果資料包頭符合這樣的條件,就這樣處理這個資料包”。規則儲存在核心空間的資訊 包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務型別(如HTTP、FTP和SMTP)等。當資料包與規 則匹配時,iptables就根據規則所定義的方法來處理這些資料包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火牆的 主要工作就是新增、修改和刪除這些規則。

iptables和netfilter的關係

這是第一個要說的地方,Iptables和netfilter的關係是一個很容易讓人搞不清的問題。很多的知道iptables卻不知道 netfilter。其實iptables只是Linux防火牆的管理工具而已,位於/sbin/iptables。真正實現防火牆功能的是 netfilter,它是Linux核心中實現包過濾的內部結構。

iptables傳輸資料包的過程

(1)當一個數據包進入網絡卡時,它首先進入PREROUTING鏈,核心根據資料包目的IP判斷是否需要轉送出去。 
(2)如果資料包就是進入本機的,它就會沿著圖向下移動,到達INPUT鏈。資料包到了INPUT鏈後,任何程序都會收到它。本機上執行的程式可以傳送資料包,這些資料包會經過OUTPUT鏈,然後到達POSTROUTING鏈輸出。 
(3)如果資料包是要轉發出去的,且核心允許轉發,資料包就會如圖所示向右移動,經過FORWARD鏈,然後到達POSTROUTING鏈輸出。

iptables的規則表和鏈

表(tables)提供特定的功能,iptables內建了4個表,即filter表、nat表、mangle表和raw表,分別用於實現包過濾,網路地址轉換、包重構(修改)和資料跟蹤處理。
  鏈(chains)是資料包傳播的路徑,每一條鏈其實就是眾多規則中的一個檢查清單,每一條鏈中可以有一 條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該資料包是否滿足規則所定義的條件。如果滿足,系統就會根據 該條規則所定義的方法處理該資料包;否則iptables將繼續檢查下一條規則,如果該資料包不符合鏈中任一條規則,iptables就會根據該鏈預先定 義的預設策略來處理資料包。
  Iptables採用“表”和“鏈”的分層結構。在REHL4中是三張表五個鏈。現在REHL5成了四張表五個鏈了,不過多出來的那個表用的也不太多,所以基本還是和以前一樣。下面羅列一下這四張表和五個鏈。注意一定要明白這些表和鏈的關係及作用

規則表

1.filter表——三個鏈:INPUT、FORWARD、OUTPUT
作用:過濾資料包  核心模組:iptables_filter.
2.Nat表——三個鏈:PREROUTING、POSTROUTING、OUTPUT
作用:用於網路地址轉換(IP、埠) 核心模組:iptable_nat
3.Mangle表——五個鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改資料包的服務型別、TTL、並且可以配置路由實現QOS核心模組:iptable_mangle(別看這個表這麼麻煩,咱們設定策略時幾乎都不會用到它)
4.Raw表——兩個鏈:OUTPUT、PREROUTING

作用:決定資料包是否被狀態跟蹤機制處理 核心模組:iptable_raw

規則鏈

1.INPUT——進來的資料包應用此規則鏈中的策略
2.OUTPUT——外出的資料包應用此規則鏈中的策略
3.FORWARD——轉發資料包時應用此規則鏈中的策略
4.PREROUTING——對資料包作路由選擇前應用此鏈中的規則 (所有的資料包進來的時侯都先由這個鏈處理)
5.POSTROUTING——對資料包作路由選擇後應用此鏈中的規則(所有的資料包出來的時侯都先由這個鏈處理)

iptables命令引數

-A  在指定鏈的末尾新增(append)一條新的規則
-D  刪除(delete)指定鏈中的某一條規則,可以按規則序號和內容刪除
-I  在指定鏈中插入(insert)一條新的規則,預設在第一行新增
-R  修改、替換(replace)指定鏈中的某一條規則,可以按規則序號和內容替換
-L  列出(list)指定鏈中所有的規則進行檢視
-E  重新命名使用者定義的鏈,不改變鏈本身
-F  清空(flush)
-N  新建(new-chain)一條使用者自己定義的規則鏈
-X  刪除指定表中使用者自定義的規則鏈(delete-chain)
-P  設定指定鏈的預設策略(policy)
-Z  將所有表的所有鏈的位元組和資料包計數器清零
-n  使用數字形式(numeric)顯示輸出結果
-v  檢視規則表詳細資訊(verbose)的資訊
-V  檢視版本(version)
-h  獲取幫助(help)

環境搭建

企業拓撲

環境準備

DMZ區:CentOS7 --- IP:192.168.9.100 Gateway:192.168.9.254
防火牆:kali --- ip1:211.67.93.254;ip2:192.168.9.254;ip3:192.168.33.254;
外網主機:win2003 --- IP:211.67.93.100  Gateway:211.67.93.254
內網主機:win2003 --- IP:192.168.33.100 Gateway:192.168.33.254

環境部署

Firewalld路由模式

在防火牆(kali)上設定轉發功能

→ Qftm ← :~# vim /etc/sysctl.conf

Firewalld初始化策略

Firewalld預設策略

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT

Firewalld安全策略

允許內網主機訪問外網,但不允許外網訪問內網主機

允許內網訪問外網 動態NAT 自動封裝改變源IP

iptables -t nat -A POSTROUTING -s 192.168.9.0/24 -o eth1 -j MASQUERADE

限制外網訪問內網(限制新連線,舊連結是內網訪問外網返回回來的資料)

iptables -t filter -A FORWARD -i eth1 -o eth3 -m state --state NEW -j DROP

測試

內網ping外網,能ping通

  外網ping內網ping不通

外網不能直接訪問DMZ,允許外網通過公網IP訪問DMZ區域中Web服務

不允許外網直接訪問DMZ區

iptables -t nat -A PREROUTING -d 192.168.9.0/24 -i eth1 -j DNAT --to-destination 192.168.9.10
iptables -t filter -A FORWARD -i eth1 -d 192.168.9.10 -m state --state NEW -j DROP

  使用DNAT通過訪問公網IP訪問DMZ中web伺服器

iptables -t nat -A PREROUTING -d 211.67.93.254 -i eth1 -p tcp --dport 80 -j DNAT --to-destination 192.168.9.100

允許外網通過公網IP SSH DMZ區域web伺服器進行遠端管理

iptables -t nat -A PREROUTING -d 211.67.93.254 -i eth1 -p tcp --dport ssh -j DNAT --to-destination 192.168.9.100

  遠端SSH

允許外網通過公網IP ping DMZ區域主機

iptables -t nat -A PREROUTING -d 211.67.93.254 -i eth1 -p icmp --icmp 8 -j DNAT --to-destination 192.168.9.100

  Ping測試

允許內網主機訪問內網DMZ區域的伺服器,DMZ區域的伺服器不允許訪問內網主機

允許內網主機既可通過公網IP訪問DMZ中web伺服器也可通過內網IP

iptables -t nat -A PREROUTING -d 211.67.93.254 -i eth3 -p tcp --dport 80 -j DNAT --to-destination 192.168.9.100

  訪問測試

不允許DMZ區直接訪問內網

避免當侵略者攻陷DMZ時,進一步攻到內測

iptables -t filter -A FORWARD -i eth2 -o eth3 -m state --state NEW -j DROP

Firewalld整合策略

#!/bin/bash
:<<EOF
title: Firewalld整合策略
date: 2020/01/01
author: Qftm
EOF
#初始化策略
iptables -F
iptables -t nat -F
iptables -X

#設定鏈路的預設策略
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT

##允許內網主機訪問外網,但不允許外網訪問內網主機 
#允許內網訪問外網 動態NAT 自動封裝改變源IP
iptables -t nat -A POSTROUTING -s 192.33.3.0/24 -o eth1 -j MASQUERADE
#限制外網訪問內網(限制新連線,舊連結是內網訪問外網返回回來的資料)
iptables -t filter -A FORWARD -i eth1 -o eth2 -m state --state NEW -j DROP

##外網不能直接訪問DMZ,允許外網通過公網IP訪問DMZ區域中Web服務 
#不允許外網直接訪問DMZ區
iptables -t nat -A PREROUTING -d 192.168.9.0/24 -i eth1 -j DNAT --to-destination 192.168.9.10
iptables -t filter -A FORWARD -i eth1 -d 192.168.9.10 -m state --state NEW -j DROP
#使用DNAT通過訪問公網IP訪問DMZ中web伺服器
iptables -t nat -A PREROUTING -d 211.67.93.254 -i eth1 -p tcp --dport 80 -j DNAT --to-destination 192.168.9.100
#允許外網通過公網IP SSH DMZ區域web伺服器進行遠端管理
iptables -t nat -A PREROUTING -d 211.67.93.254 -i eth1 -p tcp --dport ssh -j DNAT --to-destination 192.168.9.100
#允許外網通過公網IP ping DMZ區域主機
iptables -t nat -A PREROUTING -d 211.67.93.254 -i eth1 -p icmp --icmp 8 -j DNAT --to-destination 192.168.9.100

##允許內網主機訪問內網DMZ區域的伺服器,DMZ區域的伺服器不允許訪問內網主機 
#允許內網主機既可通過公網IP訪問DMZ中web伺服器也可通過內網IP
iptables -t nat -A PREROUTING -d 211.67.93.254 -i eth3 -p tcp --dport 80 -j DNAT --to-destination 192.168.9.100
#不允許DMZ區直接訪問內網
iptables -t filter -A FORWARD -i eth2 -o eth3 -m state --state NEW -j DROP