IPTABLES在企業網中的應用

一,iptables概述

     iptables 是與最新的 3.5 版本 Linux 內核集成的 IP 信息包過濾系統。如果 Linux 系統連接到因特網或 LAN、服務器或連接 LAN 和因特網的代理服務器, 則該系統有利於在 Linux 系統上更好地控制 IP 信息包過濾和防火牆配置。

     iptables 是與 Linux 內核集成的 IP 信息包過濾系統。如果 Linux 系統連接到因特網或 LAN、服務器或連接 LAN 和因特網的代理服務器, 則該系統有利於在 Linux 系統上更好地控制 IP 信息包過濾和防火牆配置。

   netfilter/iptables IP 信息包過濾系統是一種功能強大的工具,可用於添加、編輯和除去規則,這些規則是在做信息包過濾決定時,防火牆所遵循和組成的規則。這些規則存儲在專用的信 息包過濾表中,而這些表集成在 Linux 內核中。在信息包過濾表中,規則被分組放在我們所謂的鏈(chain)中。

雖然 netfilter/iptables IP 信息包過濾系統被稱爲單個實體,但它實際上由兩個組件netfilter 和 iptables 組成。

netfilter 組件也稱爲內核空間(kernelspace),是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。

iptables 組件是一種工具,也稱爲用戶空間(userspace),它使插入、修改和除去信息包過濾表中的規則變得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否則需要下載該工具並安裝使用它。

netfilter/iptables 的最大優點是它可以配置有狀態的防火牆,這是 ipfwadm 和 ipchains 等以前的工具都無法提供的一種重要功能。有狀態的防火牆能夠指定並記住爲發送或接收信息包所建立的連接的狀態。防火牆可以從信息包的連接跟蹤狀態獲得該信息。在決定新的信息包過濾時,防火牆所使用的這些狀態信息可以增加其效率和速度。這裏有四種有效狀態,名稱分別爲 ESTABLISHED 、 INVALID 、 NEW 和 RELATED。

狀態 ESTABLISHED 指出該信息包屬於已建立的連接,該連接一直用於發送和接收信息包並且完全有效。INVALID 狀態指出該信息包與任何已知的流或連接都不相關聯,它可能包含錯誤的數據或頭。狀態 NEW 意味着該信息包已經或將啓動新的連接,或者它與尚未用於發送和接收信息包的連接相關聯。最後, RELATED 表示該信息包正在啓動新連接,以及它與已建立的連接相關聯。

netfilter/iptables 的另一個重要優點是,它使用戶可以完全控制防火牆配置和信息包過濾。您可以定製自己的規則來滿足您的特定需求,從而只允許您想要的網絡流量進入系統。

另外,netfilter/iptables 是免費的,這對於那些想要節省費用的人來說十分理想,它可以代替昂貴的防火牆解決方案。

二,iptables與linux2.6.25的結合實現七層過濾案例

     1,iptables與linux2.6.25的結合

     一、重新編譯內核
    1、合併kernel+layer7補丁
shell> tar jxvf linux-2.6.25.19.tar.gz2 -C /usr/src/
shell> tar zxvf netfilter-layer7-v2.20.tar.gz -C /usr/src/
shell> cd /usr/src/linux-2.6.25.19/
shell&gt; patch -p1 < /usr/src/netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch
    2、配置新內核
shell> cp /boot/config-2.6.18-8.el5 .config    //偷個懶,沿用舊的內核配置
shell&gt; make menuconfig
    //配置內核時,在“Networking ---&gt; Networking Options ---&gt; Network Packet filtering framework (Netfilter) ”處主要注意兩個地方:
    1) ---&gt; Code Netfilter Configuration
        //將“Netfilter connection tracking suport (NEW)”選擇編譯爲模塊(M),需選取此項才能看到layer7支持的配置。
        //將layer7、string、state、time、IPsec、iprange、connlimit,tftp……等編譯成模塊,根據需要。
    2) ---&gt; IP: Netfilter Configuration
        //將“IPv4 connection tracking support (require for NAT)”編譯成模塊。
        //將“Full NAT”下的“MASQUERADE target support”和“REDIRECT target support”編譯成模塊。
    3、編譯及安裝模塊、新內核
shell&gt; make && make modules_install && make install
        //編譯安裝成後後,重啓選擇使用新的內核(2.6.25.19)引導系統

     二、重新編譯iptables
    1、卸載現有iptables
shell&gt; rpm -e iptables iptstate --nodeps
    2、合併iptables+layer7補丁
shell&gt; tar jxvf iptables-1.4.2.tar.bz2 -C /usr/src/
shell&gt; cd /usr/src/netfilter-layer7-v2.20/iptables-1.4.1.1-for-kernel-2.6.20forward/
shell&gt; cp libxt_layer7.c libxt_layer7.man /usr/src/iptables-1.4.2/extensions/
3、編譯安裝
shell&gt; cd /usr/src/iptables-1.4.2/

shell&gt; ./configure --prefix=/ --with-ksource=/usr/src/linux-2.6.25.19
shell&gt; make && make install

    4、安裝l7-protocols模式包
shell&gt; tar zxvf l7-protocols-2008-10-04.tar.gz -C /etc/
shell&gt; mv /etc/l7-protocols-2008-10-04 /etc/l7-protocols

layer7規則示例
    1、layer7 match
shell&gt; iptables -A FORWARD -m layer7 --l7proto qq -j DROP 過濾QQ等軟件
shell&gt; iptables -A FORWARD -m layer7 --l7proto msnmessenger -j DROP
shell&gt; iptables -A FORWARD -m layer7 --l7proto msn-filetransfer -j DROP
shell&gt; iptables -A FORWARD -m layer7 --l7proto xunlei -j DROP
shell&gt; iptables -A FORWARD -m layer7 --l7proto edonkey -j DROP
shell&gt; iptables -A FORWARD -m layer7 --l7proto bittorrent -j DROP
    2、string match 過濾關鍵字
shell&gt; iptables -A FORWARD -p udp --dport 53 -m string --string "tencent" --algo bm -j DROP
shell&gt; iptables -A FORWARD -p udp --dport 53 -m string --string "verycd" --algo bm -j DROP
shell&gt; iptables -A FORWARD -p tcp --dport 80 -m string --string "sex" --algo bm -j DROP
    3、state match   多次連接FTP
shell&gt; iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
shell&gt; iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    4、connlimit match
shell&gt; iptables -A FORWARD -p tcp --syn -m connlimit --connlimit-above 100 --connlimit-mask 24 -j DROP
    5、time match  基於時間過濾
shell&gt; iptables -A FORWARD -p tcp --dport 80 -m time --timestart 8:00 --timestop 17:00 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT

三,案例

實現內網對外網服務器的訪問(snat)及外網對內網的遠程登錄(dnat)

2012-09-18_004910

[root@mail ~]# vim /etc/sysctl.conf 打開linux數據包轉發功能
2012-09-17_181523
[root@mail ~]# sysctl -v
[root@mail ~]# iptables -t nat -A POSTROUTING -s 192.168.220.0/24 -o eth1 -j SNAT --to 192.168.101.199
測試xp與2003連通性
2012-09-17_182149
在2003上建立webftp站點
2012-09-17_183350 
2012-09-17_183435

2012-09-17_183554
[root@mail ~]# modprobe ip_nat_ftp
2012-09-17_184708

2012-09-17_183718

實現外網對內網的遠程登錄
[root@mail ~]# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3389 -j DNAT --to 192.168.220.20
2012-09-17_185355

2012-09-17_185456

2012-09-17_185714

2012-09-17_191250

測試軟件部門不許訪問非法站點
[root@mail ~]# iptables -t filter -A FORWARD -s 192.168.220.0/24 -o eth1 -m time --timestart 20:01 --timestop 07:59 -j ACCEPT
下班無限制

小案例

禁止220.21-30人員上baidu上班時間
默認拒絕
[root@mail ~]#iptables -P INPUIT DROP
ip[root@mail ~]#tables -A INPUT -s 192.168.220.2 -p tcp --dport 22 -j ACCEPT 實現ssh操作

[root@mail ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.220.21-192.168.220.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tun,Wed,Thu,Fri -m string --string "baidu" --algo bm -j DROP
允許http
[root@mail ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.220.21-192.168.220.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tun,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT
允許dns通過
[root@mail ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.220.21-192.168.220.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tun,Wed,Thu,Fri -p udp --dport 53 -j ACCEPT

[root@mail ~]# iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

[root@mail ~]# date 091715002012上班時間拒絕baidu但可以上sina

2012-09-18_002453 


[root@mail ~]# date 091722002012下班時間可以訪問

2012-09-17_212217 

[root@mail ~]# iptables -L

 

 ftp

出去

i[root@mail ~]#ptables -t filter -A FORWARD -m iprange -m iprange --src-range 192.168.220.21-192.168.220.30  -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Tur,Fri -p tcp --dport 21 -j ACCEPT
進來
[root@mail ~]#iptables -t filter -A FORWARD -p tcp --sport 21 -j ACCEPT
此時可以ftp
無法dir
要想dir
[root@mail ~]#iptables -t filter -A FORWARD -p tcp --sport 20  -j ACCEPT

[root@mail ~]#iptables -t filter -A -FORWARD -p tcp --dport 20 -j ACCEPT
或除了進來的 其餘刪除後加一條
[root@mail ~]#iptables -t filter -A  FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 就可以實現ftp通訊二次連接 及返回ACK唯1的establish

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章