Centos6.5 iptables的Filter详解

今天一个同学它的腾讯云服务器出现了个小问题,启动tomcat服务器后。在服务器本机上使用curl 127.0.0.1:8080访问没任何问题。但通过外网ip却一直访问不了。然后我Google的一堆解决方法,最多的还是关于防火墙iptables的配置。虽然最后重新装了一个tomcat后就莫名其妙的正常了。根本不是iptables的问题,但通过解决这个问题查询了大量iptables方面的知识(虽然当初啃《鸟哥的Linux私房菜》的时候看过相关知识,但毕竟没有实践,今天正好借这个机会实际了一把),现在将iptables的一些常用知识总结一下。

1.什么是iptables

iptable其实是Linux下的数据包过滤软件,也是目前最新Linux发行版中默认的防火墙。要想深入了解iptables机制,了解防火墙的规则是必不可少的。由于iptables利用的数据包过滤的机制,所以它会分析数据包的报头数据。根据报头数据与定义的规则来决定该数据包是进入主机还是丢弃。 也就是说,根据数据包的分析资料”对比”预先定义的规则内容,若数据包数据与规则内容相同则进行动作,否则就继续下一条规则的比对。重点在比对与分析顺序。

2.iptables的简单工作原理

举个简单的例子,当我们的iptables定义了十条防火墙规则,那么当Internet来了一个数据包想要进入主机前,会先经过iptables的规则。检查通过则接受(ACCEPT)进入本机取得资源,如果检查不通过,则可能予以丢弃(DROP).一定要注意一点,iptables定义的规则是有顺序,但某个数据包符合Rule1,则会执行Rule1对应的Action1而并不会理会后面所有的Rule。当所有Rule都不匹配,会执行默认操作。

iptables的规则是非常重要的,比如当我们有一台提供WWW的服务的主机,自然我们就要针对port 80端口来启动通过的数据包规则,但我们发现IP为192.169.155.155总是存在恶意操作,所以我们要禁止该IP来访问该服务,最后所有非WWW的数据包全部丢弃,我们来看完成这三个功能的规则顺序。

  • Rule1先阻挡192.168.155.155
  • Rule2再让请求WWW服务的数据包通过
  • Rule3将所有的数据包丢弃

现在我们想一下,如果这三条规则的顺序变了之后,我们还能完成刚刚的需求么?

3.iptables的策略

防火墙策略一般分为两种,一种叫“通”策略,一种叫“堵”策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,所以通,是要全通,而堵,则是要选择。当我们定义的策略的时候,要分别定义多条功能,其中:定义数据包中允许或者不允许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。

刚刚我们所说的规则仅仅是iptables表格中的一个链而已。iptables里面有多个表格(table),每个表格都定义出自己的默认策略与规则,且每个表格的用途都不相同。

我们现在用的比较多有如下3个:

  • 1.filter(过滤器,默认的table) 定义允许或者不允许的
  • 2.nat(地址转换) 定义地址转换的
  • 3.mangle(破坏者)功能:修改报文原数据,加特殊标记。

4.上述表中常见的链

与数据包是否进入Linux本机有关的表:Filter

  • INPUT:主要与想要进入Linux主机的数据包有关
  • OUTPUT : 主要与Linux本机所要送出的数据包有关
  • FORWARD : 与Linux本机没有关系,它可以传递数据包到后端的计算机中,与表NAT有关

用来进行来源与目的地的IP或port的转换(主要于Linux主机后的局域网内的主机有关):NAT

  • PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT) 。
  • POSTROUTING :在进行路由判断之后所有进行的规则(SNAT/MASQUERADE)。
  • OUTPUT: 与发送出去的数据包有关

与特殊的数据包的路由标志有关:Mangle 上述5个了链都可以做

由于Filter是默认的table,并且如果iptables只是用来保护Linux主机本身的话,只用关注Filter表格内的INPUT和OUTPUT这两条链即可。其余的两个table也不常用,因此我们重点学习Filter。

5.iptables中规则的查看

如果在安装Linux的时候没有选择防火墙,那么iptables在一开始应该是没有规则的。如果在安装的时候选择自动建立防火墙机制,那么就有默认的防火墙规则。我们来看查看iptables规则的命令。

iptables [-t table ] [-L] [-nv]
选项与参数:
-t:后面接table。例如 filter或者nat。如果不写默认是filter
-L:列出目前的table规则
-n:不进行IP与HOSTNAME的反查,使用此参数查询结果会很快
-v:列出更多信息,包括通过该规则的数据包总位数,相关的网络接口等。
//我们执行上述命令
hadoop wang # iptables -L -n
//针对INPUT链,且默认策略为可接受
Chain INPUT (policy ACCEPT)
//说明栏
target     prot opt source               destination
//针对FORWARD链,且默认策略为可接受
Chain FORWARD (policy ACCEPT)

target     prot opt source               destination
//针对OUTPUT链,且默认策略为可接受
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    

上述每一个chain就是前面提到的每个链。Chain那一行括号里面policy就是默认的策略。下面分析说明栏的五列分别代表的意思:

  • target:代表进行的操作,ACCEPT是放行,而REJECT则是拒绝,此外,尚有DROP(丢弃)的项目.
  • 代表使用的数据包协议,主要有TCP,UDP及ICMP数据包格式。
  • opt:额外的选项说明。
  • source :代表次规则是针对哪个来源IP进行限制
  • destination: 代表次规则是针对哪个目标IP进行限制

5.iptables中规则的清除

iptables [ -t tables  ] [ -FXZ ]
-F:清楚所有的已定制的规则
-X:清楚所有用户"自定义"的chain或者tables
-Z:将所有的chain的计数与流量统计都归零

清楚防火墙的所有规则:
iptables -F
iptables -X
iptables -Z

上述三个命令会将防火墙的规则都清除,但不会改变默认策略(policy)。一般来说,我们重新定义防火墙的时候都会先把规则清除掉。

6.iptables中定义默认策略(policy)

前面提到,当数据包不在我们设置的规则之内时,则该数据包的通过与否,是以Policy的设置为准。在安全性比较高的主机中,Filter内的INPUT链定义的比较严格,INPUT的Policy定义为DROP

iptables定义规则:

格式:iptables [-t table] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP ]

-p : 定义策略(Policy)。注意:P为大写

ACCEPT:数据包可接受

DROP:数据包被丢弃,client不知道为何被丢弃。

iptables  -P INPUT DROP  //INPUT默认设置为DROP
iptables  -P OUTPUT DROP  //OUTPUT默认设置为ACCEPT
iptables  -P FORWARD DROP // FORWARD默认设置为ACCEPT

此时我们执行 iptables-save(不同与iptables -L -n -v的是它会列出完整的防火墙规则)会看到如下信息:

*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
//由于INPUT设置为DROP而又尚未有任何规则,所有显示如上结果。此时所有数据包均都无法进入

现在我们可以设置默认策略后,现在来看看关于各规则的数据包基础比对设置。

7.数据包的基础对比:IP,网络及接口设备

现在我们来添加防火墙规则的数据包对比设置。从最基础的IP,网络及端口开始(即是OSI的第三层谈起)再来谈谈设备(网络卡)的限制等。

iptables定义规则的格式:

iptables [-AI 链名] [-io 网络接口 ] [ -p 协议 ] [ -s 来源IP/网络 ] [ -d 目标IP/网络 ] -j [ACCEPT | DROP|REJECT|LOG]

参数说明:

-A:新增一条规则,该规则在原规则的最后面。

-I:插入一条规则,默认该规则在原第一条规则的前面。即该新规则变为第一条规则。

-io 网络接口:设置数据包进出的接口规范。

-i:表示输入。即数据包进入的网络接口。与INPUT链配合

-o : 表示输出。数据包传出的网络接口。与OUTPUT链配合

-p 协定: 此规则适应于哪种数据包。如tcp,udp,icmp及all.

-s 来源 IP/网络:设置次规则之前数据包的来源地,可指定单纯的IP或网络,例如:

IP : 192.168.0.100

网络 : 192.168.0.0/24或者192.168.0.0/255.255.255.0

如果规则为不允许,则在IP/网络前加 “!” 即可。

-s ! x.x.x.x

-d 目标 IP/网络。与-s类似,只是是目标IP或者网络而已。

-j:后面接操作。如ACCEPT,DROP ,REJECT或者LOG(记录)

比如:开放lo这个本机的接口以及某个IP来源

//设置io成为受信任的设备,亦即进出lo的数据包都接受
iptables -t filter -A INPUT -i lo  -j REJECT

我们可能会有疑惑,为什么没有-s -d等规则,表示不论数据包来自何处或去到哪里,只要是来自lo这个接口全部接受。

设置来自192.168.100.10的就接受,192.168.100.11的就丢弃。

iptables -A INPUT -i eth0 -s 192.168.100.10 -j ACCEPT
iptables -A INPUT -i eth0 -s 192.168.100.11 -j DROP
iptables -I INPUT -i eth0 -s 192.168.100.0/24 -j ACCEPT

此时我们执行iptables-save

*filter
:INPUT ACCEPT [12:976]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [9:2186]
-A INPUT -s 192.168.100.0/24 -i eth0 -j ACCEPT
-A INPUT -s 192.168.100.10/32 -i eth0 -j ACCEPT
-A INPUT -s 192.168.100.11/32 -i eth0 -j DROP
COMMIT

此时我们会有一个疑问,既然我们已经放行了192.168.100.0/24。所以丢弃192.168.100.11的规定根本不会被用到了。那么我们应该怎么办在不改变顺序的情况下让这两个规则都生效。指定-j 为LOG。

iptables -A INPUT -s 192.168.2.200 -j LOG

LOG        all  --    192.168.2.200   0.0.0.0/0            LOG flags 0 level 4

输出结果最左边为LOG,只要数据包来自192.168.2.200这个IP时,那么该数据包的相关信息就会被写入内核日志文件,即/var/log/messages这个文件当中。然后于下一个规则相比较。

8.TCP,UDP协议的规则对比:针对端口设置

  • 在 -s 参数后面可以增加一个参数 -sport 端口范围(限制来源端口),如:1024:65535
  • 在-d 参数后面可以增加一个参数 -dport 端口范围(限制目标端口)

需要特别注意,这两个参数重点在port上面,并且仅有TCP和UDP数据包具有端口,因此要想使用–dport,–sport时需要加上-p tcp或者 -p udp才会成功。

下面做几个小测试:

//丢弃所有想要链接本机21端口的数据包
iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP
//想要链接到本机的网上邻居(UDP port 137,138 tcp 139,445)就放行
iptables -A INPUT -i eth0 -p udp --dport 137:138 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 445 -j ACCEPT
//只要来自192.168.1.0/24的1024:65535端口的数据包,且想要连接的本机的ssh port就阻挡
iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --sport 1024:65535 --dport ssh -j DROP

iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP

除了制订端口号之外,TCP数据包还有特殊的标识,比如主动链接的SYN标志。iptables支持使用–syn来处理。

iptables -A INPUT -i eth0 -p tcp --sport 1:1023 -dport 1:1023 --syn -j DROP

9.iptables的开启与关闭

查看运行状态:

#/etc/init.d/iptables status

关闭防火墙服务:

/etc/init.d/iptables stop
//此方法在主机下次重新启动还是会开启

直接禁用防火墙:

chkconfig --level 35 iptables off
 chkconfig --list iptables
iptables        0:off   1:off   2:off   3:off   4:off   5:off   6:off
//对应启动的7种状态 
时间: 2024-10-31 07:54:01

Centos6.5 iptables的Filter详解的相关文章

iptables防火墙配置详解

iptables简介 iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表. filter负责过滤数据包,包括的规则链有,input,output和forward: nat则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output: mangle表则主要应用在修改数据包内容上,用来做流量整形的,默认的规则链有:INPUT,OUTPUT,NAT,POSTROUTING,PREROUTING: inpu

iptables Data filtering详解

内容简介防火墙的概述iptables简介iptables基础iptables语法iptables实例案例详解(一)防火墙的简介防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性.它通过访问控制机制,确定哪些内部服务允许外部访问,以及允许哪些外部请求可以访问内部服务.它可以根据网络传输的类型决定IP包是否可以传进或传出内部网.防火墙通过审查经过的每一个数据包,判断它是否有相匹配的过滤规则,根据规则的先后顺序进行一一比较,直到满足其中的一条规则为止,然后依据控制

开启 J2EE(六)— Servlet之Filter详解及乱码处理实例

定义和功能 Filter:过滤器,它能够在request到达Servlet之前预处理request,也可以在离开Servlet时处理response,通过对request或response的处理已达到过滤功能.但是Filter只是对request和response请求进行了拦截处理,通常不产生请求或者响应. 实现的接口 我们写Servlet需要继承一个类,Filter也一样,要实现一个接口(扩展性的体现啊):javax.servlet.Filter,并实现该接口的三个方法: <span styl

布隆过滤器(Bloom Filter)详解

布隆过滤器(Bloom Filter)详解 2012-07-13 18:35 by Haippy, 29358 阅读, 6 评论, 收藏, 编辑   布隆过滤器[1](Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的.它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中.它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率(假正例False positives,即Bloom Fi

java web之Filter详解

java web之Filter详解 2012-10-20 0 个评论 作者:chenshufei2 收藏 我要投稿 .概念: Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. 二.Filter简介 Servlet API中提供

JAVA学习篇--javaweb之Filter详解

在DRP项目中,多次提到了Filter,它解决了字符集的统一设置以及统一控制简单WebCache,从中我们可以体会到,它给我们带来的好处不仅仅是减少代码量这么简单,它的出现避免了我们每个页面重复的编写相同的代码,减少了我们的工作量,而且给维护带来了极大的便利,那么它是如何实现统一管理的呢?既然它能统一管理某些重复的操作,那么它和AOP有什么关系呢? Filter简介 ServletAPI中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过

【甘道夫】HBase(0.96以上版本)过滤器Filter详解及实例代码

说明: 本文参考官方Ref Guide,Developer API和众多博客,并结合实测代码编写,详细总结HBase的Filter功能,并附上每类Filter的相应代码实现. 本文尽量遵从Ref Guide中"9.4. Client Request Filters"的行文顺序,便于读者对比查看,但内容比官方文档更加详实. 欢迎转载,请注明来源: http://blog.csdn.net/u010967382/article/details/37653177 目录: 引言 -- 参数基础

javaweb之Filter详解

一.概念:Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. 二.Filter简介Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filte

虚拟机VMware下CentOS6.6安装教程图文详解

分享下,虚拟机VMware下CentOS6.6安装教程图文详解. CentOS 6.6 发布下载 地址: http://www.linuxidc.com/Linux/2014-10/108554.htm 1.首先要下载一个centos的iso镜像,我是用虚拟机VMware来安装的,用VMware最好创建一个空白硬盘. 2.创建完毕再设置里面挂载iso的centos系统文件. 3.进入到这个页面: 说明: 1.install or upgrade an existing system安装或升级现有