Linux防火牆基礎與編寫防火牆規則


        Iptables采用了表和鏈的分層結構,每個規則表相當於內核空間的一個容器,根據規則集的不同用途划分為默認的四個表,raw表,mangle表,nat表,filter表,每個表容器內包括不同的規則鏈,根據處理數據包的不同時機划分為五種鏈,而決定是否過濾或處理數據包的各種規則,按先后順序存放在各規則鏈中。

1、防火牆:內核中具有包過濾體系

內核態:netfilter

用戶態:iptables  管理工具

工作在網絡層:可以對ip地址、端口、協議等信息進行處理

2、規則鏈:規則的集合

五種鏈:(必須大寫)

INPUT:入站

OUTPUT:出站

FORWARD:轉發

POSTROUTING:路由后轉換

PREROUTING:路由前轉換

1)INPUT鏈:當收到訪問防火牆本機地址的數據包(入站),應用此鏈中的規則。

2)OUTPUT鏈:當防火牆本機向外發送數據包(出站)時,應用此鏈中的規則。

3)FORWARD鏈:當收到需要通過防火牆中轉發送給其他地址的數據包(轉發)時,應用此鏈中的規則。

4)PREROUTING鏈:在對數據包做路由選擇之前,應用此鏈中的規則。

5)POSTROUTING鏈:在對數據包做路由選擇之后,應用此鏈中的規則。

3、規則表:規則鏈的集合

有4個表:

Raw:狀態跟蹤

Mangle:設置標記

Nat:地址轉換

Filter:包過濾

1)filter表:用來對數據包進行過濾,表內包含三個鏈,即:INPUT,FORWARD,OUTPUT

2)Nat表:nat表主要用來修改數據包的ip地址、端口號等信息。包含三個鏈,即PREROUTING,POSTROUTING,OUTPUT

3)Mangle表:用來修改數據包的TOS、TTL,或者為數據包設置MARL標記,實現流量整形,策略路由等高級應用,包含五個鏈,PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD

4)Raw表:用來決定是否對數據包進行狀態跟蹤,包含兩個鏈:即OUTPUT,PREROUTING

4、規則的匹配順序:

1)規則表的順序

當數據包抵達防火牆時,將依次應用raw表,mangle表,nat表和filter表中對應鏈內的規則,應用順序為raw-mangle-nat-filter

按順序依次檢查,匹配即停止(LOG策略除外),無匹配項,執行默認策略。

2)規則鏈之間的順序

入站數據流向:來自外界的數據包到達防火牆后,首先被PRETOUTING鏈處理,然后進行路由選擇,如果數據包的目標地址是防火牆本機,那么內核將其傳遞給INPUT鏈進行處理,通過以后再講給系統的上層應用程序進行響應。

轉發數據流向:來自外界的數據包到達防火牆后,首先被PREROUTING鏈處理,然后再進行路由選擇,如果數據包的目的地址是其他外部的地址,則內核將其傳遞給FORWARD鏈進行處理,最后交給POSTROUTING鏈進行處理。

出站數據流向:防火牆本機向外部地址發送的數據包,首先被OUTOUT處理,然后進行路由選擇,再交給POSTROUTING鏈進行處理。

3)規則鏈內部各條防火牆規則之間的順序

當數據包經過每條規則鏈時,依次按第一條規則,第二條規則......的順序進行匹配和處理,鏈內的過濾遵循“匹配即停止”的原則,一旦找到一條相匹配的規則,則不再檢查本鏈內后續的其它規則,如果比對完整個鏈,也找不到與數據包相匹配的規則,就按照規則鏈的默認策略進行處理。

5、iptables語法:

Iptables  -t  表名  命令選項  鏈名  條件選項  -j  控制類型

1)不指定表名,為filter表

2)命令選項、鏈名、控制類型必須大寫,其他必須小寫

3)條件選項可以設置多項

6、控制類型:

1)ACCEPT:允許

2)REJECT:拒絕,返回信息

3)DROP:丟棄,無信息

4)LOG:記錄日志,傳給下一條規則

5)SNAT:源地址轉換

6)DNAT:目標地址轉換

7)MASQUERADE:ip偽裝,源地址轉換

8)REDIRECT:重定向

7、命令選項:

-A:追加到末尾

-I:插入(默認插入到第一條)

-L:查看

-D:刪除(必須加序號)

-F:清空,但默認策略不清空

-P:默認策略,只有ACCEPT或DROP兩種

-R:替換

-X:刪除自定義鏈

-N:新建自定義鏈

-n:以數字方式顯示

--line-number:添加序號

8、條件選項:

1)通用匹配:不依賴於任何條件可直接使用

-s:源地址             -d:目標地址

-p:協議                 -i:入口

-o:出口               !:取反

2)隱含匹配:依賴指定的協議

--sport:源端口          --dport:目標端口

--tcp—flags:TCP標記

--icmp-type:icmp類型,有兩種:

Echo-request(可用8代替)      請求

Echo-reply(可用0代替)        回應

開啟轉發功能:

永久有效:vim  /etc/sysctl.conf

         Net.ipv4.ip_forward=1

生效:sysctl  -p

臨時轉發,立即生效

Sysctl  -w net.ipv4.ip_forward=1

Echo “1”  > /proc/sys/net/ipv4/ip_forward

3)顯示配置:依賴於指定的功能模塊,必須明確指定模塊名稱才可以使用

多端口匹配:-m  multiport --sports   源端口列表

                      -m  multiport  --dports  目的端口列表

IP范圍匹配:-m  iprange --src-range  ip范圍

MAC地址匹配:-m  mac  --mac-source MAC地址

狀態匹配:-m  state --state   連接狀態

 

linux編寫iptables防火牆規則示例

        iptables和asa防火牆類似,作用一樣,都是為了保證網絡安全,系統安全,服務器的安全,和asa一樣也需要建立策略。

下面通過一個案例先了解一下iptables防火牆規則的相關基礎操作。(關於防火牆的相關知識概念,請關注微信公眾號 L寶寶聊IT  Linux防火牆基礎與編寫防火牆規則 文章)

實驗環境:

網站服務器ip地址是192.168.1.5,網關服務器的內網地址是eth0:192.168.1.254,外網地址是eth1:172.16.16.254,internter測試機是172.16.16.172。實現三台系統之間可以互相ping通。

 

網管服務器需要開啟路由轉發功能

 

也可進入vim /etc/sysctl.conf 修改為 1 永久開啟路由轉發功能

最后測試可以互相ping通即可

下面介紹各種規則如何應用

一、編寫防火牆規則

1、例如:在網站服務器的filter表的INPUT鏈中插入一條規則,拒絕發送給本機使用的ICMP協議的數據包。

執行:Iptables -t  filter  -I INPUT -p icmp  -j REJECT

查看規則:iptables -L INPUT --line-numbers

 

然后再次使用172.16.16.172ping192.168.1.5,出現目標端口不可到達,無法ping通

2、添加新的規則

例如:

1)在filter表INPUT鏈的末尾添加一條規則,接受tcp協議(實驗之前在網站服務器上搭建ftp服務,使用internet測試機可以訪問ftp服務器)

在internet測試機上訪問

默認網站服務器的防火牆開啟,所以不能訪問,然后執行:

iptables -t   filter  -A INPUT  -p  tcp  -j   ACCEPT

發現依然不能訪問,因為-A是在末尾添加一條新的規則

所以執行:Iptables  -I  INPUT  -p tcp  -j  ACCEPT(-I默認是添加在第一條)

再次訪問ftp

在網站服務器上查看規則

例:2)添加規則允許udp數據包通過,默認位於filter的第一條

Iptables -I INPUT  -p  udp -j  ACCEPT

例:3)指定順序號,添加規則允許icmp數據包通過,位於第2條

Iptables -I INPUT 2 -p icmp  -j  ACCEPT

查看規則列表:

3、以數字形式顯示規則列表,加快執行速度

Iptables -n  -L  INPUT  (-n  -L  可簡寫為-nL)

4、刪除,清空規則

1)若要刪除filter表INPUT鏈中的第三條規則,執行:

Iptables -D  INPUT 3

2)清空指定鏈或表中的所有防火牆規則,使用-F

Iptables -F  INPUT

3)清空filter表,nat表,mangle表

Iptables   -F

Iptables   -t   nat   -F

Iptables   -t   mangle  -F

5、設置默認策略:當找不到任何一條能夠匹配數據包規則時,則執行默認策略

例如1)將filter表中FORWARD鏈的默認策略設置為丟棄,OUTPUT鏈的默認策略設置為允許(默認策略不參與規則的順序編排,因此在前后並無區別。)

二、規則的匹配條件

對於同一條防火牆規則,可以指定多個匹配條件,這些條件必須都滿足規則才能生效。

1、通用匹配:分為三種類型,協議匹配,地址匹配,網絡接口匹配。

1)協議匹配

如果在網關服務器上開啟防火牆,那么internet測試機是不能訪問網站服務器的。

查看網關服務器的FORWARD鏈,發現只有一條拒絕all。

如果想允許路由轉發,執行下面的命令:

iptables -I  FORWARD  -j  ACCEPT,然后在internet測試機上可以訪問網站服務器。

然后如果想丟棄通過icmp協議訪問防火牆本機的數據包,允許轉發經過防火牆的除icmp協議之外的數據包,可以執行:

Iptables -I  INPUT  -p  icmp -j  DROP

Iptables -A  FORWARD  !  -p  icmp -j  ACCEPT

 

執行之前先在internet測試機上ping網關服務器的172.16.16.254和192.168.1.5都是可以ping通的。執行完之后就不能ping通了,但是依然能夠訪問網站服務器的ftp。

先在internet測試機上ping,可以ping通

然后在網關服務器上執行以下命令

在internet測試機上ping192.168.1.5和172.16.16.254都不通了,但是ftp依然可以訪問。

2)地址匹配

例1)例如:拒絕轉發源地址為172.16.16.172的數據,允許轉發源地址192.168.1.0的數據包

因為172.16.16.172就是internet測試機,所以internet測試機無法ping通192.168.1.5,也不能訪問ftp

 

例2)如果檢測到來自某網段的頻繁掃描,登錄等不良的企圖,可以立即添加防火牆規則進行封鎖。

Iptables  -I  INPUT  -s 10.20.30.0/24  -j  DROP

Iptables  -I  FORWARD  -s  10.20.30.0/24  -j  DROP

3)網絡接口匹配

例如:若要丟棄從外網接口訪問防火牆本機且源地址為私有地址的數據包,執行以下操作:

首先:在172.16.16.172上ping172.16.16.254,使之可以ping通

然后執行以下命令:

再此在172.16.16.172上ping172.16.16.254,無法ping通,因為外網接口是eth1

 

2、隱含匹配:以指定的協議匹配作為前提條件,相當於子條件。

1)端口匹配

例如:允許網段192.168.1.0/24轉發dns查詢數據包。

首先在網站服務器上開啟dns服務

vim  /var/named/chroot/var/named/google.com.zone

為了實驗效果,先在網關服務器上執行以下命令,阻止轉發

Iptables -I  FORWARD  -j  REJECT

然后在internet測試機上執行nslookup,不能解析

接下來在網關服務器上執行隱含匹配,允許為172.16.16.0網段轉發dns查詢包

再次在internet測試機上測試解析

2)ICMP類型匹配

若要禁止從其他主機ping本機,但是允許本機ping其他主機,可以執行以下操作

首先為了實驗測試方便,在網關服務器上執行:(執行之前把其它的規則都刪掉,關閉防火牆即可編寫規則后會自動打開)

nternet測試機和網站服務器之間可以互相ping通,然后執行:

如果實驗不通,把上面的最后一條改為iptables -A INPUT -p icmp-j DROP

然后測試:

3、顯示匹配

必須調用相應的模塊,然后方可設置匹配條件

1)多端口匹配

例如:允許網站服務器本機開放25、80、110、143端口

2)ip范圍匹配

例如:禁止轉發源地址位於192.168.4.21與192.168.4.28之間的tcp數據包。

3)mac地址匹配

例如:禁止以下mac地址的主機訪問網站服務器的任何應用。

4)狀態匹配

例如:禁止轉發與正常tcp連接無關的非syn請求數據包(如偽造的網絡攻擊數據包)。

再例如:開放本機的web服務80端口,但對發給本機的tcp應答數據包予以放行,其他入站數據包均丟棄,對應的入站規則如下:

以上就時iptables防火牆規則的基本應用,下面時上機實驗部分:

三、上機實驗

1、實驗環境和上面的一樣

網站服務器ip地址是192.168.1.5,網關服務器的內網地址是eth0:192.168.1.254,外網地址是eth1:172.16.16.254,internter測試機是172.16.16.172。實現三台系統之間可以互相ping通。

2、為網站服務器編寫入站規則

(1)本例中所有規則均在filter表的INPUT鏈內添加,默認策略設置為DROP。

(2)使用“-p icmp ! --icmp-type 8 ”的條件匹配非ICMP請求的數據包。

(3)使用“-p tcp --dport 80”的條件匹配對TCP 80端口的訪問。

(4)使用“-p tcp -m state --stateESTABLISHED,RELATED”匹配TCP響應數據包。

 

[root@localhost ~]# iptables -P INPUT DROP

[root@localhost ~]# iptables -A INPUT -p icmp !--icmp-type 8 -j ACCEPT

[root@localhost ~]# iptables -A INPUT -p tcp--dport 80 -j ACCEPT

[root@localhost ~]# iptables -A INPUT -p tcp -mstate --state ESTABLISHED,RELATED -j ACCEPT

 

(5)測試入站控制效果:從其他主機可以訪問本機中的Web服務,但不能訪問其他任何服務(如FTP、DNS);從本機可以ping通其他主機,但其他主機無法ping通本機。

 

[root@localhost ~]# iptables -nL INPUT

Chain INPUT (policy ACCEPT)

target   prot opt source           destination

ACCEPT   icmp --  0.0.0.0/0         0.0.0.0/0    icmp !type 8

ACCEPT   tcp  --  0.0.0.0/0         0.0.0.0/0    tcp dpt:80

ACCEPT   tcp  --  0.0.0.0/0         0.0.0.0/0    state RELATED,ESTABLISHED

…… //其他測試過程略

 

3、為網關服務器編寫轉發規則

(1)本例中所有規則均在filter表的FORWARD鏈內添加,默認策略設置為DROP。

(2)針對TCP協議的80、20、21、25、110、143端口,以及UDP協議的53端口,分別為從局域網訪問Internet、從Internet響應局域網請求的過程編寫轉發規則。

 

[root@localhost ~]# iptables -P FORWARD DROP

[root@localhost ~]# iptables -A FORWARD -s192.168.1.0/24 -p tcp -m multiport --dport 20,21,

80,25,110,143 -o eth1 -j ACCEPT

[root@localhost ~]# iptables -A FORWARD -i eth1-m state --state ESTABLISHED,RELATED -j ACCEPT

[root@localhost ~]# iptables -A FORWARD -s192.168.1.0/24 -p udp --dport 53 -oeth1 -j ACCEPT

[root@localhost ~]# iptables -A FORWARD -p udp--sport 53 -i eth1-j ACCEPT

 

(3)執行DNS查詢,獲知站點web.qq.com、w.qq.com、im.qq.com當前所用的IP地址包括:112.90.141.88、112.90.141.163、112.90.141.164、58.251.149.159、58.251.60.202、123.138.238.100、123.138.238.101。然后依次針對這些IP地址編寫轉發規則,禁止到TCP協議的80、443端口的訪問。

 

[root@localhost ~]# vi /opt/black_ip.txt            //編寫封禁地址列表

112.90.141.88

112.90.141.163

112.90.141.164

58.251.149.159

58.251.60.202

123.138.238.100

123.138.238.101

[root@localhost ~]# for i in `cat/opt/black_ip.txt`; do iptables -I FORWARD -d$i -p tcp -m multiport --dport 80,443 -j DROP ; done  //讀取IP地址以插入規則

 

(4)測試轉發控制效果:從局域網中的主機無法訪問Internet中的web.qq.com等被封站點,但能夠訪問其他Web站點,也能夠訪問DNS、FTP等網絡服務。

 

[root@localhost ~]# iptables -nL FORWARD

Chain FORWARD (policy DROP)

target  prot opt source        destination

DROP    tcp  --  0.0.0.0/0     123.138.238.101     multiportdports 80,443

DROP   tcp  --  0.0.0.0/0     123.138.238.100     multiport dports80,443

DROP   tcp  --  0.0.0.0/0    58.251.60.202       multiport dports80,443

DROP    tcp  --  0.0.0.0/0   58.251.149.159      multiport dports80,443

DROP    tcp  --  0.0.0.0/0     112.90.141.164      multiport dports80,443

DROP    tcp  --  0.0.0.0/0     112.90.141.163      multiport dports80,443

DROP   tcp  --  0.0.0.0/0     112.90.141.88       multiport dports

 

文章參考微信公眾號:L寶寶聊IT


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM