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"

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

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

相关文章

python入门介绍

目录 内存 外存&#xff08;硬盘等&#xff09;区别 显卡&#xff1a; python的优缺点 内存 外存&#xff08;硬盘等&#xff09;区别 内存的存储空间小&#xff0c;外存的存储空间大内存的访问速度快&#xff0c;外存的访问速度慢内存比外存成本更高内存上的数据容易丢失&…

MongoDB - writeConcern

writeConcern 是 MongoDB 提供的一个功能&#xff0c;用于控制写操作的确认级别&#xff0c;以确保数据的持久性和一致性。在分布式环境中&#xff0c;写入操作可能会面临网络延迟、节点故障等情况&#xff0c;writeConcern 允许您指定在写入数据时所需的确认级别&#xff0c;以…

ZTE E8820V2重启偶现5G wifi丢失问题

使用ZTE E8820V2设备时,发现设备在多次重启过程中会出现5G wifi信号丢失的情况。 1. 现象日志 使用老毛子固件,具体丢失时会出现相关log: 2. 问题原因: GPIO#19 是 PCIE reset 外,GPIO#26 也要 reset。 3. 解决方法: E8820V2/rt-n56u/trunk$ git diff linux-3.4.x…

Aethir推出其首次去中心化AI节点售卖

Aethir&#xff0c;去中心化GPU云基础设施领导者&#xff0c;宣布其备受期待的节点销售。Aethir是一家企业级的以AI和游戏为重点的GPU即服务提供商。Aethir的去中心化云计算基础设施使GPU提供商能够与需要NVIDIA的H100芯片提供强大AI/ML任务支持的企业客户相连接。 此外&#x…

BUU [CISCN2019 华东南赛区]Web4

BUU [CISCN2019 华东南赛区]Web4 题目描述&#xff1a;Click to launch instance. 开题&#xff1a; 点击链接&#xff0c;有点像SSRF 使用local_file://协议读到本地文件&#xff0c;无法使用file://协议读取&#xff0c;有过滤。 local_file://协议&#xff1a; local_file…

JavaWeb 自己给服务器安装SQL Server数据库遇到的坑

之前买的虚拟主机免费送了一个SQL Server数据库&#xff0c;由于服务器提供商今年下架我用的那款虚拟主机产品&#xff0c;所以数据库也被收回了。我买了阿里云云服务器&#xff0c;但是没有数据库&#xff0c;于是自己装了一个SQL Server数据库&#xff0c;总结一下遇到的坑。…

小程序画布(二维地图线)

首先开始是想用小程序兼容openlayers的&#xff0c;但是了解到用不了&#xff0c;那就用画布来解决 实际效果如下 wxml中代码 <canvas id"trackDesignCanvas" //指定 id 的 Canvas 组件class"orbit-canvas-main" type"2d" …

安卓平板主板_安卓平板电脑主板MTK联发科|高通|紫光展锐方案

安卓平板电脑主板选择了MTK联发科方案&#xff0c;并且可以选配高通或者紫光展锐平台方案&#xff0c;为用户提供更强劲的性能和定制化的服务。主板搭载了联发科MT6771处理器&#xff0c;采用12nm制程工艺&#xff0c;拥有八核Cortex-A73Coretex-A53架构&#xff0c;主频为2.0G…

Nest.js权限管理系统开发(七)用户注册

创建user模块 先用nest的命令创建一个 user 模块&#xff0c; nest g res user 实现user实体 然后就生成了 user 模块,在它的实体中创建一个用户表user.entity.ts&#xff0c;包含 id、用户名、密码,头像、邮箱等等一些字段&#xff1a; Entity(sys_user) export class Us…

【底层学习】HashMap源码学习

成员变量 // 默认初始容量 就是16 static final int DEFAULT_INITIAL_CAPACITY 1 << 4; // aka 16// 最大容量 static final int MAXIMUM_CAPACITY 1 << 30;// 默认加载因子0.75 static final float DEFAULT_LOAD_FACTOR 0.75f;// 树化阈值&#xff08;链表转为…

IT廉连看——C语言——结构体

IT廉连看——C语言——结构体 一、结构体的声明 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag {member-list; }variable-list; 例如描述一个学生&#xff1a;typedef struct Stu…

SQL Server添加用户登录

我们可以模拟一下让这个数据库可以给其它人使用 1、在计算机中添加一个新用户TeacherWang 2、在Sql Server中添加该计算机用户的登录权限 exec sp_grantlogin LAPTOP-61GDB2Q7\TeacherWang -- 之后这个计算机用户也可以登录数据库了 3、添加数据库的登录用户和密码&#xff0…

进程与线程之线程

首先exec函数族是进程中的常用函数&#xff0c;可以利用另外的进程空间执行不同的程序&#xff0c;在之前的fork创建子进程中会完全复制代码数据段等&#xff0c;而exec函数族则可以实现子进程实现不同的代码 int execl(const char *path, const char *arg, ... …

Qt之字符串查找

去掉空格 OString类的成员雨数 trimmed&#xff08;&#xff09;会去掉字符申首尾的空格&#xff0c;而成员函数simplified&#xff08;&#xff09;不仅 去掉宇符申首尾的空格&#xff0c;中间连续的空格也用一个空格符来替换。比如&#xff1a; OString str1"Are you O…

C++拿几道题练练手吧

第 1 题 【 问答题 】 • 最短路径问题 平面上有n个点(n<100)&#xff0c;每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。 若有连线&#xff0c;则表示可从一个点到达另一个点&#xff0c;即两点间有通路&#xff0c;通路的距离为两点间的直线距离。现在的任务…

远超 IVF_FLAT、HNSW,ScaNN 索引算法赢在哪?

Faiss 实现的 ScaNN&#xff0c;又名 FastScan&#xff0c;它使用更小的 PQ 编码和相应的指令集&#xff0c;可以更为友好地访问 CPU 寄存器&#xff0c;展示出优秀的索引性能。 Milvus 从 2.3 版本开始&#xff0c;在 Knowhere 中支持了 ScaNN 算法&#xff0c;在各项 benchma…

JavaAPI常用类03

目录 java.lang.Math Math类 代码 运行 Random类 代码 运行 Date类/Calendar类/ SimpleDateFormat类 Date类 代码 运行 Calendar类 代码 运行 SimpleDateFormat类 代码一 运行 常用的转换符 代码二 运行 java.math BigInteger 代码 运行 BigDecimal …

VS项目忽略文件.gitignore模板

Visual Studio项目忽略文件.gitignore模板 ## 忽略Visual Studio临时文件、生成结果和 ## 由流行的Visual Studio加载项生成的文件。 ## ## 从获取最新消息 https://github.com/github/gitignore/blob/main/VisualStudio.gitignore# 用户特定文件 *.rsuser *.suo *.user *.user…

数字孪生的技术开发平台

数字孪生的开发平台可以基于各种软件和硬件工具来实现&#xff0c;这些平台提供了丰富的功能和工具&#xff0c;帮助开发人员构建、部署和管理数字孪生系统&#xff0c;根据具体的需求和技术要求&#xff0c;开发人员可以选择合适的平台进行开发工作。以下列举了一些常见的数字…

一文讲透 map.computeIfAbsent putIfAbsent computeIfPresent区别

map.computeIfAbsent public V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)如果 key 对应的 value 不存在&#xff0c;则使用获取 mappingFunction 计算后的值&#xff0c;并保存为该 key 的 value&#xff0c;否则返回 value。 impor…