iptables的学习-创新互联

1 Linux防火墙概述

Linux防火墙实际指的是Linux下的Netfilter/Iptables。Netfilter/Iptables是2.4.x/2.6.x版本Linux内核集成的IP信息包过滤系统。

站在用户的角度思考问题,与客户深入沟通,找到惠安网站设计与惠安网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站建设、网站设计、企业官网、英文网站、手机端网站、网站推广、主机域名、网页空间、企业邮箱。业务覆盖惠安地区。

查看Linux内核版本

iptables的学习

 

 

Netfilter/Iptables 信息包过滤系统可以当成一个整体,netfilter是内核的模块实现,iptables是对上层操作工具。

Netfilter是Linux核心中的一个通用架构,工作于内核空间。

Netfilter支持一下方式对数据包进行分类:

  • 源IP地址
  • 目标IP地址
  • 使用接口
  • 使用协议
  • 端口号
  • 连接状态

其提供了一系列的表(tables),每个表由若干个链(chains)组成,每条链可以由一条或若干条规则(rules)组成,其规则由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

chain的本质是Netfilter定义的不同过滤点。总共定义了5个过滤点。INPUT,FORWARDING,OUTPUT,PREROUTING,POSTROUTIONG。

Table的本质是Netfilter定义的不同功能的划分。

filter用于执行基本过滤。

nat是对数据IP进行修改。

mangle是对数据包进行高级修改。

不同的Table只能用于特定的Chain。

 

Iptables 是一个管理内核包过滤的工具,可以用来配置核心包过滤表格中的规则。运行于用户空间。

 

 

1.1 Linux防火墙的应用

Linux防火墙在企业应用中非常有用,举例如下:

  • 中小企业与网吧里有iptables作为企业的NAT路由器,可以用来代替传统路由器,而节约成本。
  • IDC机房一般没有硬件防火墙,IDC机房的服务器可以用Linux防火墙代替硬件防火墙。
  • iptables可以结合squid作为企业内部上网的透明代理。传统代理需要在浏览器里配置代理服务器信息,而iptables+squid的透明代理则可以把客户端的请求重定向到代理服务器的端口。客户端不要作任何设置,而感觉不到代理的存在。
  • 将iptables作为企业NAT路由器时,可以使用iptables的扩展模块屏蔽P2P流量,还可以禁止非法网页。
  • iptables可以用于外网IP向内网IP映射。
  • iptables可以轻松防止轻量级DOS攻击,比如ping攻击及SYN洪水攻击。

综述,Iptables有两种应用模式:主机防火墙,NAT路由器。

 

 

1.2 iptables的基本组件

1.2.1 规则

规则(rules)是管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

 

1.2.2 链

链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。

每个链上都有默认的规则。

  • PREROUTING:数据包进入本机,进入路由器之前。可以用于目标地址转换(DNAT)。
  • INPUT:通过路由表后目的地为本机。
  • FORWARDING:通过路由表后,目的地不为本机。可以用于转发数据。
  • OUTPUT:由本机产生,向外转发。
  • POSTROUTIONG:通过路由表后,发送到网卡接口之前。可以用于转发数据(SNAT,MASQUERADE)

 

1.2.3 表

表(tables)提供特定的功能,iptables有4个表,即raw表、filter表、nat表和mangle表,分别用于实现包过滤,网络地址转换和包重构的功能。表中的规则写在链上。

filter表

主要用于数据报文过滤。该表根据系统管理员预定义的一组规则过滤符合条件的数据包。对于防火墙而言,主要利用在filter表中指定的规则来实现对数据包的过滤。filter表是默认的表,如果没有指定哪个表,iptables 就默认使用filter表来执行所有命令,filter表包含了INPUT链,RORWARD链,OUTPUT链。在filter表中只能允许对数据包进行接受,丢弃的操作,而无法对数据包进行更改。

 

nat表

主要用于网络地址转换NAT,该表可以实现一对一,一对多,多对多等NAT工作(SNAT,DNAT,PNAT),iptables就是使用该表实现共享上网的,NAT表包含了PREROUTING链,POSTROUTING链,OUTPUT链。

nat规则表拥有 prerouting 和 postrouting 两个规则链,主要功能为进行一对一、一对多、多对多等网址转换工作(SNAT,DNAT),由于转换的特性,需进行目的地网址转换的数据包,就不需要进行来源网址转换,反之亦然,因此为了提升改写封包的效率,在防火墙运作时,每个封包只会经过这个规则表一次。如果我们把数据包过滤的规则定义在这个数据表里,将会造成无法对同一包进行多次比对,因此这个规则表除了作网址转换外,请不要做其它用途。

 

mangle表

主要用作功能修改数据报文的属性。比如TCP报文的6个标志位。在内核版本2.4.18 后的linux版本中该表包含的链为:INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)POSTROUTING链(修改即将出去的数据包),PREROUTING链(修改即将到来的数据包)

mangle表主要用于对指定数据包进行更改,在内核版本2.4.18 后的linux版本中该表包含的链为:INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)POSTROUTING链(修改即将出去的数据包),PREROUTING链(修改即将到来的数据包)。

 

raw表

只使用在PREROUTING链和OUTPUT链上,优先级最高,可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链上RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了。

 

规则表之间的优先顺序:

raw > mangle > nat > filter

iptables的学习

 

 

 

 

1.3 Linux防火墙基本原理

Linux防火墙的原理主要是对数据包的控制,看下图(以下图片均来自互联网):netfilter五条链相互关系,即iptables数据包转发流程图。

 iptables的学习

iptables的学习

(1)数据包进入网卡时,先进入PREROUTING(路由前)链,之后做路由判断数据包应发往何处,本机或其他机器。

(2)若数据包原目标地址是本机的,数据包会前往INPUT链。到达INPUT链后,任何进程都会收到它。

(3)本机程序发送出数据包,数据包会经过OUTPUT链,然后到达POSTROUTING链输出。

(4)若数据包原目标地址非本机,则需要转发出去的,且内核允许转发,数据包前往 FORWARD链,然后到达POSTROUTING(路由后)链输出。

 

Netfilter在五个链上,使用HOOK技术做规则检查。

 

 

1.4 iptables规则执行

iptables执行规则时,是从规则表中从上至下顺序执行的。

若没遇到匹配的规则,就一条一条往下匹配;

若完全没有匹配的规则,则执行该链上的默认规则;

若遇到匹配的规则,则执行规则,执行后根据本规则的动作(accept,reject,log,drop等),决定下一步执行的情况,后续执行一般有三种情况:

  • 继续执行当前规则队列内的下一条规则。比如执行过Filter队列内的LOG后,还会执行Filter队列内的下一条规则。
  • 中止当前规则队列的执行,转到下一条规则队列。比如从执行过accept后就中断Filter队列内其它规则,跳到nat队列规则去执行。
  • 中止所有规则队列的执行。

iptables的学习

透过这种机制所带来的好处是,可以进行复杂、多重的封包过滤,简单的说,iptables可以进行纵横交错式的过滤(tables)而非链状过滤(chains)。

 

 

1.5 数据包的状态

包的状态依据IP所包含的协议不同而不同,但在内核外部,也就是用户空间里,只有4种 状态:NEW,ESTABLISHED,RELATED 和INVALID。它们主要是和状态匹配一起使用。

数据包在用户空间的状态:

  • NEW:表示信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。若主机向远程机器发送一个连接请求,这个数据包的状态是NEW。
  • ESTABLISHED:状态指出该信息包属于已建立的连接,该连接一直用于发送和接收信息包并且完全有效。在连接建立之后(完成TCP的三次握手之后),远程主机和主机通信数据状态为ESTABLISHED。
  • RELATED:和现有联机相关的新联机封包。像FTP这样的服务,用21端口传送命令,而用20端口(port模式)或其他端口(PASV模式)传送数据。在已有的21端口上建立好连接后发送命令,用20或其他端口传送的数据(FTP-DATA),其状态是RELATED。
  • INVALID:状态指出该信息包与任何已知的流或连接都不相关联,它可能包含错误的数据或头。即无效的数据包,不能被识别属于哪个连接或没有任何状态,通常这种状态的数据包会被丢弃。

这些状态可以一起使用,以便匹配数据包。这可以使防火墙非常强壮和有效。

 

 

 

2 iptables实战概述

iptables的实验请尽量在虚拟机或非远程的系统中操作,避免不小心的误操作可能导致ssh无法使用。

一般来讲,iptables防火墙已经内置于CentOS 6及其他Linux版本中,而且iptables服务默认都是启动的。  iptables应用于IPv4, 如果要用IPv6,需要使用ip6tables。

iptables和ip6_tables、arp_tables一同都是建构在Xtables的架构下,这个方案让系统管理员定义“表(tables)”、“链(chain)”、“规则(rules)”三个数据来处理数据包的运送。每一个“表”都和不同的数据包处理有关、决定数据包是否可以穿越的是“链”、而一条“规则”在键里面则可以决定是否送往下一条链(或其它的动作),这个处理可以在嵌套的结构里面重复使用。每一个网络数据包从抵达到离开该计算机至少会经过一个链(亦即转送或本机路由)。

查看有没有安装iptables:rpm -qa | grep iptables

iptables的学习

若机器上安装了man命令。则使用man iptables查看iptables的帮助文档。

 

 

2.1 iptables服务相关

2.1.1 开启iptables服务

service iptables start
#或
/etc/init.d/iptables start

本文名称:iptables的学习-创新互联
标题URL:http://myzitong.com/article/dpposi.html