function owPost(method, args, callback){ var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); $.post('/plugins/run', {name:'op_waf', func:method, args:JSON.stringify(args)}, function(data) { layer.close(loadT); if (!data.status){ layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']}); return; } if(typeof(callback) == 'function'){ callback(data); } },'json'); } function getRuleByName(rule_name, callback){ owPost('get_rule', {rule_name:rule_name}, function(data){ callback(data); }); } function setRequestCode(ruleName, statusCode){ layer.open({ type: 1, title: "设置响应代码【" + ruleName + "】", area: '300px', shift: 5, closeBtn: 2, shadeClose: true, content: '
\
\ 响应代码\
\ \
\
\
\ \
\
' }); } function setState(ruleName){ var statusCode = $('#statusCode').val(); owPost('set_obj_status', {obj:ruleName,statusCode:statusCode},function(data){ var rdata = $.parseJSON(data.data); if (rdata.status){ layer.msg(rdata.msg,{icon:0,time:2000,shade: [0.3, '#000']}); wafGloabl(); } else { layer.msg('设置失败!',{icon:0,time:2000,shade: [0.3, '#000']}); } }); } function setObjOpen(ruleName){ owPost('set_obj_open', {obj:ruleName},function(data){ var rdata = $.parseJSON(data.data); if (rdata.status){ layer.msg(rdata.msg,{icon:0,time:2000,shade: [0.3, '#000']}); wafGloabl(); } else { layer.msg('设置失败!',{icon:0,time:2000,shade: [0.3, '#000']}); } }); } function setCcRule(cycle, limit, endtime, siteName, increase){ var incstr = '
  • 此处设置仅对当前站点有效。
  • '; if (siteName == 'undefined') { incstr = '
  • 此处设置的是初始值,新添加站点时将继承,对现有站点无效。
  • '; } // get_aicc_config(function(res){ var enhance_mode = ''; // if(res.status){ // enhance_mode = 2; // }else{ if(increase){ enhance_mode = 1; }else{ enhance_mode = 0; } // } create_l = layer.open({ type: 1, title: "设置CC规则", area: '540px', closeBtn: 2, shadeClose: false, content: '
    \
    \ 周期\
    \
    \
    \ 频率\
    \
    \
    \ 封锁时间\
    \
    \
    \ 增强模式\
    \ \
    \
    \
    \ 四层防御\
    \ \
    \
    \ \
    \
    ', success:function(layero,index){ // console.log(siteName == 'undefined'); // //\ // if($('[name="enhance_mode"]').val() == 2 && siteName != 'undefined'){ // $('[name="enhance_mode"]').attr('disabled','disabled'); // } // get_stop_ip(function(rdata){ // $('[name="cc_four_defense"]').val(rdata.status?'1':'0'); // }); // $('[name="cc_four_defense"]').change(function(){ // var _val = $(this).val(); // if(_val == '0'){ // set_stop_ip_stop(function(res){ // layer.msg(res.msg,{icon:res.status?1:2}); // }); // }else{ // set_stop_ip(function(res){ // layer.msg(res.msg,{icon:res.status?1:2}); // }); // } // }); // $('.btn_cc_all').click(function(){ // save_cc_rule(siteName,1,$('[name="enhance_mode"]').val()); // layer.close(index); // }); // $('.btn_cc_present').click(function(){ // save_cc_rule(siteName,0,$('[name="enhance_mode"]').val()); // layer.close(index); // }); } }); // }); } //设置retry规则 function setRetry(retry_cycle, retry, retry_time, siteName) { create_layer = layer.open({ type: 1, title: "设置恶意容忍规则", area: '500px', closeBtn: 2, shadeClose: false, content: '
    \
    \ 周期\
    \
    \
    \ 频率\
    \
    \
    \ 封锁时间\
    \
    \ \
    \ ', success:function(){ $('.btn_retry_all').click(function(){ saveRetry(siteName,1); }); $('.btn_retry_present').click(function(){ saveRetry(siteName,0); }); } }); } //保存retry规则 function saveRetry(siteName,type) { var pdata = { siteName: siteName, retry: $("input[name='retry']").val(), retry_time: $("input[name='retry_time']").val(), retry_cycle: $("input[name='retry_cycle']").val(), is_open_global:type } var act = 'set_retry'; if (siteName != undefined) act = 'set_site_retry'; owPost(act, pdata, function(data){ var rdata = $.parseJSON(data.data); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); layer.close(create_layer); wafGloablRefresh(1000); }); } //URL白名单 function urlWhite(type) { if (type == undefined) { layer.open({ type: 1, title: "管理URL白名单", area: ['500px', '400px'], closeBtn: 2, shadeClose: false, content: '
    标准模式-URL白名单
    增强模式—URL白名单
    \
    \
    \
    \ \ \
    \
    \
    \ \ \ \ \ \ \ \ \
    URL操作
    \
    \
    \ \ \
    \
    \
    \ \
      \
    • 所有规则对白名单中的URL无效,包括IP黑名单和URL黑名单
    • \
    ', success:function(layero,index){ $('.tab_list .tab_block').click(function(){ var index = $(this).index(); $(this).addClass('active').siblings().removeClass('active'); $('.url_block').eq(index).show().siblings().hide(); if(index == 1) {get_golbls_cc();} }); $('.add_increase_white_event').click(function(){ var _val = $('[name="url_increase_white_address"]').val(); if(_val == ''){ layer.msg('URL规则不能为空!'); return false; } add_golbls_cc({text:_val},function(res){ if(res.status){ get_golbls_cc(function(){ if(res.status) get_golbls_cc(function(){ layer.msg(res.msg,{icon:res.status?1:2}); }); }); $('[name="url_increase_white_address"]').val(''); } }); }); $('#url_increase_white_con').on('click','.del_golbls_cc',function(){ var _val = $(this).attr('data-val'); del_golbls_cc({text:_val},function(res){ if(res.status) get_golbls_cc(function(){ layer.msg(res.msg,{icon:res.status?1:2}); }); }); }); } }); tableFixed("urlWhite"); } getRuleByName('url_white', function(data){ var tmp = $.parseJSON(data.data); var rdata = $.parseJSON(tmp.data); console.log(rdata); var tbody = '' for (var i = 0; i < rdata.length; i++) { tbody += '\ '+ rdata[i] + '\ 删除\ ' } $("#url_white_con").html(tbody); }); } //设置规则 function setObjConf(ruleName, type) { if (type == undefined) { create_l = layer.open({ type: 1, title: "编辑规则【" + ruleName + "】", area: ['700px', '530px'], closeBtn: 2, shadeClose: false, content: '
    \
    \ \ \ \
    \
    \
    \ \ \ \ \ \ \ \ \ \ \
    规则说明操作状态
    \
    \
    \
      \
    • 注意:如果您不了解正则表达式,请不要随意修改规则内容
    • \
    • 您可以添加或修改规则内容,但请使用正则表达式
    • \
    • 内置规则允许修改,但不可以直接删除,您可以设置规则状态来定义防火墙是否使用此规则
    • \
    ' }); tableFixed("jc-file-table"); } getRuleByName(ruleName, function(data){ var tmp = $.parseJSON(data.data); var rdata = $.parseJSON(tmp.data); var tbody = '' for (var i = 0; i < rdata.length; i++) { var removeRule = '' if (rdata[i][3] != 0) removeRule = ' | 删除'; tbody += '\ ' + rdata[i][1] + '\ ' + rdata[i][2] + '\ 编辑' + removeRule + '\ \
    \ \ \
    \ \ ' } $("#set_obj_conf_con").html(tbody); }); } //常用扫描器 function scanRule() { getRuleByName('scan_black', function(data){ var tmp = $.parseJSON(data.data); var rdata = $.parseJSON(tmp.data); create_l = layer.open({ type: 1, title: "常用扫描器过滤规则", area: '650px', closeBtn: 2, shadeClose: false, content: '
    \
    \ Header\
    \
    \
    \ Cookie\
    \
    \
    \ Args\
    \
    \
      \
    • 会同时过滤key和value,请谨慎设置
    • \
    • 请使用正则表达式,提交前应先备份原有表达式
    • \
    \
    \ \
    \
    ' }); }); } //保存扫描器规则 function saveScanRule() { pdata = { header: $("textarea[name='scan_header']").val(), cookie: $("textarea[name='scan_cookie']").val(), args: $("textarea[name='scan_args']").val() } owPost('save_scan_rule', pdata,function(data){ var rdata = $.parseJSON(data.data); layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); layer.close(create_l); wafGloablRefresh(1000); }); } //IP白名单 function ipWhite(type) { if (type == undefined) { create_l = layer.open({ type: 1, title: "管理IP白名单", area: ['500px', '500px'], closeBtn: 2, shadeClose: false, content: '
    \
    \ \ \ \
    \
    \
    \ \ \ \ \ \ \ \ \ \
    超始IP结束IP操作
    \
    \
    \
    \ \ \
    \
      \
    • 所有规则对白名单中的IP段无效,包括IP黑名单和URL黑名单,IP白名单具备最高优先权
    • \
    \
    \
    \
    ', success:function(index,layero){ // $('.tab_list .tab_block').click(function(){ // $(this).addClass('active').siblings().removeClass('active'); // console.log($(this).index()); // if($(this).index() === 0){ // $('.ipv4_list').show().next().hide(); // }else{ // $('.ipv4_list').hide().next().show(); // } // }); //
    IPv4白名单
    IPv6白名单
    \ } }); tableFixed("ipWhite"); } getRuleByName('ip_white', function(data){ var tmp = $.parseJSON(data.data); var rdata = $.parseJSON(tmp.data); var tbody = '' for (var i = 0; i < rdata.length; i++) { tbody += '\ '+ rdata[i][0].join('.') + '\ '+ rdata[i][1].join('.') + '\ 删除\ ' } $("#ip_white_con").html(tbody); }); } //IP黑名单 function ipBlack(type) { if (type == undefined) { create_l = layer.open({ type: 1, title: "管理IP黑名单", area: ['500px', '500px'], closeBtn: 2, shadeClose: false, content: '
    IPv4黑名单
    IPv6黑名单
    \
    \
    \ \ \ \
    \
    \
    \ \ \ \ \ \ \ \ \ \
    超始IP结束IP操作
    \
    \
    \ \ \
    \
    \
      \
    • 黑名单中的IP段将被禁止访问,IP白名单中已存在的除外
    • \
    \
    \
    \
    \ \ \
    \
    \
    \ \ \ \
    IPv6地址操作
    \
    \
    \
      \
    • 黑名单中的IP段将被禁止访问,IP白名单中已存在的除外
    • \
    \
    ', success:function(index,layero){ $('.tab_list .tab_block').click(function(){ $(this).addClass('active').siblings().removeClass('active'); if($(this).index() === 0){ $('.ipv4_block').show().next().hide(); // var loadT = layer.msg('正在获取防火墙配置..', { icon: 16, time: 0 }); // get_ipv4_address(function(rdata){ // layer.close(loadT); // var tbody = '' // for (var i = 0; i < rdata.length; i++) { // tbody += '\ // '+ rdata[i][0].join('.') + '\ // '+ rdata[i][1].join('.') + '\ // 删除\ // ' // } // $("#ip_black_con").html(tbody) // }); getRuleByName('ip_black', function(data){ var tmp = $.parseJSON(data.data); var rdata = $.parseJSON(tmp.data); console.log(rdata); var tbody = '' for (var i = 0; i < rdata.length; i++) { tbody += '\ '+ rdata[i][0].join('.') + '\ '+ rdata[i][1].join('.') + '\ 删除\ ' } $("#ip_black_con").html(tbody); }); }else{ $('.ipv4_block').hide().next().show(); // var loadT = layer.msg('正在获取防火墙配置..', { icon: 16, time: 0 }); // get_ipv6_address(function(res){ // layer.close(loadT); // var tbody = '',rdata = res.msg; // for (var i = 0; i < rdata.length; i++) { // tbody += '\ // '+ rdata[i] + '\ // 删除\ // ' // } // $("#ipv6_black_con").html(tbody) // }); } }); $('.btn_add_ipv6').click(function(){ var ipv6 = $('[name="ipv6_address"]').val(); var loadT = layer.msg('正在添加ipv6黑名单数据,请稍后...', { icon: 16, time: 0 }); add_ipv6_req(ipv6,function(res){ layer.close(loadT); layer.msg(res.msg,{icon:res.status?1:2}); if(res.status){ $('[name="ipv6_address"]').val(''); $('.tab_list .tab_block:eq(1)').click(); } }); }); $('.tab_list .tab_block:eq(0)').click(); } }); tableFixed("ipBlack"); } } //URL黑名单 function urlBlack(type) { if (type == undefined) { create_l = layer.open({ type: 1, title: "管理URL黑名单", area: ['500px', '400px'], closeBtn: 2, shadeClose: false, content: '
    \
    \ \ \
    \
    \
    \ \ \ \ \ \ \ \ \
    URL操作
    \
    \
    \ \ \
    \
    \
      \
    • 禁止访问URL黑名单,URL白名单和IP白名单中存在时除外
    • \
    ' }); tableFixed("urlBlack"); } getRuleByName('url_black', function(data){ var tmp = $.parseJSON(data.data); var rdata = $.parseJSON(tmp.data); console.log(rdata); var tbody = '' for (var i = 0; i < rdata.length; i++) { tbody += '\ '+ rdata[i] + '\ 删除\ ' } $("#url_black_con").html(tbody); }); } function wafScreen(){ owPost('waf_srceen', {}, function(data){ var rdata = $.parseJSON(data.data); console.log(rdata); var con = '
    总拦截'+rdata.total+'
    '; con += '
    安全防护0
    '; con += '
    \
    POST渗透'+rdata.rules.post+'
    \
    GET渗透0
    \
    CC攻击'+rdata.rules.cc+'
    \
    恶意User-Agent'+rdata.rules.user_agent+'
    \
    Cookie渗透'+rdata.rules.cookie+'
    \
    恶意扫描0
    \
    恶意HEAD请求0
    \
    URI自定义拦截0
    \
    URI保护0
    \
    恶意文件上传0
    \
    禁止的扩展名0
    \
    禁止PHP脚本0
    \
    '; con += '
      \
    • 在此处关闭防火墙后,所有站点将失去保护
    • \
    • 网站防火墙会使nginx有一定的性能损失(<5% 10C静态并发测试结果)
    • \
    • 网站防火墙仅主要针对网站渗透攻击,暂时不具备系统加固功能
    • \
    '; $(".soft-man-con").html(con); }); } function wafGloablRefresh(time){ setTimeout(function(){ wafGloabl(); }, time); } function wafGloabl(){ owPost('waf_conf', {}, function(data){ var rdata = $.parseJSON(data.data); var con = '
    \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
    名称描述响应状态操作
    CC防御防御CC攻击,具体防御参数请到站点配置中调整'+rdata.cc.status+'
    \ \
    \
    初始规则
    恶意容忍度封锁连续恶意请求,请到站点配置中调整容忍阈值' + rdata.cc.status + '--初始规则
    GET-URI过滤'+ rdata.get.ps + '' + rdata.get.status + '
    \ \ \
    规则 | 响应内容
    GET-参数过滤'+ rdata.get.ps + '' + rdata.get.status + '
    \ \ \
    规则 | 响应内容
    POST过滤'+ rdata.post.ps + '' + rdata.post.status + '
    \ \ \
    规则 | 响应内容
    User-Agent过滤'+ rdata['user-agent'].ps + '' + rdata['user-agent'].status + '
    \ \ \
    规则 | 响应内容
    Cookie过滤'+ rdata.cookie.ps + '' + rdata.cookie.status + '
    \ \ \
    规则 | 响应内容
    常见扫描器'+ rdata.scan.ps + '' + rdata.scan.status + '
    \ \ \
    设置
    IP白名单所有规则对IP白名单无效----设置
    IP黑名单禁止访问的IP' + rdata.cc.status + '--设置
    URL白名单大部分规则对URL白名单无效----设置
    URL黑名单禁止访问的URL地址' + rdata.get.status + '--设置
    其它'+ rdata.other.ps + '----响应内容
    \
    '; con += '
      \
    • 继承: 全局设置将在站点配置中自动继承为默认值
    • \
    • 优先级: IP白名单>IP黑名单>URL白名单>URL黑名单>CC防御>禁止国外IP访问>User-Agent>URI过滤>URL参数>Cookie>POST
    • \
    '; $(".soft-man-con").html(con); }); } //返回css function back_css(v) { if (v > 0) { return 'tipsval' } else { return 'tipsval tipsvalnull' } } function wafSite(){ owPost('get_site_config', {}, function(data){ var tmp = $.parseJSON(data.data); var rdata = $.parseJSON(tmp.data); console.log(rdata); var tbody = ''; var i = 0; $.each(rdata, function (k, v) { console.log(k,v); i += 1; tbody += '\ ' + k + '\ \ ' + v.total[1].value + '\ \ \ ' + v.total[0].value + '\ \ \ ' + v.total[3].value + '\ \ \ ' + v.total[4].value + '\ \ \ \ \ \ ' + v.total[2].value + '\ \ \
    \ \ \
    \ \ 日志 | 设置\ ' }); var con = '
    \
    \
    \
    \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ '+ tbody + '\
    站点GETPOSTUACookieCDNCC防御状态操作
    \
    \
    \
    \
    '; $(".soft-man-con").html(con); tableFixed("siteCon_fix"); }); } function wafHistory(){ var con = ''; con += '
    \ \ \ \ \ \ \ \ \
    开始时间IP站点封锁原因封锁时长状态
    \
    '; $(".soft-man-con").html(con); } function wafLogs(){ var con = '
    \ \ \ \ \ \ \ \
    名称描述响应状态操作
    \
    '; $(".soft-man-con").html(con); }