当前位置: 技术问答>linux和unix
那里有IPTABLE的详细资料,最好是中文的
来源: 互联网 发布时间:2014-11-12
本文导语: 那里有IPTABLE的详细资料,最好是中文的?我是菜鸟,请指导,另外在LINUX上装代理SQUID详细步骤能告诉我吗?它是怎么工作的? | 一、Netfilter功能简介 Netfilter是linux2.4内核实现数据包过滤、...
那里有IPTABLE的详细资料,最好是中文的?我是菜鸟,请指导,另外在LINUX上装代理SQUID详细步骤能告诉我吗?它是怎么工作的?
|
一、Netfilter功能简介
Netfilter是linux2.4内核实现数据包过滤、数据包处理、NAT等的功能框架。
1、Netfilter基础和概念
Netfilter是定义如何对流经网络协议的数据进行操作的框架。Netfilter比
以前任何一版Linux内核的防火墙子系统都要完善强大。Netfilter提供了一个抽
象、通用化的框架,该框架定义的一个子功能的实现就是包过滤子系统。Netfilter
框架包含以下三部分内容:
1。为每种网络协议(IPv4、IPv6等)定义一套钩子函数(IPv4定义了5个钩子函
数),这些钩子函数在数据报流过协议栈的几个关键点被调用。在这几个点中,
协议栈将把数据报及钩子函数标号作为参数调用netfilter框架。
2。内核的任何模块可以对每种协议的一个或多个钩子进行注册,实现挂接,
这样当某个数据包被传递给netfilter框架时,内核能检测是否有任何模块对
该协议和钩子函数进行了注册。若注册了,则调用该模块的注册时使用的回调
函数,这样这些模块就有机会检查(可能还会修改)该数据包、丢弃该数据包及
指示netfilter将该数据包传入用户空间的队列。
3。那些排队的数据包是被传递给用户空间的异步地进行处理。一个用户进程能
检查数据包,修改数据包,甚至可以重新将该数据包通过离开内核的同一个钩
子函数中注入到内核中。
所有的包过滤/NAT等等都基于该框架。内核网络代码中不再有到处都是的、混
乱的修改数据包的代码了。当前netfilter框架在IPv4、IPv6及Decnet网络栈中
被实现。
2、Netfilter在IPv4中的结构
一个数据包按照如下图所示的过程通过Netfilter系统:
--->[1]--->[ROUTE]--->[3]--->[4]--->
| ^
local | |
| [ROUTE]
v |
[2] [5]
| ^
| |
v ------- |
从图中可以看到IPv4一共有5个钩子函数,分别为:
1 NF_IP_PRE_ROUTING
2 NF_IP_LOCAL_IN
3 NF_IP_FORWARD
4 NF_IP_POST_ROUTING
5 NF_IP_LOCAL_OUT
数据报从左边进入系统,进行IP校验以后,数据报经过第一个钩子函数
NF_IP_PRE_ROUTING[1]进行处理;然后就进入路由代码,其决定该数据包是
需要转发还是发给本机的;若该数据包是发被本机的,则该数据经过钩子函
数NF_IP_LOCAL_IN[2]处理以后然后传递给上层协议;若该数据包应该被转发
则它被NF_IP_FORWARD[3]处理;经过转发的数据报经过最后一个钩子函数
NF_IP_POST_ROUTING[4]处理以后,再传输到网络上。
本地产生的数据经过钩子函数NF_IP_LOCAL_OUT [5]处理可以后,进行路由选
择处理,然后经过NF_IP_POST_ROUTING[4]处理以后发送到网络上。
3、Netfilter基础
从上面关于IPv4的netfilter的例子讨论,可以看到钩子函数是如何被激活的。
内核模块可以对一个或多个这样的钩子函数进行注册挂接,并且在数据报经过
这些钩子函数时被调用,从而模块可以修改这些数据报,并向netfilter返回如
下值:
NF_ACCEPT 继续正常传输数据报
NF_DROP 丢弃该数据报,不再传输
NF_STOLEN 模块接管该数据报,不要继续传输该数据报
NF_QUEUE 对该数据报进行排队(通常用于将数据报给用户空间的进程进行处理)
NF_REPEAT 再次调用该钩子函数
4、使用iptables进行数据报选择
一个基于Netfilter框架的、称为iptables的数据报选择系统在Linux2.4内核中
被应用,其实它就是ipchains的后继工具,但却有更强的可扩展性。
内核模块可以注册一个新的规则表(table),并要求数据报流经指定的规则表。
这种数据报选择用于实现数据报过滤(filter表),网络地址转换(Nat表)及数据
报处理(mangle表)。
Linux2.4内核提供的这三种数据报处理功能都基于netfilter的钩子函数和IP表。
它们是独立的模块,相互之间是独立的。它们都完美的集成到由Netfileter提供
的框架中。
包过滤
filter表格不会对数据报进行修改,而只对数据报进行过滤。iptables优于ipchains
的一个方面就是它更为小巧和快速。它是通过钩子函数NF_IP_LOCAL_IN, NF_IP_FORWARD
及NF_IP_LOCAL_OUT接入netfilter框架的。因此对于任何一个数据报只有一个地方
对其进行过滤。这相对ipchains来说是一个巨大的改进,因为在ipchains中一个被
转发的数据报会遍历三条链。
NAT
NAT表格监听三个Netfilter钩子函数:NF_IP_PRE_ROUTING、NF_IP_POST_ROUTING
及NF_IP_LOCAL_OUT。 NF_IP_PRE_ROUTING实现对需要转发的数据报的源地址进
行地址转换而NF_IP_POST_ROUTING则对需要转发的数据包的目的地址进行地址转
换。对于本地数据报的目的地址的转换则由NF_IP_LOCAL_OUT来实现。
NAT表格不同于filter表格,因为只有新连接的第一个数据报将遍历表格,而随
后的数据报将根据第一个数据报的结果进行同样的转换处理。
NAT表格被用在源NAT,目的NAT,伪装(其是源NAT的一个特例)及透明代理(其是目
的NAT的一个特例)。
数据报处理(Packet mangling)
mangle表格在NF_IP_PRE_ROUTING和NF_IP_LOCAL_OUT钩子中进行注册。使用mangle
表,可以实现对数据报的修改或给数据报附上一些带外数据。当前mangle表支持
修改TOS位及设置skb的nfmard字段。
二、利用iptables和Netfilter实现数据包过滤
Linux2.4提供了一个简洁强大的工具"iptables"来插入/删除/修改规则链中的
规则。该命令实现对所有的ip表进行处理,当前包括filter,nat及mangle三个
表格,及以后扩展的表模块。该命令支持插件来支持新的匹配参数和目标动作。
因此对netfilter的任何扩展都非常的简单。仅仅需要编写一个完成实际目标动
作处理的模块和iptalbes插件(动态连接库)来添加所需要的一切。
一个iptables命令基本上包含如下五部分:
1、希望工作在哪个表上
2、希望使用该表的哪个链
3、进行的操作(插入,添加,删除,修改)
4、对特定规则的目标动作
5、匹配数据报条件
基本的语法为:
iptables -t table -Operation chain -j target match(es)
例如希望添加一个规则,允许所有从任何地方到本地smtp端口的连接:
iptables -t filter -A INPUT -j ACCEPT -p tcp --dport smtp
基本操作:
-A 在链尾添加一条规则
-I 插入规则
-D 删除规则
-R 替代一条规则
-L 列出规则
基本目标动作,适用于所有的链
ACCEPT 接收该数据报
DROP 丢弃该数据报
QUEUE 排队该数据报到用户空间
RETURN 返回到前面调用的链
foobar 用户自定义链
基本匹配条件,适用于所有的链
-p 指定协议(tcp/icmp/udp/...)
-s 源地址(ip address/masklen)
-d 目的地址(ip address/masklen)
-i 数据报输入接口
-o 数据报输出接口
除了基本的操作,匹配和目标还具有各种扩展。
匹配扩展
TCP匹配扩展能匹配源端口,目的端口,及tcp标记的任意组合,tcp选项等。
UPD匹配扩展能匹配源端口和目的端口
ICMP匹配扩展能匹配ICMP类型
MAC匹配扩展能匹配接收到的数据的mac地址
MARK匹配扩展能匹配nfmark
OWNE匹配扩展(仅仅应用于本地产生的数据报)来匹配用户ID,组ID,进程ID及
会话ID
LIMIT扩展匹配用来匹配特定时间段内的数据报限制。这个扩展匹配对于限制
dos攻击数据流非常有用。
STATE匹配扩展用来匹配特定状态下的数据报(由连接跟踪子系统来决定状态),
可能的状态包括:
INVALID (不匹配于任何连接)
ESTABLISHED (属于某个已经建立的链接的数据报)
NEW (建立连接的数据报)
RELATED (和某个已经建立的连接有一定相关的数据报,例如一个ICMP
错误消息或ftp数据连接)
TOS匹配扩展用来匹配IP头的TOS字段的值。
目标动作扩展
LOG 将匹配的数据报传递给syslog()进行记录
ULOG 将匹配的数据适用用户空间的log进程进行记录
REJECT 不仅仅丢弃数据报,同时返回给发送者一个可配置的错误信息
MIRROR 互换源和目的地址以后重新传输该数据报
三、利用iptables和Netfilter实现NAT
linux以前的内核仅仅支持有限的NAT功能,被称为伪装。Netfilter则支持任何
一种NAT。一般来讲NAT可以分为源NAT和目的NAT。
源NAT在数据报经过NF_IP_POST_ROUTING时修改数据报的源地址。伪装是一个特
殊的SNAT。
目的NAT在数据报经过NF_IP_LOCAL_OUT或NF_IP_PRE_ROUTING 时修改数据报目
的地址。端口转发和透明代理都是DNAT。
SNAT
变换数据包的源地址。
例:
iptables -t nat -A POSTROUTING -j SNAT --to-source 1.2.3.4
MASQUERADE
用于具有动态IP地址的拨号连接的SNAT,类似于SNAT,但是如果连接断开,所
有的连接跟踪信息将被丢弃,而去使用重新连接以后的IP地址进行IP伪装。
例:
iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0
DNAT
转换数据报的目的地址,这是在PREROUTING钩子链中处理的,也就是在数据报
刚刚进入时。因此Linux随后的处理得到的都是新的目的地址。
例:
iptables -t nat -A PREROUTING -j DNAT --to-destination 1.2.3.4:8080
-p tcp --dport 80 -i eth1
REDIRECT
重定向数据报为目的为本地,和DNAT将目的地址修改为接到数据报的接口地址
情况完全一样。
例:
iptables -t nat -A PREROUTING -j REDIRECT --to-port 3128 -i eth1 -p
tcp --dport 80
四、结合实例说明如何配置防火墙
假设网络环境如下:某一单位,租用DDN专线上网,网络拓扑如下:
+--------------+
| 内部网段 | eth1+--------+eth0 DDN
| +------------|firewall|Internet
| 198.168.80.0 |
+--------------+
eth0: 198.199.37.254
eth1: 198.168.80.254
以上的IP地址都是Internet上真实的IP,故没有用到IP欺骗。
Netfilter是linux2.4内核实现数据包过滤、数据包处理、NAT等的功能框架。
1、Netfilter基础和概念
Netfilter是定义如何对流经网络协议的数据进行操作的框架。Netfilter比
以前任何一版Linux内核的防火墙子系统都要完善强大。Netfilter提供了一个抽
象、通用化的框架,该框架定义的一个子功能的实现就是包过滤子系统。Netfilter
框架包含以下三部分内容:
1。为每种网络协议(IPv4、IPv6等)定义一套钩子函数(IPv4定义了5个钩子函
数),这些钩子函数在数据报流过协议栈的几个关键点被调用。在这几个点中,
协议栈将把数据报及钩子函数标号作为参数调用netfilter框架。
2。内核的任何模块可以对每种协议的一个或多个钩子进行注册,实现挂接,
这样当某个数据包被传递给netfilter框架时,内核能检测是否有任何模块对
该协议和钩子函数进行了注册。若注册了,则调用该模块的注册时使用的回调
函数,这样这些模块就有机会检查(可能还会修改)该数据包、丢弃该数据包及
指示netfilter将该数据包传入用户空间的队列。
3。那些排队的数据包是被传递给用户空间的异步地进行处理。一个用户进程能
检查数据包,修改数据包,甚至可以重新将该数据包通过离开内核的同一个钩
子函数中注入到内核中。
所有的包过滤/NAT等等都基于该框架。内核网络代码中不再有到处都是的、混
乱的修改数据包的代码了。当前netfilter框架在IPv4、IPv6及Decnet网络栈中
被实现。
2、Netfilter在IPv4中的结构
一个数据包按照如下图所示的过程通过Netfilter系统:
--->[1]--->[ROUTE]--->[3]--->[4]--->
| ^
local | |
| [ROUTE]
v |
[2] [5]
| ^
| |
v ------- |
从图中可以看到IPv4一共有5个钩子函数,分别为:
1 NF_IP_PRE_ROUTING
2 NF_IP_LOCAL_IN
3 NF_IP_FORWARD
4 NF_IP_POST_ROUTING
5 NF_IP_LOCAL_OUT
数据报从左边进入系统,进行IP校验以后,数据报经过第一个钩子函数
NF_IP_PRE_ROUTING[1]进行处理;然后就进入路由代码,其决定该数据包是
需要转发还是发给本机的;若该数据包是发被本机的,则该数据经过钩子函
数NF_IP_LOCAL_IN[2]处理以后然后传递给上层协议;若该数据包应该被转发
则它被NF_IP_FORWARD[3]处理;经过转发的数据报经过最后一个钩子函数
NF_IP_POST_ROUTING[4]处理以后,再传输到网络上。
本地产生的数据经过钩子函数NF_IP_LOCAL_OUT [5]处理可以后,进行路由选
择处理,然后经过NF_IP_POST_ROUTING[4]处理以后发送到网络上。
3、Netfilter基础
从上面关于IPv4的netfilter的例子讨论,可以看到钩子函数是如何被激活的。
内核模块可以对一个或多个这样的钩子函数进行注册挂接,并且在数据报经过
这些钩子函数时被调用,从而模块可以修改这些数据报,并向netfilter返回如
下值:
NF_ACCEPT 继续正常传输数据报
NF_DROP 丢弃该数据报,不再传输
NF_STOLEN 模块接管该数据报,不要继续传输该数据报
NF_QUEUE 对该数据报进行排队(通常用于将数据报给用户空间的进程进行处理)
NF_REPEAT 再次调用该钩子函数
4、使用iptables进行数据报选择
一个基于Netfilter框架的、称为iptables的数据报选择系统在Linux2.4内核中
被应用,其实它就是ipchains的后继工具,但却有更强的可扩展性。
内核模块可以注册一个新的规则表(table),并要求数据报流经指定的规则表。
这种数据报选择用于实现数据报过滤(filter表),网络地址转换(Nat表)及数据
报处理(mangle表)。
Linux2.4内核提供的这三种数据报处理功能都基于netfilter的钩子函数和IP表。
它们是独立的模块,相互之间是独立的。它们都完美的集成到由Netfileter提供
的框架中。
包过滤
filter表格不会对数据报进行修改,而只对数据报进行过滤。iptables优于ipchains
的一个方面就是它更为小巧和快速。它是通过钩子函数NF_IP_LOCAL_IN, NF_IP_FORWARD
及NF_IP_LOCAL_OUT接入netfilter框架的。因此对于任何一个数据报只有一个地方
对其进行过滤。这相对ipchains来说是一个巨大的改进,因为在ipchains中一个被
转发的数据报会遍历三条链。
NAT
NAT表格监听三个Netfilter钩子函数:NF_IP_PRE_ROUTING、NF_IP_POST_ROUTING
及NF_IP_LOCAL_OUT。 NF_IP_PRE_ROUTING实现对需要转发的数据报的源地址进
行地址转换而NF_IP_POST_ROUTING则对需要转发的数据包的目的地址进行地址转
换。对于本地数据报的目的地址的转换则由NF_IP_LOCAL_OUT来实现。
NAT表格不同于filter表格,因为只有新连接的第一个数据报将遍历表格,而随
后的数据报将根据第一个数据报的结果进行同样的转换处理。
NAT表格被用在源NAT,目的NAT,伪装(其是源NAT的一个特例)及透明代理(其是目
的NAT的一个特例)。
数据报处理(Packet mangling)
mangle表格在NF_IP_PRE_ROUTING和NF_IP_LOCAL_OUT钩子中进行注册。使用mangle
表,可以实现对数据报的修改或给数据报附上一些带外数据。当前mangle表支持
修改TOS位及设置skb的nfmard字段。
二、利用iptables和Netfilter实现数据包过滤
Linux2.4提供了一个简洁强大的工具"iptables"来插入/删除/修改规则链中的
规则。该命令实现对所有的ip表进行处理,当前包括filter,nat及mangle三个
表格,及以后扩展的表模块。该命令支持插件来支持新的匹配参数和目标动作。
因此对netfilter的任何扩展都非常的简单。仅仅需要编写一个完成实际目标动
作处理的模块和iptalbes插件(动态连接库)来添加所需要的一切。
一个iptables命令基本上包含如下五部分:
1、希望工作在哪个表上
2、希望使用该表的哪个链
3、进行的操作(插入,添加,删除,修改)
4、对特定规则的目标动作
5、匹配数据报条件
基本的语法为:
iptables -t table -Operation chain -j target match(es)
例如希望添加一个规则,允许所有从任何地方到本地smtp端口的连接:
iptables -t filter -A INPUT -j ACCEPT -p tcp --dport smtp
基本操作:
-A 在链尾添加一条规则
-I 插入规则
-D 删除规则
-R 替代一条规则
-L 列出规则
基本目标动作,适用于所有的链
ACCEPT 接收该数据报
DROP 丢弃该数据报
QUEUE 排队该数据报到用户空间
RETURN 返回到前面调用的链
foobar 用户自定义链
基本匹配条件,适用于所有的链
-p 指定协议(tcp/icmp/udp/...)
-s 源地址(ip address/masklen)
-d 目的地址(ip address/masklen)
-i 数据报输入接口
-o 数据报输出接口
除了基本的操作,匹配和目标还具有各种扩展。
匹配扩展
TCP匹配扩展能匹配源端口,目的端口,及tcp标记的任意组合,tcp选项等。
UPD匹配扩展能匹配源端口和目的端口
ICMP匹配扩展能匹配ICMP类型
MAC匹配扩展能匹配接收到的数据的mac地址
MARK匹配扩展能匹配nfmark
OWNE匹配扩展(仅仅应用于本地产生的数据报)来匹配用户ID,组ID,进程ID及
会话ID
LIMIT扩展匹配用来匹配特定时间段内的数据报限制。这个扩展匹配对于限制
dos攻击数据流非常有用。
STATE匹配扩展用来匹配特定状态下的数据报(由连接跟踪子系统来决定状态),
可能的状态包括:
INVALID (不匹配于任何连接)
ESTABLISHED (属于某个已经建立的链接的数据报)
NEW (建立连接的数据报)
RELATED (和某个已经建立的连接有一定相关的数据报,例如一个ICMP
错误消息或ftp数据连接)
TOS匹配扩展用来匹配IP头的TOS字段的值。
目标动作扩展
LOG 将匹配的数据报传递给syslog()进行记录
ULOG 将匹配的数据适用用户空间的log进程进行记录
REJECT 不仅仅丢弃数据报,同时返回给发送者一个可配置的错误信息
MIRROR 互换源和目的地址以后重新传输该数据报
三、利用iptables和Netfilter实现NAT
linux以前的内核仅仅支持有限的NAT功能,被称为伪装。Netfilter则支持任何
一种NAT。一般来讲NAT可以分为源NAT和目的NAT。
源NAT在数据报经过NF_IP_POST_ROUTING时修改数据报的源地址。伪装是一个特
殊的SNAT。
目的NAT在数据报经过NF_IP_LOCAL_OUT或NF_IP_PRE_ROUTING 时修改数据报目
的地址。端口转发和透明代理都是DNAT。
SNAT
变换数据包的源地址。
例:
iptables -t nat -A POSTROUTING -j SNAT --to-source 1.2.3.4
MASQUERADE
用于具有动态IP地址的拨号连接的SNAT,类似于SNAT,但是如果连接断开,所
有的连接跟踪信息将被丢弃,而去使用重新连接以后的IP地址进行IP伪装。
例:
iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0
DNAT
转换数据报的目的地址,这是在PREROUTING钩子链中处理的,也就是在数据报
刚刚进入时。因此Linux随后的处理得到的都是新的目的地址。
例:
iptables -t nat -A PREROUTING -j DNAT --to-destination 1.2.3.4:8080
-p tcp --dport 80 -i eth1
REDIRECT
重定向数据报为目的为本地,和DNAT将目的地址修改为接到数据报的接口地址
情况完全一样。
例:
iptables -t nat -A PREROUTING -j REDIRECT --to-port 3128 -i eth1 -p
tcp --dport 80
四、结合实例说明如何配置防火墙
假设网络环境如下:某一单位,租用DDN专线上网,网络拓扑如下:
+--------------+
| 内部网段 | eth1+--------+eth0 DDN
| +------------|firewall|Internet
| 198.168.80.0 |
+--------------+
eth0: 198.199.37.254
eth1: 198.168.80.254
以上的IP地址都是Internet上真实的IP,故没有用到IP欺骗。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。