multiport模块
可以使用multiport模块统一一次指定多个端口。
在写规则时,必须指定“ -m ”参数来检查状态
-m stat –state 检测包状态
-m multiport这个模块可以匹配一组源或者目的的端口号,最多达15个端口;
如后面跟:
–source-ports 22,80
–destination-ports 80,53,110,443
如下面完整示例:
1、iptables -A INPUT -p all -m state –state ESTABLISHED,RELATED -j ACCEPT
2、Iptables -A INPUT -p tcp –syn -m state –state NEW -m multiport –dports 21,80,443,8080 -j ACCEPT
iprange 模块
当需要为防火墙指定一段连续的IP地址时,这时最原始的方法,你可能需要添加很多条防火墙规则记录,而且一旦之后需要对其更改,那工作量也不小。而此时,我们可以利用iprange 模块的优势,将原本需要多条规则记录的方式,精简成一条规则。当然前提需要是连续的IP段。
如下面完整示例:
Iptables -A INPUT -m iprange –src-range 192.168.0.100-192.168.0.120 -j ACCEPT
处理方法
Netfilter内置了一些简单的处理方法:
ACCEPT和DROP处理方法,这两种是最常见的处理方法,分别是允许与不允许数据包进入系统。
如:
iptables -A INPUT -p tcp -d 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp -d 192.168.1.0/24 -j DROP
QUEUE处理方法
这种处理方法,首先需要经过netfilter的条件匹配,若符合,则主要是依赖用户空间的应用程序来进一步地对数据包进行处理,分析,然后再经过选择后将数据包传出。而在用户空间的应用程序可以是“杀毒软件”,“邮件过滤分析软件”但目前对应这种机制的的应用程序非常少。
如:
iptables -A FORWARD -p tcp -d 192.168.0.200 –dport 25 -j QUEUE
RETURN处理方式
以上的几种处理方式大家可能都比较熟悉,还有一种RETURN的方式大家知道么?要来了解RETURN方式,需要先了解用户自定义链的概念。
用户自定义链
大家对于INPUT,FORWARD,OUTPUT等链应该都比较熟悉,但是用户定义链(User Define Chain)呢?这又是什么概念,它有什么用处?
例如在上面所提及的三个基本链,在其中我们还可以扩充任意的新的链,而这些由我们自己创建的链称之为用户定义链。
那么我们先来看下如何来创建,修改,删除,这些用户定义链;
首先是添加链,如下图,添加一个叫做WEB_S0的链,因为我没有特定指定表,所以在此示例中所用的是默认filter表。若要指定其他表,则需要加上“-t ”参数,如:“-t nat”;
然后我们来更改一下用户定义链的名字,将WEB_S0改成EDB_S0;
然后我们将删除EDB_S0这个链;
若在用户定义链中有规则,则删除链的命令将会失败,其实这也是人为避免误删链。这种情况下,需要先清除规则,再删除用户定义链。
基本的用户自定义链的操作如上都很简单,那么对于用户自定义链的工作方式你知道是如何的吗?如何将用户自定义链与默认的表链结合起来使用呢?
首先需要了解的一点,当数据包经过netfilter时,默认是不会经过任何的用户自定义链的。即使你在之前的步骤定制了详细的过滤规则,其实都是没应用上的。那么我来看下如何将其中的某个链与我们的用户自定义链。
示例:iptables -A INPUT -p icmp -j NOICMP
如同上面示例中,我们将INPUT链绑定我们的用户自定义链NOICMP,(前提在NOICMP中已经做了针对ICMP包的DROP动作)使过滤出的ICMP包直接传到NOICMP的用户自定义进行过滤。过滤完成之后再回到INPUT链继续匹配。
那么我们又回过头来说说RETURN的概念。当我们的数据包随着被传到NOICMP的自定义链后,我们还可以通过RETURN的这个动作,让符合匹配后的数据流提前重新返回INPUT链。