天天看点

IPtables之三:显式扩展规则

对于显式扩展与隐式扩展的区别,先分析以下2条规则

规则1:iptables -t filter -A INPUT -s 192.168.1.0/24 -d 172.16.100.1 -p udp –dport 53 -j DROP

规则2:iptables -t filter -A INPUT -s 192.168.1.0/24 -d 172.16.100.1 -p udp -m udp –dport 53 -j DROP

相对于规则1,在规则2上使用了-m选项,明确指定了对udp进行扩展,扩展端口为53

而对于隐式扩展,不需要使用-m选项进行明确指定,对于tcp而言,可以扩展tcp的标志位、源和目标端口,对于udp,可以扩展源和目标端口,对于icmp,可以扩展request,replay等不同数据包

下面讲讲几个常用的显式扩展:

显式扩展之一 state:连接状态 

-m state –-state {NEW|ESTABLISHED|RELATED|INVALID|}

在第一篇博文中提到过:包过滤防火墙可以分为“状态检测型”和“简单包过滤型” 

接下来介绍下用iptables实现状态检测包过滤

介绍tcp以下4种状态的连接

    1.NEW 

        即3次握手的第一次,一次新的请求

iptable -A OUTPUT -o eth0 -m state --state NEW -j DROP 

分析这条规则,其中-m表示扩展加载state状态检测模块,--state NEW表示检测tcp的第一次握手,整条规则的作用就是拒绝从eth0网卡发出的新的tcp连接。

    2.ESTABLISHED 

        二次握手以后,连接断开之前的连接

    3.RELATED 

        相关连的状态,可解决控制ftp连接这种超麻烦的协议

    4.INVALID 

        无法识别的状态

应用案例: 

结合NEW和ESTABLISHED这2种状态,实现以下规则 

iptables -A INPUT -d 192.168.1.1 -p tcp –dport 22 -m state –-state NEW,ESTABLISHED -j ACCEPT 

允许外面向主机发起的新的ssh请求

iptables -A INPUT -d 192.168.1.1 -p tcp -dport 80 -m state –-state NEW,ESTABLISHED -j ACCEPT 

允许外面向主机发起的新的web连接

iptables -A OUTPUT -s 192.168.1.1 -p tcp sport 22 -m state -–state ESTABLISHED -j ACCEPT 

处于连接状态时,允许主机发往外部的ssh数据包

iptables -A OUTPUT -s 192.168.1.1 -p tcp sport 80 -m state –-state ESTABLISHED -j ACCEPT 

处于连接状态时,允许主机发往外部的web数据包

iptables -P INTUP DROP 

拒绝其它所有进来的数据包

iptables -P OUTPUT DROP 

拒绝其它所有出去的数据包 

这几条规则可以用在web服务器上,只允许客户向服务器发出ssh和web请求的访问,服务器不能主动向外发出任何连接,避免服务器成为黑客的跳板

显式扩展之二 mport:多端口匹配 

-m {mport|multiport} 

    --source-ports 

    --destination-ports 

    --ports

此扩展可以指定不连续的端口,在这里优化以上的案例来说明其作用 

iptables -A INPUT -d 192.168.1.1 -m mport –-destination-ports 22,80,443 -m state –-state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -s 192.168.1.1 -m mport –-source-ports 22,80,443 -m state –- state ESTABLISHED -j ACCEPT

iptables -P OUTPUT DROP

一次可以添加多个端口,端口之间用逗号隔开

显式扩展之三iprange:多IP匹配 

-m iprange 

    –-src-range 

    –-dst-range

这里用一个简单的例子来说明

iptables -A INPUT -d 192.168.1.1 -m iprange –src-range 192.168.0.1-192.168.0.100 -p tcp –-dport 80 -j DROP 

拒绝192.168.0.1-192.168.0.100这段地址访问192.168.1.1的web服务

显式扩展之四connlimit:并发连接请求个数限制 

-m connlimit 

    –-connlimit-above

显式扩展之五limit:速率限制 

-m limit 

    –-limit 平均速率 

    –-limit-burst 突发速率 

iptables -A INPUT -d 192.168.1.1 -p tcp –dport 80 -m limit –-limit 10/second –-limit-burst 30  -j ACCEPT 

此条规则限制了每秒10个数据包,突发最大速率是每秒30个数据包

显式扩展之六limit:时间限制 

-m time 

    –-timestart 

    –-timestop 

    --days 

    --datestart 

    --datestop

区分以下两种写法来理解这几个选项的意义

iptables -A INPUT  -d 192.168.1.1 -p tcp –-dport 80 -m time –-datestart 2012:07:20:08:30:00 –-datestop  2012:07:20:14:30:00 -j ACCEPT 

从7月20号 8:30到7月30号14:30允许访问本机web服务

iptables -A input -d 192.168.1.1 -p tcp –-dport 80 -m time –- timestart 08:30:00 –-timestop 14:30:00 –-datestart 2012:07:20 –-datestop 2012:07:30 -j ACCEPT 

从7月20号到7月30号 每天的8:30—14:30时分允许访问本机web服务

显式扩展之七string:字符限制(对中文字符匹配有限) 

-m string 

    –-algo bm|kmp 指定字符匹配算法 

    --string 指定字符

iptables -A out -s 172.16.100.1 -p tcp –-sport 80 -m string –-algo kmp –string “baidu.com” -j DROP 

包含baidu.com的数据包都拒绝

本文转自lustlost 51CTO博客,原文链接:http://blog.51cto.com/lustlost/940735,如需转载请自行联系原作者

继续阅读