linux之iptables详解

防火墙(iptables)

第一季

-----------------------了解防火墙

netfilter 和iptables

什么是netfilter,其实它是防火墙的模块,而iptables是管理netfilter的软件,这里要弄清楚netfilter和iptables的关系;

防火墙里面有很多策略,里面可以定义,主要是为了安全,当防火墙开启的时候,是默认阻止很多服务的,下面可以用system-config-firewall来打开图形界面

从这里可以看到,我的防火墙是开启的,然后下面有很多关于服务的选项,默认情况下都没有打钩,也就是说,当你配置服务器后,默认是被防火墙挡住的,别人是无法访问你的服务的!

这里我们可以通过图形界面来“关闭“防火墙。

这里可以点disable,然后点apply里“关闭”,一定要点apply(应用)才生效的

注意:这里要注意了,上面的关闭是有引号的,为什么要加引号,是因为这里的关闭并不是像其他服务样的关闭,一般关闭某个服务后,这个服务就完全停止了,但是关闭防火墙其实只是清空了里面的所有策略,是防火墙变成允许所有了,但是防火墙的功能是没有关闭的!!因为iptables是基于内核的

第二季

---------------------进入iptables

下面来说iptables的组成,它是由3个表filter,nat,mangle组成的,当然 在每个表里面还有一些链,注意了表是包含链的,也就是说我们是在表里面来写链定义策略的。

filter

先说filter表,它是用来过滤数据包的

这个表中有3个链INPUT ,OUTPUT ,FORWARD(当然还有自定义链)

INPUT链:过滤数据包目的地是自己的。就是说当有发给自己的数据包时,我们可以通过定义INPUT链来写一些策略来对这些数据包采取一些动作。

OUTPUT链:过滤数据包源地址是自己的。就是说当有数据包从自己出去的时候,我们可以通过编写策略来对这些数据包采取一些动作。

FORWARD链:过滤通过自己的数据包。就是说对一些通过自己的数据包(数据包 源和目的都不是自己)来采取一些动作。

这里我们可以通过iptables –t filter –L来查看

注意这里查看时并没有指定表是filter,因为默认不指定表的时候就当做是filter表。

第三季

--------------------------理解3条链的关系

从图中我们可以看到,数据包过来的时候先经骨干菱形框,通过判断如果是FORWAD则走FORAD链,如果是INPUT则走INPUT链,这里图能说明很多问题就不详细说了,

这里主要要注意一个问题,这3条链就像3个门,如果一条链拒绝了就不能通过;但是有人对forwad和INPUT链有点困惑,他们会问如果我INPUT 都拒绝了,然后FORWAD是允许通过的,那么通过我的数据包还怎么能通过了?那不是在通过前就被INPUT 拒绝了么?其实并不是这样的,就像上面说的那样,3条链是3个独立的3个门,我关掉了INPUT 的门,但是FORWAD门没关啊,数据包如果匹配我的动作,那么数据包还是会经过FORWAD链的!

第四季

----------------------------链后的动作

这里对于我们每个策略的后面都会有动作的,比如走INPUT链的数据包,如果匹配上了,我们是把数据包丢弃还是放行了?这就是我们说的策略动作

这里有这样几个动作:ACCEPT,DROP,REJECT,LOG,自定义链

ACCEPT:对满足策略的数据包允许通过

DROP:丢弃数据包,且不返回任何信息

REJECT:丢弃数据包,但是会返回拒绝的信息

LOG:把通过的数据包写到日志中(相当于一个门卫对进去的人进行登记)

这里,我们先理解一下LOG这个动作吧,其实这个动作对数据包是没有任何影响的,只是记录到日志里面(/var/log/messages),如果在一个有LOG动作的链后还有另一个链,那么数据包通过有LOG链后还是会经过后面的链的,记住这里仅仅是为了记录到日志中。

第五季

----------------------------防火墙的配置命令

配置防火墙:

这里是有固定格式的

Iptables 表名 链名 匹配条件 动作

参数介绍:

-t (table) 指定表

对于链的参数

-A(append)追加,这里用这个参数后,会将写的策略添加到表中最后面

-I (insert)插入链,如果不加数字,默认是将写的策略添加到表中所有策略的前面,但是我们要指定插入到相应的行,我们可以这样

Iptables –t filter –I INPUT 2 …… 这里就是插到第二个

注意:这里要注意,数据包通过防火墙的时候是要顺序匹配策略的,从上往下依次匹配,

如果我们第一条策略就写了拒绝192.168.0.0访问ftp的策略后,然后再写192.168.0.1可以访问ftp,则这时192.168.0.1是不能访问的,因为在前面这个网段的ip就已经被拒绝了,所以一定要注意策略的顺序。

-L (list)查看策略:如果查看filter的策略,则可以:iptables –t filter –L,当然这里为了看得更详细,可以加上参数-v和-n,对于v和n的理解用图来说明效果:

-----加vn后

-F(flush)清楚所有策略,注意了,这里只是清除相应表中的所有策略,但是不能删除一个链的默认策略,什么是链的默认策略呢?

我们从图中可以看到

这个后面的就是链的默认策略,这里它默认是允许的,对于默认策略它总是在最后执行 的,也就是说当数据包补匹配前面所有策略时,就采用这个链的默认策略,当然这个链的默认策略是可以更改的。

-P 链 动作 用这个参数就可以改变一个链的默认策略

如:iptables –t filter –P INPUT DROP

这里我们就更改了INPUT链的默认策略。

那么如果我们要清除(还原)链的默认策略应该用什么命令呢?

这里用service iptables stop 是可以的,它可以清楚所有策略和链的默认策略。

-Z 计数器归零,上面我们可以看到每个条目的最左右有个pkts和bytes,这个就是用来清零这个计数器的

-D(delete)删除某个策略,这里删除时需要指定你要删除的是第几个策略,一般一个表里面的策略都是从上到下一1开始排列的

我们在删除时可以这样来指定:iptables –t filter –D INPUT 1 这个就是删除第一个策略

从图中可以看到我们参看时,在后面添加参数—line-numbers 就可以以数字排序的方式查看了

匹配条件参数

-i 网卡 数据包进入的网卡

-o 网卡 出去的

-s ip 源ip

-d ip 目的ip

-p 协议

--dport 端口号 目的端口号

--sport 端口号 源端口号

下面就用一些实例来了解各个参数吧:

拒绝192.168.0.0网段的pc访问自己的http服务

Iptables -t filter -A INPUT –s 192.168.0.0/24 -p tcp --dport 80 –j REJECT

这里写的时候一定要注意要用什么链,因为别人是访问我,所以是INPUT

允许192.168.1.1 可以访问我的ftp服务

Iptables –t filter -A INPUT –s 192.168.1.1 -p tcp –dport 21 -j ACCEPT

3,对自己所有允许,因为自己访问自己都是用过接口回环的,所以

Iptables  -A INPUT -i lo -j ACCEPT

Iptabls -A OUTPUT -o lo -j ACCEPT

这里要特别注意了,因为iptables配置是写在内存中的,如果你重启以后,iptables的一些策略都会消失,所以需要service iptables save ,这样就讲你所写的策略都保存到了/etc/sysconfig/iptables里面了

第五季

----------------------------iptabes中的一些细节和参数的使用

1, !的使用,这里!是取反的意思

Iptables –A INPUT ‘!’ -s 192.168.0.1 -p tcp –dport 21 -j REJECT

这里的意思就是除了192.168.0.1可以访问本地ftp服务,其他都拒绝

端口,注意了,要指定端口,那么前面必须要有协议,不然指定端口时会报错,也就是说协议和端口是绑定使用的

Iptables -A INPUT -s 192.168.0.1 -p tcp --dport 20:80 -j ACCEPT

这里的意思就是允许tcp协议中从20到80之间的端口的访问

Iptables –A INPUT -s 192.168.0.1 -m multiport –p tcp --dport 20,21 -j REJECT

这里意思 是拒绝访问端口为20和21

如果要拒绝ping,这里要注意了,与其他的有点不一样

Iptables –A INPUT –s 192.168.0.1 -p icmp –icmp-type 8 –j REJECT

第七季

-----------------使用iptables进行流量控制,这个很酷!!

这里要使用一些参数,当然这些参数可以使用man iptables 来查看

这里我就实验来讲解吧

这里我们用192.168.0.254这台机器的http来共享出一个100M文件,然后让另一个pc去下载,通过限速和不限速来比较一下效果

在http服务器的html目录下有个100M的文件test

然后用192.168.0.1这个机器来下载

这里我们可以看到下载的速度为15M左右

下面在254机器上通过iptables来限速

这里的-m 是match匹配的意思,然后—limit 10/s 是限制每秒只能通过10个数据包

然后打0.1 这个机器上下载

这里可以看到下载速度只有7kb左右了

第八季

------------自定义链的使用

什么时候用到自定义链呢?一般到企业后,会发现防火墙下面会写 了很多策略,但是为了再加策略时不影响到以前已经写好的策略,我们就可以用自定义策略;

-N 自定义链名 添加自定义链

-X 自定义联名 删除自定义链

下面我们可以自己定义链:

Iptables –N RHCE

Iptables -A RHCE -s 192.168.0.1 -p tcp –dport 80 –j REJECT

当然这样写以后,是没有理由让数据包从RHCE这个自定义的链走的

但是不要忘记了,在前面的的动作中,我们不仅可以用ACCEPT也可以用到自定义链的,所以我们可以这样让数据包走我们的自定义链

Iptables –A INPUT –j RHCE

这样数据包就先走我们的自定义链了

不过问题来了

如果我们让数据包走自定义链后,那么走过自定义链,数据包还会回来继续走我们的INPUT链么?

答案是肯定的,数据如果走完自定义链如果不匹配,那么他还是会回到INPUT 链来继续往下匹配的!

下面来做个试验,添加自定义链RHCE 然后让允许192.168.0.1可以访问ftp服务,然后用INPUT来拒绝192.168.0.1ping254

这里可以看到是可以访问ftp的

这里看到拒绝了访问http的服务,这就证明了上面的结论!!

第九季

-------------防火墙的状态跟踪

什么将状态跟踪,这里我们就用tcp的三次握手连接来说明吧,当建立三次握手的时候,会发连接,然后协商建立三次握手后就会建立成功,这时就是ESTABLISH状态。这个三次握手和一些其他的连接问题就不多说了。

首先介绍一下这里可以跟踪的4个状态

NEW:第一次发起连接的数据包状态

ESTABLISH:建立连接的数据包的状态

RELATED:回应数据包的状态

INVALID:无效数据包的状态

这里为什么要用到数据包状态跟踪呢?

我们就拿ftp这个服务作为实例来说明吧,大家都知道ftp有2个模式,主动模式和被动模式;(首先要注意了,不管说明服务,一般客户端去连接服务器端时候,都会用一个大于1024 的端口去连接,而且是随机的,你是无法知道的,除非连接后你用网络监测netstat可以看到)

主动模式(port):在通过与服务器端的21端口建立起命令通道后,ftp客户端告诉服务器端,我开启了一个端口1234,你可以连我,然后ftp服务器端就用20端口主动去连客户端的1234端口,建立起数据通道

被动模式(passive):通过与服务器端的21端口建立命令通道后,服务器端就会告诉客户端我开启了2222端口,你来连接我的2222端口,这样客户端就会用大于1024的一个随机端口去连接服务器2222端口,建立起数据通道

了解ftp的2个模式后,我们就要考虑了,如果用的是主动模式,那么我们可以通过控制20和21 端口来过滤ftp的一些连接,但是如果是被动模式呢?我们根本不晓得建立数据通道的端口,就无法来过滤了,但是在建立连接的过程中,他们是始终会有连接状态的,所以这里我们就可以用数据包状态跟踪来解决ftp的被动模式问题。

注意了,一般ftp服务的连接都用的是被动模式(passive),下面我们来用实验证明

首先在254上搭建ftp服务器,然后运行0.1这个机器能通过20和21端口来访问ftp服务器,但是拒绝其他一切

254端

客户端来访问:

注意了,这里我们开始登陆进去成功是因为我防火墙策略中打开了21端口,但是我把20端口也打开了,进去后为什么连ls都不行,这是因为默认的模式为被动模式,这

里我们输入passive进去主动模式,这样就可以ls或者下载了;

这时我们利用数据包状态跟踪来处理,如果状态追踪成功,那么开始登陆进去就是可以下载数据的:

这里可以看到追踪的是tcp连接成功时数据包的状态:established,related

然后一定不要忘记了加载ip_conntrack_ftp这个模块!!!

测试:

这里已经可以证明成功了;

ROUTIP为防火墙

时间: 2024-11-06 03:54:09

linux之iptables详解的相关文章

linux中iptables详解

linux中iptables详解 一.通用基础知识 1.基本概念 什么是防火墙? 所谓防火墙指的是工作于主机或网络的边缘,对于进出的报文根据事先定义的规则作检查,将那些能够被规则所匹配到的报文作出相应处理的组件. 防火墙是由软件和硬件设备组合而成.在内部网和外部网之间.专用网与公共网之间的界面上构造的保护屏障,使Internet与Intranet之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入. 防火墙主要由服务访问规则.验证工具.包过滤和应用网关4个

Linux下iptables详解

一.介绍 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,类似于网络设备中的ACL.它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘或网络出口.而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略.规则,以达到让它对出入网络的IP.数据进行检测. 目前市面上比较常见的有3.4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关. 对于TCP/IP的七层模型来讲,我们知道第三层是网络层,三层的防火墙会在这层对源地址和

【Linux进阶】Linux防火墙iptables详解

前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP.数据进行检测. 目前市面上比较常见的有3.4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关. 对于TCP/IP的七层模型来讲,我们知道第三层是网络层,三层的 防火墙会在这层对源地址和目标地址进行检测.但是对于七层的防火墙

Linux网络安全模型及iptables详解(1)

Linux网络安全模型及iptables详解 基本概念 Firewall:工作在主机或网络边缘,对进出的报文按事先定义的规则进行检查, 并且由匹配到的规则进行处理的一组硬件或软件,甚至可能是两者的组合 硬件防火墙:在硬件级别实现部分功能的防火墙:另一个部分功能基于软件实现 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙: 主机防火墙:工作于主机边缘,只能对一台主机起到保护作用 网络防火墙:工作于网络边缘,对多台主机起到保护作用(定向规则) iptables:防火墙规则编写工具,位于用

iptables 详解

Iptables 详解 Iptables的历史 历史版本 与Linux内核各版本集成的防火墙历史版本: 2.0.X内核:ipfwadm 2.2.X内核:ipchains 2.4.X内核:iptables iptables的工作原理 iptables由用户空间的命令行程序和位于内核中的tcp/ip协议栈的报文处理框架两部分组成.工作在用户空间中,定义规则,让在内核空间当中的netfilter来读取,并且实现让防火墙工作.而放入内核的地方必须是tcp/ip的协议栈经过的地方.而这个tcp/ip协议栈

Linux集群详解

Linux集群详解 集群或者说是群集:其目的是为了实现将多台计算机组合以来完成特定的任务,比如天气预报,大型网络游戏,这些都需要很大的运算量,单台计算机实现成本太高,而且不显示.那么就需要通过集群的方式,将废弃的或者正在使用的计算机联合起来,结合整体的力量来解决这些问题 集群类型: 1.  负载均衡集群 load blancing ,简称LB 2.  高可用性集群 high availibility,简称 HA 3.  高性能集群 high performance,简称 HP 作用: 1.  负

中国Linux系统服务进程详解

Linux系统服务进程详解 1.acpid 配置文件:/proc/acpi/event 说 明:Advanced Configuration and Power Interface,为替代传统的APM电源管理标准而推出的新型电源管理标准.建议所有的笔记本用户开启它.一些服务器可能不需要 acpi.支持的通用操作有:"电源开关","电池监视","笔记本 Lid 开关","笔记本显示屏亮度","休眠", &qu

iptables详解--转

出处:http://yijiu.blog.51cto.com/433846/1356254 iptables详解 基本概念: 1.防火墙工作在主机边缘:对于进出本网络或者本主机的数据报文,根据事先设定好的检查规则对其检查,对形迹可疑的报文一律按照事先定义好的处理机制做出相应处理 对linux而言tcp/ip协议栈是在内核当中,意味着报文的处理是在内核中处理的,也就是说防火墙必须在工作在内核中,防火墙必须在内核中完成tcp/ip报文所流进的位置,用规则去检查,才真正能工作起来. iptables用

Monitorix监控Linux主机图文详解

Monitorix监控Linux主机图文详解 Monitorix简介 Monitorix 是一款自由开源的轻巧型系统监视工具.使用 Monitorix你可以随时掌控 CPU 负载及温度.内存占用.活动进程.磁盘使用及温度.网络设备流量.网络服务等全方位的系统信息.Monitorix 需要 Apache Web 服务器来显示这些系统信息图表.所以它特别适合在 Linux 服务器上面使用. 下面是我安装的步骤 1.安装的环境和需要的rpm包 我是在CentOS 6.4下面安装的CentOS 5可以使