From 3cb5792c79904db2840a1c3cbeefe5afb9a59d18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=89=E5=AE=89=E7=A7=91=E6=8A=80?= Date: Tue, 12 Nov 2024 11:50:25 +0800 Subject: [PATCH] update --- README.md | 2 +- docker/docker-compose.yml | 4 ++-- docker/uuwaf.sh | 13 +++++++------ docs/guide/README.md | 2 +- docs/guide/install.md | 13 ++++++++----- docs/guide/problems.md | 6 ++++++ docs/waf.tgz | Bin 10020 -> 10033 bytes 7 files changed, 25 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 2e0f31e..723d34e 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ curl https://waf.uusec.com/waf-install -o waf-install && sudo bash ./waf-install - 软件依赖:Docker 20.10.14 版本以上,Docker Compose 2.0.0 版本以上,低版本会导致sql数据无法导入以致南墙后台无法登录。 -若遇到官方Docker Engine无法安装,请参考[阿里云](https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance)手动安装国内版,安装成功后参考 [https://docker.1panel.dev/](https://docker.1panel.dev/) 配置镜像加速。 +若遇到无法自动安装Docker Engine,请参考[阿里云](https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance)手动安装,安装成功后参考 [https://docker.1panel.dev/](https://docker.1panel.dev/) 配置镜像加速。 ```bash curl https://waf.uusec.com/waf.tgz -o waf.tgz && tar -zxf waf.tgz && sudo bash ./waf/uuwaf.sh diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 9e99359..efdabe7 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -12,7 +12,7 @@ services: uuwaf: - image: swr.cn-south-1.myhuaweicloud.com/uusec/nanqiang:latest + image: swr.ap-southeast-1.myhuaweicloud.com/uusec/nanqiang:latest ulimits: nproc: 65535 nofile: @@ -40,7 +40,7 @@ services: condition: service_healthy wafdb: - image: swr.cn-south-1.myhuaweicloud.com/uusec/percona-server:5.7 + image: swr.ap-southeast-1.myhuaweicloud.com/uusec/percona-server:5.7 container_name: wafdb restart: always networks: diff --git a/docker/uuwaf.sh b/docker/uuwaf.sh index 73b9a54..7383199 100644 --- a/docker/uuwaf.sh +++ b/docker/uuwaf.sh @@ -48,12 +48,13 @@ uninstall_uuwaf(){ } start_uuwaf(){ - if [ $(command -v netstat) ]; then - port_status=`netstat -nlt|grep -E ':(80|443|4443)\s'|wc -l` - if [ $port_status -gt 0 ]; then - echo -e "\t 端口80、443、4443中的一个或多个被占用,请关闭对应服务或修改其端口" - exit 1 - fi + if [ ! $(command -v netstat) ]; then + $( command -v yum || command -v apt-get ) -y install net-tools + fi + port_status=`netstat -nlt|grep -E ':(80|443|4443)\s'|wc -l` + if [ $port_status -gt 0 ]; then + echo -e "\t 端口80、443、4443中的一个或多个被占用,请关闭对应服务或修改其端口" + exit 1 fi $DC_CMD up -d } diff --git a/docs/guide/README.md b/docs/guide/README.md index 9a80445..27c9640 100644 --- a/docs/guide/README.md +++ b/docs/guide/README.md @@ -34,7 +34,7 @@ | 功能项 |社区版|专业版|商业版| | :----------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :----------: | -| 价格 |免费|3099/年|按需定制| +| 价格 |免费|2999/年|按需定制| | 站点配置 | | | | | 漏洞防护 | | | | | CC防护 | | | | diff --git a/docs/guide/install.md b/docs/guide/install.md index 9c69a50..b73ae42 100644 --- a/docs/guide/install.md +++ b/docs/guide/install.md @@ -9,8 +9,7 @@ ``` - 处理器:64位 1千兆赫(GHz)或更快。 - 内存:不小于2G - - 磁盘空间:不小于16G - - 系统:RHEL 7及以上兼容x86_64系统,如CentOS、Rocky Linux、AlmaLinux、Alibaba Cloud Linux、TencentOS等。 + - 磁盘空间:不小于8G ``` @@ -21,6 +20,8 @@ 主机版安装方式如下: +系统要求:RHEL 7及以上兼容x86_64系统,如CentOS、Rocky Linux、AlmaLinux、Alibaba Cloud Linux、TencentOS等。 + ```bash sudo yum install -y ca-certificates curl https://waf.uusec.com/waf-install -o waf-install && sudo bash ./waf-install && rm -f ./waf-install @@ -39,10 +40,10 @@ Docker版安装方式如下: - 软件依赖:Docker 20.10.14 版本以上,Docker Compose 2.0.0 版本以上,低版本会导致sql数据无法导入以致南墙后台无法登录。 -若遇到官方Docker Engine无法安装,请参考[阿里云](https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance)手动安装国内版,安装成功后参考 [https://docker.1panel.dev/](https://docker.1panel.dev/) 配置镜像加速。 +若遇到无法自动安装Docker Engine,请参考[阿里云](https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance)手动安装,安装成功后参考 [https://docker.1panel.dev/](https://docker.1panel.dev/) 配置镜像加速。 ```bash -curl https://waf.uusec.com/waf.tgz -o waf.tgz && tar -zxf waf.tgz && sudo bash ./waf/uuwaf.sh +curl -fsSL https://waf.uusec.com/waf.tgz -o waf.tgz && tar -zxf waf.tgz && sudo bash ./waf/uuwaf.sh ``` 后续可直接执行 `bash ./waf/uuwaf.sh` 来管理南墙容器,包括启动、停止、更新、卸载等。 @@ -53,4 +54,6 @@ curl https://waf.uusec.com/waf.tgz -o waf.tgz && tar -zxf waf.tgz && sudo bash . 2. 添加站点:进入站点管理菜单,点击添加站点按钮,按提示添加站点域名与网站服务器ip。 3. 添加SSL证书:进入证书管理菜单,点击添加证书按钮,上传第二步中域名的https证书和私钥文件。若不添加SSL证书,则南墙会自动尝试申请Let's Encrypt免费SSL证书,并在证书到期前自动续期。 4. 修改域名DNS指向:到域名服务商管理后台把域名DNS A记录的ip地址改为南墙服务器ip地址。 -5. 测试连通性:访问站点域名查看网站是否能够打开,查看返回的http header头server字段是否为uuWAF。 \ No newline at end of file +5. 测试连通性:访问站点域名查看网站是否能够打开,查看返回的http header头server字段是否为uuWAF。 + +!> 更多使用过程中碰到问题的解决办法请参考[常见问题](https://waf.uusec.com/#/guide/problems)。 \ No newline at end of file diff --git a/docs/guide/problems.md b/docs/guide/problems.md index 6b8afce..95def33 100644 --- a/docs/guide/problems.md +++ b/docs/guide/problems.md @@ -38,3 +38,9 @@ firewall-cmd --permanent --zone=internal --change-interface=wafnet ### 🍍 如何修改南墙管理后台的端口和SSL证书? ?> 南墙管理后台的配置位于/uuwaf/web/conf/conf.yaml中,addr字段值即为ip地址和端口。替换SSL证书可以替换/uuwaf/web/conf/目录中的server.crt和server.key文件,之后执行systemctl restart uuwaf重启服务使配置生效。 + + + +### 🍈 如何修改南墙反向代理默认监听端口? + +?> 南墙默认只监听http 80、https 443端口,用户可自行在/uuwaf/conf/uuwaf.conf中自定义任意监听端口,配置方式请参考nginx 的 [listen](https://nginx.org/en/docs/http/ngx_http_core_module.html#listen) 设置,之后执行systemctl restart uuwaf重启服务使配置生效。Docker版用户可以修改docker-compose.yml中的port端口映射。 diff --git a/docs/waf.tgz b/docs/waf.tgz index 64a37c274db3a5df2e58c45086eb22987f82c18e..71dc303aae4d20eea9ecb7e04fee2b3acf9b0fc9 100644 GIT binary patch literal 10033 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 H0H6Q>s*iC$ literal 10020 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