嗯,在这个代码的基础上然后给我增加防火墙,我的系统为centos,防火墙为iptables,防火墙的功能为1.添加防火墙规则允许从本地访问新端口,2.阻止从外部访问新端口,3.保存防火墙规则;我要修改的端口是由默认的80端口改为8080
时间: 2024-04-12 08:31:16 浏览: 81
针对网站iptables规则,防火墙规则
好的,根据您的需求,我已经修改了代码以添加防火墙规则。以下是更新后的代码:
```go
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"os/exec"
"strings"
)
func main() {
// 配置Apache的监听端口
port := "8080" // 指定的本地端口号
// 修改Apache配置文件
configFile := "/etc/apache2/httpd.conf" // Apache配置文件路径
err := updateConfigFile(configFile, port)
if err != nil {
log.Fatal(err)
}
// 重新加载Apache配置
err = reloadApache()
if err != nil {
log.Fatal(err)
}
fmt.Println("Apache配置已更新并重新加载!")
// 添加防火墙规则
err = addFirewallRule(port)
if err != nil {
log.Fatal(err)
}
fmt.Println("防火墙规则已添加并保存!")
}
// 修改Apache配置文件
func updateConfigFile(configFile, port string) error {
file, err := os.OpenFile(configFile, os.O_RDWR, 0644)
if err != nil {
return err
}
defer file.Close()
content, err := ioutil.ReadAll(file)
if err != nil {
return err
}
newContent := strings.Replace(string(content), "Listen 80", fmt.Sprintf("Listen %s", port), 1)
err = ioutil.WriteFile(configFile, []byte(newContent), 0644)
if err != nil {
return err
}
return nil
}
// 重新加载Apache配置
func reloadApache() error {
cmd := exec.Command("apachectl", "graceful")
err := cmd.Run()
if err != nil {
return err
}
return nil
}
// 添加防火墙规则
func addFirewallRule(port string) error {
// 允许从本地访问新端口
cmdAllow := exec.Command("iptables", "-I", "INPUT", "-p", "tcp", "-s", "127.0.0.1", "--dport", port, "-j", "ACCEPT")
err := cmdAllow.Run()
if err != nil {
return err
}
// 阻止从外部访问新端口
cmdBlock := exec.Command("iptables", "-I", "INPUT", "-p", "tcp", "--dport", port, "-j", "DROP")
err = cmdBlock.Run()
if err != nil {
return err
}
// 保存防火墙规则
cmdSave := exec.Command("service", "iptables", "save")
err = cmdSave.Run()
if err != nil {
return err
}
return nil
}
```
这个更新的代码在修改Apache配置文件和重新加载配置之后,添加了防火墙规则。它使用`iptables`命令来添加允许从本地访问新端口的规则,并阻止从外部访问新端口的规则,最后保存防火墙规则。
请注意,这个代码假设您的操作系统为CentOS,并且使用的是`iptables`防火墙。如果您的环境不同,请根据实际情况进行相应的修改。
希望这对您有帮助!如果您有任何其他问题,请随时提问。
阅读全文