370 likes | 639 Views
Iptables/netfilter. 什么是 netfilter/iptables Netfiler 与 iptables 的关系 Iptables Netfilter 应用实例. 什么是 netfilter/iptables. Linux 中实现包过滤功能 的第四代应用程序 包过滤:根据一定的规则检查 IP 头的信息,并确定对其的操作(接收,拒绝,缓存。。。). Netfiler 与 iptables 的关系. 机制与策略的关系 netfilter 组件 — 内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
E N D
什么是netfilter/iptables • Netfiler与iptables的关系 • Iptables • Netfilter • 应用实例
什么是netfilter/iptables • Linux中实现包过滤功能 的第四代应用程序 • 包过滤:根据一定的规则检查IP头的信息,并确定对其的操作(接收,拒绝,缓存。。。)
Netfiler与iptables的关系 • 机制与策略的关系 • netfilter组件—内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。 • iptables组件是一种工具—用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易
通过使用用户空间,可以构建自己的定制规则(iptables),这些规则存储在内核空间的信息包过滤表中(netfilter)通过使用用户空间,可以构建自己的定制规则(iptables),这些规则存储在内核空间的信息包过滤表中(netfilter)
Iptables-链 • 根据规则所处理的信息包的类型,可以将规则分组在链中
INPUT链:处理入站信息包的规则添加到这里 • OUTPUT链:处理出站信息包的规则 • FORWARD链:处理正在转发的信息包 • PREROUTING/POSTROUTING
建立规则并将链放在适当的位置之后,就可以开始进行真正的信息包过滤工作了。这时内核空间从用户空间接管工作。建立规则并将链放在适当的位置之后,就可以开始进行真正的信息包过滤工作了。这时内核空间从用户空间接管工作。
Iptables-规则 • Iptables负责建立规则,并将其添加到内核空间的特定信息包过滤表内的链中
一个iptables命令基本上包含如下五部分: • 希望工作在哪个表上 • 希望使用该表的哪个链 • 进行的操作(插入,添加,删除,修改) • 对特定规则的目标动作 • 匹配数据报条件
基本命令格式 • $iptables [-ttable]command[match][target]
Iptables-表(table) • [-ttable]选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三种可用的表选项:filter、nat和mangle。
filter表用于一般的信息包过滤,它包含INPUT、OUTPUT和FORWARD链filter表用于一般的信息包过滤,它包含INPUT、OUTPUT和FORWARD链 • nat表用于要转发的信息包,它包含PREROUTING、OUTPUT和POSTROUTING链 • 如果信息包及其头内进行了任何更改,则用mangle表该表包含一些规则来标记用于高级路由的信息包,该表包含PREROUTING和OUTPUT链
PREROUTING:可以在这里定义进行目的NAT的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的NAT。PREROUTING:可以在这里定义进行目的NAT的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的NAT。 • POSTROUTING:可以在这里定义进行源NAT的规则,系统在决定了数据包的路由以后在执行该链中的规则。 • OUTPUT:定义对本地产生的数据包的目的NAT规则。
Iptables-命令(command) • 告诉iptables命令要做什么,例如,插入规则、将规则添加到链的末尾或删除规则。
-A 在链尾添加一条规则 -I 插入规则 -D 删除规则 -R 替代一条规则 -L 列出规则
匹配(match) • iptables命令的可选match部分指定信息包与规则匹配所应具有的特征(如源和目的地地址、协议等)
--source/--src/-s来指定源地址 --destination/--dst/-s来指定目的地址 --in-interface/-i或--out-interface/-o来指定网络接口 --protocol/-p选项来指定协议
Iptables-目标(target) • 目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作
ACCEPT 接收该数据报 DROP 丢弃该数据报 QUEUE 排队该数据报到用户空间 RETURN 返回到前面调用的链 foobar 用户自定义链
Netfilter在IPv4中的结构 • 1 NF_IP_PRE_ROUTING 2 NF_IP_LOCAL_IN 3 NF_IP_FORWARD 4 NF_IP_POST_ROUTING 5 NF_IP_LOCAL_OUT
本地数据 [4] [5] data IP校验 [1] Route Route • 1 NF_IP_PRE_ROUTING 2 NF_IP_LOCAL_IN 3 NF_IP_FORWARD 4 NF_IP_POST_ROUTING 5 NF_IP_LOCAL_OUT local 转 发 网络 [3] [4] [2] 上层 协议
钩子函数的激活 • 内核模块可以对一个或多个这样的钩子函数进行注册挂接,并且在数据报经过这些钩子函数时被调用,从而模块可以修改这些数据报,并向netfilter返回如下值 NF_ACCEPT:继续正常传输数据报 NF_DROP:丢弃该数据报,不再传输 NF_STOLEN:模块接管该数据报,不要继续传输该数据报 NF_QUEUE:对该数据报进行排队 (通常用于将数据报给用户空间的进程进行处理) NF_REPEAT:再次调用该钩子函数
Netfilter-框架 定义一套钩子函数 对钩子进行注册,实现挂接 对数据包在用户空间进行异步处理
应用实例 -设想场景 • 你叫小明,你的朋友叫小刚,都住在某公寓,网管李大爷为小区的用户提供Internet接入服务,为了方便管理,李大爷分配给园区用户的IP地址都是伪IP,小区用户要求自己的WWW服务器对外发布信息
李大爷分配给你们家www服务器的ip为: 伪ip:192.168.2.115 真实ip:172.21.134.98 李大爷分配给小刚家www服务器的ip为: 伪ip:192.168.2.116 真实ip:172.21.134.156 李大爷所管理的防火墙的ip地址分别为: 内网接口eth1:192.168.2.1 外网接口eth0:172.21.134.89
思路 • 我们可以在防火墙的外部网卡上绑定多个合法IP地址,然后通过ip映射使发给其中某一 个IP地址的包转发至内部某一用户的WWW服务器上,然后再将该内部WWW服务器响应包伪装成该合法IP发出的包
关键步骤: 两块网卡的配置: WAN = eth0 有一个外网ip地址 172.21.134.89 LAN = eth1 有一个内网ip地址 192.168.2.1/ 255.255.0.0 配置eth0 IPADDR=172.21.134.89 NETMASK=255.255.255.0 # ISP提供 配置eth1 IPADDR=192.168.2.1 # Gateway of the LAN NETMASK=255.255.0.0 # Specify based on your requirement 要在园区用户的网络设置中设置网关为NAT服 务器(防火墙)的地址:192.168.2.1
使用IP Tables配置NAT • 首先,对防火墙接收到的目的ip为172.21.134.98和172.21.134.156的所有数据包进行目的NAT(DNAT): $iptables -A PREROUTING -i eth0 -d 172.21.134.98 -j DNAT – to 192.168.2.115 $iptables -A PREROUTING -i eth0 -d 172.21.134.156 –j DNAT –to 192.168.2.116
其次,对防火墙接收到的源ip地址为192.168.1.100和192.168.1.200的数据包进行源NAT(SNAT):其次,对防火墙接收到的源ip地址为192.168.1.100和192.168.1.200的数据包进行源NAT(SNAT): $ iptables -A POSTROUTING -o eth0 -s 192.168.1.115 -j SNAT --to 172.21.134.98 $ iptables -A POSTROUTING -o eth0 -s 192.168.1.116 -j SNAT --to 172.21.134.156
NAT与代理的区别 • 本质:在TCP/IP协议栈中的位置不同。NAT是工作在网络层,而代理是工作在应用层 • NAT对各种应用是透明的,而代理必须在应用程序中指明代理服务器的IP地址
例如使用NAT技术访问Web网页,不需要在浏览器中进行任何的配置。而如果使用Proxy访问Web网页的时候,就必须在浏览器中指定Proxy的IP地址,如果Proxy只能支持Http协议,那么只能通过代理访问Web服务器,如果想使用FTP就不可以了。例如使用NAT技术访问Web网页,不需要在浏览器中进行任何的配置。而如果使用Proxy访问Web网页的时候,就必须在浏览器中指定Proxy的IP地址,如果Proxy只能支持Http协议,那么只能通过代理访问Web服务器,如果想使用FTP就不可以了。 • 使用NAT技术访问Internet比使用proxy技术具有十分良好的扩充性,不需要针对应用进行考虑。 • 地址转换技术很难提供基于“用户名”和“密码”的验证。在使用proxy的时候,可以使用验证功能,使得只有通过“用户名”和“密码”验证的用户才能访问Internet,而地址转换不能做到这一点。
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT • ESTABLISHED意思是包是完全有效的,而且属于一个已建立的连接,这个连接的两端都已经有数据发送 • RELATED说明包正在建立一个新的连接,这个连接是和一个已建立的连接相关的
IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT • IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE