深入解析Linux网络、安全与容器技术

1. Netfilter:Linux内核的包处理框架

Netfilter 是Linux内核中用于控制网络数据包的核心机制,负责处理数据包的过滤、修改和转发。其核心功能包括:

  • 包过滤(Packet Filtering):根据规则允许或拒绝数据包通过,构成防火墙的基础功能。

  • 网络地址转换(NAT):修改数据包的源或目标地址,常用于家庭路由器的端口转发或企业级网关。

  • 数据包修改(Packet Mangling):如调整TTL值、QoS标记等。

  • 连接跟踪(Connection Tracking):维护网络连接状态,支持状态防火墙。

技术细节

  • 钩子点(Hook Points):Netfilter在内核协议栈的5个关键位置插入钩子(如NF_IP_PRE_ROUTINGNF_IP_LOCAL_IN),允许自定义处理逻辑。

  • 内核模块支持:通过iptablesnftables等工具与用户空间交互。

示例
当数据包进入系统时,Netfilter依次经过以下处理链:

  1. PREROUTING:处理路由前的NAT(如目标地址转换)。

  2. INPUT:处理发往本机的数据包。

  3. FORWARD:处理需要转发的数据包。

  4. OUTPUT:处理本机产生的出站数据包。

  5. POSTROUTING:处理路由后的NAT(如源地址转换)。

比喻:Netfilter像一个智能快递分拣系统,根据规则决定包裹(数据包)是派送(放行)、退回(拒绝)还是改址(NAT)。


2. nftables vs. iptables:新一代防火墙工具

iptables

  • 传统工具:分为iptables(IPv4)、ip6tables(IPv6)、arptables(ARP)等,语法分散。

  • 性能瓶颈:规则逐条匹配,大规模规则时效率低。

  • 维护复杂:不同协议需不同工具管理。

nftables

  • 统一架构:支持IPv4、IPv6、ARP、桥接等所有协议,语法统一。

  • 高性能:使用哈希表存储规则,支持规则集(set)和映射(map),提升匹配速度。

  • 动态更新:无需重启服务,规则即时生效。

  • 简洁语法:规则结构更清晰,支持注释。

规则对比
允许SSH访问的规则
iptables:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

nftables:

nft add rule inet filter input tcp dport 22 accept

迁移工具
RHEL提供iptables-translate工具,可将iptables规则转换为nftables语法。


3. Firewalld:动态防火墙管理

Firewalld 简化了防火墙配置,核心特性包括:

  • 动态更新:修改规则无需重启服务,避免网络中断。

  • 区域(Zones):将网络接口分配到不同信任级别(如publichomeinternal)。

  • 服务(Services):预定义规则组(如httpssh),支持快速启用常见服务。

  • 富规则(Rich Rules):复杂条件的高级配置(如源IP限制)。

常用命令

# 查看当前区域
firewall-cmd --get-default-zone# 允许HTTP服务并永久生效
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload# 开放自定义端口
firewall-cmd --zone=public --add-port=8080/tcp

配置文件位置

  • /etc/firewalld/zones/:存储区域配置。

  • /usr/lib/firewalld/services/:预定义服务模板。


4. SELinux端口标记:强化网络安全

SELinux通过强制访问控制(MAC)限制资源访问,端口标记的作用是:

  • 绑定端口与服务:仅允许特定服务监听指定端口。

  • 防止端口滥用:即使进程以root运行,也无法监听未授权的端口。

操作示例

# 查看HTTP服务允许的端口
semanage port -l | grep http_port_t
# 输出:http_port_t    tcp   80, 81, 443, 488, 8008, 8009, 8443, 9000# 添加端口8080到HTTP服务
semanage port -a -t http_port_t -p tcp 8080

原理
SELinux为每个端口分配安全上下文(如http_port_t),服务进程需具有匹配的上下文才能绑定端口。例如,Nginx进程若未标记为httpd_t类型,即使以root身份运行,也无法监听80端口。


RHEL容器核心技术

1. 支持容器的核心技术
  • Namespaces:隔离进程、网络、挂载点等资源。

    • PID Namespace:容器内进程独立于主机PID空间。

    • Network Namespace:容器拥有独立网络栈(IP、端口等)。

  • Control Groups (cgroups):限制资源使用(CPU、内存、磁盘IO)。

  • SELinux:防止容器逃逸和横向攻击。

  • 容器工具链

    • Podman:无守护进程的容器运行时。

    • Buildah:构建符合OCI标准的容器镜像。

    • Skopeo:镜像复制、签名验证。

    • CRI-O:Kubernetes容器运行时接口实现。


2. 虚拟化 vs. 容器化
特性虚拟化容器化
隔离级别硬件级(Hypervisor)进程级(Namespaces/cgroups)
启动速度慢(分钟级)快(秒级)
资源开销高(独立OS内核)低(共享内核)
适用场景完整OS环境、异构OS运行微服务、CI/CD、云原生应用

架构对比

  • 虚拟机:物理机 → Hypervisor → 多个Guest OS → 应用。

  • 容器:物理机 → Host OS → 容器引擎 → 应用。


3. Rootless容器 vs. Rootful容器
特性Rootful容器Rootless容器
运行用户root用户普通用户
安全性较高风险(容器逃逸影响主机)更低风险(用户命名空间隔离)
端口绑定可绑定低端口(如80)仅能绑定高端口(>1024)
依赖无需额外配置需用户命名空间支持

Rootless容器优势

  • 无需特权:普通用户可直接运行容器。

  • 隔离增强:用户命名空间映射容器内root到主机普通用户。

启用Rootless

# 检查用户命名空间支持
sysctl kernel.unprivileged_userns_clone
# 输出应为1

4. 容器镜像与注册表
  • 容器镜像

    • 定义:包含应用代码、运行时、库的只读模板。

    • 分层结构:每层基于前一层修改,提升复用性。

    • 构建示例

      dockerfile

      FROM alpine:latest
      RUN apk add nginx
      COPY index.html /var/www/html
      CMD ["nginx", "-g", "daemon off;"]
  • 容器注册表

    • 作用:存储、分发镜像(如Docker Hub、Quay.io)。

    • 操作命令

      podman pull registry.redhat.io/rhel8/nginx-120
      podman push my-image:latest quay.io/myuser/my-image

容器管理实战指南

1. RHEL容器工具
  • Podman
    支持Rootless、兼容Docker CLI,命令示例:

    podman run -d --name web -p 8080:80 nginx
    podman exec web nginx -t
  • Buildah
    构建镜像,支持精细控制:

    buildah from alpine:latest
    buildah run alpine-working-container apk add nginx
    buildah commit alpine-working-container my-nginx
  • Skopeo
    镜像复制与检查:

    skopeo copy docker://nginx quay.io/my-repo/nginx
    skopeo inspect docker://nginx

2. 配置容器注册表

编辑/etc/containers/registries.conf

# 允许HTTP访问的自定义注册表
[[registry]]
location = "registry.example.com"
insecure = true  # 禁用HTTPS验证# 阻止特定注册表
[[registry]]
location = "malicious.registry"
blocked = true

优先级
注册表按配置顺序匹配,首个匹配项生效。


3. [[registry]]配置详解
  • location:注册表地址(如docker.io)。

  • prefix:镜像名前缀匹配(如myproject/)。

  • insecure:布尔值,是否跳过TLS验证。

  • blocked:布尔值,是否阻止访问该注册表。

示例
仅允许访问内部注册表:

[[registry]]
prefix = ""
location = "docker.io"
blocked = true[[registry]]
location = "internal.registry.corp"
insecure = true

4. 容器文件(Containerfile)

核心指令

  • FROM:指定基础镜像。

  • RUN:执行命令(如安装软件)。

  • COPY/ADD:复制文件到镜像。

  • CMD/ENTRYPOINT:定义容器启动命令。

  • EXPOSE:声明监听端口。

构建示例

dockerfile

FROM ubi8/ubi-minimal
RUN microdnf install -y nginx && microdnf clean all
COPY nginx.conf /etc/nginx/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

构建命令

podman build -t my-nginx .

5. 容器状态及转换
  • Created:已创建但未启动(podman create)。

  • Running:正在运行。

  • Paused:暂停(podman pause),进程挂起。

  • Exited:已停止,保留配置数据。

  • Removed:已删除,资源释放。

状态管理命令

podman start my-container
podman stop my-container
podman restart my-container
podman rm my-container

6. 容器环境变量
  • 作用:动态配置应用参数(如数据库地址、调试模式)。

  • 传递方式

    • 命令行-e选项直接指定:

      podman run -e "DB_HOST=db.example.com" my-app
    • 文件:通过--env-file加载多个变量:

      # env.list
      DB_HOST=db.example.com
      DEBUG=true
      podman run --env-file=env.list my-app

查看环境变量

podman exec my-container env

7. 创建Systemd用户服务文件

步骤

  1. 生成服务文件

    podman generate systemd --name my-container > ~/.config/systemd/user/my-container.service
  2. 启用并启动服务

    systemctl --user enable --now my-container.service
  3. 管理服务

    systemctl --user status my-container
    journalctl --user-unit my-container.service

注意事项

  • 用户服务需启用linger以确保用户注销后仍运行:

    loginctl enable-linger $(whoami)

8. podman generate systemd选项解析
  • --new:生成创建新容器的命令(而非依赖现有容器)。
    应用场景:确保每次启动都是新实例,避免容器状态残留。

    podman generate systemd --new --name my-container
  • --files:直接生成服务文件到当前目录,而非输出到终端。

    podman generate systemd --files --name my-container
    # 生成文件 container-my-container.service

9. 配置容器开机自启动

Root用户(系统级服务)

  1. 生成服务文件到系统目录:

    podman generate systemd --new --files --name my-container
    mv container-my-container.service /etc/systemd/system/
  2. 启用服务:

    systemctl enable container-my-container.service
    systemctl start container-my-container.service

Rootless用户(用户级服务)

  1. 确保用户已启用linger

    sudo loginctl enable-linger $USER
  2. 将服务文件放置于~/.config/systemd/user/并启用。


10. Root用户管理容器的注意事项
  • 服务文件权限:确保位于/etc/systemd/system/,权限为644

  • SELinux策略:若容器需访问非标准资源,可能需调整策略:

    setsebool -P container_manage_cgroup true
  • 日志管理:使用journalctl查看日志:

    journalctl -u container-my-container.service
  • 安全建议

    • 优先使用Rootless容器。

    • 限制容器权限(如--cap-drop=all)。

    • 定期更新镜像和运行时工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39366.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python爬虫】使用python脚本拉取汽车网站品牌数据

示例代码说明: 在汽车之家网站拉取当月排行榜中汽车品牌、销量和价格信息,存为csv文档输出,使用正则表达式获取网页内容 import re import pandas as pd import requests# 汽车之家车型列表页URL url https://cars.app.autohome.com.cn/ca…

批量修改 PPT 文档中主题、编辑时长、来源等元数据信息

每一个 PPT 文档被创建之后,都会包含一些元数据信息。这些元数据信息记录着文件的作者、创建时间、修改时间、打印时间等信息。这些信息默认都是自动生成的,如果我们想要对这些元数据进行修改,当然也是可以的。今天就给大家介绍一下如何批量修…

丐版插入selectdb模拟

为了模拟不断插入数据到库里,写个简单的循环脚本 #!/bin/bash #计算时差 function getTiming(){start$1end$2start_secho $start | cut -d . -f 1start_nsecho $start | cut -d . -f 2end_secho $end | cut -d . -f 1end_nsecho $end | cut -d . -f 2time_micro$((…

Off-Road-Freespace-Detection配置pytorch2.0.0

一、概述 在github上进行开源代码搜索,发现了Off-Road-Freespace-Detection(链接如下所示)。这是对越野环境可通行区域的检测,在经过测试之后,发现对自己有益。 GitHub - chaytonmin/Off-Road-Freespace-Detection: O…

常见中间件漏洞之四:Apache

1. CVE-2021-41773 Apache HTTP Server 路径穿越漏洞 漏洞简介 该漏洞是由于Apache HTTP Server 2.4.49版本存在⽬录穿越漏洞,在路径穿越⽬录<Directory/>Require all granted</Directory>允许被访问的的情况下&#xff08;默认开启&#xff09;&#xff0c;攻击…

Pytorch中Tensorboard的学习

1、Tensorboard介绍 TensorBoard 是 TensorFlow 开发的一个可视化工具&#xff0c;用于帮助用户理解和调试机器学习模型的训练过程。尽管它最初是为 TensorFlow 设计的&#xff0c;但通过 PyTorch 的 torch.utils.tensorboard 模块&#xff0c;PyTorch 用户也可以方便地使用 Te…

刷机维修进阶教程-----adb禁用错了系统app导致无法开机 如何保数据无损恢复机型

在刷机维修过程中 。我们会遇到一些由于客户使用adb指令来禁用手机app而导致手机无法开机进入系统的故障机型。通常此类问题机型有好几种解决方法。但如果客户需要保数据来恢复机型。其实操作也是很简单的.还有类似误删除应用导致不开机等等如何保数据。 通过博文了解💝💝�…

哪吒汽车:一边熬夜蹦迪,一边找药投医

两年前&#xff0c;威马CEO沈晖发了个短视频&#xff0c;内容是“活下去&#xff0c;像牲口一样活下去”。 如今最能体会沈晖当时心情的&#xff0c;估计就是方运舟了。 作为哪吒汽车创始人兼董事长&#xff0c;他连续多次被限高&#xff0c;为了让哪吒汽车活下去&#xff0c…

2025 cs144 Lab Checkpoint 1小白超详细版

cs144官网&#xff1a;https://cs144.github.io/ 我的github&#xff1a;https://github.com/Albert-tru/cs144-2025 文章目录 1 手动发送internet数据报协议号5、7&#xff1f;思路&#xff1f; 2 实现一个Reassembler类2.1 几个帮助理解代码的Q&AQ1&#xff1a;insert的参…

使用 OpenCV 拼接进行图像处理对比:以形态学操作为例

图像处理在计算机视觉中起着至关重要的作用&#xff0c;而 OpenCV 作为一个强大的图像处理库&#xff0c;提供了丰富的函数来实现各类图像处理任务。形态学操作&#xff08;Morphological Operations&#xff09;是其中常用的技术&#xff0c;尤其适用于二值图像的处理。常见的…

单链表的查找和插入,删除操作

1.单链表的查找 snode* slistfind(snode* stlheap, stltype x) {while (stlheap){if (stlheap->data x){return stlheap;}stlheap stlheap->next;}return NULL; } 2.单链表的插入操作 2.1在指定位置之前插入节点 void slistinsert(snode** stlheap, snode* pos, stl…

一文速通Python并行计算:00 并行计算的基本概念

一文速通 Python 并行计算&#xff1a;00 并行计算的基本概念 摘要&#xff1a; 该文介绍了 Python 并行计算的核心概念、编程模型及其应用&#xff0c;并介绍了了并行程序的性能分析与优化方法&#xff0c;如并行效率、加速比及 Amdahl 定律。此外&#xff0c;该文介绍了共享…

vue中keep-alive组件的使用

keep-alive是vue的内置组件&#xff0c;它的主要作用是对组件进行缓存&#xff0c;避免组件在切换时被重复创建和销毁&#xff0c;从而提高应用的性能和用户体验。它自身不会渲染一个 DOM 元素&#xff0c;也不会出现在父组件链中。使用时&#xff0c;只需要将需要缓存的组件包…

Python Excel表格数据对比工具

【Excel对比工具】提升工作效率的神奇助手&#xff1a;基于PyQt5和Pandas的文件数据对比应用 相关资源文件已经打包成EXE文件&#xff0c;可双击直接运行程序&#xff0c;且文章末尾已附上相关源码&#xff0c;以供大家学习交流&#xff0c;博主主页还有更多Python相关程序案例…

注册登录表单

html登录页面&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>创建一个登录页面</t…

JAVA:Spring Boot @Conditional 注解详解及实践

1、简述 在 Spring Boot 中&#xff0c;Conditional 注解用于实现 条件化 Bean 装配&#xff0c;即根据特定的条件来决定是否加载某个 Bean。它是 Spring 框架中的一个扩展机制&#xff0c;常用于实现模块化、可配置的组件加载。 本文将详细介绍 Conditional 相关的注解&…

Java高频面试之集合-17

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;JDK 8 对 HashMap 主要做了哪些优化呢&#xff1f;为什么要这么做&#xff1f; JDK 8 对 HashMap 的主要优化及原因 JDK…

力扣DAY24 | 热100 | 回文链表

前言 简单 √ 是反转链表的衍生题&#xff0c;很快写完了。不过没考虑到恢复链表结构的问题。 题目 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输…

Unity跨平台构建快速回顾

知识点来源&#xff1a;人间自有韬哥在&#xff0c;豆包 目录 一、发布应用程序1. 修改发布必备设置1.1 打开设置面板1.2 修改公司名、游戏项目名、版本号和默认图标1.3 修改 Package Name 和 Minimum API Level 2. 发布应用程序2.1 配置 Build Settings2.2 选择发布选项2.3 构…

手敲NLP相关神经网络,熟悉神经网络的结构与实现!

一、NNLM 二、word2vec 三、TextCNN 四、TextRNN 五、TextLSTM 六、Bi-LSTM 七、seq2seq 八、seq2seq&#xff08;attention&#xff09;