29.Linux防火墙管理

文章目录

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

bash 复制代码
[root@server ~ 21:03:07]# firewall-cmd --get-default-zone
public

设置默认zone

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

设置回来,仍然保持为public

bash 复制代码
[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

bash 复制代码
[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
home
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client mdns samba-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

查看 source

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

变更到其他zone

bash 复制代码
[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

bash 复制代码
[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 

重新设置回来

bash 复制代码
[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

bash 复制代码
[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

bash 复制代码
[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

bash 复制代码
[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

bash 复制代码
[root@server ~ 21:16:59]# firewall-cmd --get-active-zones 
work
  sources: 10.1.8.0/24
internal
  sources: 10.1.1.0/24
public
  interfaces: 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 服务

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

配置默认zone

bash 复制代码
[root@server ~ 21:18:39]# firewall-cmd --set-default-zone=public

配置 source

--permanent设置持久化规则

bash 复制代码
[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 设置的规则则失效。

bash 复制代码
[root@server ~ 21:20:22]# firewall-cmd --reload 
success
[root@server ~ 21:20:32]# firewall-cmd --get-active-zones 
work
  sources: 10.1.8.0/24
internal
  sources: 10.1.1.0/24
public
  interfaces: ens33 ens37

配置 work zone

bash 复制代码
[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

bash 复制代码
[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访问

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

通过 port 放行 http 服务

bash 复制代码
[root@server ~ 21:22:37]# grep http /etc/services |head -n 5

http://www.iana.org/assignments/port-numbers

http            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网络
bash 复制代码
[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访问公网
bash 复制代码
[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
bash 复制代码
[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地址。

相关推荐
长不大的程序员2 小时前
Linux系统-debian系的软件包管理
linux·运维·服务器·debian
jun~2 小时前
SQLMap绕过 Web 应用程序保护靶机(打靶记录)
linux·笔记·学习·安全·web安全
小麦矩阵系统永久免费3 小时前
自动化运营|矩阵系统省心高效
运维·矩阵·自动化
天上的光3 小时前
软件体系结构——负载均衡
运维·负载均衡
每天更新3 小时前
linux驱动开发笔记
linux·驱动开发·笔记
Mr.45673 小时前
Linux安装配置Redis 7.2.3教程
linux·运维·服务器
wheeldown3 小时前
【Linux】Linux文件系统详解:从磁盘到文件的奥秘
linux·运维·服务器
倔强的石头1063 小时前
解决Markdown笔记图片失效问题:Gitee+PicGo图床搭建全攻略
笔记·gitee·picgo·obsidian
挨踢攻城3 小时前
Linux安全 | 防火墙工具 iptables 详解
linux·安全·iptables·rhce·rhca·厦门微思网络·linux防火墙工具