iptables基本概念及操作

来源:互联网 发布:淘宝店主不同意退货 编辑:程序博客网 时间:2024/05/22 13:57

定义

防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测。
目前市面上比较常见的有3、4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关。对于TCP/IP的七层模型来讲,我们知道第三层是网络层,三层的防火墙会在这层对源地址和目标地址进行检测。但是对于七层的防火墙,不管你源端口或者目标端口,源地址或者目标地址是什么,都将对你所有的东西进行检查。所以,对于设计原理来讲,七层防火墙更加安全,但是这却带来了效率更低。所以市面上通常的防火墙方案,都是两者结合的。而又由于我们都需要从防火墙所控制的这个口来访问,所以防火墙的工作效率就成了用户能够访问数据多少的一个最重要的控制,配置的不好甚至有可能成为流量的瓶颈。

iptables的原理

能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具。可以将规则组成一个列表,实现绝对详细的访问控制功能。
他是工作在用户空间中,定义规则的工具,本身并不算是防火墙。它们定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作。而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter.(网络过滤器)

    作者一共在内核空间中选择了5个位置,    1.内核空间中:从一个网络接口进来,到另一个网络接口去的    2.数据包从内核流入用户空间的    3.数据包从用户空间流出的    4.进入/离开本机的外网接口    5.进入/离开本机的内网接口

iptables的工作机制

从上面我们知道了作者选择了5个位置,来作为控制的地方,但其实前三个位置已经基本上能将路径彻底封锁了,但是为什么已经在进出的口设置了关卡之后还要在内部卡呢? 由于数据包尚未进行路由决策,还不知道数据要走向哪里,所以在进出口是没办法实现数据过滤的。所以要在内核空间里设置转发的关卡,进入用户空间的关卡,从用户空间出去的关卡。那么,既然他们没什么用,那我们为什么还要放置他们呢?因为我们在做NAT和DNAT的时候,目标地址转换必须在路由之前转换。所以我们必须在外网而后内网的接口处进行设置关卡。

 这五个位置也被称为五个钩子函数(hook functions),也叫五个规则链。    1.PREROUTING (路由前)    2.INPUT (数据包流入口)    3.FORWARD (转发管卡)    4.OUTPUT(数据包出口)    5.POSTROUTING(路由后)    这是NetFilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链。       

防火墙的策略

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

我们现在用的比较多个功能有3个:    1.filter 定义允许或者不允许的    2.nat 定义地址转换的     3.mangle功能:修改报文原数据我们修改报文原数据就是来修改TTL的。能够实现将数据包的元数据拆开,在里面做标记/修改内容的。而防火墙标记,其实就是靠mangle来实现的。

小扩展:

对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING而mangle则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

跟本机内部进程通信:
进入:PREROUTING, INPUT
出去:OUTPUT, POSTROUTING
由本机转发:
PREROUTING, FORWARD, POSTROUTING
这里写图片描述

基本信息及操作

iptable-t      ##指定表名称-n      ##不做解析-L      ##列出指定表中的策略-F      ##刷掉表中的策略,当-t没指定表时默认filter-A      ##增加策略-i      ##进入网卡-p      ##网络协议--dport ##端口-s      ##数据来源-j      ##动作ACCEPT  ##允许REJECT  ##拒绝-N      ##增加链-E      ##修改名称-X      ##删除指定链-D      ##删除指定策略-I      ##插入-R      ##修改策略-P      ##修改默认策略
[root@localhost ~]# iptables -t filter -nL         ##查看filter表中的策略且不做解析[root@localhost ~]# iptables -t filter -F          ##刷掉filter表中策略[root@localhost ~]# service iptables save          ##保存当前策略

这里写图片描述

[root@localhost ~]# iptables -A INPUT -i lo -j ACCEPT              ##允许lo[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT  ##允许访问22端口[root@localhost ~]# iptables -A INPUT -s 172.25.254.250 -j ACCEPT  ##允许250主机访问本机所有端口[root@localhost ~]# iptables -A INPUT -j REJECT    ##拒绝所有主机的数据来源

这里写图片描述

[root@localhost ~]# iptables -N redhat             ##增加链redhat[root@localhost ~]# iptables -E redhat westos      ##修改链名称[root@localhost ~]# iptables -X westos             ##删除westos链

这里写图片描述

[root@localhost ~]# iptables -D INPUT 2            ##删除INPUT链中第二条策略

这里写图片描述

[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j REJECT      ##插入策略到INPUT链中第一条[root@localhost ~]# iptables -R INPUT 1 -p tcp --dport 80 -j ACCEPT    ##修改第一条策略[root@localhost ~]# iptables -P INPUT DROP         ##把INPUT链中的默认策略修改为drop

这里写图片描述

过滤规则:
⑴ 首先与第一个过滤规则比较。
⑵ 如果与第一个模块相同,则对它进行审核,判断是否要 转发该数据包,这时审核的结果是转发数据包,则将数据包发 送到TCP层进行处理,否则就将它丢弃。
⑶ 如果与第一个过滤规则不同,则接着与第二个规则相 比较,如果相同则对它进行审核,过程与上一步相同。
⑷ 如果与第二个过滤规则不同,则继续与下一个过滤规 则比较,直到与所有的过滤规则比较完成。要是不满足所有过 滤规则,就将数据丢弃

原创粉丝点击