iptables的簡介及使用layer7實現七層過濾

在實驗之前先做好一下準備
在重新編譯內核之前,配置好yum環境,查看源碼安裝所依賴的包是否安裝
查看是否安裝以下開發所用到的rpm包組:
[root@mail ~]# yum grouplist
Development Libraries
Development Tools
Legacy Software Development
X Software Development
方法:
# yum groupinstall "packge_group_name"
以及下載下面需要的軟件包
 
目標功能:爲iptables增加layer7補丁,實現應用層過濾
一、下載內核源代碼,及layer7補丁, 合併kernel+layer7補丁
1.1解壓縮內核
[root@localhost ~]# tar zxvf linux-2.6.28.10.tar.gz -C /usr/src/
[root@localhost ~]# tar zxvf netfilter-layer7-v2.22.tar.gz -C /usr/src/
[root@localhost ~]# ln -s /usr/src/linux-2.6.28.10/ /usr/src/linux
##建立一個軟鏈接
1.2配置新內核
[root@localhost linux]# patch -p1 <
/usr/src/netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch
[root@localhost linux]# cp /boot/config-2.6.18-164.el5 .config
##偷個懶,沿用舊的內核配置
[root@localhost linux]# make menuconfig 
##執行之後會出現一個讓用戶選擇內核模塊的界面,進入相應的菜單,將下面的模塊選上
layer7、string、state、time、IPsec、iprange、connlimit……等編譯成模塊,根據需要看着辦,如下:
Networking support -->>Networking Options -->>Network packet filtering framework
-->>Core Netfilter Configuration
<M> Netfilter connection tracking support 
<M> “layer7” match support
<M> “string” match support
<M> “time” match support
<M> “iprange” match support
<M> “connlimit” match support
<M> “state” match support
<M> “conntrack” connection match support
<M> “mac” address match support
<M>   "multiport" Multiple port match support
<M>   IPsec "policy" match support
<M>   FTP protocol suppor
…,…
然後exit,繼續下面的
-->>IP: Netfilter Configuration
<M> IPv4 connection tracking support (required for NAT)
<M>   Full NAT
    <M>     MASQUERADE target support   
    <M>     NETMAP target support                          
    <M>     REDIRECT target support 
1.3編譯及安裝模塊、新內核
[root@localhost linux]#make && make modules_install && make install
編譯安裝成後後
1.4修改一下文件,選擇啓動的內核
[root@localhost ~]# vim /etc/grub.conf
1.5重新啓動系統,查看系統內核版本
[root@localhost ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
[root@localhost ~]# uname -r
2.6.28.10
 
二、重新編譯iptables
2.1下面開始卸載原有的iptables,在卸載之前先把下面兩個文件copy出來,後面有用到
[root@localhost ~]# cp /etc/init.d/iptables /
[root@localhost ~]# cp /etc/sysconfig/iptables-config /
2.2卸載現有的iptables
[root@localhost ~]# rpm -e iptables-ipv6 iptables iptstate –nodep
合併iptables+layer7補丁
2.3解壓縮iptables
[root@localhost ~]# tar jxvf iptables-1.4.2.tar.bz2 -C /usr/src/
2.4layer7中的2個文件copy到iptables中的相應位置
[root@localhost ~]# cd /usr/src/netfilter-layer7-v2.22/
[root@localhost netfilter-layer7-v2.22]# cd
iptables-1.4.3forward-for-kernel-2.6.20forward/
[root@localhost iptables-1.4.3forward-for-kernel-2.6.20forward]# ll
total 16
-rw-r--r-- 1 1000 1000 9389 Jul 14 2009 libxt_layer7.c
-rw-r--r-- 1 1000 1000 648 Jul 14 2009 libxt_layer7.man
[root@localhost iptables-1.4.3forward-for-kernel-2.6.20forward]# cp *
/usr/src/iptables-1.4.2/extensions/
2.5編譯安裝iptables
[root@localhost ~]# cd /usr/src/iptables-1.4.2/
[root@localhost iptables-1.4.2]# ./configure --prefix=/usr
--with-ksource=/usr/src/linux
[root@localhost iptables-1.4.2]# make
[root@localhost iptables-1.4.2]# make install
2.6安裝l7-protocols
[root@localhost ~]# cd /usr/src/l7-protocols-2009-05-28/
[root@localhost l7-protocols-2009-05-28]# make install
mkdir -p /etc/l7-protocols
cp -R * /etc/l7-protocols
2.7重新啓動iptables
[root@localhost ~]# service iptables restart
Flushing firewall rules:                                   [ OK ]
Setting chains to policy ACCEPT: filter                    [ OK ]
Unloading iptables modules:                                [ OK ]
 
三、案例
3.1 案例簡介
某公司有三個部門
工程部
技術部
經理辦公室
公司上班時間 (週一---週五 08:00--20:00)
爲了提高員工工作效率,現將公司網絡做如下整改:
工程部門    上班時間可以訪問ftp  其他不可以
下班後無限制
軟件部門    可以訪問http 但不允許非法站點sina ,不允許使用迅雷 ,連接數最多3個,不允許聊天
下班後無限制
經理辦公室   可以訪問http,ftp,qq聊天,下班後無限制
dmz區域      www服務器進行發佈
3.2拓撲圖

3.3配置網卡參數,重新啓動network,查看路由表
[root@localhost ~]# service network restart
Shutting down interface eth0:                              [ OK ]
Shutting down interface eth1:                              [ OK ]
Shutting down interface eth2:                              [ OK ]
Shutting down loopback interface:                          [ OK ]
Bringing up loopback interface:                            [ OK ]
Bringing up interface eth0:                                [ OK ]
Bringing up interface eth1:                                [ OK ]
Bringing up interface eth2:                                [ OK ]
[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.101.0   0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.3.0     0.0.0.0         255.255.255.0   U     0      0        0 eth2
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth2
0.0.0.0         192.168.101.254 0.0.0.0         UG    0      0        0 eth1
3.4打開路由轉發功能
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl –p
3.5 Nat地址轉換
爲內網做snat
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth1 -j SNAT --to 192.168.101.19
內網的一臺主機測試訪問ftp服務器

 

加上ftp模塊才能訪問到ftp上的內容
[root@localhost ~]# modprobe ip_nat_ftp

 
 
3.6爲了安全把規則設置成全部禁止,在禁止之前要讓你這臺機器可以ssh上不然自己會掉,還要讓你機器的內部可以通訊
[root@localhost ~]# iptables -A INPUT -s 192.168.2.1 -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -d 192.168.2.1 -p tcp --sport 22 -j ACCEPT
其他都設置爲拒絕
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -P OUTPUT DROP
[root@localhost ~]# iptables -P FORWARD DROP
3.7 查看一下iptables規則

3.8 測試內網還能不能訪問ftp服務器

顯然現在不可以
 3.9實現工程部門的要求,採用基於狀態的訪問方式,記錄數據流出的軌跡,自動返回
[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.30-192.168.2.50 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 21 -j ACCEPT
[root@localhost ~]# iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
現在時間是上班時間
[root@localhost ~]# date            
Tue Sep 18 14:43:05 CST 2012
用工程部門的一臺主機測試能不能訪問ftp服務器

 

下班後無限制
[root@localhost ~]# iptables -t filter -A FORWARD -s 192.168.2.0/24 -m time --timestart 20:01 --timestop 07:59 -o eth1 -j ACCEPT
現在時間是下班時間
[root@localhost ~]# date
Tue Sep 18 22:00:03 CST 2012
用工程部門一臺主機測試,能不能訪問www

 
 
3.10實現軟件部門的要求
允許上班時間訪問http
[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.60-192.168.2.80 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT
允許上班時間使用dns
[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.60-192.168.2.80 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p udp --dport 53 -j ACCEPT
時間是上班時間
[root@localhost ~]# date
Tue Sep 18 17:44:05 CST 2012
用軟件部門的一臺主機測試能不能訪問互聯網

上班時間不允許非法站點sina ,不允許使用迅雷 ,連接數最多3個 ,不允許QQ聊天
1)上班時間不允許訪問帶sina的站點
[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.60-192.168.2.80 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m string --string "sina" --algo bm -j DROP
將此條命令調到第一位
[root@localhost ~]# iptables -t filter -I FORWARD 1 -m iprange --src-range 192.168.2.60-192.168.2.80 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m string --string "sina" --algo bm -j DROP
 測試

當連接數目超過三個的時候,無法正常訪問http資源
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.2.60-192.168.2.80 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --syn --dport 80 -m connlimit --connlimit-above 3 -j DROP
測試

 

訪問ftp

不允許使用qq聊天
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.2.60-192.168.2.80 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto qq -j DROP
不允許使用迅雷下載
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.2.60-192.168.2.80 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto xunlei -j DROP
不允許使用MSN聊天工具
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.2.60-192.168.2.80 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto msnmessenger -j DROP
 上面這些就不再測試了,現在把時間調到下班時間進行測試
下面時間已經下班
[root@localhost ~]# date
Tue Sep 18 22:00:05 CST 2012
測試 

訪問ftp

3.11實現經理辦公室的要求
可以訪問http,ftp,qq聊天,迅雷,下班後無限制
上班時間允許使用dns
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.2.90-192.168.2.100 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p udp --dport 53 -j ACCEPT
上班時間允許訪問http
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.2.90-192.168.2.100 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT
能夠訪問ftp
[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.90-192.168.2.100 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 21 -j ACCEPT
[root@localhost ~]# iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
現在時間是上班時間
[root@localhost ~]# date 091819002012
Tue Sep 18 19:00:00 CST 2012
測試訪問http

 

測試訪問ftp

上班時間允許使用迅雷
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.2.90-192.168.2.100 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto xunlei -j ACCEPT
上班時間能夠使用QQ
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.2.90-192.168.2.100 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto qq -j ACCEPT
 上面這些不再測試了
 
四、DMZ區域的服務器發佈
[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.101.19 -p tcp --dport 80 -i eth1 -j DNAT --to 192.168.3.10
#將外網的web訪問請求(80端口)通過DNAT轉發至內網web服務器192.168.3.10
[root@localhost ~]# iptables -t filter -A FORWARD -d 192.168.3.10 -p tcp --dport 80 -j ACCEPT
訪問外網卡地址,即可訪問到DMZ區域的內部192.168.3.10的web頁面,實現了內部服務器的發佈,同時提高了服務器的安全性能。
測試

 

允許用遠程登陸
[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.101.19 -p tcp --dport 3389 -j DNAT --to 192.168.3.10
[root@localhost ~]# iptables -t filter -A FORWARD -d 192.168.3.10 -p tcp --dport 3389 -j ACCEPT

 
下面在網上收集的一些概念及基礎知識

 

iptables防火牆詳解及使用layer7
防火牆其實就是一個加固主機或者網絡安全的一個設備或者軟件而已,通過防火牆可以隔離風險區域與安全區域的連接,同時不會妨礙風險區域的訪問.當然需要注意的是世界上沒有絕對的安全,防火牆也只是啓到一定的安全防護,那麼下面來說下防火牆的幾種分類,
第一種軟件防火牆,軟件防火牆需要運行在特定的計算機上,而且需要計算機的操作系統的支持,
第二種硬件防火牆,硬件防火牆其實就是一個普通pc機的架構,然後上面跑有專門的操作系統.
第三種芯片級的防火牆,這種防火牆基於專門的硬件平臺,沒有操作系統,專有的ASIC芯片使它們比其他類的防火牆速度更快,處理能力極強,性能更高,但是價格卻極其昂貴,

從技術方面實現的防火牆也可分爲三種,
第一種包過濾型防火牆,這類的防火牆主要是工作在網絡層,根據事先設定好的規則進行檢查,檢查結果根據事先設定好的處理機制進行處理
第二種應用層防火牆,它是工作在TCP/IP模型中的最高層應用層,相比較來說速度要慢一點
第三種狀態監視器,狀態監視做爲防火牆其安全性爲最佳,但配置比較複雜,且網絡速度較慢

一般在企業中防火牆的部署有以下幾種
一,單宿主堡壘主機 ,由於使用的rhel6.2的系統,做圖不是很好做,所以沒有圖,只有簡單的介紹
單宿主堡壘主機其實就是單臺服務器有防火牆,只爲單臺服務器防護,
二,雙宿主堡壘主機,
雙宿主堡壘主機是一臺裝有兩塊網卡的堡壘主機,一般這臺堡壘主機應用在網關,防護局域網跟廣域網之間通信等安全
三,三宿主堡壘主機
三宿主堡壘主機是一臺裝有三塊網卡的堡壘主機,那麼他將外網,內網,DMZ 三個區域隔離開來,同時保護內網已經DMZ區域的安全等
四,背靠背, 這個的話沒圖解釋起來比較複雜,我在網上搜一張圖片吧
 

不用解釋一看圖就知道是怎麼回事了. 實際上前端防火牆是防護外網到DMZ區域以及到內網,後端防火牆是防護內網到DMZ區域的安全
一、IPTABLES的簡介
1. 簡介
IPTABLES/netfilter(http://www.netfilter.org) 其實大多數人都認爲iptables是linux系統上的一個服務,其實不是的. 我們linux系統上的服務比如說httpd服務在啓動起來的時候,是不是在後臺啓動一個相應的服務進程且在網卡上監聽一個端口,而iptables卻不然,那麼iptables到底是什麼呢?其實iptables只是一個工具而已.我們的linux系統有用戶空間,和內核空間,而iptables有兩個組件,一是netfilter, netfilter組件只是用來過濾防火牆規則,及作出相應的處理機制的,它是集成在內核中的一部分,也就是說它是工作在內核空間的,那麼大家都知道用戶是不可能直接跟內核空間打交道的,那麼netfilter只是工作在內核空間對規則進行處理的,那麼規則從何而來呢? 是從iptables的第二個組件iptables而來的,我們上面說了IPTABLES只是一個工作在用戶空間的一個工具而已,那麼用戶就使用這個工具的一個命令來跟工作在內核空間中的netfiter組件打交道的.其實IPTABLES防火牆就是這樣的.

二、IPTABLES的表和鏈
IPTABLES常用的表和鏈有三個filter表 nat表 mangle表, 和五個鏈 INPUT鏈 OUTPUT鏈 FORWARE鏈 POSTROUTING鏈 PREROUTING鏈, 下面來介紹下它們的各個功能呢個功能,
1.filter表
filter表主要是過濾數據包的,IPTABLES幾乎所有的數據包過濾都在此表中實現的,filter表也是IPTABLES中默認的表,此表中還包含三個鏈如下
1.1 INPUT鏈
過濾所有的目標地址是本機的數據包
1.2 OUTPUT鏈
過濾所有從本機出去的數據包
1.3 FORWORD鏈
過濾所有從本機路過的數據包

2.nat表
nat表主要是用於做網絡地址轉換的(NAT) 在IPTABLES中可以做SNAT(源地址轉換),DNAT(目標地址轉換),PANT(即跟SNAT差不多,不一樣的是SNAT的源地址是固定的,而PNAT的源地址是不固定的,當使用ppp 或pppoe的方式連接互聯網的時候一般適應這中) 。 nat表中包含兩個鏈如下
2.1 PREROUTING鏈
在數據包到達防火牆的時候改變目標地址 DNAT應用於此鏈.
2.2 OUTPUT鏈
可以改變本地產生的數據包的目標地址
2.3 POSTROUTING鏈
在數據包離開防火牆的時候改變源地址,SNAT應用於次鏈

3. mangle表
mangle表主要是修改數據包頭部信息的,此表中包含以下5條鏈
3.1 PREROUTING鏈,
在數據包進入防火牆之後,也稱爲路由前,
3.2 POSTROUTING鏈,
在數據包確定目標地址後,也稱爲路由後,
3.3 OUTPUT鏈
從本機出去的時間包路由前
3.4 INPUT鏈
數據包進入本機後,路由後
3.5 FORWARD鏈
第一次路由判斷之後,最後一次路由判斷之前改變數據包

三、IPABLES的狀態
IPTABLES的狀態跟蹤連接有4種,分別是,NEW,ESTABLISHED,RELATED,INVALID,除了從本機出去的數據包有nat表的OUTPUT鏈處理外,其他說有的狀態跟蹤都在nat表中的PREROUTING鏈中處理,下面來說下4種狀態是什麼,
1,NEW狀態
NEW狀態的數據包說明這個數據包是收到的第一個數據包,
2,ESTABLISHED狀態,
只要發送並接到應答,一個數據包的狀態就從NEW變爲ESTABLEISHED,而且該狀態會繼續匹配這個連接後繼數據包,
3,RELATED狀態
當一個數據包的狀態處於ESTABLSHED狀態的連接有關係的時候,就會被認爲是RELATED,也就是說一個鏈接想要是RELATED狀態,首先要有一個ESTABLISHED的連接,
4,INVALID狀態
不能被識別屬於哪個連接狀態或沒有任何關係的狀態,一般這中數據包要被拒絕的

四、IPTABLES命令的使用詳解
iptables在RHEL的系統上默認安裝的, IPTABLES的命令選項主要分爲這麼幾大類,規則管理,鏈管理,默認管理,查看,匹配條件,處理動作,基本應該就這些了吧,下面來一一說名,
1,規則管理類
#iptables -A    添加一條新規則
#iptables -I    插入一條新規則 -I 後面加一數字表示插入到哪行
#iptables -D    刪除一條新規則 -D 後面加一數字表示刪除哪行
#iptables -R    替換一條新規則 -R 後面加一數字表示替換哪行
2.鏈管理類
#iptables -F    清空鏈中的所有規則
#iptables -N    新建一個鏈
#iptables -X    刪除一個自定義鏈,刪除之前要保證次鏈是空的,而且沒有被引用
#iptables -E    重命名鏈
3.默認管理類
#iptables -P    設置默認策略
4.查看類
#iptables -L    查看規則 -L還有幾個子選項如下
#iptables -L -n 以數字的方式顯示
#iptables -L -v 顯示詳細信息
#iptables -L -x 顯示精確信息
#iptables -L --line-numbers 顯示行號
5.條件匹配類
5.1 基本匹配
條件匹配也可以使用 ! 取反
-s    源地址
-d    目標地址
-p    協議{tcp|udp|icmp}
-i    從哪個網絡接口進入,比如 -i eth0
-o    從哪個網絡接口出去,比如 -o eth0
5.2擴展匹配
5.2.1隱含擴展匹配
-p {tcp|udp} --sport   指定源端口
-p {tcp|udp} --dport   指定目標端口
5.2.2顯示擴展匹配
-m state --state   匹配狀態的
-m mutiport --source-port   端口匹配 ,指定一組端口
-m limit --limit 3/minute   每三分種一次
-m limit --limit-burst 5   只匹配5個數據包
-m string --string --algo bm|kmp --string "xxxx" 匹配字符串
-m time --timestart 8:00 --timestop 12:00 表示從哪個時間到哪個時間段
-m time --days    表示那天
-m mac --mac-source xx:xx:xx:xx:xx:xx 匹配源MAC地址
-m layer7 --l7proto qq   表示匹配騰訊qq的 當然也支持很多協議,這個默認是沒有的,需要我們給內核打補丁並重新編譯內核及iptables纔可以使用 -m layer7 這個顯示擴展匹配, 
6,處理動作類
-j ACCEPT     允許
-j REJECT     拒絕
-j DROP       拒絕並提示信息
-j SNAT       源地址轉換
-j DNAT       目標地址轉換
-j REDIRECT   重定向
-j MASQUERAED 地址僞裝
-j LOG --log-prefix "說明信息,自己隨便定義"      記錄日誌
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章