iptables之应用及L7应用层过滤

 知道了简单点的iptales的用法,其中有很多的用法我们都还没说,例如非常重要的SNAT ,DNAT转换,字符匹配过滤,同是定义多端口,最大连接数限制,访问时间限制,匹配速率限制,还有就是现在企业中经常要用到的l7layer应用层过滤!!下面我们来讨论这些非常重要有用但是又很具挑战难度的东东(需layer7 安装)

 

主要内容

iptables的实践应用,L7应用层过滤

 

我们接着上次继续探讨iptables更深层的用法。这次我们基于上次的理论介绍主要通过实验来熟悉每个命令的用法.

实验环境:

内网210.0.2.100 telnet vsftp http

内网110.0.1.100

外网:10.0.3.100

firewalleth010.0.2.1 eth110.0.3.1 ssh

clip_image004

SNAT DNAT

ü SNAT

ü –to-source IPport

ü DNAT

ü –to-destination IP:port

路由测试

[root@station93 ~]# sysctl -p

net.ipv4.ip_forward = 1

NAT转换测试:

外网访问iptables10.0.3.1端口时,iptables均把地址DNAT成内网10.0.2.100服务器的httpd服务,注意,这里外网不知道内网有10.0.2.100这个地址,只知道10.0.3.1

DNAT 转换;==========》一个IP可实现多个功能

[root@station93 ~]# iptables -t nat -A PREROUTING -s 10.0.3.100 -d 10.0.3.1 -p tcp –dport 80 -j DNAT –to-dest 10.0.2.100

[root@station93 ~]# iptables -t nat -A PREROUTING -s 10.0.3.100 -d 10.0.3.1 -p tcp –dport 22 -j DNAT –to-dest 10.0.1.100

SNAT转化测试:=========è内网用户只需要一个IP地址即可全部上网

内网用户通过iptables外网网关实现SNAT转化的功能

[root@station93 ~]# iptables -t nat -A POSTROUTING -s 10.0.2.100 -p tcp –dport 80 -j SNAT –to-source 10.0.3.1

[root@3 httpd]# tail access_log============》这里查看日志时我们会法相其实是10.0.3.1来访问外网服务器的,即iptables的外网网关

10.0.3.1 – - [09/Mar/2010:20:43:59 +0800] “GET / HTTP/1.1″ 403 3985 “-” “ELinks/0.11.1 (textmode; Linux; 77×24-2)”

基于状态的限制

-m state

ü NEW

ü ESTABLISHED

ü RELATED

ü INVALID

 

只允许3.100访问2.100web服务,不允许2.100自发的回应3.100

主要用来防止本机中毒,自发的向外发出信息泄密

[root@station93 ~]# iptables -A FORWARD -s 10.0.3.100 -d 10.0.2.100 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT

[root@station93 ~]# iptables -R FORWARD 2 -s 10.0.2.100 -d 10.0.3.100 -p tcp –sport 80 -m state –state ESTABLISHED,RELATED -j ACCEPT

测试

[root@3 ~]# elinks 10.0.2.100 ======》出现测试页

 

[root@2 ~]# elinks 10.0.3.100 ========》失败

-m multiport

ü –source-ports port1,port2,port3,…

ü –destination-ports port1,port2,port3,…

ü –ports port1,port2,port3,…

企业中防火墙的实际应用

在实际的企业应用中,我们以上学习的iptables只是使远远不够的,举个简单的例子,我们在平时的工作中往往需要限制qqmsn,迅雷,快车等聊天下载工具的使用,而我们以上学的都是写非常简单点的限制,而这这些工具的服务器的众多,端口多变,我们通过普通的方法是很难控制住的,银次我们需要给予Layer的第七层应用的控制,这里我们需要重新编译升级内核。

内核升级和补丁过程参考这里

Start compiling and installing

ü make

ü make modules_install

ü make install

Edit the /boot/grub/grub.conf, set the default booting kernel to the new kernel

Restart

# cp /etc/rc.d/init.d/iptables ~/iptables

# rpm -e iptables-ipv6 iptables iptstate –nodeps

# tar jxvf iptables-1.4.6.tar.bz2 –C /usr/src

# cd /usr/src/iptables-1.4.6

# cp ../netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/libxt_layer7.* ./extensions/

./configure –prefix=/usr –with-ksource=/usr/src/linux

make

make install

# tar zxvf l7-protocols-2009-05-28.tar.gz

# cd l7-protocols-2009-05-28

# make install

 

# mv ~/iptables /etc/rc.d/init.d/

#ln –sv /usr/sbin/iptables /sbin/iptables

注意这里第一次启动无法service iptables start 需要先setup,再service iptables start

2.6.28.10 内核中 ip_conntrack_ftp 改名为 nf_conntrack_ftp

加模块: modprobe nf_conntrack_ftp

支持的协议种类:

bittorrent

ü P2P filesharing / publishing tool

edonkey

ü eDonkey2000 – P2P filesharing

kugoo

ü KuGoo – a Chinese P2P program

msn-filetransfer

ü MSN (Micosoft Network) Messenger file transfers

msnmessenger

ü Microsoft Network chat client

pplive

ü Chinese P2P streaming video

qq

xunlei

用法

ü iptables [specify table & chain] -m layer7 –l7proto [protocol name] -j [action]

禁止外网访问firewall的web ,ssh,telnet服务

[root@station93 ~]# iptables -A INPUT -p tcp -m multiport –source-ports 22,25,80 -j DROP

 

connlimit

v [!] –connlimit-above n 最大连接数

ü Allows you to restrict the number of parallel connections to a server per client IP address (or client address block).

ü Example:

? iptables -A INPUT -p tcp –syn –dport 22 -m connlimit –connlimit-above 2 -j REJECT

? Allow 2 ssh connections per client host

限制外网的最大连接数是2

[root@station93 ~]# iptables -A OUTPUT -p tcp –syn –dport 22 -m connlimit –connlimit-above 2 -j REJECT

String

ü 有两种算法:bm kmp

ü This modules matches a given string by using some pattern matching strategy.

ü It requires a linux kernel >= 2.6.14.

ü [!] –string pattern

? Matches the given pattern.

ü –algo {bm|kmp}

? Select the pattern matching strategy. (bm = Boyer-Moore, kmp = Knuth-Pratt-Morris)

ü Examples:

? iptables –A OUTPUT –p udp –dport 53 -m string –string “verycd” –algo bm -j DROP

? iptables -A OUTPUT -p tcp –dport 80 -m string –string “***” –algo kmp -j DROP

限制内网浏览外网上包含secert 字符串的网页:

[root@3 html]# echo “secert” >> index2.html

[root@3 html]# cat index2.html

secret

this is the second test

secret

 

[root@station93 ~]# iptables -A FORWARD -s 10.0.2.100 -d 10.0.3.100 -p tcp –sport 80 -m string –string “secert” –algo bm -j DROP

time

ü This matches if the packet arrival time/date is within a given range.

ü –datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

ü –datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

? Only match during the given time, The possible time range is 1970-01-01 T00:00:00 to 2038-01-19 T04:17:07

ü –timestart hh:mm[:ss]

ü –timestop hh:mm[:ss]

? The possible time range is 00:00:00 to 23:59:59.

? Leading zeroes are allowed.

time

ü [!] –monthdays day[,day...]

? Only match on the given days of the month. Possible values are 1 to 31.

ü [!] –weekdays day[,day...]

? Only match on the given weekdays. Possible values are Mon, Tue, Wed, Thu, Fri, Sat, Sun, or values from 1 to 7, respectively.

ü Examples:

? -m time –weekdays Sa,Su

? -m time –timestart 12:30 –timestop 13:30

[root@station93 ~]# iptables -A FORWARD -m time –timestart 00:00 –timestop 8:00 -j DROP

 

-j LOG

ü –log-level level

? Level of logging

ü –log-prefix prefix

? Prefix log messages with the specified prefix; up to 29 letters long, and useful for distinguishing messages in the logs.

ü –log-tcp-options

? Log options from the TCP packet header.

ü –log-ip-options

? Log options from the IP packet header.

[root@station93 ~]# iptables -A FORWARD -s 10.0.3.100 –d 10.0.2.100 –p tcp –dport -j LOG –log-prefix “abc”

基于l7layer的规则则十分类似,在其内部已经为我们定义好,我们只需要调用其就行了。

例如:禁止内网用户在上班时间使用qq

 

[root@station93 ~]# iptables -A FORWARD -s 10.0.2.100 -d 10.0.3.100 -p tcp –dport 80 -m time –timestart 8:00 –timestop 18:00 -m layer7 –l7proto qq -j DROP

 

iptables之7层过滤(封QQ、MSN、P2P等) - zhuzhu - 五事九思

你可能感兴趣的:(iptables)