防偽碼:沒有比腳更長的路,沒有比人更高的山
第十章 iptables防火墻(一)
前言:我們在以前學習過asa防火墻,對防火墻有一定的了解,那么iptables和asa防火墻類似,作用一樣,都是為了保證網(wǎng)絡安全,系統(tǒng)安全,服務器的安全,和asa一樣也需要建立策略,個人覺得比asa的策略要繁瑣一點,但“只要功夫深鐵杵磨成針”。
一、基礎概念
1、iptables表、鏈結(jié)構(gòu)
a、規(guī)則表
表的作用:容納各種規(guī)則鏈
表的劃分依據(jù):防火墻規(guī)則的作用相似
默認包括4個規(guī)則表
raw表:確定是否對該數(shù)據(jù)包進行狀態(tài)跟蹤
mangle表:為數(shù)據(jù)包設置標記
nat表:修改數(shù)據(jù)包中的源、目標IP地址或端口
filter表:確定是否放行該數(shù)據(jù)包(過濾)
b、規(guī)則鏈
規(guī)則的作用:對數(shù)據(jù)包進行過濾或處理
鏈的作用:容納各種防火墻規(guī)則
鏈的分類依據(jù):處理數(shù)據(jù)包的不同時機
默認包括5種規(guī)則鏈
INPUT:處理入站數(shù)據(jù)包
OUTPUT:處理出站數(shù)據(jù)包
FORWARD:處理轉(zhuǎn)發(fā)數(shù)據(jù)包
POSTROUTING鏈:在進行路由選擇后處理數(shù)據(jù)包
PREROUTING鏈:在進行路由選擇前處理數(shù)據(jù)包
如圖所示:
2、數(shù)據(jù)包過濾的匹配流程
a、規(guī)則表
raw——mangle——nat——filter
b、規(guī)則鏈
入站數(shù)據(jù)流向:來自外界的數(shù)據(jù)包到達防火墻后,首先被PRETOUTING鏈處理,然后進行路由選擇,如果數(shù)據(jù)包的目標地址是防火墻本機,那么內(nèi)核將其傳遞給INPUT鏈進行處理,通過以后再講給系統(tǒng)的上層應用程序進行響應。
轉(zhuǎn)發(fā)數(shù)據(jù)流向:來自外界的數(shù)據(jù)包到達防火墻后,首先被PREROUTING鏈處理,然后再進行路由選擇,如果數(shù)據(jù)包的目的地址是其他外部的地址,則內(nèi)核將其傳遞給FORWARD鏈進行處理,最后交給POSTROUTING鏈進行處理。
出站數(shù)據(jù)流向:防火墻本機向外部地址發(fā)送的數(shù)據(jù)包,首先被OUTPUT處理,然后進行路由選擇,再交給POSTROUTING鏈進行處理。
c、規(guī)則鏈內(nèi)部各條防火墻規(guī)則之間的順序
匹配即停(LOG日志操作的規(guī)則除外)
找不到相匹配的規(guī)則,則按該鏈的默認策略處理
二、編寫防火墻規(guī)則
實驗環(huán)境:
網(wǎng)站服務器ip地址是192.168.1.7,網(wǎng)關服務器的內(nèi)網(wǎng)地址是192.168.1.254,外網(wǎng)地址是172.16.16.254,internter測試機是172.16.16.16。
vim /etc/sysctl.conf
使用internet測試機172.16.16.16可以ping通192.168.1.7
1、 例如:在網(wǎng)站服務器的filter表的INPUT鏈中插入一條規(guī)則,拒絕發(fā)送給本機使用的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)目標端口不可到達,無法ping通
2、 添加新的規(guī)則
例如:1)在filter表INPUT鏈的末尾添加一條規(guī)則,接受tcp協(xié)議(實驗之前在網(wǎng)站服務器上搭建ftp服務,使用internet測試機可以訪問ftp服務器)
service vsftpd start
在internet測試機上訪問
默認網(wǎng)站服務器的防火墻開啟,所以不能訪問,然后執(zhí)行:
iptables -t filter -A INPUT -p tcp -j ACCEPT
發(fā)現(xiàn)依然不能訪問,因為-A是在末尾添加一條新的規(guī)則
所以執(zhí)行:Iptables -I INPUT -p udp -j ACCEPT(-I默認是添加在第一條)
在網(wǎng)站服務器上查看規(guī)則:
例:2)添加規(guī)則允許udp數(shù)據(jù)包通過,默認位于filter的第一條
Iptables -I INPUT -p udp -j ACCEPT
例:3)指定順序號,添加規(guī)則允許icmp數(shù)據(jù)包通過,位于第2條
Iptables -I INPUT 2 -p icmp -j ACCEPT
查看規(guī)則列表:
3、 以數(shù)字形式顯示規(guī)則列表,加快執(zhí)行速度
4、 刪除,清空規(guī)則
1) 若要刪除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ù)據(jù)包規(guī)則時,則執(zhí)行默認策略
例如1)將filter表中FORWARD鏈的默認策略設置為丟棄,OUTPUT鏈的默認策略設置為允許(默認策略不參與規(guī)則的順序編排,因此在前后并無區(qū)別。)
三、 規(guī)則的匹配條件
對于同一條防火墻規(guī)則,可以指定多個匹配條件,這些條件必須都滿足規(guī)則才能生效。
1、 通用匹配:分為三種類型,協(xié)議匹配,地址匹配,網(wǎng)絡接口匹配。
1) 協(xié)議匹配
如果在網(wǎng)關服務器上開啟防火墻,那么internet測試機是不能訪問網(wǎng)站服務器的。
查看網(wǎng)關服務器的FORWARD鏈,發(fā)現(xiàn)只有一條拒絕all,如果想允許路由轉(zhuǎn)發(fā),執(zhí)行下面的命令:iptables -I FORWARD -j ACCEPT,然后在internet測試機上可以訪問網(wǎng)站服務器。
然后如果想丟棄通過icmp協(xié)議訪問防火墻本機的數(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測試機上ping網(wǎng)關服務器的172.16.16.254和192.168.1.7都是可以ping通的。執(zhí)行完之后就不能ping通了,但是依然能夠訪問網(wǎng)站服務器的ftp。
先在internet測試機上ping,可以ping通
然后在網(wǎng)關服務器上執(zhí)行以下命令
在internet測試機上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ù)包
因為172.16.16.172就是internet測試機,所以internet測試機無法ping通192.168.1.5,也不能訪問ftp
例2)如果檢測到來自某網(wǎng)段的頻繁掃描,登錄等不良的企圖,可以立即添加防火墻規(guī)則進行封鎖。
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)絡接口匹配
例如:若要丟棄從外網(wǎng)接口訪問防火墻本機且源地址為私有地址的數(shù)據(jù)包,執(zhí)行以下操作:
首先:在172.16.16.16上ping172.16.16.254,使之可以ping通
然后執(zhí)行以下命令:
再次在172.16.16.172上ping172.16.16.254,無法ping通,因為外網(wǎng)接口是eth1
2、 隱含匹配:以指定的協(xié)議匹配作為前提條件,相當于子條件。
1) 端口匹配
例如:允許網(wǎng)段192.168.1.0/24轉(zhuǎn)發(fā)dns查詢數(shù)據(jù)包。
首先在網(wǎng)站服務器上開啟dns服務
為了實驗效果,先在網(wǎng)關服務器上執(zhí)行以下命令,阻止轉(zhuǎn)發(fā)
然后在internet測試機上執(zhí)行nslookup,不能解析
接下來在網(wǎng)關服務器上執(zhí)行隱含匹配,允許為172.16.16.0網(wǎng)段轉(zhuǎn)發(fā)dns查詢包
再次在internet測試機上測試解析
2) ICMP類型匹配
若要禁止從其他主機ping本機,但是允許本機ping其他主機,可以執(zhí)行以下操作
首先為了實驗測試方便,在網(wǎng)關服務器上執(zhí)行:(執(zhí)行之前把其它的規(guī)則都刪掉)
執(zhí)行之后internet測試機和網(wǎng)站服務器之間可以互相ping通
然后執(zhí)行:
實驗效果:
3、 顯示匹配
必須調(diào)用相應的模塊,然后方可設置匹配條件
1) 多端口匹配
例如:允許網(wǎng)站服務器本機開放25、80、110、143端口。
2) ip范圍匹配
例如:禁止轉(zhuǎn)發(fā)源地址位于192.168.4.21與192.168.4.28之間的tcp數(shù)據(jù)包。
3) mac地址匹配
例如:禁止以下mac地址的主機訪問網(wǎng)站服務器的任何應用。
4) 狀態(tài)匹配
例如:禁止轉(zhuǎn)發(fā)與正常tcp連接無關的非syn請求數(shù)據(jù)包(如偽造的網(wǎng)絡攻擊數(shù)據(jù)包)。
再例如:開放本機的web服務80端口,但對發(fā)給本機的tcp應答數(shù)據(jù)包予以放行,其他入站數(shù)據(jù)包均丟棄,對應的入站規(guī)則如下:
實戰(zhàn)演練:
一、實驗環(huán)境:
二、需求描述
1、為網(wǎng)站服務器編寫入站規(guī)則
(1)本例中所有規(guī)則均在filter表的INPUT鏈內(nèi)添加,默認策略設置為DROP。
(2)使用“-p icmp ! --icmp-type 8 ”的條件匹配非ICMP請求的數(shù)據(jù)包。
(3)使用“-p tcp --dport 80”的條件匹配對TCP 80端口的訪問。
(4)使用“-p tcp -m state --state ESTABLISHED,RELATED”匹配TCP響應數(shù)據(jù)包。
(5)測試入站控制效果:從其他主機可以訪問本機中的Web服務,但不能訪問其他任何服務(如FTP、DNS);從本機可以ping通其他主機,但其他主機無法ping通本機。
2、為網(wǎng)關服務器編寫轉(zhuǎn)發(fā)規(guī)則
(1)本例中所有規(guī)則均在filter表的FORWARD鏈內(nèi)添加,默認策略設置為DROP。
(2)針對TCP協(xié)議的80、20、21、25、110、143端口,以及UDP協(xié)議的53端口,分別為從局域網(wǎng)訪問Internet、從Internet響應局域網(wǎng)請求的過程編寫轉(zhuǎn)發(fā)規(guī)則。
(3)執(zhí)行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地址編寫轉(zhuǎn)發(fā)規(guī)則,禁止到TCP協(xié)議的80、443端口的訪問。
注:下面的變量的意思是讀取IP地址以插入規(guī)則
(4)測試轉(zhuǎn)發(fā)控制效果:從局域網(wǎng)中的主機無法訪問Internet中的web.qq.com等被封站點,但能夠訪問其他Web站點,也能夠訪問DNS、FTP等網(wǎng)絡服務。
謝謝觀看,希望能真心的幫到您!
本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!
更多建議: