重生之我要当云原生大师(二十一)防火墙与网络安全

目录

一、什么是防火墙?

二、防火墙的工作原理?

三、Firewalld的区域默认配置?四、SELinux端口标记是什么,如何控制SELinux端口标记?


一、什么是防火墙?

防火墙(Firewall) 是一种网络安全系统,用于监控和控制进出网络的流量,基于预定义的安全规则允许或阻止数据包的传输。它的主要功能包括流量过滤、访问控制、防止攻击、网络地址转换(NAT)以及日志记录和监控。防火墙可以分为网络层防火墙、应用层防火墙、状态检测防火墙和下一代防火墙(NGFW),部署位置包括边界防火墙、内部防火墙和主机防火墙。防火墙通过保护网络免受外部威胁和内部滥用,是网络安全的基础设施。

在红帽企业Linux(RHEL)中,防火墙功能主要通过 firewalld 服务实现。firewalld 是一个动态管理防火墙的工具,支持区域(zone)和服务(service)的概念,能够灵活地管理网络流量。


1. firewalld 的核心概念

  • 区域(Zone)
    • 区域是预定义的规则集合,用于根据网络环境的不同应用不同的防火墙规则。
    • 默认区域包括 public、trusted、internal 等。
  • 服务(Service)
    • 服务是预定义的规则集合,用于允许特定应用程序的流量(如HTTP、SSH)。
  • 运行时配置与永久配置
    • 运行时配置是临时的,重启后会失效。
    • 永久配置会保存到配置文件中,重启后仍然有效。

2. firewalld 的常用命令

  • 启动、停止和启用 firewalld:

sudo systemctl start firewalld       # 启动 firewalld

sudo systemctl stop firewalld        # 停止 firewalld

sudo systemctl enable firewalld      # 设置 firewalld 开机自启

sudo systemctl disable firewalld     # 禁用 firewalld 开机自启

sudo systemctl status firewalld      # 查看 firewalld 状态

  • 查看默认区域:

sudo firewall-cmd --get-default-zone

  • 查看当前区域的规则:

sudo firewall-cmd --list-all

  • 添加允许的服务(如HTTP):

sudo firewall-cmd --add-service=http --permanent

sudo firewall-cmd --reload

  • 添加允许的端口(如8080):

sudo firewall-cmd --add-port=8080/tcp --permanent

sudo firewall-cmd --reload

  • 更改默认区域:

sudo firewall-cmd --set-default-zone=internal

  • 移除规则:

sudo firewall-cmd --remove-service=http --permanent

sudo firewall-cmd --remove-port=8080/tcp --permanent

sudo firewall-cmd --reload

二、防火墙的工作原理?

防火墙的工作原理是通过监控和控制进出网络的流量,基于预定义的安全规则允许或阻止数据包的传输。以下是防火墙工作原理的详细说明:


1. 流量过滤

  • 防火墙检查每个数据包的以下信息:
    • 源IP地址:数据包来自哪里。
    • 目标IP地址:数据包要去哪里。
    • 端口号:数据包使用的网络端口(如80用于HTTP,22用于SSH)。
    • 协议:数据包使用的网络协议(如TCP、UDP、ICMP)。
  • 根据预定义的规则,防火墙决定是否允许数据包通过。

2. 规则匹配

  • 防火墙根据规则集(rule set)对数据包进行匹配。
  • 规则通常包括:
    • 允许规则:允许符合条件的数据包通过。
    • 拒绝规则:阻止符合条件的数据包通过。
  • 规则按顺序匹配,一旦匹配成功,后续规则不再检查。

3. 状态检测

  • 现代防火墙(如状态检测防火墙)不仅检查单个数据包,还跟踪连接的状态。
  • 例如,对于TCP连接,防火墙会检查是否完成了三次握手。
  • 只有合法的、已建立的连接才允许通过。

4. 网络地址转换(NAT)

  • 防火墙可以修改数据包的IP地址和端口号,实现以下功能:
    • 源NAT(SNAT):修改源IP地址,通常用于隐藏内部网络的真实IP。
    • 目标NAT(DNAT):修改目标IP地址,通常用于端口转发或负载均衡。

5. 应用层过滤

  • 高级防火墙(如应用层防火墙或下一代防火墙)可以深入分析应用层协议(如HTTP、FTP)。
  • 例如,防火墙可以检测HTTP请求中的恶意内容,或阻止特定的FTP命令。

6. 日志记录和监控

  • 防火墙记录所有被允许或阻止的流量,便于审计和故障排除。
  • 实时监控功能可以帮助管理员及时发现异常行为。

7. 防御攻击

  • 防火墙可以检测并阻止常见的网络攻击,如:
    • DDoS攻击:通过限制流量速率。
    • 端口扫描:通过阻止连续的端口探测。
    • IP欺骗:通过验证源IP地址的真实性。

8. 工作模式

  • 路由模式:防火墙作为网络中的一个路由器,所有流量必须经过防火墙。
  • 透明模式:防火墙作为网络中的一个透明设备,对用户不可见。
  • 混合模式:结合路由模式和透明模式,适用于复杂的网络环境。

总结

防火墙通过流量过滤、规则匹配、状态检测、NAT、应用层过滤、日志记录和防御攻击等功能,保护网络免受未经授权的访问和恶意攻击。它是网络安全的基础设施,能够有效提升网络的安全性。

三、Firewalld的区域默认配置?

在红帽企业Linux(RHEL)中,firewalld 使用 区域(Zone) 来管理不同网络环境下的防火墙规则。每个区域都有一组预定义的规则,用于控制流量。以下是几个比较重要的默认区域及其配置:


1. 公共区域(public)

  • 用途:用于公共网络(如咖啡馆、机场的Wi-Fi),默认区域。
  • 默认配置
    • 允许的服务:ssh、dhcpv6-client。
    • 拒绝所有其他传入流量。
  • 适用场景:不信任的网络环境,需要严格限制访问。

2. 受信任区域(trusted)

  • 用途:用于完全信任的网络环境。
  • 默认配置
    • 允许所有传入和传出流量。
  • 适用场景:内部网络或完全信任的设备。

3. 内部区域(internal)

  • 用途:用于内部网络,通常用于办公室或家庭网络。
  • 默认配置
    • 允许的服务:ssh、mdns、samba-client、dhcpv6-client。
    • 允许与内部网络相关的服务。
  • 适用场景:部分信任的网络环境。

4. 工作区域(work)

  • 用途:用于工作场所的网络。
  • 默认配置
    • 允许的服务:ssh、dhcpv6-client。
  • 适用场景:需要限制访问但允许特定服务的工作环境。

5. 家庭区域(home)

  • 用途:用于家庭网络。
  • 默认配置
    • 允许的服务:ssh、mdns、samba-client、dhcpv6-client。
  • 适用场景:家庭网络,允许部分共享服务。

6. 隔离区域(DMZ)

  • 用途:用于隔离区域(Demilitarized Zone),通常用于托管对外服务的服务器。
  • 默认配置
    • 允许的服务:ssh。
  • 适用场景:托管对外服务的服务器,需要严格限制访问。

7. 阻塞区域(block)

  • 用途:用于完全阻止传入流量。
  • 默认配置
    • 拒绝所有传入流量,允许传出流量。
  • 适用场景:需要完全阻止外部访问的环境。

8. 丢弃区域(drop)

  • 用途:用于静默丢弃所有传入流量。
  • 默认配置
    • 丢弃所有传入流量,不发送任何响应。
  • 适用场景:需要完全阻止外部访问且不提供任何反馈的环境。

9. 外部区域(external)

  • 用途:用于外部网络,通常用于路由器或防火墙的外部接口。
  • 默认配置
    • 允许的服务:ssh。
    • 启用伪装(masquerading),用于隐藏内部网络。
适用场景:外部网络接口,需要隐藏内部网络
四、SELinux端口标记是什么,如何控制SELinux端口标记?

SELinux(Security-Enhanced Linux) 是一种强制访问控制(MAC)机制,用于增强 Linux 系统的安全性。SELinux 不仅控制文件和进程的访问权限,还可以控制网络端口的访问。SELinux 端口标记是指为网络端口分配的安全上下文(Security Context),用于限制哪些服务可以绑定到特定端口。


1. SELinux 端口标记的作用

  • SELinux 端口标记确保只有经过授权的服务可以使用特定端口。
  • 例如,默认情况下,只有 Apache 服务可以绑定到 HTTP 端口(80/tcp),其他服务即使以 root 身份运行也无法使用该端口。

2. 查看 SELinux 端口标记

  • 使用 semanage port -l 命令查看当前 SELinux 端口标记:

sudo semanage port -l

  • 输出示例:

http_port_t              tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000

ssh_port_t               tcp      22

表示 http_port_t 类型的服务可以使用 TCP 端口 80、443 等。


3. 控制 SELinux 端口标记

添加端口标记

  • 如果希望某个服务使用非默认端口,需要将该端口添加到相应的 SELinux 端口类型中。
  • 例如,将 TCP 端口 8080 添加到 http_port_t 类型:

sudo semanage port -a -t http_port_t -p tcp 8080

删除端口标记

  • 如果不再需要某个端口的标记,可以将其删除。
  • 例如,删除 TCP 端口 8080 的 http_port_t 标记:

sudo semanage port -d -t http_port_t -p tcp 8080

修改端口标记

  • 如果需要修改某个端口的标记类型,可以使用 -m 选项。
  • 例如,将 TCP 端口 8080 的标记类型修改为 my_custom_port_t:

sudo semanage port -m -t my_custom_port_t -p tcp 8080

4. 恢复默认 SELinux 端口标记

  • 如果需要恢复默认的 SELinux 端口标记,可以删除自定义标记并重新加载策略:

sudo semanage port -D

sudo load_policy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值