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 四表五链和通堵策略
linux下的防火墙Netfilter配置:iptables的了解与使用(详细)