# dfws **Repository Path**: sorc/dfws ## Basic Information - **Project Name**: dfws - **Description**: 一个可以动态修改防火墙信任的程序 功能说明 服务器只需要开启对公众开放的服务的端口(80,443)以及本服务端口(6760),管理端口(例如22,3306)等防火墙设置不开放。 通过本程序动态信任管理者(自己)所使用的外网ip,实现仅管理者可以连接,以保证服务器及数据安全。本程序服务端与客户端通信需要一对公私钥,私钥放在服务器,公钥放在本地即可通信。 - **Primary Language**: Go - **License**: MIT - **Default Branch**: dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-05-07 - **Last Updated**: 2023-03-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: 动态信任IP, 安全, 防火墙, 运维 ## README # 一个可以动态修改防火墙信任的程序 ## 功能说明 服务器只需要开启对公众开放的服务的端口(80,443)以及本服务端口(6760),不开放管理端口(例如22,3306)等。 通过本程序动态信任管理者(自己)所使用的外网ip,实现仅管理者可以连接,以保证服务器及数据安全。本程序服务端与客户端通信需要一对公私钥,私钥放在服务器,公钥放在本地即可通信。 ### 服务端 - 支持定时通过dns修改信任ip,优先信任TXT解析的内容IP(支持多个解析记录),TXT未配置则尝试信任A记录解析的IP - 支持远程推送信任ip,需要私钥,保障安全通信 - 生成秘钥对 - 默认使用6760端口,服务守护模式(linux),结束后自动启动 - 服务端仅支持linux ### 客户端 - 支持自动识别本地外网ip并推送到服务器授信,需要公钥,保障安全通信 - 支持windows,mac,linux,以及arm架构的系统 ## 编译安装 ### 配置仓库 ```shell go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/ ``` ### 交叉编译 ```shell CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o build/dfw_linux_amd64 main.go CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o build/dfw_linux_arm64 main.go CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o build/dfw_mac_amd64 main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o build/dfw_windows_amd64.exe main.go ``` ## 使用说明 ### 服务端 #### 参数说明 - server #程序模式,默认server(服务端),install安装服务,uninstall卸载服务,genKey生成秘钥对(需要-id参数指定秘钥文件名) - -host #服务器提供服务的ip,默认为localhost,需要提供对外服务请指定ip或设置0.0.0.0 - -port #服务端端口,默认6760 - -timeout #超时设置,单位秒,默认位0不设置 #### 命令实例 ```shell #curl -o dfw https://gitee.com/sorc/dfws/attach_files/1103945/download/dfw_linux_amd64 -O -L # 给执行权限 chmod +x dfw # 生成证书 会生成testid.key 和 testid.pub两个文件,分别是服务器秘钥 和客户端秘钥 ./dfw genKey -id testid # 服务端安装 ./dfw install # 启动服务 systemctl start dfw # 停止服务 systemctl stop dfw # 查看服务状态 systemctl status dfw #debain ubuntu 开启端口防火墙 systemctl enable ufw && systemctl start ufw && ufw enbale # 允许端口访问 ufw allow 6760/tcp # 查看防火墙策略 ufw statusls #centos redhat 开启端口防火墙 systemctl enable firewalld && systemctl start firewalld # 允许端口访问 firewall-cmd --permanent --zone=public --add-port=6760/tcp && firewall-cmd --reload # 查看防火墙 firewall-cmd --list-all # 查看信任策略 firewall-cmd --list-all --zone=trusted # 删除信任ip firewall-cmd --permanent --zone=trusted --remove-source= && firewall-cmd --reload ``` #### 定时读取DNS v2.0版本暂不支持 ```shell # 给执行权限 chmod +x dfw /datadisk/dfw/dfw dns -id mgrip.sction.org -checkPort 1080 crontab -e 0/10 * * * * flock -xn /tmp/dfw_1.lock -c '/datadisk/dfw/dfw dns -id mgrip.sction.org > /dev/null 2>&1 &' 3/10 * * * * flock -xn /tmp/dfw_2.lock -c '/datadisk/dfw/dfw dns -id mgrip.sction.cn > /dev/null 2>&1 &' ``` ### 客户端 #### 参数说明 - client #程序模式,默认client(客户端) - -host #服务器主机ip或域名 - -port #服务端端口,默认6760 - -checkPort #服务检测端口,默认0不检测,检测端口是否可连接,可连接则不执行变更防火墙策略 - -id #秘钥id,客户端就是放在config目录下的公钥名称xxx.pub其中xxx就是id - -timeout #超时设置,单位秒,默认位0不设置 #### 命令实例 ```shell # 给执行权限 chmod +x dfw # 将客户端生成的证书testid.pub复制到服务端程序目录 # 在客户端运行以下命令 将本机外网ip添加到服务器防火墙信任列表 ./dfw client -host localhost -port 6760 -id testid ``` ### 服务端卸载 ```shell ./dfw uninstall ``` ### 常用防火墙配置 ```shell # firewall-cmd --permanent --zone=trusted --add-source=60.28.60.xxx # firewall-cmd --reload firewall-cmd --permanent --zone=public --remove-service=ssh firewall-cmd --permanent --zone=public --remove-port=22 firewall-cmd --permanent --zone=public --add-port=6760/tcp firewall-cmd --permanent --zone=public --add-port=80/tcp firewall-cmd --permanent --zone=public --add-port=443/tcp firewall-cmd --reload ```