免费企业个人云WAF系统搭建安装使用教程

  • A+
所属分类:网络安全教程

简介

X-WAF是一款适用中、小企业的云WAF系统,让中、小企业也可以非常方便地拥有自己的免费云WAF

免费企业个人云WAF系统搭建安装使用教程

主要特性

  • 支持对常见WEB攻击的防御,如sql注入、xss、路径穿越,阻断扫描器的扫描等
  • 对持对CC攻击的防御
  • waf为反向模式,后端保护的服务器可直接用内网IP,不需暴露在公网中
  • 支持IP、URL、Referer、User-Agent、Get、Post、Cookies参数型的防御策略
  • 安装、部署与维护非常简单
  • 支持在线管理waf规则
  • 支持在线管理后端服务器
  • 多台waf的配置可自动同步
  • 跨平台,支持在linux、unix、mac和windows操作系统中部署

架构简介

x-waf由waf自身与Waf管理后台组成:

  • waf:基于openresty + lua开发。
  • waf管理后台:采用golang + xorm + macrom开发的,支持二进制的形式部署。
  • waf和waf-admin必须同时部署在每一台云WAF服务器中。

WAF安装

centos平台

从openresty官方下载最新版本的源码包。

编译安装openresty:

  1. yum -y install pcre pcre-devel
  2. wget https://openresty.org/download/openresty-1.9.15.1.tar.gz
  3. tar -zxvf openresty-1.9.15.1.tar.gz
  4. cd openresty-1.9.15.1
  5. ./configure
  6. gmake && gmake install
  7. /usr/local/openresty/nginx/sbin/nginx  -t
  8. nginx: the configuration file /usr/local/openresty/nginx/conf/nginx.conf syntax is ok
  9. nginx: configuration file /usr/local/openresty/nginx/conf/nginx.conf test is successful
  10. /usr/local/openresty/nginx/sbin/nginx

ubuntu平台安装

编译安装openresty:

  1. apt-get install libreadline-dev libncurses5-dev libpcre3-dev libssl-dev perl make build-essential
  2. sudo ln -s /sbin/ldconfig /usr/bin/ldconfig
  3. wget https://openresty.org/download/openresty-1.9.15.1.tar.gz
  4. tar -zxvf openresty-1.9.15.1.tar.gz
  5. cd openresty-1.9.15.1
  6. make && sudo make install

安装waf管理后台x-waf-admin

二进制安装

直接从github中下载对应操作系统的二进制版本 X-WAF

源码安装

首先需要搭建好go语言开发环境,可以参考Go Web 编程

安装依赖包

  1. go get gopkg.in/macaron.v1
  2. go get gopkg.in/ini.v1
  3. go get github.com/go-sql-driver/mysql
  4. go get github.com/go-xorm/xorm
  5. go get github.com/xsec-lab/x-waf-admin

从github中下载最新的版本,执行go build server.go编译出二进制版本,然后将server、conf、publib和templates目录一起打包上传到服务器中即可运行。

WAF部署与配置

openresty的配置

将x-waf的代码目录放置到openresty的/usr/local/openresty/nginx/conf目录下,然后在openresty的conf的目录下新建vhosts目录

  1. cd /usr/local/openresty/nginx/conf/
  2. git clone https://github.com/xsec-lab/x-waf
  3. mkdir -p /usr/local/openresty/nginx/conf/vhosts

openresty的配置范例:

  1. user  nginx;
  2. worker_processes auto;
  3. worker_cpu_affinity auto;
  4. #error_log  logs/error.log;
  5. #error_log  logs/error.log  debug;
  6. #error_log  logs/error.log  info;
  7. #pid        logs/nginx.pid;
  8. events {
  9.     worker_connections  409600;
  10. }
  11. http {
  12.     include       mime.types;
  13.     lua_package_path "/usr/local/openresty/nginx/conf/x-waf/?.lua;/usr/local/lib/lua/?.lua;;";
  14.     lua_shared_dict limit 100m;
  15.     lua_shared_dict badGuys 100m;
  16.     default_type  application/octet-stream;
  17.     #开启lua代码缓存功能
  18.     lua_code_cache on;
  19.     init_by_lua_file /usr/local/openresty/nginx/conf/x-waf/init.lua;
  20.     access_by_lua_file /usr/local/openresty/nginx/conf/x-waf/access.lua;
  21.     #log_format shield_access    '$remote_addr - $http_host - "$request" - "$http_cookie"';
  22.     #access_log pipe:/usr/local/shield/redisclient shield_access;
  23.     #ssl on;
  24.     #ssl_certificate certs/cert_chain.crt;
  25.     #ssl_certificate_key certs/server.key;
  26.     ssl_session_timeout     5m;
  27.     ssl_protocols SSLv2 SSLv3 TLSv1;
  28.     ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
  29.     ssl_prefer_server_ciphers on;
  30.     sendfile        on;
  31.     #tcp_nopush     on;
  32.     #keepalive_timeout  0;
  33.     keepalive_timeout  65;
  34.     #gzip  on;
  35.     include vhosts/*.conf;
  36.     server {
  37.         listen       80;
  38.         server_name  localhost;
  39.         #charset koi8-r;
  40.         #access_log  logs/host.access.log  main;
  41.         location / {
  42.             root   html;
  43.             index  index.html index.htm;
  44.             }
  45.         }
  46. }

WAF配置

waf的配置文件位于/usr/local/openresty/nginx/conf/waf/config.lua中,详细的配置项如下:

  1. -- WAF config file, enable = "on", disable = "off"
  2. local _M = {
  3.     -- waf status
  4.     config_waf_enable = "on",
  5.     -- log dir
  6.     config_log_dir = "/tmp/waf_logs",
  7.     -- rule setting
  8.     config_rule_dir = "/usr/local/openresty/nginx/conf/x-waf/rules",
  9.     -- enable/disable white url
  10.     config_white_url_check = "on",
  11.     -- enable/disable white ip
  12.     config_white_ip_check = "on",
  13.     -- enable/disable block ip
  14.     config_black_ip_check = "on",
  15.     -- enable/disable url filtering
  16.     config_url_check = "on",
  17.     -- enalbe/disable url args filtering
  18.     config_url_args_check = "on",
  19.     -- enable/disable user agent filtering
  20.     config_user_agent_check = "on",
  21.     -- enable/disable cookie deny filtering
  22.     config_cookie_check = "on",
  23.     -- enable/disable cc filtering
  24.     config_cc_check = "on",
  25.     -- cc rate the xxx of xxx seconds
  26.     config_cc_rate = "10/60",
  27.     -- enable/disable post filtering
  28.     config_post_check = "on",
  29.     -- config waf output redirect/html/jinghuashuiyue
  30.     config_waf_model = "html",
  31.     -- if config_waf_output ,setting url
  32.     config_waf_redirect_url = "http://xsec.io",
  33.     config_expire_time = 600,
  34.     config_output_html=[[
  35.     <html>
  36.     <head>
  37.     <meta charset="UTF-8">
  38.     <title>xsec waf</title>
  39.     <style type="text/css">
  40.         body {
  41.       font-family: "Helvetica Neue", Helvetica, Arial;
  42.       font-size: 14px;
  43.       line-height: 20px;
  44.       font-weight: 400;
  45.       color: #3b3b3b;
  46.       -webkit-font-smoothing: antialiased;
  47.       font-smoothing: antialiased;
  48.       background: #f6f6f6;
  49.     }
  50.     .wrapper {
  51.       margin: 0 auto;
  52.       padding: 40px;
  53.       max-width: 980px;
  54.     }
  55.     .table {
  56.       margin: 0 0 40px 0;
  57.       box-shadow: 0 1px 3px rgba(0000.2);
  58.       display: table;
  59.     }
  60.     @media screen and (max-width: 580px) {
  61.       .table {
  62.         display: block;
  63.       }
  64.     }
  65.     .row {
  66.       display: table-row;
  67.       background: #f6f6f6;
  68.     }
  69.     .row:nth-of-type(odd) {
  70.       background: #e9e9e9;
  71.     }
  72.     .row.header {
  73.       font-weight: 900;
  74.       color: #ffffff;
  75.       background: #ea6153;
  76.     }
  77.     .row.green {
  78.       background: #27ae60;
  79.     }
  80.     .row.yellow {
  81.       background: #FF8C00;
  82.     }
  83.     @media screen and (max-width: 580px) {
  84.       .row {
  85.         padding: 8px 0;
  86.         display: block;
  87.       }
  88.     }
  89.     .cell {
  90.       padding: 6px 12px;
  91.       display: table-cell;
  92.     }
  93.     @media screen and (max-width: 580px) {
  94.       .cell {
  95.         padding: 2px 12px;
  96.         display: block;
  97.       }
  98.     }
  99.     </style>
  100.     </head>
  101.       <body>
  102.         <div class="wrapper">
  103.       <div class="table">
  104.         <div class="row header yellow">
  105.           <div class="cell">
  106.             您的IP为 %s
  107.           </div>
  108.           <div class="cell">
  109.             欢迎在遵守白帽子道德准则的情况下进行安全测试。
  110.           </div>
  111.           <div class="cell">
  112.             联系方式:Service@cesafe.com
  113.           </div>
  114.         </div>
  115.       </div>
  116.     </div>
  117.       </body>
  118.     </html>
  119.     ]],
  120. }
  121. return _M

WAF测试
使用root权限执行以下命令测试配置文件的正确性,如果测试结果返回ok则表示配置是正确的。

  1. $ sudo /usr/local/openresty/nginx/sbin/nginx -t
  2. [sudo] www.cesafe.com password:
  3. nginx: the configuration file /usr/local/openresty/nginx/conf/nginx.conf syntax is ok
  4. nginx: configuration file /usr/local/openresty/nginx/conf/nginx.conf test is successful

如果配置文件正常就可启动waf。

WAF防御效果测试
在服务器中提交curl http://www.cesafe.com/\?id\=1%20union%20select%201,2,3

如果返回的内容中包含欢迎在遵守白帽子道德准则的情况下进行安全测试等字样就表示waf已经在正常运行了。

AWF-Admin配置

waf-admin需要mysql的支持,事先需要准备一个mysql数据库的账户,以下为app.ini的配置范例:

  1. RUN_MODE = dev
  2. ;RUN_MODE = prod
  3. [server]
  4. HTTP_PORT = 5000
  5. API_KEY = xsec.io||secdevops.cn
  6. NGINX_BIN = /usr/local/openresty/nginx/sbin/nginx
  7. NGINX_VHOSTS = /usr/local/openresty/nginx/conf/vhosts/
  8. API_SERVERS = 127.0.0.18.8.8.8
  9. [database]
  10. HOST = mysqlhost:3306
  11. USER = waf-admin
  12. PASSWD = passw0rd
  13. NAME = waf
  14. [waf]
  15. RULE_PATH = /usr/local/openresty/nginx/conf/waf/rules/

RUN_MODE为运行模式,dev为开发模式,prod为线上模式,正式上线前请将运行模式改为prod
HTTP_PORT为waf-admin监听的端口
API_KEY为多台waf-admin同步配置信息时用的加密key,建议设置一个复杂的字符串
NGINX_BIN为nginx的可执行文件的物理路径
NGINX_VHOSTS为nginx的虚拟主机目录的物理路径
API_SERVERS表示有几台waf服务器,多台waf服务器之间的ip用英文逗号分割
database节为mysql的配置信息,分别用数据库地址,用户名、密码以及库名
waf节中的RULE_PATH表示waf的规则存放的位置
配置完成后在当前目录执行./server测试程序是否可以正常启动,第一次启动的时候,如果数据库能正常连接,则会自动初始化默认的waf规则,以及新建一个用户名为admin,密码为:x@xsec.io的用户。

waf-admin需要操作nginx的master进程,所以需要以root权限启动,可以使用supversisor、nohup、systemd等将waf-admin跑在后台。

后端服务器管理

当多台waf做负载均衡时,只需登录其中一台进行管理即可,多台waf的所有的配置信息会自动同步到所有的服务器中。

管理地址为:https://www.cesafe.com:5000/login/

管理后台的默认的账户及口令分别为:admin,x@xsec.io,请管理员部署系统后第一时间修改密码,防止被攻击者使用默认口令登入胡乱改动waf的配置。

新增站点

在Site Manager选项中,可以新增一个后端服务器,需要填写以下内容:

Site Name,表示要加入waf的网站的域名

80表示该网站监听的端口

Backend,表示有多少个后台app server,可以写多个(换行分割),例如:

  1. 1.1.1.1:80
  2. 2.2.2.2:80

SSL Status,表示是否启用ssl,参数为on或off(如果要启用的话,需要在nginx中配置有效的证书)
Debug Level,表示日志级别,可选的参数有debug, info, notice, warn, error, crit, alert, emerg

站点配置同步

新增站点后,需要在后台同步站点信息后方可生效,同步的方式有2种:

全部同步

针对某一新增的站点进行同步

waf规则管理

在waf Rules选项中,可以修改waf的规则,修改完后可以点击“同步全部策略”按钮,将最新的规则同步到所有的服务器并让openresty重新加载。

CE安全网
网络安全宣传推广

发表评论

您必须登录才能发表评论!