菜单导航

Linux运维必修:iptables防火墙服务

作者: 精装之家 来源: 精装之家 发布时间: 2019年10月08日 13:38:40

Linux包过滤防火墙概述

netfilter

位于Linux内核中的包过滤功能体系

这个叫Linux防火墙的“内核态”

iptables

位于/sbin/iptables,用来管理防火墙规则的工具

这个叫“用户态”

Linux中的防火墙主要针对于网络层以及IP数据包,可以处理IP地址,端口等信息。

当然在更新到7版本后,出现了firewalld。其实跟iptables是类似的。它们只是一种服务。

iptables服务会把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理,而firewalld服务则是把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理。

这边先介绍iptables

iptables中的表、链结构

规则链

规则:可以对数据包进行过滤或处理

链:容纳各种规则

链的分类:根据处理包的不同时机有不同的链分类

默认的5种规则链

INPUT:入站数据包

OUTPUT:出站数据包

FORWARD:处理转发数据包

POSTROUTING:路由选择后的包

PREROUTING:路由选择前的包

当然用户还可以自定义链。这个放在后面再说。如果文字看的不太明白可以看下图:

Linux运维必修:iptables防火墙服务

规则表

表:表用来容纳各种规则链

默认有4种规则表

raw表:是否对该数据包进行状态追踪

mangle表:为数据包设置标记

nat表:修改数据包中的源、目IP地址或端口

filter表:确定是否放行该数据包

规则表之间以 raw mangle nat filter的顺序进行匹配。以下是默认表、链结构示意图:

Linux运维必修:iptables防火墙服务

规则链内会进行顺序匹配,有匹配到则停止,若没有匹配上,就会按默认规则处理。

iptables基本语法

语法构成

iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]

使用REJECT拒绝ICMP

下面简单做个实验来体验一下iptables。先看一下拓扑图。

Linux运维必修:iptables防火墙服务

图中的cloud-1就是centos7主机。有两块网卡,eth0和eth1,IP如图所示。R1和R2分别用两台cisco 3725模拟主机。R1和R2都配置了默认路由指向Linux主机。那么先来做一下测试吧。

注意,如果要让Linux主机能够有数据包的转发功能,要修改一个配置文件,在/etc/sysctl.conf中将net.ipv4.ip_forward的值修改为1。

如下所示,顺便再清空一下iptables,完毕以后可以使用iptables -L查看。

Linux运维必修:iptables防火墙服务

完毕以后我们来看一下R1和R2以及R1与Linux主机,R2与Linux主机之间能否互通吧。

Linux运维必修:iptables防火墙服务

现在图中应该是网络全通的。那么我们先写一个规则,让R1ping不通Linux主机。

现在先来分析一下,R1如果要Ping Linux主机,使用的是ICMP,以及这算是入站,所以应该是input,然后如果不想让这个包通过,应该是属于filter表。那么命令就出来了。

Linux运维必修:iptables防火墙服务

其中 -I 代表 insert 插入 这条规则默认会在规则链的最上面添加,也可以使用 -I 后面跟序列号指定序号。-A则是在末尾添加。

注意,reject和drop的区别在于,reject会有明确的错误提示,而drop只是丢弃,对于icmp来说,就会显示超时。

来看看这么写会有什么效果:

Linux运维必修:iptables防火墙服务

很明显,这里出现U代表不可达,而且出现的很快 明显看得出来是被拒绝了。

使用DROP拒绝ICMP

那么如果使用drop呢,我们可以先用删除命令把刚才写的规则删掉写一个新的,或者使用-I添加在最前面。我这边就先把之前写的删除再添加吧。

Linux运维必修:iptables防火墙服务

可以看到之前的规则已经被清空了。

接下来看看用DROP会有什么不同:

Linux运维必修:iptables防火墙服务

规则写好了,接下来用R1来测试一下:

Linux运维必修:iptables防火墙服务