知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

linux的防火墙功能IPtables详解之一

发布时间:2014-09-05 13:26:50作者:知识屋

一、iptables简介
Linux的2.4版内核引入了一种全新的包过滤引擎,称为Netfilter。
控制Netfilter的工具iptables是Linux 2.2版内核中比较老的命令ipchains的兄弟。
iptables把有次序的规则"链(chains)"应用到网络包上。
链的集合就构成了"表(tables)",用于处理特殊类型的流量。

例如,默认的iptables表名叫"filter(过滤器)"。网络数据包都使用这个表里的规则链来过滤。
过滤器表包含3个默认链。
对于每个包来说,内核都会选择三个链中适合的一个进行处理:
. FORWARD链规则, 用于从一个网络接口输入,再转发到另一个网络接口输出的包;
. INPUT链规则, 用于以本机为目的地的包;
. OUTPUT链规则, 用于从本地主机发出的包;

这3个标准链通常能够满足两个网络接口之间防火墙的全部需要。
如果必要,您还可以定义一个定制的配置,支持更复杂的记账或者路由场合。

除了filter表之外,iptables还包含"NAT"和"mangle"表。
. NAT表包含的规则链控制着NAT(Network Address Translation,网络地址转换,这里的“nat”就是iptables表名,
"NAT"是一般地址转换机制的叫法)。
12.4.6节讨论了NAT,本节给出一个正在起作用的nat表的例子。
在本节后面的内容里,我们会使用nat表的PREROUTING链来做反IP欺骗的包过滤。
. mangle表包含了链可以修改或者改变在NAT和包过滤之外的网络包的内容。
虽然mangle表对于做包的特殊处理很方便,比如重新设定IP包的ttl值,但是在大多数工作环境中一般不会用到它。
我们在这一节里只讨论filter和nat表,而把mangle表留给读者自己去探索。

图1比较完整地展示了一个数据包是如何经过防火墙的,考虑到节省空间,该图实际上包了三种情况:
. 来自外部,以防火墙(本机)为目的地的包,走图1中 "自上至下左边" 路径;
. 由防火墙(本机)生成并输出的包, 走图1中从"本地进程"开始,自上至下左边的路径;
. 来自外部,目的地是其它主机的包, 走图1中"自上至下走右边"的路径;
图1:
vc/J2dPDtcRtYW5nbGUgse21xM28yr4svs3T0M28Msv5z9TKvrXEuPzOqsflzvq1xMK3vrbNvC48YnI+Cs28Mjo8YnI+CjxpbWcgc3JjPQ=="http://www.zhishiwu.com/uploadfile/Collfiles/20140219/2014021909250011.jpg" width="700" height="855.339805825" alt="/">
构成一条链的每条规则都有一个"target(目标)"子句,它决定了如何处理匹配的包。
一旦某个包匹配了一个规则,那么它的结局就确定了,不再用其他规则来检查它。
虽然iptables内部定义了许多target,但是还可以指定另一条链作为规则的target。


在filter表中的规则可以使用的target子句有
ACCEPT、DROP、REJECT、LOG、MIRROR、QUEUE、REDIRECT、RETURN和ULOG。
. 当一条规则落在了ACCEPT上的时候,匹配这条规则的包就可以继续通过。
. DROP和REJECT都会把它们的包丢弃。DROP是默默地丢弃,而REJECT会返回一则ICMP错误消息。
. LOG提供跟踪包匹配规则情况的简单办法,ULOG提供了范围更广的日志记录信息。
. REDIRECT把包分流到一个代理,而不是直接让它们通过。
您可能会用这个功能来迫使站点上的所有Web流量都通过一个Web高速缓存,比如Squid。
. RETURN终结用户定义的链,类似于子例程调用中的return语句。
. MIRROR目标在发送包之前交换IP源和目的地址。
. QUEUE通过一个内核模块把包交给本地用户程序。

Linux防火墙通常是由rc启动脚本中的一系列iptables命令来实现的。
各个iptables命令通常采取下列形式之一:
iptables -F chain-name
iptables -P chain-name target
iptables -A chain-name -i interface -j target
. 第一种形式(-F)把之前所有的规则都从链中清除掉。
. 第二种形式(-P)给链设置一条默认策略(也就是target)。我们建议您使用DROP作为链默认的目标(target)。
. 第三种形式(-A)把当前的说明追加到链上。
除非使用-t参数指定了表(table)名,否则命令被默认应用到filter表上。
-i参数将规则应用到有名字的接口上,-j则标识出目标(target)。

iptables还接受许多别的子句,表1给出了其中的一部分。
表1
系统被骇的损失。
可惜这个功能无法匹配出来自其它主机的封包。

参数: -m owner --gid-owner
范例: iptables -A OUTPUT -m owner --gid-owner 0
说明: 用来匹配来自本机的封包,是否为某特定使用者群组所产生的,使用时机同上。

参数: -m owner --pid-owner
范例: iptables -A OUTPUT -m owner --pid-owner 78
说明: 用来匹配来自本机的封包,是否为某特定进程所产生的,使用时机同上。

参数: -m owner --sid-owner
范例: iptables -A OUTPUT -m owner --sid-owner 100
说明: 用来匹配来自本机的封包,是否为某特定连接(Session ID)的响应封包,使用时机同上。

参数: -m state --state
范例: iptables -A INPUT -m state --state RELATED,ESTABLISHED
说明: 用来匹配连接状态,
连接状态共有四种:
INVALID、ESTABLISHED、NEW 和RELATED。
INVALID 表示该封包的连接编号(Session ID)无法辨识或编号不正确。
ESTABLISHED 表示该封包属于某个已经建立的连接。
NEW 表示该封包想要起始一个连接(重设连接或将连接重导向)。
RELATED 表示该封包是属于某个已经建立的连接,所建立的新连接。
例如:FTP-DATA 连接必定是源自某个FTP 连接。

4. [-j target/jump] 常用的处理动作
-j 参数用来指定要进行的处理动作,常用的处理动作包括:
ACCEPT、REJECT、DROP、REDIRECT、MASQUERADE、LOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、MARK,

分别说明如下:
动作: ACCEPT
说明: 将封包放行,
进行完此处理动作后,将不再匹配其它规则,直接跳往下一个规则链(natostrouting)。

动作: REJECT
说明: 拦阻该封包,并传送封包通知对方,
可以传送的封包有几个选择:
ICMP port-unreachable、
ICMP echo-reply 或是
tcp-reset(这个封包会要求对方关闭连接),
进行完此处理动作后,将不再匹配其它规则,直接中断过滤程序。
范例: iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset

动作: DROP
说明: 丢弃封包不予处理,进行完此处理动作后,将不再匹配其它规则,直接中断过滤程序。

动作: REDIRECT
说明: 将封包重新导向到另一个端口(PNAT),进行完此处理动作后,将会继续匹配其它规则。
这个功能可以用来实现透明代理或用来保护web 服务器。
范例: iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

动作: MASQUERADE
说明: 改写封包来源IP 为防火墙NIC IP,可以指定port 对应的范围,
进行完此处理动作后,直接跳往下一个规则链(manglepostrouting)。
这个功能与SNAT 略有不同,当进行IP 伪装时,不需指定要伪装成哪个IP,IP 会从网卡直接读取,
当使用拨号接连时,IP通常是由ISP 公司的DHCP 服务器指派的,这个时候MASQUERADE 特别有用。
范例: iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000

动作: LOG
说明: 将封包相关讯息纪录在/var/log 中,详细位置请查阅/etc/syslog.conf 配置文件,
进行完此处理动作后,将会继续匹配其规则。
范例: iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets"

动作: SNAT
说明: 改写封包来源IP 为某特定IP 或IP 范围,可以指定port 对应的范围,
进行完此处理动作后,将直接跳往下一个规则(mangleostrouting)。
范例: iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source?194.236.50.155-194.236.50.160:1024-32000

动作: DNAT
说明: 改写封包目的地IP 为某特定IP 或IP 范围,可以指定port 对应的范围,
进行完此处理动作后,将会直接跳往下一个规则链(filter:input 或filter:forward)。
范例: iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10:80-100

动作: MIRROR
说明: 镜射封包,也就是将来源IP 与目的地IP 对调后,将封包送回,
进行完此处理动作后,将会中断过滤程序。

动作: QUEUE
说明: 中断过滤程序,将封包放入队列,交给其它程序处理。
通过自行开发的处理程序,可以进行其它应用,例如:计算连接费用等。

动作: RETURN
说明: 结束在目前规则链中的过滤程序,返回主规则链继续过滤,
如果把自定义规则链看成是一个子程序,那么这个动作,就相当于提前结束子程序并返回到主程序中。

动作: MARK
说明: 将封包标上某个代号,以便提供作为后续过滤的条件判断依据,
进行完此处理动作后,将会继续匹配其它规则。
范例: iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜