对于显式扩展与隐式扩展的区别,先分析以下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 INTUP DROP
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-迷失在欲望之中” 博客,请务必保留此出处http://lustlost.blog.51cto.com/2600869/940735