前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >搞它!!!Linux--深入介绍firewalld防火墙管理工具

搞它!!!Linux--深入介绍firewalld防火墙管理工具

作者头像
不吃小白菜
发布于 2020-09-03 02:16:06
发布于 2020-09-03 02:16:06
1.7K01
代码可运行
举报
运行总次数:1
代码可运行

前言

firewall-cmd是firewalld防火墙自带的字符管理工具,可以用来设置firewalld防火墙的各种规则

firewalld防火墙规则分为两种状态:

一种是runtime,指正在运行生效的状态,在runtime状态添加新的防火墙规则,这些规则会立即生效,但是重新加载防火墙配置或者再重启系统后这些规则将会失效 另一种是permanent,指永久生效的状态,在permanent状态添加新的防火墙规则,这些规则不会马上生效,需要重新加载防火墙配置或者重启系统后生效 在使用firewall-cmd命令管理防火墙时,需要添加为永久生效的规则需在配置规则时添加–permanent选项(否则所有命令都是作用于runtime,运行时配置)

如果让永久生效规则立即覆盖当前规则生效使用,还需要使用firewall-cmd --reload命令重新加载防火墙配置

一、firewalld防火墙维护和状态查询命令

1、firewalld防火墙维护命令

  • 防火墙进程操作
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# systemctl 选项 firewalld
选项:
    stop:关闭
    start:开启
    restart:重启
    status:状态
  • 防火墙管理操作
  • firewalld-cmd命令 支持全部防火墙特性
  • 对于状态和查询模式,命令只返回状态,没有其他输出
  • –permanent(永久的)参数:携带该参数表示永久配置,否则表示运行时配置
  • [–zone=]选项:不懈怠此选项表示针对默认区域操作,否则针对指定区域操作

2、firewalld防火墙状态查询命令

查询firewalld状态

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# systemctl status firewalld.service 		'//查看防火墙状态'
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-12-09 11:45:18 CST; 2h 46min ago
...省略内容
[root@localhost ~]# firewall-cmd --stat		'//查看防火墙状态'
running

二、firewalld防火墙重载配置命令

1、重新加载firewalld的配置

  • firewall-cmd --reload
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- [root@localhost ~]# firewall-cmd --reload
success
  • firewall-cmd --complete-reload

状态信息将会丢失,多用于处理防火墙出现问题时

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --complete-reload
success
  • systemctl restart firewalld
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# systemctl restart firewalld.service 

2、查询预定义信息命令

  • 获取预定义信息
  • 查看预定义的区域
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- [root@localhost ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work	'//默认网络区域'

查看预定义的服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --get-services 
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc ...省略内容

查看预定义的ICMP类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --get-icmptypes 
address-unreachable bad-header communication-prohibited destination-unreachable echo-...省略内容

三、firewalld区域操作命令

1、firewalld区域操作命令3-1

显示网络连接或接口的默认区域

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --get-default-zone 
public

设置网络连接或接口的默认区域为internal

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --set-default-zone=internal 
success

显示已激活的所有区域

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --get-active-zones 
internal
  interfaces: ens33

激活的条件:区域至少关联一个接口或一个源地址/网段

2、firewalld区域操作命令3-2

  • 显示ens33接口绑定的区域
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- [root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
internal
  • 为ens33接口绑定work区域
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- [root@localhost ~]# firewall-cmd --zone=work --add-interface=ens33
The interface is under control of NetworkManager, setting zone to 'work'.
success
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
work

为work区域更改绑定的网络接口ens33

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --zone=work --change-interface=ens33
The interface is under control of NetworkManager and already bound to 'work'
The interface is under control of NetworkManager, setting zone to 'work'.
success
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
work

为work区域删除绑定的网络接口ens33

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --zone=work --remove-interface=ens33
The interface is under control of NetworkManager, setting zone to default.
success

3、firewalld区域操作命令3-3

查询work区域中是否包含接口ens33

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --zone=work --query-interface=ens33
no

显示区域及其规则 显示internal区域的所有规则

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --zone=internal --list-all 
    ...省略内容

显示默认区域的所有规则

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --list-all 
    ...省略内容

4、区域操作命令总结

四、firewalld服务操作命令

1、操作命令

显示internal区域内允许访问的所有服务

为public区域设置允许访问SMTP服务☆☆☆☆☆☆☆

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --zone=public --add-service=smtp
success

删除internal区域中的SSH服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --zone=internal --remove-service=ssh
success

查询internal区域中是否启用了SSH服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --zone=internal --query-service=ssh
no

2、操作命令总结

五、firewalld端口操作命令

1、操作命令

显示internal区域内允许访问的所有端口号

启用internal区域22端口的TCP协议组合

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --zone=internal --add-port=22/tcp --timeout=5m
success
'//--timeout=5m:表示五分钟后删除该端口,多用于测试'

禁用internal区域22端口的TCP协议组合

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --zone=internal --remove-port=22/tcp
success

查询internal区域中是否启用了22端口和TCP协议组合

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --zone=internal --query-port=22/tcp
no

2、操作命令总结

六、firewalld阻塞ICMP操作命令

1、操作命令

显示work区域内阻塞的所有ICMP类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --zone=work --list-icmp-blocks

为work区域设置阻塞echo-reply类型的ICMP

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --zone=work --add-icmp-block=echo-reply 
success

删除work区域已阻塞的echo-reply类型的ICMP

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --zone=work --remove-icmp-block=echo-reply
success

查询work区域的echo-request类型的ICMP是否阻塞

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --zone=work --query-icmp-block=echo-request 
no

2、操作命令总结

七:实验小案例

1、环境

VMware软件

centos7虚拟机,作为服务器,IP地址为192.168.197.139

需要安装SSH和Apache服务

centos7虚拟机,作为客户机,IP地址为192.168.197.140

2、实验目标

禁止主机ping服务器 只允许192.168.197.140主机访问Apache服务 只允许192.168.197.141主机访问TCP/22端口

3、实验过程

绑定区域

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --get-active-zones 
public
  interfaces: ens33
[root@localhost ~]# firewall-cmd --permanent --zone=work --add-source=192.168.197.140
success
[root@localhost ~]# firewall-cmd --permanent --zone=internal --add-source=192.168.197.141
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --get-active-zone
work
  sources: 192.168.197.140
internal
  sources: 192.168.197.141
public
  interfaces: ens33

配置服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
		'//配置work区域服务'
[root@localhost ~]# firewall-cmd --permanent --zone=work --remove-service=ssh
success
[root@localhost ~]# firewall-cmd --permanent --zone=work --remove-service=dhcpv6-client 
success
[root@localhost ~]# firewall-cmd --permanent --zone=work --add-service=http
success
[root@localhost ~]# firewall-cmd --permanent --zone=work --list-services
http
		'//配置internal区域服务'
[root@localhost ~]# firewall-cmd --zone=internal --list-services
ssh mdns samba-client dhcpv6-client
[root@localhost ~]# firewall-cmd --permanent --zone=internal --remove-service=mdns
success
[root@localhost ~]# firewall-cmd --permanent --zone=internal --remove-service=ssh
success
[root@localhost ~]# firewall-cmd --permanent --zone=internal --remove-service=dhcpv6-client
success
[root@localhost ~]# firewall-cmd --permanent --zone=internal --remove-service=samba-client
success
[root@localhost ~]# firewall-cmd --permanent --zone=internal --list-service
		'//配置public区域服务'
[root@localhost ~]# firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client
[root@localhost ~]# firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
success
[root@localhost ~]# firewall-cmd --permanent --zone=public --remove-service=ssh
success
[root@localhost ~]# firewall-cmd --permanent --zone=public --list-services

配置端口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --permanent --zone=internal --list-ports

[root@localhost ~]# firewall-cmd --permanent --zone=internal --add-port=22/tcp
success
[root@localhost ~]# firewall-cmd --permanent --zone=internal --list-ports
22/tcp
[root@localhost ~]# 

配置ICMP阻塞

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
		'//配置work区域ICMP阻塞'
[root@localhost ~]# firewall-cmd --permanent --zone=work --list-icmp-blocks
    
[root@localhost ~]# firewall-cmd --permanent --zone=work --add-icmp-block=echo-request
success
[root@localhost ~]# firewall-cmd --permanent --zone=work --list-icmp-blocks
echo-request
		'//配置internal区域ICMP阻塞'
[root@localhost ~]# firewall-cmd --permanent --zone=internal --list-icmp-blocks
 
[root@localhost ~]# firewall-cmd --permanent --zone=internal --add-icmp-block=echo-request
success
[root@localhost ~]# firewall-cmd --permanent --zone=internal --list-icmp-blocks
echo-request
		'//配置public区域ICMP阻塞'
[root@localhost ~]# firewall-cmd --permanent --zone=public --list-icmp-blocks

[root@localhost ~]# firewall-cmd --permanent --zone=public --add-icmp-block=echo-request
success
[root@localhost ~]# firewall-cmd --permanent --zone=public --list-icmp-blocks
echo-request

重载配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# firewall-cmd --reload
success

安装Apache服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# netstat -ntap | grep 80
tcp        0     36 192.168.197.139:22      192.168.197.1:49466     ESTABLISHED 1580/sshd: root@pts 
tcp6       0      0 :::80                   :::*                    LISTEN      3896/

4、实验结果

使用客户机ping服务器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
		'//IP地址192.168.197.140的客户机'
[root@localhost ~]# ping 192.168.197.139
PING 192.168.197.139 (192.168.197.139) 56(84) bytes of data.
From 192.168.197.139 icmp_seq=1 Destination Host Prohibited
From 192.168.197.139 icmp_seq=2 Destination Host Prohibited
From 192.168.197.139 icmp_seq=3 Destination Host Prohibited
^C
--- 192.168.197.139 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2001ms


		'//IP地址192.168.197.141的客户机'
[root@localhost ~]# ping 192.168.197.139
PING 192.168.197.139 (192.168.197.139) 56(84) bytes of data.
From 192.168.197.139 icmp_seq=1 Destination Host Prohibited
From 192.168.197.139 icmp_seq=2 Destination Host Prohibited
From 192.168.197.139 icmp_seq=3 Destination Host Prohibited
From 192.168.197.139 icmp_seq=4 Destination Host Prohibited
^C
--- 192.168.197.139 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3001m

访问服务器Apache服务 只有192.168.197.140主机能够访问

访问服务器TCP/22端口服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
		'//IP地址为192.168.197.140的主机'
[root@localhost ~]# ssh 192.168.197.139
ssh: connect to host 192.168.197.139 port 22: No route to host

1
2
3
4
		'//IP地址为192.168.197.141的主机'
[root@localhost ~]# ssh 192.168.197.139
The authenticity of host '192.168.197.139 (192.168.197.139)' can't be established.
ECDSA key fingerprint is SHA256:UhiQeQeIoKaH1ogewTdbaZIldXmr3dxKoD0/RN0jhcU.
ECDSA key fingerprint is MD5:95:ac:b8:fe:9e:01:50:3c:56:c9:e3:aa:28:ee:1c:24.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.197.139' (ECDSA) to the list of known hosts.
root@192.168.197.139's password: 
Permission denied, please try again.
root@192.168.197.139's password: 
Permission denied, please try again.
root@192.168.197.139's password: 
Last failed login: Mon Dec  9 17:40:09 CST 2019 from 192.168.197.141 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Mon Dec  9 16:39:50 2019
[root@localhost ~]# exit
logout
Connection to 192.168.197.139 closed.
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
firewalld防火墙基础配置
Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实时过滤和限制,属于典型的包过滤防火墙。
小手冰凉
2019/09/10
8820
firewalld防火墙基础配置
配置 firewall 防火墙的地址伪装和端口转发实例
网关服务器和网站服务器都采用centos 7操作系统; 网关服务器安装3块千兆网卡,分别连接在Internet、企业内网、网站服务器。
小手冰凉
2019/09/10
1.5K0
配置 firewall 防火墙的地址伪装和端口转发实例
Linux firewalld防火墙学习总结
Firewalld是一种简单的、有状态的、基于区域(zone-based)的防火墙。策略和区域用于组织防火墙规则。网络在逻辑上被划分为多个区域,它们之间的流量可以通过策略进行管理。
授客
2024/11/21
1250
Linux firewalld防火墙学习总结
Linux 系统防火墙配置与管理
Linux 系统下管理防火墙规则的管理程序有两种,分别是iptables防火墙与firewall防火墙,虽然现在新版系统中早已不在使用Iptables,新版本系统中默认安装firewall管理程序,相比于Iptables更具有灵活性。
微软技术分享
2022/12/28
2.8K0
Centos7防火墙firewalld
                                    centos7 防火墙(firewalld)
萧晚歌
2020/08/19
6910
CentOS 防火墙 firewall-cmd 命令
I Teach You 我教你
2023/07/18
6030
Linux(RHEL7及CentOS7)最简单的firewalld防火墙操作流程
经常看到网上的一些文章,遇到防火墙就关闭,禁用,好low!从Redhat7或者CentOS7开始,系统默认防火墙已经变更为firewalld,本着存在即合理的原则,经过几天的摸索,总结了一个简单的防火墙规则操作流程,跟大家分享一下。鉴于鄙人才疏学浅,若有纰漏之处,敬请多多指教! 1、看一下所有配置情况。
耕耘实录
2018/12/20
7250
在 Linux 中配置 firewalld 规则
“firewalld”是firewall daemon。它提供了一个动态管理的防火墙,带有一个非常强大的过滤系统,称为 Netfilter,由 Linux 内核提供。
用户8989785
2021/09/13
2.8K0
Linux防火墙基础配置教程(ssh以及禁止ping防火墙)
作为一名系统管理员或开发者,你是否曾经被 Linux 防火墙配置搞得头大?在生产环境中,我们经常需要配置防火墙来保护服务器安全,但面对 iptables 和 firewalld 这两个工具,很多人都会觉得无从下手。别担心!这篇文章将用通俗易懂的方式,带你了解 CentOS 中的防火墙配置,并通过一个实际案例,手把手教你如何正确设置防火墙规则。
神秘泣男子
2024/12/30
2010
Linux防火墙基础配置教程(ssh以及禁止ping防火墙)
Linux关闭防火墙命令
Centos7默认安装了firewalld,如果没有安装的话,可以使用 ***yum install firewalld firewalld-config***进行安装。
jwangkun
2021/12/23
64.6K0
Linux关闭防火墙命令
Linux下的防火墙
假设自定义的 ssh 端口号为 11011,使用下面的命令来添加新端口的防火墙规则:
Xiongan-桃子
2023/06/10
4890
Linux下的防火墙
Linux防火墙firewalld安全设置
防火墙是具有很好的保护作用。入侵者必须首先穿越防火墙的安全防线,才能接触目标计算机。在公司里数据安全是最重要的,要求安全部门进行全公司进行服务器防火墙安全搭建,在原有的基础上进行安全的防火墙设置,大多数生产环境都建议开启,这样才能有效避免安全隐患等问题;本文文字偏多,但是建议大家还是花个十多分钟好好看一下防火墙的原理,这样便于后期问题排查,最后一小节也会有常用命令操作。
没有故事的陈师傅
2019/11/22
3.9K0
Linux中防火墙实战之Web服务器和ssh远程服务配置指南
在当今数字化时代,网络安全显得尤为重要。Linux作为一种开源操作系统,广泛应用于服务器管理和网络配置中。本篇文章将详细介绍如何配置Linux防火墙和Web服务器,确保内网与外网的安全访问。同时,我们将探讨如何通过SSH远程管理服务器,提升网络管理的灵活性和安全性。
神秘泣男子
2025/02/09
1561
Linux中防火墙实战之Web服务器和ssh远程服务配置指南
第七章·Firewalld防火墙实战
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
8770
第七章·Firewalld防火墙实战
linux基础命令介绍十五:推陈出新
本文介绍ip、ss、journalctl和firewall-cmd,它们旨在代替linux中原有的一些命令或服务。
用户5030870
2019/04/11
1.4K0
iptables与firewalld防火墙
版权声明:欢迎交流,菲宇运维!
菲宇
2019/06/13
2K0
iptables与firewalld防火墙
Linux系统firewalld、zone、service
编辑网卡配置文件(复制系统网卡配置文件进行更名)的方法为其添加zone(配置完成后重启网络服务,并重新加载firewalld服务:“systemctl restart firewalld”)。
阿dai学长
2019/04/03
1.4K0
Centos7-Firewall防火墙基础讲解
(1)firewalld简介: 它是Linux上新用的防火墙软件它跟iptables防火墙是差不多的工具但比其更好使用与设置;
全栈工程师修炼指南
2020/10/13
1.8K0
关于 Linux 中 Firewalld 的一些笔记
傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波
山河已无恙
2023/08/21
3070
关于 Linux 中 Firewalld 的一些笔记
Centos7 firewalld防火墙基本操作
前言 在centos6的版本中,防火墙使用的iptables,iptables是一个静态防火墙,就是说它不能够动态的添加开启端口,必须在配置文件中添加开启端口,然后重启iptables后才能生效。而centos7的防火墙使用的是firewalld,它是动态的,可以通过命令添加开启端口,不用重启服务就可以使改变生效。 防火墙管理 systemctl enable firewalld       #设置开机启动 systemctl start firewalld        #开启服务 system
行 者
2018/03/26
1.1K0
Centos7 firewalld防火墙基本操作
相关推荐
firewalld防火墙基础配置
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 前言
  • 一、firewalld防火墙维护和状态查询命令
    • 1、firewalld防火墙维护命令
    • 2、firewalld防火墙状态查询命令
  • 二、firewalld防火墙重载配置命令
    • 1、重新加载firewalld的配置
    • 2、查询预定义信息命令
  • 三、firewalld区域操作命令
    • 1、firewalld区域操作命令3-1
    • 2、firewalld区域操作命令3-2
    • 3、firewalld区域操作命令3-3
    • 4、区域操作命令总结
  • 四、firewalld服务操作命令
    • 1、操作命令
    • 2、操作命令总结
  • 五、firewalld端口操作命令
    • 1、操作命令
    • 2、操作命令总结
  • 六、firewalld阻塞ICMP操作命令
    • 1、操作命令
    • 2、操作命令总结
  • 七:实验小案例
    • 1、环境
    • 2、实验目标
    • 3、实验过程
    • 4、实验结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文