iptables从入门到精通
- 格式:doc
- 大小:79.50 KB
- 文档页数:7
ptables简介iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表。
filter负责过滤数据包,包括的规则链有,input,output和forward;nat则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output;mangle表则主要应用在修改数据包内容上,用来做流量整形的,默认的规则链有:INPUT,OUTPUT,NAT,POSTROUTING,PREROUTING;input匹配目的IP是本机的数据包,forward匹配流经本机的数据包,prerouting用来修改目的地址用来做DNAT,post routing用来修改源地址用来做SNAT。
iptables主要参数-A 向规则链中添加一条规则,默认被添加到末尾-T指定要操作的表,默认是filt er-D从规则链中删除规则,可以指定序号或者匹配的规则来删除-R进行规则替换-I插入一条规则,默认被插入到首部-F清空所选的链,重启后恢复-N新建用户自定义的规则链-X删除用户自定义的规则链-p用来指定协议可以是tcp,udp,icmp等也可以是数字的协议号,-s指定源地址-d指定目的地址-i进入接口-o流出接口-j采取的动作,accept,drop,snat,dnat,masquerade--sport源端口--dport目的端口,端口必须和协议一起来配合使用注意:所有链名必须大写,表明必须小写,动作必须大写,匹配必须小写iptable配置实例iptable基本操作iptables -L 列出iptables规则iptables -F 清除iptables内置规则iptables -X 清除iptables自定义规则设定默认规则在iptables规则中没有匹配到规则则使用默认规则进行处理iptables -P INPUT DROPiptables -P OUTPUT ACCEPTiptables -P FORWARD DROP配置SSH规则iptables -A INPUT -p t cp --dport 22 -j ACCEPTiptables -A OUTPUT -p tcp --sport 22 -j ACCEPT 如果你把OUTPUT 设置成DROP,就需要加上这个规则,否则SSH还是不能登录,因为SSH服务职能进不能出。
规则格式:iptables [-t 表名] [-COMMAND命令] [chain 规则链名] [-m matchname 匹配] [-j 动作](大小写敏感)-t table表名包括:raw:高级功能,如:网址过滤。
mangle:数据包修改(QOS),用于实现服务质量。
net:地址转换,用于网关路由器。
filter:包过滤,用于防火墙规则。
COMMAND命令:链管理:-N:new,自定义一条新的规则链-X:delete,删除自定义的规则链-P:policy,设置默认策略,对filter表中的链而言,其默认策略有;ACCEPT:接受DROP:丢弃REJECT:拒绝-E:重命名自定义链,引用计数不为0的自定义链不能够被重命名,也不能被删除;规则管理:-A:append,追加-I:insert,插入,要时指明位置,省略时表示第一条-D:delete,删除(1)指明规则序号;(2)指明规则本身-R:replace,替换指定链上的指定规则-F:flush,清空指定的规则链-Z:zero,置零iptables的每条规则都有两个计数器:(1)匹配到的报文的个数(2)匹配到的所有报文的大小之和查看:-L:list,列出指定链上的所有规则;-n:numberic,以数字格式显示地址和端口号-v:verbose,详细信息;-vv,-vvv-x:exactiy,显示计数器结果的精确值--line-numbers:显示规则的序号chain规则链名:INPUT链:处理输入数据包。
OUTPUT链:处理输出数据包。
PORWARD链:处理转发数据包。
PREROUTING链:用于目标地址转换(DNAT)。
POSTOUTING链:用于源地址转换(SNAT)。
-m匹配条件:基本匹配条件:无需加载任何模块,由iptables/netfilter自行提供;-s,--source address;检查报文中的源IP地址是否符合此处指定的地址或范围;-d, --destination address;检查报文中的目标IP地址是否符合此处指定的地址或范围;扩展匹配条件:需要加载扩展模块,方可生效;-m-j 动作包括:Accept:接收数据包。
Iptables规则是如何练成的本章将详细地讨论如何构建Iptables规则。
Iptables 包含三个表(filter、nat 、mangle),默认使用filter表,每个表包含若干条链(PREROUTING,POSTROUTING,OUTPUT,INPUT和FORWARD),每条规则就添加到相应的链上。
规则就是指向标,在一条链上,对不同的连接和数据包阻塞或允许它们去向何处。
插入链的每一行都是一条规则。
我们也会讨论基本的matche及其用法,还有各种各样的target。
流程图1. 基础我们已经解释了什么是规则,在内核看来,规则就是决定如何处理一个包的语句。
如果一个包符合所有的条件(就是符合matche语句),我们就运行target 或jump指令。
书写规则的语法格式是:iptables [-t table] command [chain] [match] [-j target/jump]注意target指令必须在最后。
如果你不想用标准的表,就要在[table]处指定表名。
一般情况下没有必要指定使用的表,因为iptables 默认使用filter表来执行所有的命令。
也没有必要非得在这里指定表名,实际上几乎可在规则的任何地方。
当然,把表名在开始处已经是约定俗成的标准。
尽管命令总是放在开头,或者是直接放在表名后面,我们也要考虑考虑到底放在哪儿易读。
command告诉程序该做什么,比如:插入一个规则,还是在链的末尾增加一个规则,还是删除一个规则,下面会仔细地介绍。
Chain 指定表的哪条规则链。
match细致地描述了包的某个特点,以使这个包区别于其它所有的包。
在这里,我们可以指定包的来源IP 地址,网络接口,端口,协议类型,或者其他什么。
下面我们将会看到许多不同的match。
最后是数据包的目标所在。
若数据包符合所有的match,内核就用target来处理它,或者说把包发往target。
比如,我们可以让内核把包发送到当前表中的其他链(可能是我们自己建立的),或者只是丢弃这个包而没有什么处理,或者向发送者返回某个特殊的应答。
Linux命令高级技巧使用iptables命令配置和管理防火墙规则Linux系统中有许多命令可以使用,其中iptables命令是用于配置和管理防火墙规则的重要工具。
本文将介绍一些使用iptables命令的高级技巧,帮助读者更好地理解和使用这个命令。
一、iptables命令简介iptables是一个用于IPv4包过滤和控制Linux内核防火墙服务的用户空间工具。
它可以进行网络地址转换(NAT)、数据包过滤、端口重定向等操作,是保护计算机系统免受恶意攻击的重要工具。
二、iptables命令基本语法iptables命令的基本语法如下所示:iptables [选项] [链] [规则规格]其中,选项是可选的,用于指定不同的功能;链用于指定规则要应用的链,例如INPUT、FORWARD、OUTPUT等;规则规格用于指定具体的防火墙规则。
三、iptables命令常用选项1. -A:追加一条规则到某个链的末尾2. -I:向某个链中的指定位置插入一条规则3. -D:从某个链中删除一条规则4. -P:设置某个链的默认策略5. -L:列出某个链中的所有规则6. -F:清除某个链中的所有规则四、iptables命令高级技巧1. 配置端口转发使用iptables命令可以轻松实现端口转发,将外部请求转发到内部服务器。
例如,要将外部的SSH请求转发到内部服务器的SSH端口,可以使用如下命令:iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to-destination 内部服务器IP地址:22这样,外部用户连接到本机的22端口时,请求将被转发至内部服务器的22端口。
2. 过滤IP地址通过iptables命令,可以方便地过滤特定的IP地址或IP地址段。
例如,要拒绝来自某个IP地址的所有请求,可以使用如下命令:iptables -A INPUT -s 某个IP地址 -j DROP这样,来自该IP地址的请求将被直接拒绝。
iptables用法初解一、四表五链之间的关系1.4个表:filter,nat,mangle,raw,默认表是filter(没有指定表的时候就是filter表)。
表的处理优先级:raw>mangle>nat>filter。
filter:一般的过滤功能nat:用于nat功能(端口映射,地址映射,中转IP等)mangle:用于对特定数据包的修改raw:有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能2.5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。
PREROUTING:数据包进入路由表之前INPUT:通过路由表后目的地为本机FORWARDING:通过路由表后,目的地不为本机OUTPUT:由本机产生,向外转发POSTROUTIONG:发送到网卡接口之前。
3.关系如下两个图:iptables中表和链的对应关系如下:二、修改1.配置文件修改方式iptables 装好后,可以用service iptables start来启动,默认是不写配置文件的,可以修改/etc/sysconfig/iptables-config文件的IPTABLES_SAVE_ON_RESTART参数为"YES",那么再次service iptables restart后,会生成/etc/sysconfig/iptables文件,这个是iptables的规则配置文件。
然后每次修改这个文件,重启iptables服务就可以生效。
2.使用iptables-save和iptables-restore实时修改另一种方法可以实时的修改iptables,先调用iptables-save > 1.txt(任一文件), 1.txt保存的就是当前iptables所有的规则。
然后修改1.txt文件,再调用iptables-restore 1.txt,这样可以实时的修改iptables。
建立规则和链通过向防火墙提供有关对来自某个源、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。
通过使用netfilter/iptables 系统提供的特殊命令iptables,建立这些规则,并将其添加到内核空间的特定信息包过滤表内的链中。
关于添加/除去/编辑规则的命令的一般语法如下:$ iptables [-t table] command [match] [target]表(table)[-t table] 选项允许使用标准表之外的任何表。
表是包含仅处理特定类型信息包的规则和链的信息包过滤表。
有三种可用的表选项:filter、nat 和mangle。
该选项不是必需的,如果未指定,则filter 用作缺省表。
filter 表用于一般的信息包过滤,它包含INPUT、OUTPUT 和FORWARD 链。
nat 表用于要转发的信息包,它包含PREROUTING、OUTPUT 和POSTROUTING 链。
如果信息包及其头内进行了任何更改,则使用mangle 表。
该表包含一些规则来标记用于高级路由的信息包,该表包含PREROUTING 和OUTPUT 链。
注:PREROUTING 链由指定信息包一到达防火墙就改变它们的规则所组成,而POSTROUTING 链由指定正当信息包打算离开防火墙时改变它们的规则所组成。
命令(command)上面这条命令中具有强制性的command 部分是iptables 命令的最重要部分。
它告诉iptables 命令要做什么,例如,插入规则、将规则添加到链的末尾或删除规则。
以下是最常用的一些命令:-A 或--append:该命令将一条规则附加到链的末尾。
示例:$ iptables -A INPUT -s 205.168.0.1 -j ACCEPT该示例命令将一条规则附加到INPUT 链的末尾,确定来自源地址205.168.0.1 的信息包可以ACCEPT。
iptables 入门 - [服务器区]这一节开始说明 iptables 的观念及用法iptables 中的指令,均需区分大小写。
ipchains 和 iptables 在语法上的主要的差异,注意如下:1. 在 ipchains 中,诸如 input 链,是使用小写的chains 名,在 iptables 中,要改用大写 INPUT。
2. 在 iptables 中,要指定规则是欲作用在那一个规则表上(使用 -t 来指定,如 -t nat),若不指定,则预设是作用在 filter 这个表。
3. 在 ipchains 中, -i 是指介面(interface),但在iptables 中,-i 则是指进入的方向,且多了 -o,代表出去的方向。
4. 在 iptables 中,来源 port 要使用关键字 --sport或 --source-port5. 在 iptables 中,目的 port 要使用关键字 --dport或 --destination-port6. 在 iptables 中,"丢弃" 的处置动作,不再使用DENY 这个 target,改用 DROP。
7. 在 ipchains 的记录档功能 -l,已改为目标 -jLOG,并可指定记录档的标题。
8. 在 ipchains 中的-y,在 iptables 中可用 --syn 或 sidebar 隐藏/显示--tcp-flag SYN,ACK,FIN SYN9. 在 iptables 中,imcp messages 型态,要加上关键字 --icmp-type,如:iptables -A OUTPUT -o eth0 -p icmp -s $FW_IP --icmp-type 8 -d any/0 -j ACCEPTiptables 使用时的例子在设定 iptables 的封包过滤规则时,有几个例子,若先熟悉它们,往后就可自行套用,依此类推,很快地,您就可以进入这个天地之中。
Linux防火墙iptables学习笔记(一)入门要领文章分类:综合技术要在网上传输的数据会被分成许多小的数据包,我们一旦接通了网络,会有很多数据包进入,离开,或者经过我们的计算机。
首先我们要弄明白,防火墙将怎么对待这些数据包。
这些数据包会经过一些相应的规则链,比如要进入你的计算机的数据包会首先进入INPUT链,从我们的计算机发出的数据包会经过 OUTPUT链,如果一台计算机做一个网络的网关(处于内网和外网两个网络连接的两台计算机,这两台计算机之间相互通讯的数据包会经过这台计算机,这台计算机即相当于一个路由器),可能会有很多数据经过这台计算机,那么这些数据包必经FORWARD链,FORWARD链即数据转发链。
明白了这些“链”的概念我们才能进一步学习使用 iptables。
现在我们再来分析一下iptables规则是如何工作的,假如我们要访问网站,我们要对发出请求,这些数据包要经过OUTPUT链,在请求发出前,Linux的内核会在OUTPUT链中检查有没有相应的规则适合这个数据包,如果没有相应的规则,OUTPUT链还会有默认的规则,或者允许,或者不允许(事实上,不允许有两种,一种是把请求拒绝,告诉发出请示的程序被拒绝;还有一种是丢弃,让请求发出者傻等,直到超时)。
如果得到允许,请求就发出了,而服务器返回的数据包会经过INPUT 链,当然,INPUT链中也会有相应的规则等着它。
下面我们介绍几个iptable的命令iptables -L [-t filter]这条命令是显示当前有什么已经设置好的防火墙规则,可能的显示结果如下:Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination从这里我们可以看出,iptables 有三个链分别是 INPUT OUTPUT 和FORWARD.其中INPUT 是外部数据要进过我们主机的第一外关卡(当然你前面也可以再加硬件防火墙).OUTPUT 是你的主机的数据送出时要做的过绿卡FORWARD 是转发你在NAT时才会用到要设置iptables 主要是对这三条链进行设置,当然也包括-nat的另外三个链我们以后再说你要用iptables 你就得启到它启动命令 service iptables restart iptables的默认设置为三条链都是ACCEPT 如下:iptables -P INPUT ACCEPTiptables -P OUTPUT ACCEPTiptables -P FORWARD ACCEPT以上信息你可以用 iptables -L看到总体来说iptables可以有二种设置1.默认允许,拒绝特别的2.默认拒绝,允许特别的二者都有自己有特点,从安全角度看个人偏向于第二种,就是默认拒绝,允许特别的.但iptalbes 默认是第一种默认允许,拒绝特别的你可以用命令改变默认值来达到我们的要求命令如下iptables -P INPUT DROPiptables -P OUTPUT DROPiptables -P FORWARD DROP你再用iptables -L查看一下就会觉得默认值以改了先来谈炎几个参数XZFL-F 清除规则-X 清除链-Z 将链的记数的流量清零一般来说再创建访问规则时都会将原有的规则清零这是一个比较好的习惯,因为某些规则的存在会影响你建的规则.基本语法:iptables [-t filter] [-AI INPUT,OUTPUT,FORWARD] [-io interface] [-p tcp,udp.icmp,all] [-s ip/nerwork] [--sport ports][-d ip/netword] [--dport ports] [-j ACCEPT DROP]以上是iptables的基本语法A 是添加的意思I 是播入的意思io 指的是数据要进入或出去所要经过的端口如eth1 eth0 pppoe等p 你所要指定的协议-s 指源地址可是单个IP如192.168.2.6 也可以是一个网络 192.168.2.0/24 还可以是一个域名如 如果你填写的域名系统会自动解析出他的IP并在iptables里显示--sport 来源端口-d 同-s相似只不过他指的是目标地址也可以是IP 域名和网络--dport 目标端口-j 执行参数 ACCEPT DROP注意:如果以有参数存在则说明全部接受1 如我要来自己l0接口的数据全部接受,我们可以写成这样:iptables -A INPUT -i lo -j ACCEPT2 如果我们想接受192.168.2.6这个IP地址传来的数据我们可以这样写iptablse -A INPUT -i eth1 -p tcp -s 192.168.2.6 -j ACCEPT3 如果我们要拒绝来自己192.168.2.0/24这个网的telnet连接iptablse -A INPUT -i eth1 -p udp -s 192.168.2.0/24--sport 23 -j DROPLinux防火墙iptables学习笔记(二)参数指令文章分类:综合技术iptables 指令语法:iptables [-t table] command [match] [-j target/jump]-t 参数用来指定规则表,内建的规则表有三个,分别是:nat、mangle 和 filter,当未指定规则表时,则一律视为是 filter。
Linux下iptables超详细教程和使⽤⽰例iptables的结构:iptables由上⽽下,由Tables,Chains,Rules组成。
⼀、iptables的表tables与链chainsiptables有Filter, NAT, Mangle, Raw四种内建表:1. Filter表Filter是iptables的默认表,它有以下三种内建链(chains):INPUT链 – 处理来⾃外部的数据。
OUTPUT链 – 处理向外发送的数据。
FORWARD链 – 将数据转发到本机的其他⽹卡设备上。
2. NAT表NAT表有三种内建链:PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。
它会转换数据包中的⽬标IP地址(destination ip address),通常⽤于DNAT(destination NAT)。
POSTROUTING链 – 处理即将离开本机的数据包。
它会转换数据包中的源IP地址(source ip address),通常⽤于SNAT(source NAT)。
OUTPUT链 – 处理本机产⽣的数据包。
3. Mangle表Mangle表⽤于指定如何处理数据包。
它能改变TCP头中的QoS位。
Mangle表具有5个内建链(chains):PREROUTINGOUTPUTFORWARDINPUTPOSTROUTING4. Raw表Raw表⽤于处理异常,它具有2个内建链:PREROUTING chainOUTPUT chain5.⼩结⼆、IPTABLES 规则(Rules)规则的关键知识点:Rules包括⼀个条件和⼀个⽬标(target)如果满⾜条件,就执⾏⽬标(target)中的规则或者特定值。
如果不满⾜条件,就判断下⼀条Rules。
⽬标值(Target Values)在target⾥指定的特殊值:ACCEPT – 允许防⽕墙接收数据包DROP – 防⽕墙丢弃包QUEUE – 防⽕墙将数据包移交到⽤户空间RETURN – 防⽕墙停⽌执⾏当前链中的后续Rules,并返回到调⽤链(the calling chain)中。
iptables从入门到精通一.主要知识点:1. Iptables表链结构2. 数据包过滤流程3. Iptables书写规则4. Iptables条件匹配5. Iptables数据包控制6. Iptables七层过滤7. Iptables脚本二.具体的知识点介绍1. Iptables表链结构1)默认的4个规则表* raw表:确定是否对该数据包进行状态跟踪* mangle表:为数据包设置标记* nat表:修改数据包中的源、目标IP地址或端口* filter表:确定是否放行该数据包(过滤)2)默认的5种规则链* INPUT:处理入站数据包* OUTPUT:处理出站数据包* FORWARD:处理转发数据包* POSTROUTING链:在进行路由选择后处理数据包* PREROUTING链:在进行路由选择前处理数据包2. 数据包过滤流程规则表间的优先顺序* 依次为:raw à mangle à nat à filter规则链间的匹配顺序* 入站数据:PREROUTING à INPUT* 出站数据:OUTPUT à POSTROUTING* 转发数据:PREROUTING à FORWARD à POSTROUTING 如图:3. Iptables书写规则iptables命令的语法格式* iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转] 几个注意事项* 不指定表名时,默认表示filter表* 不指定链名时,默认表示该表内所有链* 除非设置规则链的缺省策略,否则需要指定匹配条件清除规则* -D:删除指定位置或内容的规则* -F:清空规则链内的所有规则* -Z:清空计数器自定义规则链* -N:创建一条新的规则链* -X:删除自定义的规则链其他* -h:查看iptables命令的使用帮助例如:[root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT[root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT[root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT[root@localhost ~]# iptables -P INPUT DROP[root@localhost ~]# iptables -L INPUT --line-numbersChain INPUT (policy DROP)num target prot opt source destination1 ACCEPT udp -- anywhere anywhere2 ACCEPT icmp -- anywhere anywhere3 ACCEPT tcp -- anywhere anywhere4. Iptables条件匹配1)通用条件匹配协议匹配* 使用“-p 协议名”的形式* 协议名可使用在“/etc/protocols”文件中定义的名称* 常用的协议包括tcp、udp、icmp等地址匹配* 使用“-s 源地址”、“-d 目标地址”的形式* 地址可以是单个IP地址、网络地址(带掩码长度)接口匹配* 使用“-i 网络接口名”、“-o 网络接口名”的形式,分别对应接收、发送数据包的网络接口例如:[root@localhost ~]# iptables -I INPUT -p icmp -j REJECT[root@localhost ~]# iptables -A FORWARD -p ! icmp -j ACCEPT[root@localhost ~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT[root@localhost ~]# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP[root@localhost ~]# iptables -A FORWARD -o eth1 -d 61.35.4.3 -j DROP2)Iptables隐含条件匹配端口匹配* 使用“--sport 源端口”、“--dport 目标端口”的形式* 采用“端口1:端口2”的形式可以指定一个范围的端口TCP标记匹配* 使用“--tcp-flags 检查范围被设置的标记”的形式* 如“--tcp-flags SYN,RST,ACK SYN”表示检查SYN、RST、ACK这3个标记,只有SYN为1时满足条件ICMP类型匹配* 使用“--icmp-type ICMP类型”的形式* ICMP类型可以使用类型字符串或者对应的数值,例如Echo-Request、Echo-Reply 例如:[root@localhost ~]# iptables -A FORWARD -p tcp --dport 22 -j ACCEPT[root@localhost ~]# iptables -A OUTPUT -p tcp --sport 20:80 -j ACCEPT[root@localhost ~]# iptables -I INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK SYN -j REJECT[root@localhost ~]# iptables -A INPUT -i eth0 -p icmp --icmp-type Echo-Request -j DROP[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT 3)Iptables扩展条件匹配MAC地址匹配* 使用“-m mac”结合“--mac-source MAC地址”的形式多端口匹配* 使用“-m multiport”结合“--sports 源端口列表”或者“--dports 目标端口列表”的形式* 多个端口之间使用逗号“,”分隔,连续的端口也可以使用冒号“:”分隔IP地址范围匹配* 使用“-m iprange”结合“--src-range 源IP范围”或者“--dst-range 目标IP范围”的形式* 以“-”符号连接起始IP地址、结束IP地址例如:[root@localhost ~]# iptables -A FORWARD -m mac --mac-source 00:0C:29:27:55:3F -j DROP[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport20,21,25,110,1250:1280 -j ACCEPT[root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range192.168.1.20-192.168.1.99 -j DROP5. Iptables数据包控制常见的数据包处理方式* ACCEPT:放行数据包* DROP:丢弃数据包* REJECT:拒绝数据包* LOG:记录日志信息,并传递给下一条规则处理* 用户自定义链名:传递给自定义链内的规则进行处理* SNAT:修改数据包的源地址信息* DNAT:修改数据包的目标地址信息[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/minute --limit-burst 8 -j LOG[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j DROP[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 218.29.30.31[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE[root@localhost ~]#iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.6(:80)6. Iptables七层过滤1). 整体实现过程* 添加内核补丁,重新编译内核,并以新内核引导系统* 添加iptables补丁,重新编译安装iptables* 安装l7-protocols协议定义包* 使用iptables命令设置应用层过滤规则2). 使用的软件包列表* Linux内核源码包:linux-2.6.28.8.tar.bz2* iptables源码包:iptables-1.4.2.tar.bz2* layer7补丁源码包:netfilter-layer7-v2.21.tar.gz* 协议定义包:l7-protocols-2009-05-10.tar.gz3). layer7应用层协议匹配* 匹配格式:-m layer7 --l7proto 协议名* 支持以下常见应用层协议的过滤* qq:腾讯公司QQ程序的通讯协议* msnmessenger:微软公司MSN程序的通讯协议* msn-filetransfer:MSN程序的文件传输协议* bittorrent:BT下载类软件使用的通讯协议* xunlei:迅雷下载工具使用的通讯协议* edonkey:电驴下载工具使用的通讯协议* 其他各种应用层协议:ftp、http、dns、imap、pop3……4). 规则示例:过滤使用qq协议的转发数据包* iptables -A FORWARD -m layer7 --l7proto qq -j DROP7. Iptables脚本防火墙脚本的一般结构1).设置网段、网卡、IP地址等变量2).加载包过滤相关的内核模块* FTP相关:ip_nat_ftp、ip_conntrack_ftp3).确认开启路由转发功能* 方法1:/sbin/sysctl -w net.ipv4.ip_forward=1* 方法2:echo 1 > /proc/sys/net/ipv4/ip_forward* 方法3:修改/etc/sysctl.conf,设置 net.ipv4.ip_forward = 14).用于添加的具体防火墙规则内容* 清空原有规则,建立新的规则例如:/sbin/modprobe ip_tables/sbin/modprobe ip_nat_ftpiptables -Fiptables -Xiptables -Z#------------------------default rule ------------------------------iptables -P INPUT DROPiptables -P OUTPUT DROPiptables -P FORWARD DROP#------------------------limit packet per second------------------------------ /sbin/iptables -A INPUT -f -m limit --limit 100/sec --limit-burst 100 -j ACCEPT /sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 20/sec --limit-burst 200 -j ACCEPT/sbin/iptables -A INPUT -p icmp -m limit --limit 12/min --limit-burst 2 -j DROP#------------------------ssh rule ------------------------------------------- iptables -t filter -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPTiptables -t filter -A OUTPUT -o eth0 -p tcp --sport 22 -j ACCEPT#------------------------www-ftp-mail-dns rule -------------------------------- iptables -t filter -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPTiptables -t filter -A OUTPUT -o eth0 -p tcp --sport 80 -j ACCEPT#-------------------------ICMP rule ------------------------------------------ iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPTiptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPTiptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPTiptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT。