(轉載) iptables及使用layer7七層過濾

 

一:簡介
iptables 是與 Linux 內核集成的 IP 信息包過濾系統。若是 Linux 系統鏈接到因特網或 LAN、
服務器或鏈接 LAN 和因特網的代理服務器, 則該系統有利於在 Linux 系統上更好地控制 IP 信息包過濾和防火牆配置。netfilter/iptables IP 信息包過濾系統是一種功能強大的工具,可用於添加、編輯和除去規則,這些規則是在作信息包過濾決定時,防火牆所遵循和組成的規則。這些規則存儲在專用的信 息包過濾表中,而這些表集成在 Linux 內核中。在信息包過濾表中,規則被分組放在咱們所謂的鏈(chain)中。
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鏈
第一次路由判斷以後,最後一次路由判斷以前改變數據包
 
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 "說明信息,本身隨便定義"      記錄日誌

 

二:編譯內核和從新編譯iptables
所須要的源碼
iptables-1.4.2.tar.bz2
l7-protocols-2008-10-04.tar.gz
linux-2.6.25.19.tar.bz2
netfilter-layer7-v2.20.tar.gz
 
合併kernel+layer7補丁
[root@localhost ~]# tar jxvf linux-2.6.28.tar\(1\).bz2 -C /usr/src/
[root@localhost ~]# tar zxvf netfilter-layer7-v2.20.tar.gz -C /usr/src/
[root@localhostlinux-2.6.28]# patch -p1 < /usr/src/netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch
[root@localhost linux-2.6.28]# cp /boot/config-2.6.18-164.el5 .config
[root@localhost linux-2.6.28]# make menuconfig
[root@localhost linux-2.6.28]# make && make modules_install && make install
卸載現有iptables
[root@localhost ~]# rpm -e iptables –nodeps
合併iptables+layer7補丁
[root@localhost ~]# tar -jxvf iptables-1.4.2.tar.bz2 -C /usr/src/
[root@localhost iptables-1.4.2]# cd /usr/src/netfilter-layer7-v2.20/iptables-1.4.1.1-for-kernel-2.6.20forward/
[root@localhost iptables-1.4.1.1-for-kernel-2.6.20forward]# cp * /usr/src/iptables-1.4.2/extensions/
編譯安裝
[root@localhost iptables-1.4.2]# ./configure --prefix=/ --with-ksource=/usr/src/linux-2.6.25.19
[root@localhost iptables-1.4.2]# make
[root@localhost iptables-1.4.2]# make install
安裝l7-protocols模式包
[root@localhost ~]# tar -zxvf l7-protocols-2008-10-04.tar.gz -C /etc/
[root@localhost ~]# mv /etc/l7-protocols-2008-10-04/ /etc/l7-protocols
 
[root@localhost iptables-1.4.2]# service iptables restart
清除防火牆規則:                                           [肯定]
把 chains 設置爲 ACCEPT 策略:filter                       [肯定]
正在卸載 Iiptables 模塊:                                  [肯定]
應用 iptables 防火牆規則:                                 [肯定]

 

三:案例:
案例要求:
公司有三個部門
工程部門 20.1-20.10
軟件部門 20.11-20.20
經理辦    20.21-20.30
上班時間 (週一---週五 08:20:00)
         工程部門   上班時間ftp 不容許http  qq 迅雷  下班後無限制
 
         軟件部門  http   不容許非法站點sina ,不容許使用迅雷 不容許聊天 
                          下班後無限制
 
         經理辦公室   http qq 均可以,下班後無限制
 
         dmz區域     www服務器進行發佈
拓撲圖:

 

 

 

配置步驟
 [root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -o eth1 -j MASQUERADE
[root@localhost ~]# modprobe ip_nat_ftp
修改iptablse默認拒絕全部
[root@localhost ~]# iptables -A INPUT -s 192.168.20.1 -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -d 192.168.20.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
[root@localhost ~]# iptables -L -v -n
Chain INPUT (policy DROP 938 packets, 90044 bytes)
 pkts bytes target     prot opt in     out     source               destination        
 259 17556 ACCEPT     tcp -- *      *       192.168.20.1         0.0.0.0/0           tcp dpt:22
 
Chain FORWARD (policy DROP 10 packets, 460 bytes)
 pkts bytes target     prot opt in     out     source               destination        
 
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 169 15956 ACCEPT     tcp -- *      *       0.0.0.0/0            192.168.20.1        tcp spt:22
[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.20.1-192.168.20.10 -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 -p tcp --sport 21 -j ACCEPT
[root@localhost ~]# iptables -t filter -A FORWARD -p tcp --sport 20 -j ACCEPT
[root@localhost ~]# iptables -t filter -A FORWARD -p tcp --dport 20 -j ACCEPT
 
工程部門訪問ftp

 

下班後無限制:node

[root@localhost ~]# iptables -t filter -A FORWARD -s 192.168.20.0/24 -m time --timestart 20:01 --timestop 07:59 -o eth1 -j ACCEPT
調整時間
[root@localhost ~]# date 091822222012
2012年 09月 18日 星期二 22:22:00 CST
 
下班後無限制,別的部門也能夠訪問ftp

 

軟件部門
能夠訪問http
 
[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.20.11-192.168.20.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT
[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.20.11-192.168.20.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p udp --dport 53 -j ACCEPT
 

 

不容許訪問sina
[root@localhost ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.20.11-192.168.20.20 -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.20.11-192.168.20.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m string --string "sina" --algo bm -j DROP
 

 

不容許使用qq聊天
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.20.11-192.168.20.20 -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.20.11-192.168.20.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto xunlei -j DROP
 
經理辦公室
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.20.21-192.168.20.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p udp --dport 53 -j ACCEPT
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.20.21-192.168.20.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT

 

容許使用qq和迅雷
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.20.21-192.168.20.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto qq -j ACCEPT
[root@localhost ~]# iptables -I FORWARD 2 -m iprange --src-range 192.168.20.21-192.168.20.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto xunlei -j ACCEPT
 
 
DMZ區域的服務器發佈
 
[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.101.71 -p tcp --dport 80 -i eth1 -j DNAT --to 192.168.2.100
[root@localhost ~]# iptables -t filter -A FORWARD -d 192.168.2.100 -p tcp --dport 80 -j ACCEPT
 

本文出自 「牛曉林的blog」 博客,請務必保留此出處http://niuxiaolin.blog.51cto.com/5627962/998879linux

相關文章
相關標籤/搜索