# xwaf_admin **Repository Path**: eeenet/xwaf_admin ## Basic Information - **Project Name**: xwaf_admin - **Description**: xwaf_admin是搭配xwaf来进行使用的管理控制平台,xwaf部署到nginx上,通过xwaf_admin来对各个部署的nginx进行管理控制,实现防火墙规则的管理。 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 5 - **Created**: 2024-04-11 - **Last Updated**: 2025-04-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 简介 > [xwaf_admin](https://gitee.com/eeenet/xwaf_admin)是搭配xwaf来进行使用的管理控制平台,[xwaf](https://gitee.com/eeenet/xwaf)部署到nginx上,通过xwaf_admin来对各个部署的nginx进行管理控制,实现防火墙规则的管理。 ### 一、xwaf_admin相关环境的搭建 > 运行必须搭建的环境:mysql和redis,其中kafka/elasticsearch/logkit是将xwaf产生的日志写入到kafka,并将kafka中的日志写入到elasticsearch,然后在xwaf_admin后台中进行画图和日志查询。如果将xwaf的日志写入到本地文件或者是nginx的error中的话,不需要搭建kafka,elasticsearc,logkit,kibana环境。 #### 1.1.xwaf_admin安装部署 > #### 1.1.1.xwaf_admin的编译: > 执行如下命令: `git clone https://gitee.com/eeenet/xwaf_admin.git` `go get` ` go build main.go` > #### 1.1.2.编译后会生成xwaf_admin文件 > 或者直接在 https://gitee.com/eeenet/xwaf_admin 右侧的发行版这里下载编译好的文件,将xwaf_admin,conf,views,logs,data,init.xwaf拷贝到/data/xwaf_admin下。 > #### 1.1.3.导入mysql文件 > 创建一个数据库dbz_xwaf,然后将db_xwaf.sql文件导入到数据库,并修改conf/app.conf中的mysql连接信息,将ip,端口,用户名和密码修改成正确的信息。 db_host = 127.0.0.1 db_port = 3306 db_user = root db_pass = root#123 db_name = db_xwaf > #### 1.1.4.配置redis >修改redis的正确IP和端口、密码,如果没有密码,可以留空,其中sessionproviderConfig此处也要修改成和redisDb一样的redis信息,中间的100保持不变。 #redis配置信息 redisDb = "192.168.10.xxx:6379" redisPasswd = "redis#123" SessionProviderConfig = "192.168.10.171:6379,100,redis#123" > #### 1.1.5.启动xwaf_admin > 在完成上述步骤以后,就可以启动xwaf_admin了。执行./init.xwaf start启动,启动后通过浏览器打开http://ip:8002/index,进行登录,用户名和密码都是admin #### 1.2.kafka环境搭建 kakfa均采取单机版模式进行搭建 > 1.下载kafka_2.13-3.3.1.tgz并解压到/data/kafka > 2.新建目录:/data/kafka/logs和/data/kafka/zkdata > 3.修改配置文件:config/server.properties listeners=PLAINTEXT://192.168.237.174:9092 log.dirs=/data/kafka/logs auto.create.topics.enable=true > 4.修改配置文件:config/zookeeper.properties dataDir=/data/kafka/zkdata >5.编辑run.sh启动脚步,并执行./run.sh启动,其中需要修改java的安装目录,如果没有就下载java进行安装 ```shell #!/bin/bash export JAVA_HOME=/usr/java/jdk1.8.0_151 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH /data/kafka/bin/zookeeper-server-start.sh -daemon /data/kafka/config/zookeeper.properties sleep 4 /data/kafka/bin/kafka-server-start.sh -daemon /data/kafka/config/server.properties ``` #### 1.3.elasticsearch环境搭建 > 1. 下载elasticsearch-7.15.2解压到/data/elasticsearch-7.15.2 创建目录:/data/elasticsearch-7.15.2/data 和/data/elasticsearch-7.15.2/logs, 此处采用单机模式的es,elasticsearch.yml配置如下: ``` yml cluster.name: xwaf-es node.name: node-1 path.data: /data/elasticsearch-7.15.2/data path.logs: /data/elasticsearch-7.15.2/logs bootstrap.memory_lock: true network.host: 0.0.0.0 http.port: 9201 transport.tcp.port: 9300 cluster.initial_master_nodes: ["node-1"] xpack.security.enabled: false indices.fielddata.cache.size: 70% path.repo: ["/data/backups"] ``` > 2.启动脚本保存为init.elastic ``` shell #!/bin/bash = ES_HOME=/data/elasticsearch-7.15.2 start() { su elastic < 3.启动elasticsearch :./init.elastic start #### 1.4.logkit将日志入库到elasticsearch > 1.下载logkit_centos_v1.5.5.tar.gz并解压到/data/logkit-v1.5.5 > 2.配置读取kafka中的日志并入库到ES,配置参考如下:kafka2es.conf ,将配置放在/data/PRG/logkit-v1.5.5/.logkitconfs 下启动logkit即可。或者通过http://ip:3000/端口访问页面,进行手动填写配置。 注意:需要修改:kafka_zookeeper和elastic_host 改成真实的IP,将如下配置保存为/data/logkit-v1.5.5/.logkitconfs/kafka2es.conf,。 ``` json { "name": "kafka2es", "batch_size": 2097152, "batch_interval": 60, "errors_list_cap": 0, "createtime": "2023-03-08T15:17:35.294231753+08:00", "extra_info": false, "log_audit": false, "send_raw": false, "read_time": false, "internal_key_prefix": "", "max_line_len": 0, "is_block": false, "reader": { "mode": "kafka", "name": "kafka2es", "runner_name": "kafka2es", "kafka_zookeeper": "192.168.xx.xx:2181", "read_from": "oldest", "kafka_zookeeper_timeout": "1", "kafka_maxprocessing_time": "1s", "datasource_tag": "datasource", "kafka_groupid": "xwaflog", "kafka_topic": "xwaf_log" }, "parser": { "keep_raw_data": "false", "type": "json", "runner_name": "kafka2es", "name": "pandora.parser.20230308151553", "disable_record_errdata": "false" }, "senders": [ { "elastic_time_zone": "PRC", "logkit_send_time": "true", "sender_type": "elasticsearch", "runner_name": "kafka2es", "elastic_host": "192.168.xx.xx:9200", "elastic_version": "6.x", "enable_gzip": "false", "ft_discard_failed_data": "false", "ft_long_data_discard": "false", "max_disk_used_bytes": "524288000", "max_size_per_file": "104857600", "ft_strategy": "backup_only", "ft_memory_channel": "false", "elastic_index": "xwaf", "elastic_type": "xwaf", "elastic_index_strategy": "day" } ], "router": { "router_key_name": "", "router_match_type": "", "router_default_sender": 0, "router_routes": { } }, "web_folder": true } ``` > 3.配置启动脚本,保存为init.logkit: ``` shell #!/bin/bash # chkconfig: 2345 93 16 # description:logkit LOGKIT_HOME=/data/logkit-v1.5.5 LOGKIT_SBIN=$LOGKIT_HOME/logkit LOGKIT_CONF=$LOGKIT_HOME/logkit.conf LOGKIT_LOGS=$LOGKIT_HOME LOGKIT_PID=$LOGKIT_HOME/logkit.pid LOGKIT_MAXFD=65535 LOGKIT_NAME="LOGKIT" . /etc/rc.d/init.d/functions if [ ! -f $LOGKIT_SBIN ] then echo "$LOGKIT_NAME startup: $LOGKIT_SBIN not exists! " exit fi start(){ [ -f $LOGKIT_CONF ] || echo "$LOGKIT_CONF not exit" ulimit -HSn $LOGKIT_MAXFD cd $LOGKIT_HOME $LOGKIT_SBIN -f $LOGKIT_CONF >$LOGKIT_LOGS/log.logkit 2>&1 & sleep 2 netstat -nplt|grep "\<3000\>" >/dev/null if [ $? -eq 0 ];then action $"Starting $LOGKIT_NAME: " /bin/true else action $"Starting $LOGKIT_NAME: " /bin/true fi } stop(){ pid=$(ps -ef|grep "$LOGKIT_CONF"|grep -v grep |awk '{print $2}'|head -1) if [ -z $pid ];then echo "$OGKIT_NAME no start" else kill -9 $pid if [ $? -eq 0 ];then action $"Stop $LOGKIT_NAME: " /bin/true else action $"Stop $LOGKIT_NAME: " /bin/true fi fi sleep 3 } restart(){ stop start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac ``` > 3.启动logkit :./init.logkit start #### 1.5.kibana的安装配置 > 1.kibana的启动命令:`nohup ./bin/kibana --allow-root &` > 2.kibana.yml的配置: server.port: 5602 server.host: "0.0.0.0" server.basePath: "/kibana" #如果是作为二级目录就配置/kibana,否则就配置/ elasticsearch.hosts: ["http://192.168.xx.xx:9201"] #配置elasticsearch的IP和端口 ### 二.xwaf环境部署 #### 2.1.nginx+lua环境的搭建 > 第一种:采用tengine+lua的形式安装 > 第二种:采用openresty http://openresty.org/cn/download.html 下载最新版openresty 解压后执行如下命令: ./configure --prefix=/usr/local/openresty make -j2 make install #### 2.2.xwaf安装配置,并配置nginx > 下载xwaf: `git clone https://gitee.com/eeenet/xwaf` 到/usr/local/。 修改/usr/local/xwaf/conf/appname.json中的default,可以根据应用的域名取名一个例如:csdn-blog,该名称需要在xwaf_admin后台中应用的名称一致,这样lua才会从xwaf_admin对应的应用名去下载配置。 在nginx中配置增加如下两行【配置前提是nginx支持lua,如不支持请参考第四步:tengine-2.3.3安装支持lua】,通常放在 default_type application/octet-stream; 下 > include /usr/local/xwaf/nginx_xwaf.conf ; init_worker_by_lua_file /usr/local/xwaf/timer.lua; resolver 192.168.xx.xx; #配置为自己的dns 参考下图: ![nginx配置](https://gitee.com/eeenet/xwaf_admin/raw/master/images/nginx.png) ### 三.启动xwaf_admin并创建第一个应用接入xwaf #### 3.1.登录xwaf创建第一个应用 登录xwaf_admin以后,在左侧的应用管理,添加一个应用,注意:该应用名需要和/usr/local/xwaf/conf/appname.json中的appname保持一致。因为xwaf中的配置信息依赖该应用名,参考下图 ![添加应用](https://gitee.com/eeenet/xwaf_admin/raw/master/images/add_app.png) #### 3.2.开始测试使用 > ip黑名单测试:点击右侧waf防护配置---->将防火墙状态选择开启---->将IP黑名单 开启,并在后边的ip黑名单中添加一个需要拦截的IP,然后在此IP上去访问进行测试是否拦截。 > useragent黑名单测试:点击右侧waf防护配置---->将防火墙状态选择开启---->将UserAgent 开启,并在后边的useragent规则配置中添加一个需要拦截的useragent,然后通过设置useragent来访问进行测试是否拦截。 ### 四.xwaf_admin使用手册 > 待更新