当前位置: 首页 > news >正文

29.Linux防火墙管理

文章目录

  • Linux防火墙管理
    • 认识防火墙
    • 静态防火墙和动态防火墙
      • 静态防火墙
      • 动态防火墙
    • Firewalld 防火墙
      • Firewalld 区域 zone
        • Firewalld 提供的区域
        • 数据包与区域匹配规则
      • Firewalld 规则
    • Firewalld 配置
      • Firewalld 配置方法
      • Firewalld 配置文件
      • 设置默认zone
      • 设置 source
      • 设置 interface
    • 综合实验1:配置防火墙
      • 实验要求
      • 配置过程
    • 综合实验2:配置防火墙
      • 实验要求
      • 配置过程

Linux防火墙管理

认识防火墙

通俗来说,你的电脑相当于你的家,电脑上的网络端口就相当于你家的门、窗、通风口,每个端口都是一个潜在的通道。网络数据包可以理解为想要进门的人或从家里出去的人。防火墙就可以是安装在电脑上的一个软件(或操作系统自带的功能),它扮演==保安==的角色。

保安拥有一份规则表,在每个端口都巡视,它的核心工作是:根据预设的规则,控制谁可以进来(入站),以及谁可以出去(出站),以保护内部的安全。

防火墙的作用:

  1. 监控网络流量:时刻检查所有试图进入或离开你电脑的数据。
  2. 阻止未经授权的访问:比如,有一个黑客想通过某个“端口”潜入你的电脑,防火墙发现这个端口没有对你开放,就会立刻拦截这个请求。
  3. 控制程序上网:当你第一次运行一个新游戏或软件时,防火墙可能会弹窗问:“是否允许‘某程序’访问网络?” 这就是在制定规则。如果你选择“否”,那么这个程序就无法连接到互联网。
  4. 防御网络攻击:可以识别并阻挡一些常见的网络扫描和攻击行为。

静态防火墙和动态防火墙

静态防火墙

用户管理防火墙规则时,为了让规则永久保存,防火墙服务会重新加载所有防火墙规则,哪怕只修改一条规则也要重新读取所有规则,这种载入模式称为静态模式。静态模式加载规则时,会导致网络连接丢失。

我们称使用静态模式载入规则的防火墙为静态防火墙。例如iptables,用户执行 service iptables reload 命令将变更的规则保存到配置文件里,并重新加载所有防火墙规则。

动态防火墙

用户管理防火墙规则时,为了让规则永久保存,防火墙只需要将变更部分保存并更新到运行中的 iptables 即可,而不需要对整个防火墙规则列表进行重新加载,这种载入模式称为动态模式。

我们称使用动态模式载入规则的防火墙为动态防火墙,例如 firewalld。

Firewalld 防火墙

firewalld是CentOS 7默认的动态防火墙管理工具,用于管理系统的网络访问规则。

Firewalld 区域 zone

firewalld 防火墙为了简化管理,zone是firewalld中预设的规则集合,每个zone对应不同的网络安全级别(如信任、公共、内部等),包含允许或拒绝的服务/端口规则。

通过将网络接口或源IP绑定到不同zone,快速适配不同网络环境的安全需求(如家庭网络用trusted zone,公网用public zone)。

Firewalld 提供的区域

firewalld 防火墙提供了如下zone:

  • trusted(信任区域):允许所有的传入流量。
  • public(公共区域):允许与ssh或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。是新添加网络接口的默认区域。
  • external(外部区域):允许与ssh预定义服务匹配的传入流量,其余均拒绝。默认将通过此区域转发的IPv4传出流量将进行地址伪装,可用于为路由器启用了伪装功能的外部网络。
  • home(家庭区域):允许与ssh、mdn3、samba-client或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。
  • internal(内部区域):默认值时与homel区域相同。
  • work(工作区域):允许与 ssh、dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。
  • dmz(隔离区域也称为非军事区域):允许与ssh 预定义服务匹配的传入流量,其余均拒绝。
  • block(限制区域):拒绝所有传入流量。
  • drop(丢弃区域):丢弃所有传入流量,并且不产生包含ICMP的错误响应。
数据包与区域匹配规则

数据包与zone匹配规则如下:

  1. 首先匹配“源IP地址绑定的zone”(通过firewall-cmd --zone=xxx --add-source=IP设置);

  2. 若未匹配源IP,则匹配“网络接口绑定的zone”(通过firewall-cmd --zone=xxx --add-interface=网卡设置);

  3. 若均未匹配,则使用“默认zone”(通过firewall-cmd --get-default-zone查看)。

注意事项:

  • firewalld默认指定public区域为默认区域,并将lo 回环接口映射至 trusted 区域
  • 如果流量不与允许的端口或协议或服务匹配,则通常会被拒绝

Firewalld 规则

对于所有区域,区域内规则的优先级是相同的。

区域内规则匹配优先级如下:

  1. 首先匹配为该区域设置的任何端口转发伪装原则。
  2. 其次匹配该区域设置的任何允许规则。
  3. 最后匹配该区域设置的任何拒绝规则。
  4. 还可以同时为以上3个规则设置记录和审计规则,可以同时生效。
  5. 富规则中的规则优先级高于区域中其他规则。
  6. 如果区域中所有规则都不匹配,那么通常会拒绝该包,trusted 例外。

Firewalld 配置

Firewalld 配置方法

  1. 直接编辑 /etc/firewalld/ 中的配置文件
  2. firewall-cmd 命令行工具
  3. firewall-config 图形工具

Firewalld 配置文件

Firewalld 配置配置文件存放在:

  • /usr/lib/firewalld/目录,Firewalld软件包自带配置位置。
  • /etc/firewalld/目录,目录结构与/usr/lib/firewalld/一致,管理员自定义配置保存在该位置。

**提示:**我们不建议大家通过修改/etc/firewalld/目录配置防火墙。

设置默认zone

当防火墙执行命令的时候,如果不加–zone选项,则代表规则是配置在默认zone

查看默认zone

[root@server ~ 21:03:07]# firewall-cmd --get-default-zone
public

设置默认zone

[root@server ~ 21:05:52]# firewall-cmd --set-default-zone=home
success
[root@server ~ 21:06:08]# firewall-cmd --get-default-zone
home

设置回来,仍然保持为public

[root@server ~ 21:06:10]# firewall-cmd --set-default-zone=public 
success
[root@server ~ 21:06:23]# firewall-cmd --get-default-zone
public

设置 source

关联 source 到 zone

[root@server ~ 21:06:24]# firewall-cmd --add-source=10.1.8.0/24 --zone=home 
success
[root@server ~ 21:06:55]# firewall-cmd --list-all --zone=home
hometarget: defaulticmp-block-inversion: nointerfaces: sources: services: dhcpv6-client mdns samba-client sshports: protocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules: 

查看 source

[root@server ~ 13:41:47]# firewall-cmd --list-sources --zone=home 
10.1.8.0/24

变更到其他zone

[root@server ~ 21:08:26]# firewall-cmd --change-source=10.1.8.0/24 --zone=internal
success
[root@server ~ 21:09:28]# firewall-cmd --list-sources --zone=internal
10.1.8.0/24

删除 source

[root@server ~ 21:09:32]# firewall-cmd --remove-source=10.1.8.0/24 --zone=internal
success
[root@server ~ 21:10:15]# firewall-cmd --list-sources --zone=internal 

重新设置回来

[root@server ~ 21:10:32]# firewall-cmd --add-source=10.1.8.0/24 --zone=internal 
success
[root@server ~ 21:10:56]# firewall-cmd --list-sources --zone=internal 
10.1.8.0/24

设置 interface

变更到 home

[root@server ~ 21:10:59]# firewall-cmd --change-interface=ens37 --zone=home 
success
[root@server ~ 21:11:24]# firewall-cmd --list-interfaces --zone=home 
ens37

删除zone中interface

[root@server ~ 21:11:54]# firewall-cmd --remove-interface=ens37 --zone=home
success
[root@server ~ 21:16:24]# firewall-cmd --list-interfaces --zone=home 

zone关联interface

[root@server ~ 21:16:40]# firewall-cmd --add-interface=ens37 --zone=home
success
[root@server ~ 21:16:47]# firewall-cmd --list-interfaces --zone=home 
ens37

最后活动的 zone

[root@server ~ 21:16:59]# firewall-cmd --get-active-zones 
worksources: 10.1.8.0/24
internalsources: 10.1.1.0/24
publicinterfaces: ens33 ens37

综合实验1:配置防火墙

实验要求

  1. 10.1.8.0/24 关联到 work
  2. 10.1.1.0/24 关联到 internal
  3. ens33 ens37 关联到 public
  4. 设置 public 为默认 zone
  5. 可以通过 10.1.8.10 地址访问 web 服务,禁止访问 ssh 服务
  6. 可以通过 10.1.1.10 地址访问 ssh 服务,禁止访问 web 服务

配置过程

准备 web 服务

[root@server ~ 21:18:13]# yum install -y nginx
[root@server ~ 21:18:28]# systemctl enable nginx.service --now

配置默认zone

[root@server ~ 21:18:39]# firewall-cmd --set-default-zone=public

配置 source

--permanent设置持久化规则

[root@server ~ 21:19:28]# firewall-cmd --permanent  --add-source=10.1.8.0/24 --zone=work
success
[root@server ~ 21:19:37]# firewall-cmd --permanent  --add-source=10.1.1.0/24 --zone=internal 
success

--reload重新加载规则,也就是使用 --permanent设置的规则,原先未加 --permanent 设置的规则则失效。

[root@server ~ 21:20:22]# firewall-cmd --reload 
success
[root@server ~ 21:20:32]# firewall-cmd --get-active-zones 
worksources: 10.1.8.0/24
internalsources: 10.1.1.0/24
publicinterfaces: ens33 ens37

配置 work zone

[root@server ~ 21:20:52]# firewall-cmd --add-service=http --permanent --zone=work 
[root@server ~ 21:20:59]# firewall-cmd --remove-service=ssh --permanent --zone=work 
[root@server ~ 21:21:05]# firewall-cmd --reload 

配置 internal zone

[root@server ~ 21:21:59]# firewall-cmd --add-service=ssh --permanent --zone=internal 
[root@server ~ 21:22:07]# firewall-cmd --remove-service=http --permanent --zone=internal
[root@server ~ 21:22:17]# firewall-cmd --reload 

设置默认zone 禁止 ssh访问

[root@server ~ 21:22:30]# firewall-cmd --remove-service=ssh --permanent 
[root@server ~ 21:22:37]# firewall-cmd --remove-service=ssh

通过 port 放行 http 服务

[root@server ~ 21:22:37]# grep http /etc/services |head -n 5http://www.iana.org/assignments/port-numbershttp            80/tcp          www www-http    # WorldWideWeb HTTP
http            80/udp          www www-http    # HyperText Transfer Protocol
http            80/sctp                         # HyperText Transfer Protocol
https           443/tcp                         # http protocol over TLS/SSL[root@server ~ 21:23:41]# firewall-cmd --remove-service=http --permanent --zone=work
[root@server ~ 21:24:26]# firewall-cmd --add-port=80/tcp --permanent --zone=work
[root@server ~ 21:24:33]# firewall-cmd --reload

综合实验2:配置防火墙

实验要求

  1. 配置client网络

  2. 配置client网关为server(10.1.1.10),设置防火墙允许client访问公网

  3. 配置客户端访问 10.1.8.10:1022 端口,转发到 10.1.1.11:22

  4. 配置 client 网络:网卡模式为vmnet1,ip地址为10.1.1.11,网关为10.1.1.10

配置过程

  1. 配置client网络
[root@client ~ 21:41:42]# nmcli connection modify ens33 ipv4.addresses 10.1.1.11/24 ipv4.gateway 10.1.1.10
[root@client ~ 21:42:00]# nmcli connection up ens33
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2)
[root@client ~ 21:42:05]# nmcli connection
NAME   UUID                                  TYPE      DEVICE 
ens33  4dd56f90-92f5-486f-9055-ba5a4c2ff049  ethernet  ens33  
[root@client ~ 21:42:09]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128 
ens33            UP             10.1.1.11/24 fe80::20c:29ff:fe55:a3e4/64
  1. 配置防火墙开启masquerade功能,也就是SNAT,允许client访问公网
[root@server ~ 21:27:28]# firewall-cmd --add-masquerade --zone=public
[root@server ~ 21:27:37]# firewall-cmd --add-masquerade --zone=public --permanent
此时client可以ping通1.1.1.1
  1. 配置防火墙开启端口转发功能,也就是DNAT,将10.1.8.10:1022 端口,转发到 10.1.1.11:22
[root@server ~ 21:28:06]# firewall-cmd --add-forward-port=port=1022:proto=tcp:toport=22:toaddr=10.1.1.11
[root@server ~ 21:28:20]# firewall-cmd --add-forward-port=port=1022:proto=tcp:toport=22:toaddr=10.1.1.11 --permanent

ssh服务 扩展知识:
默认情况 客户端连ssh服务的时候,ssh服务器会解析自己的主机名对应的ip地址。

http://www.dtcms.com/a/405785.html

相关文章:

  • 记账本|基于SSM的家庭记账本小程序设计与实现(源码+数据库+文档)
  • DHCP 服务器
  • K8s学习笔记(七) yaml
  • K8S的StorageClass使用节点本地LVM逻辑卷怎么进行PVC扩容
  • 软件开发公司如何通过 UI 设计服务打造差异化竞争力
  • 【源码剖析】5-生产者-RecordAccumulator分析
  • PHP编程基础
  • 单片机 | 基于51单片机的摇摇棒设计全解析
  • 从零开始部署Android环境的Jenkins CI/CD流水线(docker环境,Win系统)
  • HttpSessionBindingListener
  • AndroidEventBus 发布者发布一次订阅者接收到多次问题
  • Unity开发CI/CD工具Jenkins的安装(Windows10)
  • 按键精灵安卓/ios辅助工具,脚本开发新手教程ui界面介绍
  • Machine Learning HW4 report: 语者识别 (Hongyi Lee)
  • Android 系统源码级进程保活全方案:从进程创建到后台防护
  • 在hadoop中Job提交的流程
  • 基于Qt和FFmpeg的安卓监控模拟器/手机摄像头模拟成onvif和28181设备
  • 01MemoryOS环境搭建 python3.10
  • 建设部网站职责划定html精美登录界面源码
  • 网站建设基本步骤顺序网站的整体风格
  • Leetcode 146. LRU 缓存 哈希表 + 双向链表
  • VideollaMA 3论文阅读
  • Android 14 系统 ANR (Application Not Responding) 深度分析与解决指南
  • 《红色脉络:一部PLMN在中国的演进史诗 (1G-6G)》 第11篇 | 核心网演进终局:从EPC到5GC——微服务与“云原生”
  • k8s中的NetworkPolicy
  • 【大语言模型】大模型后训练入门指南
  • 【初学】使用 node 编写 MCP Server
  • 阿里云云原生挑战官方用例SPL
  • 销售管理软件免费版什么叫seo优化
  • Apache POI 在 Linux 无图形界面环境下因字体配置问题导致Excel导出失败的解决方案