当前位置: 首页 > news >正文

shell和go实现:防火墙放行所有端口,唯独拦截80端口

shell

1.防火墙放行所有端口,唯独拦截80端口

1.1拦截

mkdir -p /data/shellscat > /data/shells/02nginx_close.sh <<-'EOF'
#!/bin/bash# 检查Linux系统版本
linux_version=$(cat /etc/redhat-release)# 根据Linux系统版本选择相应的防火墙开启命令和保存规则命令
if [[ $linux_version == *"7"* || $linux_version == *"8"* ]]; thenfirewall_cmd="systemctl status firewalld"save_rules_cmd="firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" port port="80" protocol="tcp" reject' &&  firewall-cmd --reload"
elif [[ $linux_version == *"6"* || $linux_version == *"5"* ]]; thenfirewall_cmd="service iptables status"save_rules_cmd="service iptables save"
elseecho "Unsupported Linux version."exit 1
fi# 执行防火墙命令并检查状态
firewall_status=$($firewall_cmd)if [[ $firewall_status == *"is stopped"* || $firewall_status == *"not running"* ||  $firewall_status == *"inactive"* ]]; then# 如果防火墙处于关闭状态,则启动防火墙if [[ $linux_version == *"7"* || $linux_version == *"8"* ]]; thensystemctl start firewalldelif [[ $linux_version == *"6"* || $linux_version == *"5"* ]]; thenservice iptables startfi
fi# 开启防火墙放行所有端口,拦截部分端口
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -j ACCEPT# 保存iptables规则
eval $save_rules_cmdEOFchmod +x /data/shells/*sh

eval 是一个 Bash 内置命令,用于执行由字符串表示的命令。在这种情况下,$save_rules_cmd 是一个包含保存规则命令的字符串变量。
使用 eval $save_rules_cmd 的目的是将保存规则的命令作为字符串解析并执行。通过这种方式,可以根据不同的 Linux 系统版本动态地执行正确的保存规则命令,而无需硬编码特定的命令。
简而言之,eval $save_rules_cmd 将字符串变量 $save_rules_cmd 中的命令作为实际的命令执行。

1.2 删除拦截

cat > /data/shells/03nginx_kaiqi.sh <<-'EOF'
#!/bin/bash# 检查Linux系统版本
linux_version=$(cat /etc/redhat-release)# 根据Linux系统版本选择相应的防火墙开启命令和保存规则命令
if [[ $linux_version == *"7"* || $linux_version == *"8"* ]]; thenfirewall_cmd="systemctl status firewalld"save_rules_cmd="firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" port port="80" protocol="tcp" reject' &&  firewall-cmd --reload"
elif [[ $linux_version == *"6"* || $linux_version == *"5"* ]]; thenfirewall_cmd="service iptables status"save_rules_cmd="service iptables save"
elseecho "Unsupported Linux version."exit 1
fi# 执行防火墙命令并检查状态
firewall_status=$($firewall_cmd)if [[ $firewall_status == *"is stopped"* || $firewall_status == *"not running"* ||  $firewall_status == *"inactive"* ]]; then# 如果防火墙处于关闭状态,则启动防火墙if [[ $linux_version == *"7"* || $linux_version == *"8"* ]]; thensystemctl start firewalldelif [[ $linux_version == *"6"* || $linux_version == *"5"* ]]; thenservice iptables startfi
fi# 删除防火墙放行所有端口,拦截部分端口
iptables -D INPUT -p tcp --dport 80 -j DROP
iptables -D INPUT -j ACCEPT# 保存iptables规则
eval $save_rules_cmdEOFchmod +x /data/shells/*sh

GO语言

开始拦截

package mainimport ("bytes""fmt""log""os/exec""strings"
)func main() {// 查看系统版本linuxVersion, err := executeCommand("cat /etc/redhat-release")if err != nil {log.Fatalf("Error executing command: %v", err)}fmt.Println("系统版本:", linuxVersion)// 查看防火墙状态并启动防火墙if strings.Contains(linuxVersion, "release 7") {isFirewallDisabled(linuxVersion)addFirewallRule(linuxVersion)} else if strings.Contains(linuxVersion, "release 6") {isFirewallDisabled(linuxVersion)addFirewallRule(linuxVersion)} else {fmt.Println("未知的系统版本,无法查看防火墙状态")return}}func executeCommand(command string) (string, error) {cmd := exec.Command("bash", "-c", command)var out bytes.Buffercmd.Stdout = &outerr := cmd.Run()if err != nil {return "", err}return out.String(), nil
}func isFirewallDisabled(linuxVersion string) {if strings.Contains(linuxVersion, "release 7") {cmd := exec.Command("sudo", "systemctl", "status", "firewalld")out, err := cmd.Output()if err != nil {fmt.Printf("systemctl status firewalld error: %v\n", err)}output := string(out)if strings.Contains(output, "Active: inactive") {startFirewalld()}} else if strings.Contains(linuxVersion, "release 6") {cmd := exec.Command("sudo", "service", "iptables", "status")out, err := cmd.Output()if err != nil {fmt.Printf("service iptables status error: %v\n", err)}output := string(out)if strings.Contains(output, "not running") {startIptables()}}
}func startFirewalld() {cmd := exec.Command("sudo", "systemctl", "start", "firewalld")err := cmd.Run()if err != nil {fmt.Printf("Command execution failed with error: %v\n", err)}fmt.Println("7防火墙已启动")
}func startIptables() {cmd := exec.Command("sudo", "service", "iptables", "start")err := cmd.Run()if err != nil {fmt.Printf("Command execution failed with error: %v\n", err)}fmt.Println("6防火墙已启动")
}func addFirewallRule(linuxVersion string) {if strings.Contains(linuxVersion, "release 7") {cmd := exec.Command("sudo", "firewall-cmd", "--permanent", "--zone=public", "--add-rich-rule=rule family=\"ipv4\" port port=\"80\" protocol=\"tcp\" reject")err := cmd.Run()if err != nil {fmt.Printf("Command execution failed with error: %v\n", err)}cmd = exec.Command("sudo", "firewall-cmd", "--reload")err = cmd.Run()if err != nil {fmt.Printf("Command execution failed with error: %v\n", err)}} else if strings.Contains(linuxVersion, "release 6") {cmd := exec.Command("sudo", "iptables", "-A", "INPUT", "-p", "tcp", "--dport", "80", "-j", "DROP")err := cmd.Run()if err != nil {fmt.Printf("Command execution failed with error: %v\n", err)}cmd = exec.Command("sudo", "iptables", "-A", "INPUT", "-j", "ACCEPT")err = cmd.Run()if err != nil {fmt.Printf("Command execution failed with error: %v\n", err)}}
}

删除拦截端口,关闭防火墙

package mainimport ("bytes""fmt""log""os/exec""strings"
)func main() {// 查看系统版本linuxVersion, err := executeCommand("cat /etc/redhat-release")if err != nil {log.Fatalf("Error executing command: %v", err)}fmt.Println("系统版本:", linuxVersion)// 查看防火墙状态并启动防火墙if strings.Contains(linuxVersion, "release 7") {isFirewallDisabled(linuxVersion)addFirewallRule(linuxVersion)} else if strings.Contains(linuxVersion, "release 6") {isFirewallDisabled(linuxVersion)addFirewallRule(linuxVersion)} else {fmt.Println("未知的系统版本,无法查看防火墙状态")return}}func executeCommand(command string) (string, error) {cmd := exec.Command("bash", "-c", command)var out bytes.Buffercmd.Stdout = &outerr := cmd.Run()if err != nil {return "", err}return out.String(), nil
}func isFirewallDisabled(linuxVersion string) {if strings.Contains(linuxVersion, "release 7") {cmd := exec.Command("sudo", "systemctl", "status", "firewalld")out, err := cmd.Output()if err != nil {fmt.Printf("systemctl status firewalld error: %v\n", err)}output := string(out)if strings.Contains(output, "Active: inactive") {startFirewalld()}} else if strings.Contains(linuxVersion, "release 6") {cmd := exec.Command("sudo", "service", "iptables", "status")out, err := cmd.Output()if err != nil {fmt.Printf("service iptables status error: %v\n", err)}output := string(out)if strings.Contains(output, "not running") {startIptables()}}
}func startFirewalld() {cmd := exec.Command("sudo", "systemctl", "start", "firewalld")err := cmd.Run()if err != nil {fmt.Printf("Command execution failed with error: %v\n", err)}fmt.Println("7防火墙已启动")
}func startIptables() {cmd := exec.Command("sudo", "service", "iptables", "start")err := cmd.Run()if err != nil {fmt.Printf("Command execution failed with error: %v\n", err)}fmt.Println("6防火墙已启动")
}func addFirewallRule(linuxVersion string) {if strings.Contains(linuxVersion, "release 7") {cmd := exec.Command("sudo", "firewall-cmd", "--permanent", "--zone=public", "--remove-rich-rule=rule family=\"ipv4\" port port=\"80\" protocol=\"tcp\" reject")err := cmd.Run()if err != nil {fmt.Printf("Command execution failed with error: %v\n", err)}cmd = exec.Command("sudo", "firewall-cmd", "--reload")err = cmd.Run()if err != nil {fmt.Printf("Command execution failed with error: %v\n", err)}cmd = exec.Command("sudo", "systemctl", "stop", "firewalld")err = cmd.Run()if err != nil {fmt.Printf("Command execution failed with error: %v\n", err)}} else if strings.Contains(linuxVersion, "release 6") {cmd := exec.Command("sudo", "iptables", "-D", "INPUT", "-p", "tcp", "--dport", "80", "-j", "DROP")err := cmd.Run()if err != nil {fmt.Printf("Command execution failed with error: %v\n", err)}cmd = exec.Command("sudo", "iptables", "-D", "INPUT", "-j", "ACCEPT")err = cmd.Run()if err != nil {fmt.Printf("Command execution failed with error: %v\n", err)}cmd = exec.Command("sudo", "service", "iptables", "stop")err = cmd.Run()if err != nil {fmt.Printf("Command execution failed with error: %v\n", err)}}
}

Windows编译Linux可执行文件

如果我想在Windows下编译一个Linux下可执行文件,那需要怎么做呢?只需要在编译时指定目标操作系统的平台和处理器架构即可。
注意:无论你在Windows电脑上使用VsCode编辑器还是Goland编辑器,都要注意你使用的终端类型,因为不同的终端下命令不一样!!!目前的Windows通常默认使用的是PowerShell终端。
如果你的Windows使用的是cmd,那么按如下方式指定环境变量。

1,go 打包windows exe运行文件如果设置过其他系统环境 就要重新设置设置系统环境$env:GOOS = "windows"$env:GOARCH = "amd64"go build hello.go2.go打包 linux运行文件如果设置过其他系统环境 就要重新设置设置系统环境$env:GOOS = "linux"$env:GOARCH = "amd64"go build hello.go#查看变量 
go env#修改环境变量
go env -w GOOS="windows"

相关文章:

shell和go实现:防火墙放行所有端口,唯独拦截80端口

shell 1.防火墙放行所有端口&#xff0c;唯独拦截80端口 1.1拦截 mkdir -p /data/shellscat > /data/shells/02nginx_close.sh <<-EOF #!/bin/bash# 检查Linux系统版本 linux_version$(cat /etc/redhat-release)# 根据Linux系统版本选择相应的防火墙开启命令和保存…...

QT信号槽实现分析

1.宏定义 qt中引入了MOC来反射&#xff0c;编译阶段变成 MOC–>预处理–>编译–>汇编–>链接 1-1、Q_OBJECT 这个宏定义了一系列代码&#xff0c;包括元对象和处理的函数 #define Q_OBJECT \public: \QT_WARNING_PUSH \Q_OBJECT_NO_OVERRIDE_WARNING \static c…...

【pytorch】tensor.detach()和tensor.data的区别

文章目录 序言相同点不同点测试实例应用 序言 .detach()和.data都可以用来分离tensor数据&#xff0c;下面进行比较pytorch0.4及之后的版本&#xff0c;.data仍保留&#xff0c;但建议使用.detach() 相同点 x.detach()和x.data返回和x相同数据的tensor&#xff0c;这个新的t…...

教师资格证相关

文章目录&#xff1a; 一&#xff1a;考试时间 二&#xff1a;考试科目 三&#xff1a;相关网站 四&#xff1a;相关 一&#xff1a;考试时间 教资 笔试 面试笔试报名笔试考试笔试公布面试报名面试时间面试公布上半年1月14日3月12日4月15日4月…...

卷积神经网络介绍

卷积神经网络(Convolutional Neural Networks&#xff0c;CNN) 网络的组件&#xff1a;卷积层&#xff0c;池化层&#xff0c;激活层和全连接层。 CNN主要由以下层构造而成&#xff1a; 卷积层&#xff1a;Convolutional layer&#xff08;CONV&#xff09;池化层&#xff1a…...

XSS简介

XSS被称为跨站脚本攻击(Cross-site scripting)&#xff0c;由于和CSS(CascadingStyle Sheets)重名&#xff0c;所以改为XSS。 XSS主要速于javascript语言完成恶意的攻击行为&#xff0c;因为javascript可非常灵活的操作html、css和浏览器 XSS就是指通过利用网页开发时留下的漏…...

手写redux和applyMiddleware中间件react示例

目录 一 核心代码 1.reducer 2.store.js 二 关于context API的使用 1. MyContext 2. createContext 3. ContextProvider 4. connect 三 组件验证效果 1. Todo 2. TodoList 3.TodoItem 4.TodoInput 5. App组件引入Todo组件 一 核心代码 1.reducer // 新增列表数…...

MATLAB R2024a 主要更新内容

系列文章目录 前言 一、主要更新 计算机视觉工具箱 —— 为二维和三维视觉任务设计算法、标注数据并生成代码。深度学习工具箱 —— 支持变换器等架构&#xff1b;导入并共同模拟 PyTorch 和 TensorFlow 模型。仪器控制工具箱 —— 使用仪器资源管理器应用程序管理带有 IVI 和…...

4.1.CVAT——目标检测的标注详细步骤

文章目录 1. 进入任务1. 创建任务2. 已创建的task3. 进入标注界面 2. 选择标注类型2.1 选择标注类型2.2 进行标注2.3 遮挡 2.快捷键3.导出标注结果 1. 进入任务 登录后会看到如下图界面&#xff0c;CVAT的标注最小单位是Task&#xff0c;每个Task为一个标注任务。点击Task按钮…...

图论-算法题

797. 所有可能的路径 题目: 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09; graph[i] 是一个从节点 i 可以访问的所有节点的列表&#xff08;即从节点 i …...

onnx 1.16 doc学习笔记七:python API一览

onnx作为一个通用格式&#xff0c;很少有中文教程&#xff0c;因此开一篇文章对onnx 1.16文档进行翻译与进一步解释&#xff0c; onnx 1.16官方文档&#xff1a;https://onnx.ai/onnx/intro/index.html](https://onnx.ai/onnx/intro/index.html)&#xff0c; 如果觉得有收获&am…...

LACP——链路聚合控制协议

LACP——链路聚合控制协议 什么是LACP&#xff1f; LACP&#xff08;Link Aggregation Control Protocol&#xff0c;链路聚合控制协议&#xff09;是一种基于IEEE802.3ad标准的实现链路动态聚合与解聚合的协议&#xff0c;它是链路聚合中常用的一种协议。 链路聚合组中启用了…...

终端启动jupyter notebook更换端口

一、问题描述 如果尝试在端口 8889 上启动 Jupyter Notebook 但最终启动在了 8890 端口&#xff0c;这通常意味着 8889 端口已经被占用。要解决这个问题&#xff0c;可以尝试以下几种方法来关闭占用 8889 端口的进程。 1. 查找并终止占用端口的进程 首先&#xff0c;需要找出…...

IT发布管理,轻松部署软件

我们带来了一项令人振奋的好消息&#xff0c;可有效缓解构建的质量相对劣质和发布的速度相对缓慢。 ManageEngine卓豪推出了ServiceDesk Plus MSP中的IT发布管理&#xff0c;配备了可视化的工作流程&#xff0c;这是PSA-ITSM解决方案的一部分。有了这个新功能&#xff0c;您可以…...

2024国际生物发酵展览会独家解读-力诺天晟科技

参展企业介绍 北京力诺天晟科技有限公司&#xff0c;专业致力于智能仪器仪表制造&#xff0c;工业自动控制系统用传感器、变送器的研发、设计、销售和服务。 公司坐落于首都北京行政副中心-通州区&#xff0c;下设生产子公司位于河北香河经济开发区&#xff0c;厂房面积 300…...

YOLOv9尝鲜测试五分钟极简配置

pip安装python包&#xff1a; pip install yolov9pip在https://github.com/WongKinYiu/yolov9/tree/main中下载好权重文件yolov9-c.pt。 运行下面代码&#xff1a; import yolov9model yolov9.load("yolov9-c.pt", device"cpu") # load pretrained or c…...

消息中间件篇之Kafka-消息不丢失

一、 正常工作流程 生产者发送消息到kafka集群&#xff0c;然后由集群发送到消费者。 但是可能中途会出现消息的丢失。下面是解决方案。 二、 生产者发送消息到Brocker丢失 1. 设置异步发送 //同步发送RecordMetadata recordMetadata kafkaProducer.send(record).get();//异…...

Rust使用calamine读取excel文件,Rust使用rust_xlsxwriter写入excel文件

Rust使用calamine读取已存在的test.xlsx文件全部数据&#xff0c;还读取指定单元格数据&#xff1b;Rust使用rust_xlsxwriter创建新的output.xlsx文件&#xff0c;并写入数据到指定单元格&#xff0c;然后再保存工作簿。 Cargo.toml main.rs /*rust读取excel文件*/ use cala…...

中文文本分类(pytorch 实现)

import torch import torch.nn as nn import torchvision from torchvision import transforms, datasets import os, PIL, pathlib, warningswarnings.filterwarnings("ignore") # 忽略警告信息# win10系统 device torch.device("cuda" if torch.cuda.i…...

【每日前端面经】2023-02-27

题目来源: 牛客 CSS盒模型 CSS中的盒子包括margin|border|padding|content四个部分&#xff0c;对于标准盒子模型&#xff08;content-box&#xff09;的widthcontent&#xff0c;但是对于IE盒子模型&#xff08;border-box&#xff09;的widthcontentborder2padding2 CSS选…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...