Linux中的火墙策略优化

1 实验环境搭建

1)一台双网卡的虚拟机,一个172.25.254.网段,一个192.168.4.网段。
首先添加网卡:
在这里插入图片描述
查看有两个网卡:
在这里插入图片描述
两块网卡,只有一个网卡上有ip:
在这里插入图片描述
添加一个192.168.4.网段的ip:
在这里插入图片描述
注意:这里添加ip的时候,忘记在ip后面添加网关,所以导致两台192网段主机之间ping不通,后面修改了网关。

2)一台192.168.4网段的虚拟机:
在这里插入图片描述
3)一台172.25.254.网段的真机:
在这里插入图片描述

2 火墙介绍

  • netfilter:它是内核上的一个插件,是一套防火墙系统,用户可以通过运行在用户空间的工具把相关配置下发给netfilter,它使得数据包过滤、网络地址转换和基于协议类型的连接跟踪成为了可能
  • iptables:可以用来管理netfilter,给netfilter里的表格里写火墙策略
  • iptables/firewalld:linux系统中,可以用这两种命令对火墙进行操作。iptables的特点是,直接操作三个表五条链,而firewalld的使用更为简单

3 火墙管理工具的切换

在企业八版本中,默认使用的是firewalld,但是也可以切换为iptables

  • firewalld 切换到 iptables
    • dnf install iptables-services -y
    • systemctl stop firewalld
    • systemctl disable firewalld
    • systemctl mask firewalld
    • systemctl enable --now iptables

在这里插入图片描述在这里插入图片描述

  • iptables 切换到 firewalld
    • dnf install firewalld -y
    • systemctl stop iptables
    • systemctl disable iptables
    • systemctl mask iptables
    • systemctl enable --now firewalld

在这里插入图片描述在这里插入图片描述

4 火墙默认策略

火墙中的三张表和五条链:

  • filter表:经过本机内核的数据;input链—>从单网卡主机访问双网卡主机输入时;;output链—>内核给该访问的主机一个输出回应;forward链—>转发,单网卡主机通过双网卡主机方位另一台不同网段的单网卡主机时
  • nat表:不经过内核的数据;input、output、postrouting—>陆游后、prerouting—>路由器前
  • mangle表:附加表,当前面两张表不够用时会使用该表; input、forward、output、postrouting、prerouting(所有的五条链)

5 firewalld

5.1 firewalld的开启

systemctl stop iptables
systemctl disable --now iptables
systemctl mask iptables
systemctl unmask firewalld
systemctl enable --now firewalld
在这里插入图片描述

5.2 firewalld的域

含义
trusted接受所有的网络连接
home用于家庭网络,允许接受ssh、mdns、ipp-client、samba-client、dhcp-client
work工作网络,允许接受ssh、ipp-client、dhcp-client
public公共网络,允许接受ssh、dhcp-client
dmz军级网络,允许接受ssh
block拒绝所有
drop丢弃,所有数据全部丢弃无任何回复
internal内部网络 ,允许接受ssh、mdns、ipp-client、samba-client、dhcp-client
externalipv4网络地址伪装转发,允许接受sshd

使用firewall-cmd --list-all --zone=域,可以查看指定域的火墙策略,默认的域是public:
在这里插入图片描述在这里插入图片描述

5.3 firewalld的设定原理及数据存储

目录含义
/etc/firewalld火墙配置目录
/lib/firewalld火墙模块目录

在这里插入图片描述

5.4 firewalld的管理命令

命令含义
firewall-cmd --state查看火墙状态
firewall-cmd --get-active-zones查看当前火墙中生效的域
firewall-cmd --get-default-zone查看默认域
firewall-cmd --list-all查看默认域中的火墙策略
firewall-cmd --list-all --zone=work查看指定域的火墙策略
firewall-cmd --set-default-zone=trusted设定默认域
firewall-cmd --get-services查看所有可以设定的服务
firewall-cmd --permanent --remove-service=cockpit移除服务
firewall-cmd --reload重新加载
firewall-cmd --permanent --add-source=172.25.254.0/24 --zone=block指定数据来源访问指定域
firewall-cmd --permanent --remove-source=172.25.254.0/24 --zone=block删除指定域中的数据来源
firewall-cmd --permanent --remove-interface=ens224 --zone=public删除指定域的网络接口
firewall-cmd --permanent --add-interface=ens224 --zone=block添加指定域的网络接口
firewall-cmd --permanent --change-interface=ens224 --zone=public更改网络接口到指定域

注意:每次修改了火墙策略等,都需要重新加载服务,否则不生效

1)查看火墙状态;查看当前火墙中生效的域,可以看到当前生效的域是public:
在这里插入图片描述
2)查看默认域;将默认域修改为trusted,然后查看默认域中的火墙策略:
在这里插入图片描述
3)查看指定域的火墙策略:
在这里插入图片描述
4)查看所有可以设定的服务:
在这里插入图片描述
5)添加http服务,当不加–permanent参数时,是临时设定,火墙重新加载后,该服务就不在火墙策略中了:
在这里插入图片描述
加上–permanent参数表示永久设定,重新加载火墙后,该服务还在:
在这里插入图片描述
移除服务:
在这里插入图片描述
6)安装htppd服务,修改该服务的端口:
在这里插入图片描述
在该服务配置文件中,将端口改为8008,重启服务,然后查看端口:
在这里插入图片描述
此时虽然添加该服务,但分别去两台单网卡的主机中访问该主机的apache是无法访问的,因为修改后的端口没有生效:
在这里插入图片描述
去172网段的主机上访问该双网卡172网段的ip,同理也在192网段的主机上,访问该双网卡192网段的ip,都是不成功的:
在这里插入图片描述
此时可以在火墙策略中添加一个8008端口,然后再去另外两台主机中网页访问该主机的apache,就可以访问到:
在这里插入图片描述
成功访问:
在这里插入图片描述
做完实验后,移除端口:
在这里插入图片描述
将配置文件中的8080端口,修改回原来的80端口,然后重启服务:
在这里插入图片描述
7)将172网段设置为全黑,此时172网段的主机输入该双网卡主机的172网段是无法访问apache的:
在这里插入图片描述
查看block域中的火墙策略:
在这里插入图片描述
此时在172网段的主机上访问apache不成功:
在这里插入图片描述
将172网段从全黑域中移除:
在这里插入图片描述
8)查看默认public域中的火墙策略,可以看到接口处有两个设备,然后从火墙策略中移除http服务:
在这里插入图片描述
将enp1s0设备从public域中移除,然后将它添加到trusted域中:
在这里插入图片描述
分别查看默认public域和trusted域中的火墙策略,可以看到enp1s0设备在trusted域中:
在这里插入图片描述
trusted域代表接受所有的网络连接,所以此时,该网卡,也就是172网段的主机即使在火墙策略中没有http服务的情况下,也可以访问到apache;此时192网段主机会因为火墙策略中没有http服务而无法访问apache:
在这里插入图片描述

9)改变enp1s0设备的域为public,查看默认域中的火墙策略:
在这里插入图片描述
将该设备恢复为public域后,再访问apache是无法访问的:
在这里插入图片描述

5.5 firewalld的高级规则

命令含义
firewalld-cmd --dtrect --get-all-rules查看高级规则
firewalld-cmd --direct --add-rule +其他添加高级规则

1)首先在火墙策略中添加http服务,使两个网段的主机都可以访问到:
在这里插入图片描述
2)查看火墙的高级规则,因为之前没有设定过高级规则,所以没有高级规则,会显示空:
在这里插入图片描述
3)添加高级规则,使用该命令去拒绝172.25.254.36这台主机访问双网卡主机的http服务,但该主机依旧可以使用其他服务;然后查看高级规则:在这里插入图片描述
4)删除高级规则,删除完成后,重新加载火墙策略即可:
在这里插入图片描述

5.6 firewalld中的NAT

5.6.1 源地址转换(SNAT)

源地址转换是内网地址访问外网时,发起访问的内网ip地址转化为指定的ip地址,并用该ip去访问和该ip在同一个网段的主机。
1)查看默认域的火墙策略,可以看到masquerade后面是no,这表示双网卡主机没有开启地址伪装功能:
在这里插入图片描述
2)开启双网卡主机的地址伪装功能:

在这里插入图片描述
3)开启内核陆游,若输入sysctl -a | grep ip_forward,查看到net.ipv4.ip_forward = 1,表示内核陆游开启:
在这里插入图片描述
若net.ipv4.ip_forward = 0,则需要编辑/etc/sysctl.conf 文件,将它设置成1。注意:编辑该文件时,=号前后不能有空格,sysctl -p 表示使该文件内容生效:
在这里插入图片描述
4)进入192网段的主机,要想不同网段的主机可以互相链接,可以将单网卡主机的网关设置成与双网卡在统一网段的双网卡的ip,注意下面的设置网关的方式是临时的,永久设置可以编辑/etc/sysconfig/network文件。设置完成后去ping172网段的主机成功:
在这里插入图片描述
5)可以ping通后,使用192网段的主机去链接172网段的主机:
在这里插入图片描述
6)在172网段的主机上输入 w -i查看,发现显示的链接ip是双网卡主机的172网段的ip:
在这里插入图片描述

5.6.2 目的地址转换(DNAT)

目的地址转换是指数据包从网卡发送出去的时候,修改数据包中的目的ip,表现为如果想访问A,但是网关做了DNAT,把所有访问A的数据包的目的ip全部修改为B,那么实际上访问的是B。
1)下面的命令表示,若172网段的主机访问,就把他链接到192网段的主机上去,让他直接访问192网段的主机,而不是通过链接双网卡的172网段达到访问的目的:
在这里插入图片描述
2)在172网段的主机上链接双网卡主机的172网段,链接上后查看ip,发现实际上链接到了192网段的主机上,所以此时输入密码时,要输入192网段主机的密码,而不是双网卡主机密码,否则无法链接:
在这里插入图片描述

注意:因为陆游是按照目的地址来选择的,因此,DNAT是在prerouting链上进行的,而 SDNT是在数据包发送出去的时后才进行,因此是在postrouting链上进行的。

6 iptables的使用

关闭和锁定firewalld防火墙,安装iptables,开启服务;若之前安装过并锁定了iptables,可以将iptables解锁:
在这里插入图片描述
查看iptables状态为开启:
在这里插入图片描述

6.1 iptables命令及火墙策略的永久保存

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

1)不做解析查看:
在这里插入图片描述
作出解析并查看:
在这里插入图片描述
2)-F表示刷新后查看:
在这里插入图片描述
刷新是暂时的,重启服务后,就会恢复之前的状态:
在这里插入图片描述
iptables的策略记录文件:
在这里插入图片描述
想要永久保存,可以使用下面两条命令,其效果和作用是一样的,只是两种不同的保存方式:
在这里插入图片描述
3)iptables -nL 命令默认显示的是filter表,下面可见INPUT、FORWARD、OUTPUT三条链;第二条命令iptables -t filter -nL,同第一条命令作用与效果相同,-t表示指定要查看的表:
在这里插入图片描述
指定其他两张表查看:
在这里插入图片描述

4)在INPUT链下添加策略,协议为tcp、目的地端口为22(即ssh协议)的主机,允许访问:
在这里插入图片描述
在INPUT链下添加策略,协议为tcp、目的地端口为22(即ssh协议)的主机,拒绝访问:
在这里插入图片描述
在INPUT链下的第二条策略中插入规则,协议为tcp、目的地端口为22(即ssh协议)、ip为172.25.254.36的主机,拒绝访问,此时该主机将无法链接该沙双网卡主机:
在这里插入图片描述
5)创建一个名为LHY的新链,然后查看:在这里插入图片描述
修改链LHY的名称为QJW:
在这里插入图片描述
删除该链:
在这里插入图片描述
6)删除INPUT下的第一条规则:
在这里插入图片描述
7)更改之前设定过的规则,将INPUT下的第二条规则,来源ip改为172.25.254.136:
在这里插入图片描述
8)更改默认规则为drop丢弃:
在这里插入图片描述
更改默认规则为accept:
在这里插入图片描述

6.2 数据包状态

火墙的策略是从上到下依次匹配,匹配到后,就不再向下匹配。现在的需求是某个服务要去找最后一个火墙策略,前面有匹配成功的掠过,也就是火墙的优化。

状态含义
RELATED已经建立过连接的
ESTABLISHED正在连接的
NEW新的

1)刷新:
在这里插入图片描述
2)第一条命令表示,添加策略,状态为ESTABLISHED和RELATED的,作允许动作;第二条命令表示,添加策略,状态为新的,回环接口作允许动作;第三到五条命令表示,添加策略,状态为新的数据,协议为tcp,目的地端口为860(iscsi)/5445(smb)/22(ssh)服务可以进入;第六条命令表示,除了上面的服务外,其他服务的数据会被拒绝:
在这里插入图片描述
4)iptables -A INPUT -m state --state NEW !-s 172.25.254.36 -p tcp --dport 22 -j ACCEPT,表示允许除172.25.254.36以外的主机通过22端口,也就是ssh服务进入此主机:
在这里插入图片描述
在172.25.254.36主机上访问236主机,不成功:
在这里插入图片描述
5)在linux中查找某个服务的端口号:

  • grep 服务名 /etc/services --> 会查出带有该服务的所有信息
  • getent services 服务名/端口号 --> 该命令既可以知道端口号查服务,也可以知道服务名查端口号,比较精准

在这里插入图片描述

6.3 iptables中的NAT

6.3.1 源地址转换(SNAT)

1)在双网卡主机中输入该命令,-o参数后面的设备写自己双网卡主机上网卡的名字;然后查看,该命令在postrouting链上生效:
在这里插入图片描述
2)在192网段的主机上,查看网关,ping172网段的主机成功:
在这里插入图片描述
链接到172网段的主机:
在这里插入图片描述
3)在172网段的主机上,查看访问信息,发现虽然是192网段的主机在链接,但是最终显示的是双网卡的172网段在链接:
在这里插入图片描述

6.3.2 目的地址转换(DNAT)

1)将172网段主机的访问直接链接到192网段的主机上,该命令作用在PREROUTING链上:在这里插入图片描述
2)用172网段的主机去链接双网卡主机的172网段,登陆后,查看ip,实际上链接的是192网段的主机:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值