主要是自己的学习笔记以及网上资料的参考,按照自己的口味总结,以后稍微参考一下就能熟练上手,本系列暂定写4章:
第一章:流程介绍
第二章:如何使用
第三章:深入理解
第四章:高级用法
1 几句话介绍iptables
Linux内核中有一个联网子系统netfilter,提供了有状态和无状态的分组过滤,同时提供了NAT和IP伪装服务。这个系统可以通过工具iptables来进行控制。
2 规则,链,表
既然是用来处理过滤数据包神马的,那么最基本的肯定就是规则了,一个规则就定义了对一个满足某些条件的数据包应该肿么做,这是最基本的了。我们又看,对于数据包,最终处理它的是规则,那么处理的时机又可以是进入系统的时候或者出系统的时候,所以我们又提出链,一个链包含了一些规则。最后,那么多的规则,又不好管理,于是又来了一个表,iptables以表的形式来管理规则,而且表这个东西又和应用挂钩,比如与NAT有关的链,规则我就放到一个NAT表中。于是乎,概念就解释完了,下面列出iptables里面的链和表:
iptables里面:
规则:有很多个,你自己定义。
链:包含了一些规则,主要有以下的链(主要是根据处理时机划分的)
- INPUT链:包含处理入站数据包的一些规则
- OUTPUT:包含处理出站数据包的一些规则
- FORWARD:包含处理转发数据包的一些规则,转发数据包:就是不进入本机应用程序,而是从本机转发出去的包。
- POSTROUTING链:在进行路由选择后处理数据包
- PREROUTING链:在进行路由选择前处理数据包,无论数据包是否进入代理服务器内部,还是直接转发,都要先进行这条链的匹配。
默认的表:
- raw表:debug测试,确认是否对该数据包进行状态跟踪
- mangle表:为数据包设置标记,主要是改变包的TOS,TTL,MARK属性,一般不操作。包含了PREROUTING,POSTROUTING,FORWARD,INPUT,OUTPUT链。
- nat表:主要做SNAT,DNAT,MASQUERADE的,包含INPUT OUTPUT PREROUTING POSTROUTING四条链
- filer表:对数据包进行过滤,准许什么数据包通过accept,不许什么数据包通过drop,并且这个规则表也是默认的
最后补充一点,iptables中,表是唯一的,也就是不存在两个NAT表,而链则不是唯一的,比如NAT表和MANGLE表都有一个INPUT链,他们的INPUT链中的规则是不一样的。而链中的具体规则,也不是唯一的,INPUT链和OUTPUT链中都可以存在一个一样的规则。
3 数据包流程
总结一句话概括就是 当数据包到达防火墙时,如果MAC地址符合,就会由内核里相应的驱动程序接收,当数据包经过某个表的某个链时,iptables对比数据包和设定的规则,进行处理,决定是发送给本地的程序,还是转发给其他机子,还是其他的什么。
我们来细细说:
首先看下面这张图:
然后我们来加深理解:
对于收到的数据包,表是有优先级的哦
raw->mangle->nat(转换)->filter(过滤),每一步的处理根据上图中的优先级顺序来的哦。
规则链间的匹配顺序
入站数据:PREROUTING、INPUT
出站数据:OUTPUT、POSTROUTING
转发数据:PREROUTING、FORWARD、POSTROUTING
按顺序依次进行检查,找到相匹配的规则即停止(LOG策略会有例外)
检测下看懂木有,以下是三个图,请对比上面的流程图理解,会恍然大悟的。
1 以本地为目标(就是我们自己的机子了)的包
2 以本地为源的包
3 被转发的包
最后再来一张差不多的图。
在第一个路由判断处,不是发往本地的包,我们会发送它穿过 FORWARD链。若包的目的地是本地监听的IP地址,我们就会发送这个包穿过INPUT链,最后到达本地。
值得注意的是,在做NAT的过程中,发往本机的包的目的地址可能会在PREROUTING链里被改变。这个操作发生在第一次路由之前,所以在地址被改变之后,才能对包进行路由。注意,所有的包都会经过上图中的某 一条路径。如果你把一个包DNAT回它原来的网络,这个包会继续走完相应路径上剩下的链,直到它被发送回原来的网络。 这一节就到这里,了解了数据包的流程,下一节我们就讲讲怎么使用iptables了。
4 参考文章
http://linux.ccidnet.com/art/737/20060705/596545_1.html
http://man.chinaunix.net/network/iptables-tutorial-cn-1.1.19.html
http://linux.ccidnet.com/pub/html/tech/iptables/index.htm
上一节说到了,iptables的一些基本概念以及工作流程,下面我们来看看iptables具体该如何使用。
本系列文章索引:
第一章:流程介绍
第二章:如何使用
第三章:深入理解
第四章:高级用法
1 规则语法:
1.1 查看规则
iptables [-t 表名] <-L> [链名]
注:不指定表名的话默认查看filter表
1.2 增加(追加,append)、插入、替换规则
iptables [-t 表名] <-A(追加) | -I(插入)> | -D(删除) | -R(替换)> <链名> [规则编号] [-i|o 进入或流出网卡名称] [-p 协议类型] [-s 源IP地址|源子网] [--sport 源端口号] [-d 目标ip地址|目标子网] [--dport 目标端口号] <-j 动作(accept|drop|nat等)>
注:不指定表名的话默认使用filter表
-I
插入规则如果不指明规则标号,则在第一条规则前插入(置顶)
-R
替换规则一定要指明规则编号,替换后不会改变规则顺序。
-p
可是是ssh、tcp、icmp等,如下几个针对协议的匹配都是OK的
-p icmp --icmp-type 类型
-p --tcp-flags SYN,ACK,FIN,PSH,RST,URG
关于port
,以下都是可以的:
--sport 1000:3000 匹配源端口是 1000-3000 的数据包(含1000、3000)
--dport :3000 匹配目标端口是 3000 以下的数据包(含 3000)
--dport 1000: 匹配目标端口是 1000 以上的数据包(含 1000
--sport 和 --dport 必须配合 -p 参数使用,指定是神马协议
关于动作,有以下一些动作:
-
ACCEPT 将封包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链(natostrouting)。
-
DROP 丢弃封包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
-
REJECT 拦阻该封包,并传送封包通知对方,可以传送的封包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(这个封包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
iptables -A FORWARD -p TCP –dport 22 -j REJECT –reject-with tcp-reset
-
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
-
MASQUERADE 改写封包来源 IP 为防火墙 NIC IP,可以指定 port 对应的范围,进行完此处理动作后,直接跳往下一个规则(mangleostrouting)。这个功能与 SNAT 略有不同,当进行 IP 伪装时,不需指定要伪装成哪个 IP,IP 会从网卡直接读,当使用拨接连线时,IP 通常是由 ISP 公司的 DHCP 服务器指派的,这个时候 MASQUERADE 特别有用。
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE –to-ports 1024-31000
-
REDIRECT 将封包重新导向到另一个端口(PNAT),进行完此处理动作后,将会继续比对其它规则。
iptables -t nat -A PREROUTING -p tcp –dport 80 -j REDIRECT –to-ports 8080
-
MIRROR 镜射封包,也就是将来源 IP 与目的地 IP 对调后,将封包送回,进行完此处理动作后,将会中断过滤程序。
-
QUEUE 中断过滤程序,将封包放入队列,交给其它程序处理。透过自行开发的处理程序,可以进行其它应用,
-
MARK 将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。
iptables -t mangle -A PREROUTING -p tcp –dport 22 -j MARK –set-mark 2
-
RETURN结束在目前规则炼中的过滤程序,返回主规则炼继续过滤,如果把自订规则炼看成是一个子程序,那么这个动作,就相当提早结束子程序并返回到主程序中。
-
LOG 将封包相关讯息纪录在 /var/log 中,详细位置请查阅 /etc/syslog.conf 组态档,进行完此处理动作后,将会继续比对其规则。
iptables -A INPUT -p tcp -j LOG –log-prefix “INPUT packets”
关于动作的使用,继续往下来:)!
然后还有一点,一般我们都会考虑到,当数据包没有规则匹配是应该肿么办,是的,这个时候还有一个默认规则,通常叫做默认策略,当数据包不被任何规则匹配时,会采用默认规则
iptables [-t 表名] <-P> <链名> <动作>
这里动作就不加-j了,因为-j表示匹配到以后执行的动作。
然后,我们再继续一点,当规则很多的时候,我们不可能一条一条的删除呗,所以还有以下:
iptables [-t 表名] [链名] <-F|Z>
还是一样,不指定表名默认操作filter表,这里Z表示计数器和流量归0,现在我们暂时不管他。关于删除,还得多说一点:
-
1
-F 仅仅是清空链中规则,并不影响 -P 设置的默认规则
-
2 -P(默认策略)设置了 DROP 后,使用 -F 一定要小心,不然你网络就断了。
-
3 如果不写链名,默认清空某表里所有链里的所有规则
iptables的规则在重启后就会失效,所以还需要保存和载入:
iptables-save > /xx/iptables.save
iptables-restore < /xx/iptables.save
2 iptables的应用
iptables的动作设置,其实就属于iptables的应用了。我们来看看:
2.1 增加安全性
iptables -P INPUT DROP
iptables -p OUTPUT DROP
体会一下默认策略的作用,你就懂了。
2.2 NAT
做SNAT,允许内部的机器访问外部网络,这需要在出去的时候操作POSTROUTING链,SNAT 支持转换为单 IP,也支持转换到 IP 地址池。
-j SNAT --to IP[-IP][:端口-端口]
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eht0 -j SNAT --to 1.1.1.1
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to 1.1.1.1-1.1.1.1
做DNAT,主要是使外部的流量能够访问到内部的网络,类似DMZ功能,这需要在数据包进入的时候操作PREROUTING链目的地址转换,DNAT 支持转换为单 IP,也支持转换到 IP 地址池
-j DNAT --to IP[-IP][:端口-端口]
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1:80
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1-192.168.0.10
2.3 MASQUERADE
地址转换,动态源地址转换(动态 IP 的情况下使用),主要还是NAT上使用
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
将源地址是 192.168.0.0/24 的数据包进行地址伪装,这是一个SNAT。
2.4 防火墙
防火墙嘛,主要就是过滤,当然是用到filter表了。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p udp --sport 22 -j ACCEPT
2.5 转发
如果机器具有网关的作用,那么就一定要能转发数据包,可以通过FPRWARD控制分组转发到LAN上的哪些地方,比如一个机器,两个网卡,eth0接外部网络,eth1接内部网络,并且网关作用,就要允许eth1上转发
iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -o eth1 -j ACCEPT
经过以上学习,常用的iptables的功能都差不多了,其实看到这里,也就可以勒,如果你还想玩的炫一点,那就接着看下一篇。
3 参考资料
http://man.chinaunix.net/network/iptables-tutorial-cn-1.1.19.html
http://www.lampbo.org/linux-xuexi/linux-advance/iptables-options.html
http://tech.anquan365.com/application/other/201201/167224.html
推荐http://www.cnblogs.com/diyunpeng/archive/2012/05/10/2493749.html
推荐http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201212705752493/
一个实战经验,我没看:http://blog.sina.com.cn/s/blog_67a6c6f10100k3yx.html
原创文章,转载请注明: 转载自Wang Chang's Blog
本文链接地址: http://blog.wachang.net/2013/03/iptables-useage-ref-2/