【Linux网络编程】之配置阿里云安全组

embedded/2025/2/8 12:30:43/

【Linux网络编程】之配置阿里云安全组

  • 配置阿里云安全组
    • 阿里云安全组的概念
    • 配置安全组规则
      • 入方向
        • 基本概念补充
        • ICMP协议安全组配置
        • UDP协议安全组配置
      • 出方向
  • 配置云服务器主机的防火墙
    • 什么是防火墙
    • Linux中防火墙的管理工具
    • 防火墙的作用
    • 常用命令介绍(firewalld)
    • 为什么安全组和防火墙的配置缺一不可

配置阿里云安全组

阿里云安全组的概念

安全组是一种虚拟的防火墙,主要用于控制云服务器实例的入站(Inbound)和出站(Outbound)流量。通过配置安全组规则,你可以设置哪些流量可以访问你的云服务器,哪些流量不能访问你的云服务器。

安全组的作用:

  • 控制网络访问:你可以在安全组中配置规则,允许或拒绝指定的 IP 地址、端口、协议的流量。
  • 细粒度控制:可以根据需求设置多个安全组规则,以精确控制不同服务和客户端的访问权限。
  • 集中管理:安全组适用于一个或多个 ECS 实例,简化了多个服务器的访问控制管理。

阿里云安全组常见配置

  • 入方向规则:控制从外部网络进入服务器的流量。
  • 出方向规则:控制从服务器到外部网络的流量。

配置安全组规则

入方向

现在我们的服务器程序部署到云服务器上了还不够,我们需要开放一些端口以及设置允许哪些IP地址的客户端访问我们的服务器:

  1. 打开阿里云官网:

    image-20250110133201278

  2. 登录后点产品,点云服务器ECS:

    image-20250110133242585

  3. 点击管理控制台:

    image-20250110133334796

  4. 进入控制台后,点击左边栏的实例,然后选择你想设置安全组的云服务器实例,点箭头所指的超链接:

    image-20250110133702572

  5. 点安全组:

    image-20250110133819828

  6. 进入安全组页面后,点击管理规则:

    image-20250110133908600

  7. 进入该页面后,就可以设置入方向和出方向的规则了:

    image-20250110135008090

基本概念补充

协议类型:安全组中协议类型 用来定义允许或拒绝的通信协议阿里云中安全组中常见通信协议:

  • TCP:传输控制协议,最常用于互联网通信,保证数据传输的可靠性。比如 HTTP(80端口)、HTTPS(443端口)、SSH(22端口)等都使用 TCP 协议。
  • UDP:用户数据报协议,属于无连接协议,不保证数据包的到达顺序和可靠性。适用于实时应用,比如视频流、VoIP、DNS 查询等。
  • ICMP:互联网控制消息协议,通常用于网络设备间的错误报告和网络诊断,常见的如 ping 命令。
  • GRE:GRE 协议 是一种通用的隧道协议,用于将不同类型的网络层协议封装在 IP 数据包中,从而可以在现有的 IP 网络上传输。这使得 GRE 成为虚拟专用网络(VPN)和多种协议间数据传输的重要工具。

image-20250110140513580

也可以设置为允许全部协议的流量访问。

端口范围安全组中的端口范围 是用来控制哪些端口可以被外部(公网)或其他网络访问,从而限制或允许对云服务器中应用程序和服务的访问。换句话说,端口范围指定了云服务器对外开放的端口,只有通过安全组规则允许的端口才可以被外部访问。

授权策略:有允许或拒绝规则。我们既可设置允许规则,也可设置拒绝规则,是为了提供更精细的访问控制。

  • 设置明确的 拒绝规则,先拦截掉不需要的、危险的流量。

  • 然后设置 允许规则,为信任的用户或服务提供访问权限。

    image-20250110140242723

优先级:规则是具有优先级的,通常拒绝规则的优先级要高于允许规则的优先级。当一个请求到来,它既符合“所有IP均可访问”的允许规则,也符合“特定IP不能访问”的拒绝规则,如果拒绝规则的优先级高,会去优先匹配拒绝规则,不让它访问。

image-20250110140259370

ICMP协议安全组配置

这个协议是网络层的协议,ICMP 协议主要用于 网络诊断错误报告,它是 TCP/IP 协议族的一部分,常用于:

  • 发送控制消息,如错误报告(例如主机不可达、时间超时等)。
  • 用于网络诊断工具,如 ping 命令和 traceroute,用于测试网络连接是否正常。

此时我们没有删除入方向的ICMP协议的,去ping我们的云服务器的公网IP,是可以ping通的:

image-20250110141433614

这是因为我们配置了ICMP协议入方向的安全组规则:

image-20250110141523574

  • ICMP工作在网络层,而端口号是传输层的概念,所以它不需要配置端口号。

我们配置一个拒绝我们目前所连网络的公网IP的ICMP入方向的安全组(如果你不知道路由器的公网IP,直接源IP设置为所有):

  1. 在安全组配置页面,点击手动添加:

    image-20250110143247305

  2. 填写相关的信息后点确认,这个源IP是你当前所连网络的路由器的公网IP,后面的/跟着的子网掩码的位数,登录路由器管理界面可以查看到,这里我们乱填了一个子网掩码的位数,这个好像不影响,只要格式正确,公网IP对就行():

    image-20250110143340891

  3. 不知道自己所连网络的公网IP,直接源IP(请求方的IP地址,目的IP不用管)填所有的IPv4的地址:

    image-20250110143646261

  4. 此时用我们的windows电脑(已连网络ping我们的公网IP,发现不能ping通:

image-20250110143909884

  1. 删除或者修改刚刚的安全组拒绝规则中的源IP地址,又可以ping通:

    image-20250110144045219

  2. 删除后,再次ping我们的云服务器,可以ping通:

    image-20250110144151364

UDP协议安全组配置

学会了UDP协议入方向的安全组配置,TCP就很相似了:

  1. 点手动添加,设置好相应的参数后保存即可,目的端口我们可以开放所有的端口,但这样不安全,一般只开放一部分端口:

    image-20250110144352817

  2. 设置好安全组配置规则后,仍然不够,还需要设置Linux云服务器主机系统中的防火墙,如果我们服务器程序使用的端口本机防火墙(如果有防火墙服务)没有开放对应的端口,即使云服务器安全组设置了规则,外界仍然是无法访问的:

    image-20250110144820532

  3. 此时只开放了8080端口,我们刚刚安全组规则中是开放了所有UDP的端口,我们运行服务器程序,端口号设置为8080,再让windows中的使用UDP协议的client去访问,看能否访问成功:

    image-20250110145311599

  4. 使用以下指令,添加udp/8080端口:

    sudo firewall-cmd --zone=public --add-port=8000/udp  --permanent#8000端口(udp协议)
    sudo firewall-cmd --zone=public --add-port=8000/tcp  --permanent#8000端口(tcp协议)
    sudo firewall-cmd --reload#重新加载防火墙,使其生效
    sudo firewall-cmd --zone=public --list-ports#查看是否生效
    

    image-20250110150204016

  5. 客户端再次访问服务器程序(可以正常访问了):

    image-20250110150429149

出方向

云服务器的出方向默认允许所有访问,一般不用我们手动配置,如果你有特殊需求也可以配置:

image-20250110150543564

配置云服务器主机的防火墙

什么是防火墙

在Linux中,防火墙是一种网络安全机制,用于控制网络流量的进出。它通过一组规则(称为防火墙规则)来决定哪些网络流量可以进入或离开系统,哪些流量应被拒绝或限制。防火墙的核心目的是防止恶意攻击、网络入侵,以及控制系统的网络通信。

Linux中防火墙的管理工具

iptables:这是传统的防火墙工具,用于定义和管理网络流量的规则。它基于IP数据包的头信息(源IP、目的IP、协议、端口)来进行控制和过滤。

firewalld:这是一个更现代化的防火墙管理工具,通常用于 CentOS 7+RHEL 7+Fedora 等操作系统。它提供了更简化的管理方式,基于区域(zone)和服务(service)来定义规则。

防火墙的作用

流量过滤:通过指定规则允许或拒绝网络流量。规则可能基于IP地址、协议或端口号。

地址转换:对进入或离开网络的数据包进行地址转换(如 NAT,Network Address Translation)。

状态检测:跟踪每个数据包的状态,判断该数据包是否属于已建立的连接,或者是否需要建立新的连接。

防火墙的主要应用之一就是:阻止不必要的端口开放,通过控制流量进出特定端口来防止未授权访问。

常用命令介绍(firewalld)

  1. 安装firewalld

    sudo apt update
    sudo apt install firewalld
    
  2. 启动和启用firewalld服务。

    # 启动 firewalld 服务
    sudo systemctl start firewalld
    # 设置 firewalld 开机自启动
    sudo systemctl enable firewalld
    
  3. 检查firewalld服务的状态:

    sudo systemctl status firewalld
    

    如果安装成功,可以看到类似以下输出:

    image-20250110172316877

  4. 验证 firewalld 是否正在运行:

    sudo firewall-cmd --state
    

    输出应该为:

    image-20250110172406387

  5. 停止防火墙:

    sudo systemctl stop firewalld
    

    停止后,防火墙不再运行:

    image-20250110172522860

  6. 启用防火墙:

    sudo systemctl start firewalld
    

    启用后防火墙的状态又重新变成running

    image-20250110173216405

  7. 禁用防火墙服务开机自启:

    sudo systemctl disable firewalld
    
  8. 开放端口

    • 临时开放端口(重启后失效):

      sudo firewall-cmd --zone=public --add-port=8080/tcp
      
    • 持久化开放端口(重启后也有效):

      sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
      
  9. 关闭端口

    • 临时关闭端口(重启后失效):

      sudo firewall-cmd --zone=public --remove-port=8080/tcp#对外临时开放8080端口,tcp协议
      
    • 持久化关闭端口(重启后仍然有效)

      sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
      
  10. 重新加载防火墙配置(更改防火墙配置后,需要重新加载才能生效):

    sudo firewall-cmd --reload
    
  11. 查看当前区域所有开放的端口:

    sudo firewall-cmd --zone=public --list-ports
    

    image-20250110175219142

配置防火墙并不是必要步骤,如果你不需要防护墙,将其禁用后,操作系统将不会对任何流量在主机级别做防护,所以端口都开放,只要安全组规则配置正确,外界就可以访问。

如果启用了防火墙,则需要开放对应的端口。

为什么安全组和防火墙的配置缺一不可

安全组:作为云平台层的防火墙,主要用于控制 虚拟机与外部网络 的通信。它是云平台的边界防护,帮助你防止外部未经授权的访问。

主机防火墙:操作系统内的防火墙是 主机级别的防护,它可以进一步限制和控制 内网流量特定进程的访问、以及防止被攻破的情况下对内部服务的未经授权访问。即使安全组开放了某个端口,操作系统层的防火墙仍然能限制哪些进程可以访问该端口或允许哪些内部网络访问。

配置防火墙后,可以让我们的服务器更加安全。


http://www.ppmy.cn/embedded/160535.html

相关文章

【深度学习】图像识别模型与训练策略

一、预处理与数据增强模块 transforms transforms通常指torchvision.transforms 1.调整尺寸 transforms.Resize():将输入图像的尺寸调整为指定的大小 2.裁剪 transforms.CenterCrop():从图像中心进行裁剪,剪裁出指定大小的区域 transf…

leetcode_双指针 557. 反转字符串中的单词 III

557. 反转字符串中的单词 III 给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。思路: 1.首先用split()切割字符串中用空格分隔的单词2.用切片法反转每个单词3.用join()把反转后的单词用空格连接 class Solu…

k8s集群外exporter怎么使用Prometheus监控

要在 A 的 Kubernetes 集群中运行 Prometheus 并监控 B 的 Kubernetes 集群,您可以通过以下步骤实现: 1. 设置网络连接 跨集群网络连接: 确保 A 集群中的 Prometheus 可以通过网络访问 B 集群中的 Kubernetes API 和监控目标。通常&#xf…

7.list

本篇博客梳理C的STL中的list容器 一、list的基本结构与使用 1.list的介绍 list的底层是带头循环双向链表 带头:含哨兵位 循环:尾节点的next指针指向哨兵位 双向:每个节点具有两个指针域,一个指针指向前一个结点 2…

2025蓝桥杯JAVA编程题练习Day3

1.黛玉泡茶【算法赛】 问题描述 话说林黛玉闲来无事,打算在潇湘馆摆个茶局,邀上宝钗、探春她们一起品茗赏花。黛玉素来讲究,用的茶杯也各有不同,大的小的,高的矮的,煞是好看。这不,她从柜子里…

TikTok 推出了一款 IDE,用于快速构建 AI 应用

字节跳动(TikTok 的母公司)刚刚推出了一款名为 Trae 的新集成开发环境(IDE)。 Trae 基于 Visual Studio Code(VS Code)构建,继承了这个熟悉的平台,并加入了 AI 工具,帮助开发者更快、更轻松地构建应用——有时甚至无需编写任何代码。 如果你之前使用过 Cursor AI,T…

机器学习数学基础:19.线性相关与线性无关

一、线性相关与线性无关的定义 (一)线性相关 想象我们有一组向量,就好比是一群有着不同“力量”和“方向”的小伙伴。给定的向量组 α ⃗ 1 , α ⃗ 2 , ⋯ , α ⃗ m \vec{\alpha}_1, \vec{\alpha}_2, \cdots, \vec{\alpha}_m α 1​,α 2…

开场剧情表现:SH2

玛丽的来信 /玛丽,你真的在这里吗? /在不安的睡梦中,我见到那座小镇。 寂静岭。 你答应过要再次带我去那, 你却没能做到。 现在,我孤身一人... 在我们的老地方... 等着你... /我收到一封信。 信封上的署名是玛丽。 那是…