Linux 深入研究iptables防火墻基礎(chǔ)

2018-07-31 14:41 更新

防偽碼:沒有比腳更長的路,沒有比人更高的山

                第十章 iptables防火墻(一)

前言:我們?cè)谝郧皩W(xué)習(xí)過asa防火墻,對(duì)防火墻有一定的了解,那么iptables和asa防火墻類似,作用一樣,都是為了保證網(wǎng)絡(luò)安全,系統(tǒng)安全,服務(wù)器的安全,和asa一樣也需要建立策略,個(gè)人覺得比asa的策略要繁瑣一點(diǎn),但“只要功夫深鐵杵磨成針”。

一、基礎(chǔ)概念

1、iptables表、鏈結(jié)構(gòu)

a、規(guī)則表

表的作用:容納各種規(guī)則鏈

表的劃分依據(jù):防火墻規(guī)則的作用相似

默認(rèn)包括4個(gè)規(guī)則表

raw表:確定是否對(duì)該數(shù)據(jù)包進(jìn)行狀態(tài)跟蹤

mangle表:為數(shù)據(jù)包設(shè)置標(biāo)記

nat表:修改數(shù)據(jù)包中的源、目標(biāo)IP地址或端口

filter表:確定是否放行該數(shù)據(jù)包(過濾)

b、規(guī)則鏈

規(guī)則的作用:對(duì)數(shù)據(jù)包進(jìn)行過濾或處理

鏈的作用:容納各種防火墻規(guī)則

鏈的分類依據(jù):處理數(shù)據(jù)包的不同時(shí)機(jī)

默認(rèn)包括5種規(guī)則鏈

INPUT:處理入站數(shù)據(jù)包

OUTPUT:處理出站數(shù)據(jù)包

FORWARD:處理轉(zhuǎn)發(fā)數(shù)據(jù)包

POSTROUTING鏈:在進(jìn)行路由選擇后處理數(shù)據(jù)包

PREROUTING鏈:在進(jìn)行路由選擇前處理數(shù)據(jù)包

如圖所示:

2、數(shù)據(jù)包過濾的匹配流程

a、規(guī)則表

raw——mangle——nat——filter

b、規(guī)則鏈

入站數(shù)據(jù)流向:來自外界的數(shù)據(jù)包到達(dá)防火墻后,首先被PRETOUTING鏈處理,然后進(jìn)行路由選擇,如果數(shù)據(jù)包的目標(biāo)地址是防火墻本機(jī),那么內(nèi)核將其傳遞給INPUT鏈進(jìn)行處理,通過以后再講給系統(tǒng)的上層應(yīng)用程序進(jìn)行響應(yīng)。

 轉(zhuǎn)發(fā)數(shù)據(jù)流向:來自外界的數(shù)據(jù)包到達(dá)防火墻后,首先被PREROUTING鏈處理,然后再進(jìn)行路由選擇,如果數(shù)據(jù)包的目的地址是其他外部的地址,則內(nèi)核將其傳遞給FORWARD鏈進(jìn)行處理,最后交給POSTROUTING鏈進(jìn)行處理。

 出站數(shù)據(jù)流向:防火墻本機(jī)向外部地址發(fā)送的數(shù)據(jù)包,首先被OUTPUT處理,然后進(jìn)行路由選擇,再交給POSTROUTING鏈進(jìn)行處理。

c、規(guī)則鏈內(nèi)部各條防火墻規(guī)則之間的順序

匹配即停(LOG日志操作的規(guī)則除外)

找不到相匹配的規(guī)則,則按該鏈的默認(rèn)策略處理

二、編寫防火墻規(guī)則

實(shí)驗(yàn)環(huán)境:

網(wǎng)站服務(wù)器ip地址是192.168.1.7,網(wǎng)關(guān)服務(wù)器的內(nèi)網(wǎng)地址是192.168.1.254,外網(wǎng)地址是172.16.16.254,internter測試機(jī)是172.16.16.16。

vim /etc/sysctl.conf

使用internet測試機(jī)172.16.16.16可以ping通192.168.1.7

1、 例如:在網(wǎng)站服務(wù)器的filter表的INPUT鏈中插入一條規(guī)則,拒絕發(fā)送給本機(jī)使用的ICMP協(xié)議的數(shù)據(jù)包。

執(zhí)行:Iptables  -t  filter  -I  INPUT -p icmp  -j REJECT

查看規(guī)則:iptables -L INPUT --line-numbers

然后再次使用172.16.16.172ping192.168.1.5,出現(xiàn)目標(biāo)端口不可到達(dá),無法ping通

2、 添加新的規(guī)則

例如:1)在filter表INPUT鏈的末尾添加一條規(guī)則,接受tcp協(xié)議(實(shí)驗(yàn)之前在網(wǎng)站服務(wù)器上搭建ftp服務(wù),使用internet測試機(jī)可以訪問ftp服務(wù)器)

service vsftpd start

在internet測試機(jī)上訪問

默認(rèn)網(wǎng)站服務(wù)器的防火墻開啟,所以不能訪問,然后執(zhí)行:

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

 發(fā)現(xiàn)依然不能訪問,因?yàn)?A是在末尾添加一條新的規(guī)則

所以執(zhí)行:Iptables  -I INPUT  -p  udp  -j  ACCEPT(-I默認(rèn)是添加在第一條)

在網(wǎng)站服務(wù)器上查看規(guī)則:

例:2)添加規(guī)則允許udp數(shù)據(jù)包通過,默認(rèn)位于filter的第一條

Iptables  -I INPUT  -p  udp  -j  ACCEPT

 

例:3)指定順序號(hào),添加規(guī)則允許icmp數(shù)據(jù)包通過,位于第2條

Iptables  -I INPUT 2 -p icmp  -j  ACCEPT

查看規(guī)則列表:

3、 以數(shù)字形式顯示規(guī)則列表,加快執(zhí)行速度

4、 刪除,清空規(guī)則

1) 若要?jiǎng)h除filter表INPUT鏈中的第三條規(guī)則,執(zhí)行:

Iptables  -D  INPUT 3

 

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

Iptables  -F INPUT

 

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

Iptables -F

Iptables -t nat -F

Iptables -t mangle -F

5、 設(shè)置默認(rèn)策略:當(dāng)找不到任何一條能夠匹配數(shù)據(jù)包規(guī)則時(shí),則執(zhí)行默認(rèn)策略

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

三、 規(guī)則的匹配條件

對(duì)于同一條防火墻規(guī)則,可以指定多個(gè)匹配條件,這些條件必須都滿足規(guī)則才能生效。

1、 通用匹配:分為三種類型,協(xié)議匹配,地址匹配,網(wǎng)絡(luò)接口匹配。

1) 協(xié)議匹配

如果在網(wǎng)關(guān)服務(wù)器上開啟防火墻,那么internet測試機(jī)是不能訪問網(wǎng)站服務(wù)器的。

查看網(wǎng)關(guān)服務(wù)器的FORWARD鏈,發(fā)現(xiàn)只有一條拒絕all,如果想允許路由轉(zhuǎn)發(fā),執(zhí)行下面的命令:iptables -I FORWARD -j ACCEPT,然后在internet測試機(jī)上可以訪問網(wǎng)站服務(wù)器。

然后如果想丟棄通過icmp協(xié)議訪問防火墻本機(jī)的數(shù)據(jù)包,允許轉(zhuǎn)發(fā)經(jīng)過防火墻的除icmp協(xié)議之外的數(shù)據(jù)包,可以執(zhí)行:

Iptables  -I INPUT -p icmp -j DROP

Iptables  -A FORWARD ! -p icmp ACCEPT

 

執(zhí)行之前先在internet測試機(jī)上ping網(wǎng)關(guān)服務(wù)器的172.16.16.254和192.168.1.7都是可以ping通的。執(zhí)行完之后就不能ping通了,但是依然能夠訪問網(wǎng)站服務(wù)器的ftp。

先在internet測試機(jī)上ping,可以ping通

然后在網(wǎng)關(guān)服務(wù)器上執(zhí)行以下命令

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

 

2) 地址匹配

例1)例如:拒絕轉(zhuǎn)發(fā)源地址為172.16.16.172的數(shù)據(jù),允許轉(zhuǎn)發(fā)源地址192.168.1.0的數(shù)據(jù)包

因?yàn)?72.16.16.172就是internet測試機(jī),所以internet測試機(jī)無法ping通192.168.1.5,也不能訪問ftp

例2)如果檢測到來自某網(wǎng)段的頻繁掃描,登錄等不良的企圖,可以立即添加防火墻規(guī)則進(jìn)行封鎖。

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

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

3) 網(wǎng)絡(luò)接口匹配

例如:若要丟棄從外網(wǎng)接口訪問防火墻本機(jī)且源地址為私有地址的數(shù)據(jù)包,執(zhí)行以下操作:

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


然后執(zhí)行以下命令:

再次在172.16.16.172上ping172.16.16.254,無法ping通,因?yàn)橥饩W(wǎng)接口是eth1


2、 隱含匹配:以指定的協(xié)議匹配作為前提條件,相當(dāng)于子條件。

1) 端口匹配

例如:允許網(wǎng)段192.168.1.0/24轉(zhuǎn)發(fā)dns查詢數(shù)據(jù)包。

 

首先在網(wǎng)站服務(wù)器上開啟dns服務(wù)

為了實(shí)驗(yàn)效果,先在網(wǎng)關(guān)服務(wù)器上執(zhí)行以下命令,阻止轉(zhuǎn)發(fā)

然后在internet測試機(jī)上執(zhí)行nslookup,不能解析

接下來在網(wǎng)關(guān)服務(wù)器上執(zhí)行隱含匹配,允許為172.16.16.0網(wǎng)段轉(zhuǎn)發(fā)dns查詢包


再次在internet測試機(jī)上測試解析

2) ICMP類型匹配

若要禁止從其他主機(jī)ping本機(jī),但是允許本機(jī)ping其他主機(jī),可以執(zhí)行以下操作

 

首先為了實(shí)驗(yàn)測試方便,在網(wǎng)關(guān)服務(wù)器上執(zhí)行:(執(zhí)行之前把其它的規(guī)則都刪掉)

執(zhí)行之后internet測試機(jī)和網(wǎng)站服務(wù)器之間可以互相ping通

然后執(zhí)行:

實(shí)驗(yàn)效果:

3、 顯示匹配

必須調(diào)用相應(yīng)的模塊,然后方可設(shè)置匹配條件

1) 多端口匹配

例如:允許網(wǎng)站服務(wù)器本機(jī)開放25、80、110、143端口。

2) ip范圍匹配

例如:禁止轉(zhuǎn)發(fā)源地址位于192.168.4.21與192.168.4.28之間的tcp數(shù)據(jù)包。

3) mac地址匹配

例如:禁止以下mac地址的主機(jī)訪問網(wǎng)站服務(wù)器的任何應(yīng)用。

4) 狀態(tài)匹配

例如:禁止轉(zhuǎn)發(fā)與正常tcp連接無關(guān)的非syn請(qǐng)求數(shù)據(jù)包(如偽造的網(wǎng)絡(luò)攻擊數(shù)據(jù)包)。

再例如:開放本機(jī)的web服務(wù)80端口,但對(duì)發(fā)給本機(jī)的tcp應(yīng)答數(shù)據(jù)包予以放行,其他入站數(shù)據(jù)包均丟棄,對(duì)應(yīng)的入站規(guī)則如下:

實(shí)戰(zhàn)演練:

一、實(shí)驗(yàn)環(huán)境:

二、需求描述

1、為網(wǎng)站服務(wù)器編寫入站規(guī)則

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

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

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

(4)使用“-p tcp -m state --state ESTABLISHED,RELATED”匹配TCP響應(yīng)數(shù)據(jù)包。

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

2、為網(wǎng)關(guān)服務(wù)器編寫轉(zhuǎn)發(fā)規(guī)則

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

(2)針對(duì)TCP協(xié)議的80、20、21、25、110、143端口,以及UDP協(xié)議的53端口,分別為從局域網(wǎng)訪問Internet、從Internet響應(yīng)局域網(wǎng)請(qǐng)求的過程編寫轉(zhuǎn)發(fā)規(guī)則。

(3)執(zhí)行DNS查詢,獲知站點(diǎn)web.qq.com、w.qq.com、im.qq.com當(dāng)前所用的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。然后依次針對(duì)這些IP地址編寫轉(zhuǎn)發(fā)規(guī)則,禁止到TCP協(xié)議的80、443端口的訪問。

 


注:下面的變量的意思是讀取IP地址以插入規(guī)則

(4)測試轉(zhuǎn)發(fā)控制效果:從局域網(wǎng)中的主機(jī)無法訪問Internet中的web.qq.com等被封站點(diǎn),但能夠訪問其他Web站點(diǎn),也能夠訪問DNS、FTP等網(wǎng)絡(luò)服務(wù)。

謝謝觀看,希望能真心的幫到您!

本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)