Linux網路安全技術與實現第2章之原理及實驗

tjjingpan發表於2018-10-29

2.2 何謂netfilter

 

netfilter的四個表是filter、nat、mangle及raw表。

  • filter:filter是Netfilter中最重要的機制,其任務是執行資料包的過濾操作,也就是起到防火牆的作用。
  • nat:nat(Network Address Translation,NAT)也是防火牆上一個不可或缺的重要機制,比較通俗的方式來說,其功能就是IP分享器,只不過其所執行的功能,比一般市場上的IP分享器功能強大得多。
  • mangle:mangle是一個很特殊的機制,我們可以通過mangle機制來修改經過防火牆內資料包內容。
  • raw:負責加快資料包穿過防火牆機制的速度,由此提高防火牆的效能。

不同的表有屬於獨立的幾個不同的鏈,而這個鏈的空間就是我們存放“規則”的地方。當然,不同的鏈其功能及用途也是不一樣的。

使用filter機制來構建閘道器式防火牆

假設192.168.31.10是因特網上的一臺主機,執行了smtp,pop3,http服務。

  • 192.168.10.20只能訪問外網192.168.31.10的smtp和pop3服務。
  • 內網主機192.168.10.0/24網段上的其它主機可以訪問因特網上的DNS、SMTP、POP3,http,及sshd服務。
  • 因特網上的主機不得訪問企業內的任何主機。

 


      1 #/bin/bash
      2 #===============< Set Variable >=====================================
      3 IPT=/sbin/iptables
      4 SRV=192.168.31.10
      5 ACC_PC=192.168.10.20
      6 #=======================< Set Default Policy >=======================
      7 $IPT -t filter -P INPUT DROP
      8 $IPT -t filter -P FORWARD DROP
      9 #===============<  Clear Original Rule >> =============================
     10 $IPT -t filter -F
     11 #==============< Set-INPUt RULE>>======================================
     12 $IPT -A INPUT -p tcp -m state --state INVALID -j DROP
     13 $IPT -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
     14 $IPT -t filter -A INPUT -p tcp -s 192.168.31.0/24 --dport 22 -j ACCEPT
     15 #==============< Set FORWARD RULE>>====================================
     16 $IPT -A FORWARD -i ens33 -o ens37 -m state --state INVALID -j DROP
     17 $IPT -A FORWARD -i ens33 -o ens37 -m state --state ESTABLISHED,RELATED -j ACCEPT
     18 $IPT -A FORWARD -i ens37 -o ens33 -p tcp -s $ACC_PC -d $SRV --dport 25 -j ACCEPT
     19 $IPT -A FORWARD -i ens37 -o ens33 -p tcp -s $ACC_PC -d $SRV --dport 110 -j ACCEPT
     20 $IPT -A FORWARD -i ens37 -o ens33 -p  all -s $ACC_PC  -j DROP
     21 $IPT -A FORWARD -i ens37 -o ens33 -p tcp --dport 80 -j ACCEPT
     22 $IPT -A FORWARD -i ens37 -o ens33 -p udp --dport 53 -j ACCEPT
     23 $IPT -A FORWARD -i ens37 -o ens33 -p udp --dport 110 -j ACCEPT
     24 $IPT -A FORWARD -i ens37 -o ens33 -p tcp --dport 22 -j ACCEPT
~

第1行

設定Shell直譯器的路徑。

第2-5行

將未來可能會變動的資訊或太長的命令簡化成“變數”

第6-8行

設定INPUT 及FORWARD鏈的預設策略為DROP,其目的分別如下:

        設定INPUT鏈的預設策略為DROP的目的:雖然本示例的主要目的是使用閘道器式防火牆來保護及限制企業內的主機,但請千萬別忽略了防火牆自身的安全,否則防火牆若被入侵了,整個企業的安全防護就形同虛設了。因此,我們拒絕了所有對防火牆的連線操作,但別忘了,因為我們有可能在防火牆主機執行如軟體更新等需要對外產生連線的操作,所以在此並沒有將OUTPUT鏈的預設策略設定為DROP。

          設定FORWARD鏈的預設策略為DROP的目的:因為本示例是以嚴格的方式來控制企業對外的連線,以及因特網對企業內的連線,因此,筆者將fFORWARD鏈的預設策略設定為DROP,如此一來,企業內外就等於“斷線”的狀態。稍後,我們再從FORWARD鏈中逐一啟用允許的對外連線通道陽即可。

第10行

清除原有的防火牆規則

第11-14行,

因為INPUT鏈的預設策略已設定為DROP,因此將導致對外建立連線時應答資料包無法正常穿過防火牆的問題,我們必須在INPUT鏈中設定ESTABLISHED 及RELATED狀態的資料包,才可以正常地返回。

第16行,

針所有從因特網送到企業內部且狀態是INVALID的資料包丟棄。

第17行,允許所有企業內部對外建立連線時所產生的應答資料包正常返回企業內部。

第18-20行

設定192.168.10.20主機只能訪問因特網上192.168.31.10這臺主機的SMTP及POP3服務。

第21行-24行

在192.168.10.0/24網段中的主機只能訪問因特網上的SMTP、POP3、HTTP及SSHD服務。

 

netfilter的NAT機制

SNAT

 iptables -t nat -A POSTROUTING -o ens33 -s 192.168.10.0/24 -j SNAT --to 192.168.31.100

 

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
iptables -t nat -A  PREROUTING -d 192.168.1.196 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.101

 

相關文章