Linux中netfilter火墙访问控制策略优化详解(上)—iptables

Posted 是大姚呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中netfilter火墙访问控制策略优化详解(上)—iptables相关的知识,希望对你有一定的参考价值。

Linux中的iptables火墙策略优化

1、火墙介绍

如图所示,在Linux系统中所有程序的控管最终会被内核kernal所识别,假设内核上开启了http服务即对外开放80端口,那么在访问80端口时内核会带领我们去读取相应服务的文件。当系统中有防火墙时,相当于给系统内核外多加了一层访问限制,访问限制中规定了是否开放80端口,只有访问限制中开放80端口,才能通过该端口到达内核,接着内核带领我们去读取相应服务的文件,这个访问限制就叫作数据包过滤器netfilter。数据包过滤器netfilter中包含有过滤策略,我们需要通过软件iptables向netfilter中写入过滤策略,iptables会对外开放表格来对netfilter进行管理。在向iptables表格中写入策略时,我们可以使用iptables本身或firewalld程序这两种方法,从而进一步管理火墙。
在这里插入图片描述

实验环境配置:

1)在对火墙管理进行详细说明之前,我们需要配置实验环境,除了真实主机之外,这里还需要两台虚拟主机westosa、westosb,首先为虚拟主机westosa添加一块网卡
在这里插入图片描述
2)配置双网卡主机westosa,设置其网络分别处于254、真机id(33)两个不同的网段:172.25.254.真机id+100(能够和真实主机进行通信);172.25.真机id.真机id+100(能够和westosb进行通信)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3)配置单网卡虚拟主机westosb,设置其网络处于真机id网段:172.25.真机id.真机id+200,设置其网关为westosa网络172.25.真机id.真机id+100,此时westosb能够和westosa进行通信,但不能和真实主机进行通信
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、火墙管理工具firewalld—>iptables的切换

在rhel8版本的Linux系统中默认使用的火墙管理工具是firewalld,如果我们需要使用iptables来管理火墙,需要进行如下操作:

实验步骤:
1)在westosa中从软件仓库中安装火墙管理软件iptables-services
在这里插入图片描述
2)关闭并冻结(mask)firewalld服务,开启iptables服务,同理,在进行火墙管理工具firewalld的切换时,我们需要关闭并冻结iptables服务,解锁(unmask)后开启firewalld服务
在这里插入图片描述
注意: 在进行iptables/firewalld切换时,需要使用mask来对服务进行冻结,是为了防止在开机启动时,有与之相依赖的程序将其启动

3、火墙默认策略—三表五链

a、默认策略中的5条链

默认策略中的5条链含义
input输入
output输出
forward转发
postrouting路由之后
prerouting路由之前

如图所示,假设处于254网段的主机172.25.254.250为内网主机,处于0网段的主机172.25.0.200为外网主机,当外网主机172.25.0.200向双网卡主机0网段的172.25.0.100发送访问请求时,数据是在172.25.0.100的input链中传输,172.25.0.100中某些开放的服务(如http)对访问请求进行响应后,数据从172.25.0.100的output链中传输给发送请求的外网主机。
在这里插入图片描述
另外一种情况,当外网主机172.25.0.200对内网主机172.25.254.250上的服务发送访问请求时,外网主机172.25.0.200会先通过设定的网关172.25.0.100将所有数据发送给双网卡主机。双网卡主机会将0网段172.25.0.100接收到访问请求数据包经过内核路由即forward转发postrouting路由之后将其地址转换为254网段172.25.254.100的数据,发送给需要进行访问的内网主机172.25.254.250。内网主机接收到访问请求后作出响应,返回数据包给双网卡主机254网段的接口172.25.254.100,prerouting路由之前将数据包目的地地址转换为0网段172.25.0.200,经过内核路由后发送给外网主机172.25.0.200。
在这里插入图片描述

b、 默认策略中的3张表

默认表表中存放数据
filter经过本机内核的所有数据(input output forward)
nat不经过内核的数据(postrouting prerouting input output)
mangle当filter和nat表不够用时使用,表中记录对链数据的补充解释说明(input output forward postrouting prerouting)

4、iptables 的使用

a、火墙策略的永久保存

火墙策略一般保存在iptables 策略记录文件 /etc/sysconfig/iptables中,我们可以通过以下两种方式永久保存策略:

方法一: iptales-save > /etc/sysconfig/iptables
实验步骤: 在westosa中使用-F参数清空filter表后,重启iptables服务可以重新看到表中数据,在清空后iptables-save将当前表中策略输出保存在 /etc/sysconfig/iptables中,重启服务后将不会再看到表中数据
在这里插入图片描述
方法二: service iptables save
实验步骤: 查看iptables 策略记录文件,此时可以看到文件中记录有默认策略,使用-F参数清空filter表后,service iptables save命令将当前表中策略保存在 /etc/sysconfig/iptables中,再次查看该文件可以看到文件中无内容
在这里插入图片描述

b、 iptables命令

iptables
			-t ##指定表名称
			-n ##不做解析
			-L ##查看
			-A ##添加策略
			-p ##指定协议
			--dport ##指定目的地端口
			-s ##指定来源
			-j ##指定动作 
				ACCEPT ##允许
				DROP ##丢弃
				REJECT ##拒绝
				SNAT ##源地址转换
				DNAT ##目的地地址转换
			-F ##清空表中策略
			-N ##新建链
			-E ##更改链名称
			-X ##删除链
			-D ##删除规则
			-I ##插入规则
			-R ##更改规则
			-P ##更改默认规则

实验步骤:
1)-L查看指定filter表,可以看到表中包含的经过本机内核的数据链input、output、forward;-nL查看指定filter表,可以看到表中的源地址、目的地地址未做解析
在这里插入图片描述
在这里插入图片描述
2)使用-F参数清空filter表后,-nL查看filter表可以看到表中无数据,重启iptables服务可以重新查看到表中数据
在这里插入图片描述
3)-nL不指定表名称时默认查看的是filter表,使用-t参数可以指定其他需要进行操作的表
在这里插入图片描述
4)在filter表的INPUT链中添加策略,接收所有访问请求,-nL查看filter表可以看到添加成功,删除在INPUT链中添加的策略,重新添加拒绝所有访问请求的策略
在这里插入图片描述
当filter表的INPUT链中策略为拒绝所有访问请求时,真实主机ssh远程连接虚拟主机westosa提示拒绝连接;删除INPUT链中拒绝所有访问请求的策略后,真实主机ssh远程连接虚拟主机westosa可以成功登录
在这里插入图片描述
在这里插入图片描述
5)在filter表的INPUT链中添加拒绝所有访问请求的策略,接着再添加接受通过22端口(ssh远程连接默认使用22端口)、使用tcp协议进行访问请求的策略,此时真实主机ssh远程连接虚拟主机westosa提示拒绝连接,这是因为火墙策略默认从上到下读取,在读取第一条策略后火墙会拒绝所有访问请求,第二条策略无法生效
在这里插入图片描述
我们需要删除第二条策略,在第一条访问策略前插入接受通过22端口、使用tcp协议进行访问请求的策略,此时真实主机ssh远程连接虚拟主机westosa可以成功登录
在这里插入图片描述
在这里插入图片描述
6)修改第一条访问请求策略,设定其只接受来自172.25.33.0/24网段的通过22端口、使用tcp协议的访问请求,此时254网段的真实主机172.25.254.33ssh远程连接虚拟主机westosa提示拒绝连接,33网段的westosb虚拟主机172.25.33.233 ssh远程连接虚拟主机westosa可以成功登录
在这里插入图片描述
在这里插入图片描述
7)-nL查看filter表可以看到INPUT链的默认规则为ACCEPT,即默认接受所有访问请求,修改INPUT链的默认规则为DROP即丢弃所有访问请求的数据包(默认规则只能为ACCEPT和DROP),此时真实主机ssh远程连接虚拟主机westosa一直处于等待阶段
在这里插入图片描述
在这里插入图片描述
8)在filter表中添加名称为westos的新链,更改其名称为WESTOS,删除该新建的链(默认策略的五条链无法删除)
在这里插入图片描述
在这里插入图片描述

5、火墙数据通过优化策略

a、跟踪数据包状态

防火墙中传输的数据包有以下三种状态,为了提高火墙数据传输速度,我们可以跟踪防火墙中数据包状态,根据数据包的状态设定火墙策略:

数据包状态含义
RELATED建立过连接的
ESTABLISHED正在连接的
NEW新的

实验步骤:
在filter表中根据数据包状态依次在INPUT链中添加策略:接受所有建立过连接、正在连接的数据包;接受所有来自本机回环接口的新的数据包;接受所有通过22端口、使用tcp协议进行访问请求的新的数据包;拒绝其他所有新的数据包(-m参数表示指定特殊匹配模式),-nL查看filter表可以看到添加成功
在这里插入图片描述

b、SNAT源地址转换

实验步骤:
1)SNAT源地址转换是在路由之后POSTROUTING链中进行的,即我们需要在nat表的POSTROUTING链中添加策略,指定对所有从ens3接口(254网段)输出的数据SNAT转换其源地址为172.25.254.133
在这里插入图片描述
2)做完规则设定后还要检查内核路由功能是否开启,编辑/etc/sysctl.conf开启内核路由功能后需要sysctl -p使开启设定生效在这里插入图片描述
在这里插入图片描述
3)此时在虚拟机westosb中可以ping通真实主机,也可以远程连接上真实主机,连接后显示的是从westosa的172.2.254.133连接的真实主机(-F清空之前filter表的设定,避免影响实验效果)
在这里插入图片描述

c、DNAT目的地地址转换

实验步骤:
1)DNAT目的地地址转换是在路由之后PREROUTING链中进行的,即我们需要在nat表的PREROUTING链中添加策略,指定对所有从ens3接口(254网段)输入的数据DNAT转换其目的地地址为外网主机172.25.33.233
在这里插入图片描述
2)此时在真实主机中远程连接westosa连接到的是westosb(认证时需要输入westosb的密码)
在这里插入图片描述

以上是关于Linux中netfilter火墙访问控制策略优化详解(上)—iptables的主要内容,如果未能解决你的问题,请参考以下文章

Linux对外提供服务 网络连接 端口操作 1.开启服务监听端口 2.设置防火墙,放行访问端口的包 iptables&netfilter 四表五链和通堵策略

Unit8—Linux中的火墙策略优化

Linux防火墙简介 – iptables配置策略

linux下的防火墙Netfilter配置:iptables的了解与使用(详细)

(服务运维)Linux内核防火墙Netfilter和iptables用户工具

linux笔记防火墙之iptables入门