ITPub博客

首页 > IT基础架构 > 网络安全 > iptables 配置LINUX防火墙

iptables 配置LINUX防火墙

原创 网络安全 作者:tonywi888 时间:2007-04-12 15:13:26 0 删除 编辑

iptables使用3个默认表:filter,nat,mangle。其中filter为系统缺省操作表。

Filter表用于防火墙设置,对匹配条件的数据包可以选择access,drop,reject等的处理方式。Nat表用于网络地址转发,可以将源、目的ip地址转变为指定的ip地址。Mangle表可以实现对数据报头的修改或给数据报附上一些带外数据,当前mangle表支持修改TOS位及设置skb的nfmard字段。但由于某些中间层设备会忽略tos位的值,因此实际应用较少。

Filter表中有input,forward,output链;nat表中有prerouting,forward,postrouting链;mangle表中有prerouting,output链。

常用语法解释:

iptables –t 表名 –A/I/D/R/ 链名 【匹配条件】 -j 行为

表名、链名不再重复,介绍一下“匹配条件”:

-p 指定协议(tcp/icmp/udp/...) etc. –p icmp (可以视为加载了相应的处理模块)

-s 源地址(ip address/masklen) etc. –s 10.1.2.0/24

-d 目的地址(ip address/masklen) etc. –d 10.1.2.3/32

-i 数据报输入接口 etc. –I eth0

-o 数据报输出接口 etc. –o eth1

一些模块加载后,还可以进一步指定模块所支持的子选项,如:

iptables …… -p tcp –sport 80 …… -j ……

iptables …… -m mac –mac-source 00:11:22:33:44:55 …… -j ……

鉴于filter表的表述比较简单,故不再敷述。以下介绍nat表。

Nat:Network Address Translation 网络地址转换

linux以前的内核仅仅支持有限的NAT功能,被称为伪装(masquerade)。Netfilter则支持任何一种NAT。一般来讲NAT可以分为源NAT和目的NAT。

源NAT在数据报经过postrouting时修改数据报的源地址。伪装是一个特殊的SNAT。

目的NAT在数据报经过output或prerouting 时修改数据报目的地址。端口转发和透明代理都是DNAT。

可以举例说明:

iptables -t nat -A POSTROUTING –s 10.0.0.1/32 -j SNAT --to-source 1.2.3.4

iptables –t nat –A PREROUTING –d 1.2.3.4 –j DNAT –to-destination 10.0.0.1

公司对iptables使用还包括:masquerade及redirect。

MASQUERADE:

用于具有动态IP地址的拨号连接的SNAT,类似于SNAT,但是如果连接断开,所有的连接跟踪信息将被丢弃,而去使用重新连接以后的IP地址进行IP伪装。我认为与常用路由器的PAT 功能相类似。

Etc. iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0

REDIRECT:

重定向数据报为目的为本地,和DNAT将目的地址修改为接到数据报的接口地址情况完全一样。

Etc. iptables –t nat –A PREROUTING –s 10.0.0.0/24 –d ! localhost –dport 80 –j REDIRECT –to-port 3128

以上指定了到达非本机ip的其他http包,在刚进入服务器时,更改数据包的目的ip为服务器的ip,目的端口改为3128。我们配合squid的使用,可以实现用户上网的透明代理。

Mangle表到目前的应用不很普遍,暂不介绍。

任何时候在任何nefilter规则链中,数据报都可以被排队转发到用户空间去。实际的排队是由内核模块来完成的(ip_queue.o)。

数据报被发送给用户空间进程。该进程能对数据报进行任何处理。处理结束以后,用户进程可以将该数据报重新注入内核或者设置一个对数据报的目标动作(如丢弃等)。

这是netfilter的一个关键技术,使用户进程可以进行复杂的数据报操作。从而减轻了内核空间的复杂度。用户空间的数据报操作进程能很容易的适用ntfilter提供的称为libipq的库来进行开发。

最后,提醒诸位,最好将每一条iptables规则统一写到/etc/sysconfig/iptables文件中,iptables每次启动时将读取其中的脚本,并一次性同时生效。单一的加入iptables规则将逐一生效,并刷新整个规则链,处理多条规则时极不合理。

可以有命令:iptables-save 将当前激活的所有规则写入/etc/sysconfig/iptables文件中。

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8570952/viewspace-910220/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-02-25

  • 博文量
    159
  • 访问量
    736783