3366 lines
102 KiB
JavaScript
3366 lines
102 KiB
JavaScript
var firewall = {
|
|
init: function () {
|
|
this.event();
|
|
|
|
var name = bt.get_cookie('firewall_type');
|
|
$('[data-name="'+ (name || 'safety') +'"]').trigger('click');
|
|
},
|
|
event: function () {
|
|
// 切换主菜单
|
|
$('#cutTab .tabs-item').click(function () {
|
|
var index = $(this).index();
|
|
var name = $(this).data('name');
|
|
var $cont = $('.firewall-tab-view').children('.tab-con').eq(index);
|
|
bt.set_cookie('firewall_type',name)
|
|
|
|
$(this).addClass('active').siblings().removeClass('active');
|
|
$('.state-content').hide().children().hide();
|
|
$cont.addClass('show w-full').removeClass('hide').siblings().removeClass('show w-full').addClass('hide');
|
|
|
|
switch (name) {
|
|
case 'safety':
|
|
safety.init();
|
|
break;
|
|
case 'ssh':
|
|
ssh.init();
|
|
break;
|
|
case 'intrusion':
|
|
intrusion.init();
|
|
break;
|
|
case 'system':
|
|
system.init();
|
|
break;
|
|
case 'logAudit':
|
|
logAudit.init();
|
|
break;
|
|
case 'logs':
|
|
logs.init();
|
|
break;
|
|
}
|
|
});
|
|
|
|
// 切换子菜单
|
|
$('.tab-nav-border').on('click', 'span', function () {
|
|
var index = $(this).index();
|
|
var $cont = $(this).parent().nextAll('.tab-nav-con').children('.tab-block').eq(index);
|
|
|
|
$(this).addClass('on').siblings('.on').removeClass('on');
|
|
$cont.addClass('on').siblings('.on').removeClass('on');
|
|
});
|
|
|
|
safety.event();
|
|
ssh.event();
|
|
intrusion.event();
|
|
system.event();
|
|
logAudit.event();
|
|
logs.event();
|
|
},
|
|
|
|
/**
|
|
* @description 渲染日志分页
|
|
* @param pages
|
|
* @param p
|
|
* @param num
|
|
* @returns {string}
|
|
*/
|
|
renderLogsPages:function(pages,p,num){
|
|
return (num >= pages?'<a class="nextPage" data-page="1">首页</a>':'') + (p !== 1?'<a class="nextPage" data-page="'+ (p-1) +'">上一页</a>':'') + (pages <= num?'<a class="nextPage" data-page="'+ (p+1) +'">下一页</a>':'')+'<span class="Pcount">Page '+ p +' </span>';
|
|
}
|
|
}
|
|
|
|
// 系统防火墙
|
|
var safety = {
|
|
init: function () {
|
|
$('.state-content').show();
|
|
$('.state-content .safety-header').show();
|
|
|
|
this.getFirewallInfo();
|
|
|
|
bt.firewall.get_logs_size(function(rdata){
|
|
$("#logSize").text(rdata);
|
|
});
|
|
|
|
$('#safety .tab-nav-border span').eq(0).trigger('click');
|
|
},
|
|
event: function () {
|
|
var that = this;
|
|
|
|
// 切换系统防火墙菜单事件
|
|
$('#safety').unbind('click').on('click', '.tab-nav-border span', function () {
|
|
var index = $(this).index();
|
|
that.cutFirewallTab(index);
|
|
});
|
|
|
|
// 防火墙开关
|
|
$('#isFirewall').unbind('click').click(function(){
|
|
var _that = $(this)
|
|
var status = !_that.prop("checked")
|
|
bt.confirm({
|
|
title: (status ? lan.security.firewall.switchTit3 : lan.security.firewall.switchTit2) + lan.security.firewall.switchTit1,
|
|
msg: (status ? lan.security.firewall.switchMsg1 : lan.security.firewall.switchMsg2),
|
|
cancel: function () {
|
|
_that.prop("checked", status);
|
|
}
|
|
},function () {
|
|
bt_tools.send({
|
|
url:'/safe/firewall/firewall_admin',
|
|
data:{data: JSON.stringify({status:!status?'start':'stop'})},
|
|
},function(rdata){
|
|
bt_tools.msg(rdata);
|
|
setTimeout(function(){
|
|
location.reload();
|
|
},2000)
|
|
}, lan.security.firewall.switchMsg3)
|
|
},function () {
|
|
_that.prop("checked",status)
|
|
})
|
|
});
|
|
// 禁用ping
|
|
$('#ssh_ping').unbind('click').on('click',function (){
|
|
var _that = $(this), status = _that.prop("checked")?0:1;
|
|
bt.firewall.ping(status,function(rdata){
|
|
if(rdata === -1){
|
|
_that.prop('checked',!!status);
|
|
}else{
|
|
bt.msg(rdata);
|
|
}
|
|
});
|
|
});
|
|
// 清空日志
|
|
$('#clearWebLogs').click(function () {
|
|
that.clear_logs_files();
|
|
});
|
|
},
|
|
/**
|
|
* @description 切换系统防火墙菜单
|
|
* @param {number} index 索引
|
|
*/
|
|
cutFirewallTab: function (index) {
|
|
switch (index) {
|
|
case 0:
|
|
this.portRuleTable()
|
|
break;
|
|
case 1:
|
|
this.ipRuleTable()
|
|
break;
|
|
case 2:
|
|
this.portForwardTable()
|
|
break;
|
|
case 3:
|
|
this.countryRegionTable()
|
|
break;
|
|
}
|
|
},
|
|
getFirewallInfo: function (load) {
|
|
bt_tools.send({
|
|
url: '/safe/firewall/get_firewall_info',
|
|
}, function (rdata) {
|
|
$('#isFirewall').prop("checked", rdata.status);
|
|
$('#ssh_ping').prop('checked', !rdata.ping);
|
|
$('#safety .tab-nav-border span:eq(0) > i').html(rdata.port);
|
|
$('#safety .tab-nav-border span:eq(1) > i').html(rdata.ip);
|
|
$('#safety .tab-nav-border span:eq(2) > i').html(rdata.trans);
|
|
$('#safety .tab-nav-border span:eq(3) > i').html(rdata.country);
|
|
}, load ? lan.security.firewall.get_firewall_info : '');
|
|
},
|
|
/**
|
|
* @description 清空日志
|
|
*/
|
|
clear_logs_files:function(){
|
|
bt.show_confirm(lan.security.firewall.clearTit1, lan.security.firewall.clearMsg1, function () {
|
|
bt.firewall.clear_logs_files(function(rdata){
|
|
$("#logSize").text(rdata);
|
|
bt.msg({msg:lan.firewall.empty,icon:1});
|
|
});
|
|
});
|
|
},
|
|
/**
|
|
* @description 渲染系统防火墙端口规则
|
|
*/
|
|
portRuleTable: function () {
|
|
var that = this;
|
|
var portsPs = {
|
|
"80": lan.firewall.site_default_port,
|
|
"3306": lan.firewall.mysql_default_port,
|
|
"888": lan.firewall.phpmmyadmin_default_port,
|
|
"22": lan.firewall.ssh_default_port,
|
|
"20": lan.firewall.ftp1_default_port,
|
|
"21": lan.firewall.ftp_default_port,
|
|
"39000-40000": lan.firewall.ftp2_default_port,
|
|
"30000-40000": lan.firewall.ftp2_default_port,
|
|
"11211": lan.firewall.mem_default_port,
|
|
"873": lan.firewall.rsync_default_port,
|
|
"8888": lan.firewall.bt_default_port
|
|
}
|
|
var fireWallTable = bt_tools.table({
|
|
el: '#portRules',
|
|
url: '/safe/firewall/get_rules_list',
|
|
load: lan.security.firewall.port.load,
|
|
default: lan.security.firewall.port.default, // 数据为空时的默认提示
|
|
autoHeight: true,
|
|
beforeRequest: 'model',
|
|
tootls: [
|
|
{ // 按钮组
|
|
type: 'group',
|
|
list: [{
|
|
title: lan.security.firewall.add_btn,
|
|
active: true,
|
|
event: function (ev) {
|
|
that.editPortRule()
|
|
}
|
|
}, {
|
|
title: lan.security.firewall.import_btn,
|
|
event: function (ev) {
|
|
that.ruleImport('port_rule')
|
|
}
|
|
}, {
|
|
title: lan.security.firewall.export_btn,
|
|
event: function (ev) {
|
|
that.ruleExport('port_rule')
|
|
}
|
|
}]
|
|
},
|
|
{ // 搜索内容
|
|
type: 'search',
|
|
placeholder: lan.security.firewall.port.search,
|
|
searchParam: 'query', //搜索请求字段,默认为 search
|
|
},
|
|
{ //分页显示
|
|
type: 'page',
|
|
numberStatus: true, // 是否支持分页数量选择,默认禁用
|
|
jump: true, //是否支持跳转分页,默认禁用
|
|
},
|
|
{
|
|
type: 'batch', // 批量操作
|
|
disabledSelectValue: lan.firewall.batch_disabled_tips('port'),
|
|
placeholder: 'Select batch operation',
|
|
buttonValue: 'Execute',
|
|
selectList: [
|
|
{
|
|
load: true,
|
|
title: lan.firewall.batch_del_btn('port'),
|
|
url: '/safe/firewall/remove_rules',
|
|
param: function (row) {
|
|
return { data: JSON.stringify(row) };
|
|
},
|
|
refresh: true,
|
|
callback: function (that) {
|
|
bt.confirm({ title: lan.firewall.batch_del_title('port'), msg: lan.firewall.batch_del_msg('port') }, function () {
|
|
var param = {};
|
|
that.start_batch(param, function (list) {
|
|
var html = '';
|
|
for (var i = 0; i < list.length; i++) {
|
|
var item = list[i];
|
|
html +=
|
|
'<tr><td>Port: ' +
|
|
item.ports +
|
|
'</td><td><div style="float:right;"><span style="color:' +
|
|
(item.request.msg.indexOf('Success') > -1 ? '#20a53a' : 'red') +
|
|
'">' +
|
|
item.request.msg +
|
|
'</span></div></td></tr>';
|
|
}
|
|
fireWallTable.$batch_success_table({ title: lan.firewall.batch_del_title('port'), th: 'Port', html: html });
|
|
fireWallTable.$refresh_table_list(true);
|
|
safety.getFirewallInfo();
|
|
});
|
|
});
|
|
},
|
|
},
|
|
],
|
|
}
|
|
],
|
|
column: [
|
|
{type: 'checkbox', class: '', width: 20},
|
|
{ title: lan.security.firewall.protocol, fid: 'protocol', width: 100 },
|
|
{ title: lan.security.firewall.ports, fid: 'ports', width: 200 },
|
|
{
|
|
field: 'status',
|
|
title: lan.security.firewall.status + '<a href="https://www.yakpanel.com/forum/d/1088-description-of-firewall-status" class="bt-ico-ask" target="_blank" title="' + lan.security.firewall.port.th3_click + '">?</a>',
|
|
width: 150,
|
|
type: 'text',
|
|
template: function (item) {
|
|
var status = '';
|
|
switch (item.status) {
|
|
case 0:
|
|
status = lan.firewall.status_not;
|
|
break;
|
|
case 1:
|
|
status = lan.firewall.status_net;
|
|
break;
|
|
default:
|
|
status = lan.firewall.status_ok;
|
|
break;
|
|
}
|
|
return '<span>' + status + ((item.status !=0 && item.status !==1)? ' (<a class="btlink">Details</a>)</span>':'</span>');
|
|
},
|
|
event: function (item) {
|
|
var param = {
|
|
port: item.ports,
|
|
};
|
|
if (item.status == 0) {
|
|
return false;
|
|
}
|
|
bt_tools.send({
|
|
url: '/safe/firewall/get_listening_processes',
|
|
data: { data: JSON.stringify(param) },
|
|
}, function (rdata) {
|
|
layer.open({
|
|
content:
|
|
'\
|
|
<div class="divtable daily-table" style="padding: 20px; min-height: 160px;">\
|
|
<table class="table table-hover">\
|
|
<tbody>\
|
|
</tbody>\
|
|
</table>\
|
|
</div>\
|
|
',
|
|
title: '[' + item.ports + '] ' + lan.firewall.port_use_title,
|
|
closeBtn: 2,
|
|
type: 1,
|
|
area: ['450px', 'auto'],
|
|
shadeClose: true,
|
|
success: function (layero, index) {
|
|
layero.find('.layui-layer-content').css('height', 'auto')
|
|
|
|
var html = '';
|
|
function getName(name) {
|
|
if (name == 'process_name') {
|
|
return lan.firewall.process_name + ':';
|
|
} else if (name == 'process_pid') {
|
|
return lan.firewall.process_pid + ':';
|
|
} else if (name == 'process_cmd') {
|
|
return lan.firewall.start_command + ':';
|
|
}
|
|
}
|
|
var keys = Object.keys(rdata);
|
|
for (var i = 0; i < keys.length; i++) {
|
|
html +=
|
|
'\
|
|
<tr class="daily-title" style="font-weight: bold;background: #f7f7f7">\
|
|
<td width="120" style="border-right: 1px solid #ddd;">' +
|
|
getName(keys[i]) +
|
|
'</td>\
|
|
<td style="background-color: #ffff;overflow: auto;border-right: 1px solid #ddd;">' +
|
|
rdata[keys[i]] +
|
|
'</td>\
|
|
</tr>';
|
|
}
|
|
$('.daily-table tbody').html(html);
|
|
},
|
|
});
|
|
}, lan.firewall.port_use_load);
|
|
},
|
|
},
|
|
{
|
|
title: lan.security.firewall.strategy,
|
|
fid: 'types',
|
|
width: 80,
|
|
event: function (row) {
|
|
var status = !(row.types === 'accept');
|
|
bt.confirm(
|
|
{
|
|
title: lan.security.firewall.port.modify_strategy_tit + ' [' + row.ports + ']',
|
|
msg: status ?
|
|
lan.security.firewall.port.modify_strategy_msg1 :
|
|
lan.security.firewall.port.modify_strategy_msg2,
|
|
},
|
|
function () {
|
|
var param = $.extend(row, { types: row.types === 'accept' ? 'drop' : 'accept', source: row.address });
|
|
delete param.addtime;
|
|
delete param.address;
|
|
bt_tools.send(
|
|
{
|
|
url: '/safe/firewall/modify_rules',
|
|
data: { data: JSON.stringify(param) },
|
|
},
|
|
function (rdata) {
|
|
bt_tools.msg(rdata);
|
|
that.portRuleTable();
|
|
},
|
|
lan.security.firewall.port.modify_strategy_req
|
|
);
|
|
}
|
|
);
|
|
},
|
|
template: function (row) {
|
|
return row.types === 'accept'
|
|
? '<a href="javascript:;" class="bt_success">' + lan.security.firewall.allow + '</a>'
|
|
: '<a href="javascript:;" class="bt_danger">' + lan.security.firewall.deny + '</a>';
|
|
},
|
|
},
|
|
{
|
|
title: lan.security.firewall.source_ip,
|
|
fid: 'address',
|
|
width: 100,
|
|
template: function (row) {
|
|
return row.address === '' ? '<span>' + lan.security.firewall.all + '</span>' : '<span title="' + row.address + '">' + row.address + '</span>';
|
|
},
|
|
},
|
|
{
|
|
title: lan.security.firewall.remarks,
|
|
fid: 'brief',
|
|
type: 'text',
|
|
template: function (row) {
|
|
if (row.brief) return '<span>' + row.brief + '</span>';
|
|
if (row.ports in portsPs) return '<span>' + portsPs[row.ports] + '</span>';
|
|
return '<span>' + row.brief + '</span>';
|
|
}
|
|
},
|
|
{ title: lan.security.firewall.add_time, fid: 'addtime', width: 150 },
|
|
{
|
|
title: lan.public.operate,
|
|
type: 'group',
|
|
width: 150,
|
|
align: 'right',
|
|
group: [
|
|
{
|
|
title: lan.public.edit,
|
|
event: function (row, index) {
|
|
that.editPortRule(row);
|
|
}
|
|
},
|
|
{
|
|
title: lan.public.del,
|
|
event: function (row, index) {
|
|
that.removePortRule(row);
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|
|
})
|
|
},
|
|
/**
|
|
* @description 添加/编辑端口规则
|
|
* @param {object} row 数据
|
|
*/
|
|
editPortRule: function (row) {
|
|
var isEdit = !!row, that = this;
|
|
row = row || { protocol:'tcp',ports:'',types:'accept',address:'',brief:''}
|
|
layer.open({
|
|
type: 1,
|
|
area:"420px",
|
|
title: (!isEdit ? lan.public.add : lan.public.edit) + lan.security.firewall.port.form_title,
|
|
closeBtn: 2,
|
|
shift: 5,
|
|
shadeClose: false,
|
|
btn: ['Confirm', 'Cancel'],
|
|
content: '<form id="editPortRuleForm" class="bt-form bt-form pd20" onsubmit="return false"></form>',
|
|
yes:function(index,layers){
|
|
bt_tools.verifyForm('#editPortRuleForm',[
|
|
{
|
|
name: 'ports',
|
|
validator: function (value) {
|
|
if (!value) return lan.security.firewall.port.form_port_empty;
|
|
},
|
|
},
|
|
{
|
|
name: 'address',
|
|
validator: function (value, row) {
|
|
if (!value && row.choose !== 'all') return lan.security.firewall.port.form_address_empty;
|
|
},
|
|
},
|
|
], function(verify,form){
|
|
if(verify){
|
|
if(isEdit) form.address = form.choose === 'all'?'':form.address;
|
|
form['source'] = form.address;
|
|
// 添加、修改
|
|
bt_tools.send({
|
|
url: '/safe/firewall/' + (isEdit ? 'modify_rules' : 'create_rules'),
|
|
data: {data: JSON.stringify($.extend({id: row.id}, form))}
|
|
}, function (rdata) {
|
|
bt.msg(rdata);
|
|
if (rdata.status) {
|
|
layer.close(index);
|
|
that.portRuleTable();
|
|
that.getFirewallInfo();
|
|
}
|
|
}, (isEdit ? lan.public.edit : lan.public.add) + lan.security.firewall.port.form_title);
|
|
}
|
|
})
|
|
},
|
|
success:function(layero, index){
|
|
bt_tools.fromGroup('#editPortRuleForm', [
|
|
{
|
|
label: lan.security.firewall.protocol,
|
|
width: '200px',
|
|
name: 'protocol',
|
|
type: 'select',
|
|
options: [
|
|
{ value: 'tcp', label: 'TCP' },
|
|
{ value: 'udp', label: 'UDP' },
|
|
{ value: 'tcp/udp', label: 'TCP/UDP' },
|
|
],
|
|
},
|
|
{
|
|
label: lan.security.firewall.ports,
|
|
width: '200px',
|
|
name: 'ports',
|
|
readonly: isEdit,
|
|
type: 'text',
|
|
placeholder: lan.security.firewall.port.form_port,
|
|
},
|
|
{
|
|
label: lan.security.firewall.source_ip,
|
|
width: '200px',
|
|
name: 'choose',
|
|
type: 'select',
|
|
options: [
|
|
{ value: 'all', label: lan.security.firewall.all },
|
|
{ value: 'point', label: lan.security.firewall.specify_ip },
|
|
],
|
|
on: {
|
|
change: function (ev, val, el) {
|
|
$(this).data('line').next().toggle();
|
|
},
|
|
},
|
|
},
|
|
{
|
|
label: '',
|
|
width: '200px',
|
|
name: 'address',
|
|
placeholder: lan.security.firewall.port.form_specify_ip,
|
|
labelStyle: row.address !== '' ? '' : 'display: none'
|
|
},
|
|
{
|
|
label: lan.security.firewall.strategy,
|
|
width: '200px',
|
|
name: 'types',
|
|
type: 'select',
|
|
options: [
|
|
{ value: 'accept', label: lan.security.firewall.allow },
|
|
{ value: 'drop', label: lan.security.firewall.deny },
|
|
],
|
|
},
|
|
{ label: lan.security.firewall.remarks, width: '200px', name: 'brief', type: 'text' },
|
|
{
|
|
type: 'tips',
|
|
style: 'padding-left: 30px; margin-top:5px;',
|
|
list: [
|
|
lan.security.firewall.port.form_tips1,
|
|
lan.security.firewall.port.form_tips2
|
|
],
|
|
}
|
|
], $.extend(row,{ choose: row.address ? 'point' : 'all' }))
|
|
if (isEdit) $('[name="ports"]').css({ 'background-color': '#eee', 'cursor': 'no-drop' });
|
|
bt_tools.setLayerArea(layero);
|
|
}
|
|
});
|
|
},
|
|
/**
|
|
* @description 规则导入
|
|
* @param
|
|
*/
|
|
ruleImport: function (name){
|
|
var _this = this;
|
|
layer.open({
|
|
type: 1,
|
|
area: '360px',
|
|
title: lan.security.firewall.import_tit,
|
|
closeBtn: 2,
|
|
shift: 5,
|
|
shadeClose: false,
|
|
btn: [lan.public.import, lan.public.cancel],
|
|
content:'\
|
|
<div class="bt-form-new port-import-form">\
|
|
<div class="form-item">\
|
|
<div class="form-value c4">\
|
|
<div class="detect_input">\
|
|
<input type="text" class="input_file" placeholder="' + lan.security.firewall.import_file + '">\
|
|
<input type="file" class="file_input hide" id="fileInput" />\
|
|
<button type="button" class="select_file" onclick="$(\'#fileInput\').click()">' + lan.security.firewall.import_btn + '</button>\
|
|
</div>\
|
|
</div>\
|
|
</div>\
|
|
</div>',
|
|
yes: function (index, layers) {
|
|
if (!$("#fileInput")[0].files[0]) {
|
|
layer.msg(lan.security.firewall.import_file_tips, { icon: 2 });
|
|
return false;
|
|
}
|
|
_this.upload({name:name, _fd:$("#fileInput")[0].files[0]}, 0, index);
|
|
},
|
|
success: function () {
|
|
$("#fileInput").on('change', function () {
|
|
if (!$("#fileInput")[0].files[0]) {
|
|
$(".input_file").val("");
|
|
}
|
|
var filename = $("#fileInput")[0].files[0].name;
|
|
$(".input_file").val(filename);
|
|
});
|
|
},
|
|
});
|
|
},
|
|
|
|
/**
|
|
* @description 规则导出
|
|
*/
|
|
ruleExport: function (type){
|
|
bt_tools.send({
|
|
url: '/safe/firewall/export_rules',
|
|
data: { data: JSON.stringify({ rule_name: type }) },
|
|
}, function (rdata) {
|
|
if (rdata.status) {
|
|
window.open('/download?filename=' + rdata.msg);
|
|
} else {
|
|
bt_tools.msg(rdata);
|
|
}
|
|
}, lan.security.firewall.export_req);
|
|
},
|
|
|
|
/**
|
|
* @description 删除端口规则
|
|
* @param {object} row 行数据
|
|
*/
|
|
removePortRule: function (row){
|
|
var that = this;
|
|
bt.confirm({
|
|
title: lan.security.firewall.port.del_tit + '[' + row.ports + ']',
|
|
msg: lan.security.firewall.port.del_msg
|
|
}, function () {
|
|
bt_tools.send({
|
|
url: '/safe/firewall/remove_rules',
|
|
data: { data: JSON.stringify(row) }
|
|
}, function (rdata) {
|
|
bt.msg(rdata);
|
|
if (rdata.status) {
|
|
that.portRuleTable();
|
|
that.getFirewallInfo();
|
|
}
|
|
}, lan.security.firewall.port.del_req);
|
|
});
|
|
},
|
|
/**
|
|
* @description 规则导入请求
|
|
* @param s_data
|
|
* @param start
|
|
* @param index
|
|
*/
|
|
upload: function (s_data, start, index) {
|
|
var _this = this;
|
|
var fd = s_data._fd;
|
|
var end = Math.min(fd.size, start + 1024*1024*2);
|
|
var form = new FormData();
|
|
form.append("f_path", "/www/server/panel/data/firewall");
|
|
form.append("f_name", fd.name);
|
|
form.append("f_size", fd.size);
|
|
form.append("f_start", start);
|
|
form.append("blob", fd.slice(start, end));
|
|
$.ajax({
|
|
url: '/files?action=upload',
|
|
type: "POST",
|
|
data: form,
|
|
async: true,
|
|
processData: false,
|
|
contentType: false,
|
|
success: function (data) {
|
|
if (typeof (data) === "number") {
|
|
_this.upload(s_data, data, index)
|
|
} else {
|
|
if (data.status) {
|
|
bt_tools.send({
|
|
url:'/safe/firewall/import_rules',
|
|
data:{data:JSON.stringify({rule_name:s_data.name, file_name:fd.name})}
|
|
},function(res){
|
|
bt_tools.msg(res);
|
|
if(res.status){
|
|
layer.close(index);
|
|
if(s_data.name === 'port_rule'){ _this.portRuleTable() }
|
|
else if(s_data.name === 'ip_rule'){ _this.ipRuleTable() }
|
|
else if(s_data.name === 'country_rule'){ _this.countryRegionTable() }
|
|
else{ _this.portForwardTable() }
|
|
}
|
|
}, lan.security.firewall.import_req)
|
|
}
|
|
}
|
|
},
|
|
error: function (e) {
|
|
console.log("上传规则文件出问题喽!")
|
|
}
|
|
})
|
|
},
|
|
/**
|
|
* @description ip规则列表
|
|
*/
|
|
ipRuleTable: function () {
|
|
var that = this;
|
|
var ruleTable = bt_tools.table({
|
|
el: '#ipRule',
|
|
url: '/safe/firewall/get_ip_rules_list',
|
|
load: lan.security.firewall.ip.load,
|
|
default: lan.security.firewall.ip.default, // 数据为空时的默认提示
|
|
autoHeight: true,
|
|
beforeRequest: 'model',
|
|
tootls: [
|
|
{ // 按钮组
|
|
type: 'group',
|
|
list: [
|
|
{
|
|
title: lan.security.firewall.add_btn,
|
|
active: true,
|
|
event: function (ev) {
|
|
that.editIpRule()
|
|
}
|
|
},
|
|
{
|
|
title: lan.security.firewall.import_btn,
|
|
event: function (ev) {
|
|
that.ruleImport('ip_rule')
|
|
}
|
|
},
|
|
{
|
|
title: lan.security.firewall.export_btn,
|
|
event: function (ev) {
|
|
that.ruleExport('ip_rule')
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{ // 搜索内容
|
|
type: 'search',
|
|
placeholder: lan.security.firewall.ip.search,
|
|
searchParam: 'query', //搜索请求字段,默认为 search
|
|
},
|
|
{
|
|
type: 'batch', // 批量操作
|
|
disabledSelectValue: lan.firewall.batch_disabled_tips('IP'),
|
|
placeholder: 'Select batch operation',
|
|
buttonValue: 'Execute',
|
|
selectList: [
|
|
{
|
|
title: lan.firewall.batch_del_btn('IP'),
|
|
url: '/safe/firewall/remove_ip_rules',
|
|
load: true,
|
|
param: function (row) {
|
|
return {
|
|
data: JSON.stringify(row),
|
|
};
|
|
},
|
|
refresh: true,
|
|
callback: function (that) {
|
|
bt.confirm({ title: lan.firewall.batch_del_title('IP'), msg: lan.firewall.batch_del_msg_ip }, function () {
|
|
var param = {};
|
|
that.start_batch(param, function (list) {
|
|
var html = '';
|
|
for (var i = 0; i < list.length; i++) {
|
|
var item = list[i];
|
|
html +=
|
|
'<tr><td>' +
|
|
item.address +
|
|
'</td><td><div style="float:right;"><span style="color:' +
|
|
(item.request.msg.indexOf('Success') > -1 ? '#20a53a' : 'red') +
|
|
'">' +
|
|
item.request.msg +
|
|
'</span></div></td></tr>';
|
|
}
|
|
ruleTable.$batch_success_table({ title: lan.firewall.batch_del_title('IP'), th: lan.firewall.batch_del_ip_name, html: html });
|
|
ruleTable.$refresh_table_list(true);
|
|
safety.getFirewallInfo();
|
|
});
|
|
});
|
|
},
|
|
},
|
|
],
|
|
},
|
|
{ //分页显示
|
|
type: 'page',
|
|
numberStatus: true, // 是否支持分页数量选择,默认禁用
|
|
jump: true, //是否支持跳转分页,默认禁用
|
|
}
|
|
],
|
|
column: [
|
|
{type: 'checkbox', class: '', width: 20},
|
|
{fid: 'address', title: lan.security.firewall.source_ip, width: 150},
|
|
{fid: 'area', title: lan.security.firewall.ip_home + ' ' + (parseInt(bt.get_cookie('pro_end')) < 0?'<a href="javascript:;" class="btlink" onclick="bt.soft.updata_pro(116)">Pro</a>':''), template: function(row){
|
|
var area = row.area;
|
|
return '<span>'+ (area.continent || '') + (area.info || '--') +'</span>'
|
|
}},
|
|
{
|
|
fid: 'types',
|
|
title: lan.security.firewall.strategy,
|
|
width: 100,
|
|
event:function (row){
|
|
var status = !(row.types === 'accept')
|
|
bt.confirm({
|
|
title: lan.security.firewall.ip.modify_strategy_tit + ' [' + row.address + ']',
|
|
msg: (status ? lan.security.firewall.ip.modify_strategy_msg1 : lan.security.firewall.ip.modify_strategy_msg2),
|
|
},function () {
|
|
var param = $.extend(row, { types:row.types === 'accept' ? 'drop' : 'accept' });
|
|
bt_tools.send({
|
|
url: '/safe/firewall/modify_ip_rules',
|
|
data: { data: JSON.stringify(param) }
|
|
}, function (rdata) {
|
|
bt_tools.msg(rdata);
|
|
that.ipRuleTable();
|
|
}, lan.security.firewall.ip.modify_strategy_req);
|
|
});
|
|
},
|
|
template: function (row) {
|
|
return row.types === 'accept' ?
|
|
'<span class="bt_success cursor-pointer">' + lan.security.firewall.release + '</span>' :
|
|
'<span class="bt_danger cursor-pointer">' + lan.security.firewall.block + '</span>';
|
|
}
|
|
},
|
|
{fid: 'brief', title: lan.security.firewall.remarks },
|
|
{fid: 'addtime', title: lan.security.firewall.add_time, width: 150 },
|
|
{
|
|
title: lan.public.operate,
|
|
type: 'group',
|
|
width: 150,
|
|
align: 'right',
|
|
group: [{
|
|
title: lan.public.edit,
|
|
event: function (row, index) {
|
|
that.editIpRule(row)
|
|
}
|
|
}, {
|
|
title: lan.public.del,
|
|
event: function (row, index) {
|
|
that.removeIpRule(row)
|
|
}
|
|
}]
|
|
}]
|
|
})
|
|
return ruleTable;
|
|
},
|
|
/**
|
|
* @description 编辑ip规则
|
|
* @param { object } row 行数据
|
|
*/
|
|
editIpRule: function (row){
|
|
var isEdit = !!row, that = this;
|
|
row = row || {types:'drop',address:'',brief:''}
|
|
layer.open({
|
|
type: 1,
|
|
area: '430px',
|
|
title: (!isEdit ? lan.public.add : lan.public.edit) + lan.security.firewall.ip.form_title,
|
|
closeBtn: 2,
|
|
shift: 5,
|
|
shadeClose: false,
|
|
btn: [lan.public.confirm, lan.public.cancel],
|
|
content: '<form id="editIpRuleForm" class="bt-form bt-form pd20" onsubmit="return false"></form>',
|
|
yes:function(index,layers){
|
|
bt_tools.verifyForm('#editIpRuleForm',[
|
|
{
|
|
name: 'address',
|
|
validator: function (value, row) {
|
|
if (!value) return lan.security.firewall.ip.form_ip
|
|
}
|
|
},
|
|
], function (verify, form) {
|
|
if(verify){
|
|
// 添加、修改
|
|
bt_tools.send({
|
|
url:'/safe/firewall/' + (isEdit?'modify_ip_rules':'create_ip_rules'),
|
|
data:{data:JSON.stringify($.extend({id:row.id},form))}
|
|
}, function (rdata) {
|
|
bt.msg(rdata)
|
|
if(rdata.status){
|
|
layer.close(index)
|
|
that.ipRuleTable()
|
|
that.getFirewallInfo()
|
|
}
|
|
}, (isEdit ? lan.public.editing : lan.public.adding) + lan.security.firewall.ip.form_title);
|
|
}
|
|
})
|
|
},
|
|
success:function(layero,index){
|
|
bt_tools.fromGroup('#editIpRuleForm',[
|
|
{
|
|
label: lan.security.firewall.source_ip,
|
|
name: 'address',
|
|
type: 'textarea',
|
|
readonly: isEdit,
|
|
style: 'width: 220px; height: 80px; line-height: 22px;' + (isEdit ? 'background-color: rgb(238, 238, 238); cursor: not-allowed' : ''),
|
|
placeholder: 'Please enter IP e.g. 192.168.1.102',
|
|
},
|
|
{
|
|
label: lan.security.firewall.strategy,
|
|
width: '220px',
|
|
name: 'types',
|
|
type: 'select',
|
|
options: [
|
|
{ value: 'accept', label: lan.security.firewall.release },
|
|
{ value: 'drop', label: lan.security.firewall.block },
|
|
],
|
|
},
|
|
{ label: lan.security.firewall.remarks, width: '220px', name: 'brief' },
|
|
!isEdit
|
|
? {
|
|
type: 'tips',
|
|
style: 'padding-left: 40px; margin-top:5px;',
|
|
list: [
|
|
lan.security.firewall.ip.form_tips1,
|
|
lan.security.firewall.ip.form_tips2,
|
|
lan.security.firewall.ip.form_tips3
|
|
],
|
|
}
|
|
: { type: 'tips', list: [] },
|
|
], row)
|
|
bt_tools.setLayerArea(layero)
|
|
}
|
|
})
|
|
},
|
|
/**
|
|
* @description 删除端口规则
|
|
*/
|
|
removeIpRule:function(row){
|
|
var that = this;
|
|
bt.confirm({
|
|
title: lan.security.firewall.ip.del_tit + ' ['+ row.address + ']',
|
|
msg: lan.security.firewall.ip.del_msg
|
|
}, function () {
|
|
bt_tools.send({ url:'/safe/firewall/remove_ip_rules', data:{data:JSON.stringify(row)}},function (rdata){
|
|
bt.msg(rdata)
|
|
if(rdata.status) {
|
|
that.ipRuleTable()
|
|
that.getFirewallInfo()
|
|
}
|
|
}, lan.security.firewall.ip.del_req);
|
|
});
|
|
},
|
|
/**
|
|
* @description 端口转发列表
|
|
*/
|
|
portForwardTable: function () {
|
|
var that = this;
|
|
var forwardTable = bt_tools.table({
|
|
el: '#portForward',
|
|
url: '/safe/firewall/get_forward_list',
|
|
load: lan.security.firewall.forward.load,
|
|
default: lan.security.firewall.forward.default, // 数据为空时的默认提示
|
|
autoHeight: true,
|
|
beforeRequest: 'model',
|
|
tootls: [
|
|
{ // 按钮组
|
|
type: 'group',
|
|
list: [{
|
|
title: lan.security.firewall.forward.add_btn,
|
|
active: true,
|
|
event: function (ev) {
|
|
that.editPortForward()
|
|
}
|
|
}, {
|
|
title: lan.security.firewall.import_btn,
|
|
event: function (ev) {
|
|
that.ruleImport('trans_rule')
|
|
}
|
|
}, {
|
|
title: lan.security.firewall.export_btn,
|
|
event: function (ev) {
|
|
that.ruleExport('trans_rule')
|
|
}
|
|
}]
|
|
},
|
|
{ // 搜索内容
|
|
type: 'search',
|
|
placeholder: lan.security.firewall.forward.search,
|
|
searchParam: 'query', //搜索请求字段,默认为 search
|
|
},
|
|
{
|
|
type: 'batch', // 批量操作
|
|
disabledSelectValue: lan.firewall.batch_disabled_tips('port forward'),
|
|
placeholder: 'Select batch operation',
|
|
buttonValue: 'Execute',
|
|
selectList: [
|
|
{
|
|
title: lan.firewall.batch_del_btn('port forward'),
|
|
url: '/safe/firewall/remove_forward',
|
|
load: true,
|
|
param: function (row) {
|
|
return {
|
|
data: JSON.stringify({ id: row.id, protocol: row.protocol, s_port: row.start_port, d_ip: row.ended_ip, d_port: row.ended_port }),
|
|
};
|
|
},
|
|
refresh: true,
|
|
callback: function (that) {
|
|
bt.confirm({ title: lan.firewall.batch_del_title('port forward'), msg: lan.firewall.batch_del_msg_port_forward }, function () {
|
|
var param = {};
|
|
that.start_batch(param, function (list) {
|
|
var html = '';
|
|
for (var i = 0; i < list.length; i++) {
|
|
var item = list[i];
|
|
html +=
|
|
'<tr><td>Source port: ' +
|
|
item.start_port +
|
|
'</td><td><div style="float:right;"><span style="color:' +
|
|
(item.request.msg.indexOf('Success') > -1 ? '#20a53a' : 'red') +
|
|
'">' +
|
|
item.request.msg +
|
|
'</span></div></td></tr>';
|
|
}
|
|
forwardTable.$batch_success_table({ title: lan.firewall.batch_del_title('IP'), th: 'Source port', html: html });
|
|
forwardTable.$refresh_table_list(true);
|
|
safety.getFirewallInfo();
|
|
});
|
|
});
|
|
},
|
|
},
|
|
],
|
|
},
|
|
{ //分页显示
|
|
type: 'page',
|
|
numberStatus: true, // 是否支持分页数量选择,默认禁用
|
|
jump: true, //是否支持跳转分页,默认禁用
|
|
}
|
|
],
|
|
column: [
|
|
{type: 'checkbox', width: 20},
|
|
{ title: lan.security.firewall.protocol, fid: 'protocol', width: 100 },
|
|
{ title: lan.security.firewall.source_port, fid: 'start_port' },
|
|
{
|
|
title: lan.security.firewall.target_ip,
|
|
fid: 'ended_ip',
|
|
template: function (row) {
|
|
return '<span>'+ (row.ended_ip ? row.ended_ip : '127.0.0.1') +'</span>'
|
|
}
|
|
},
|
|
{ title: lan.security.firewall.target_port, fid: 'ended_port' },
|
|
{ title: lan.security.firewall.add_time, fid: 'addtime', width: 150 },
|
|
{
|
|
title: lan.public.operate,
|
|
type: 'group',
|
|
width: 150,
|
|
align: 'right',
|
|
group: [{
|
|
title: lan.public.edit,
|
|
event: function (row, index) {
|
|
that.editPortForward(row)
|
|
}
|
|
}, {
|
|
title: lan.public.del,
|
|
event: function (row, index) {
|
|
that.removePortForward(row)
|
|
}
|
|
}]
|
|
}],
|
|
});
|
|
return forwardTable;
|
|
},
|
|
/**
|
|
* @description 添加/修改端口转发
|
|
* @param row
|
|
*/
|
|
editPortForward: function (row) {
|
|
var isEdit = !!row, that = this;
|
|
row = row || { protocol:'tcp', s_ports:'',d_address:'',d_ports:'' }
|
|
layer.open({
|
|
type: 1,
|
|
area: "420px",
|
|
title: (!isEdit ? lan.public.add : lan.public.edit) + lan.security.firewall.forward.form_title,
|
|
closeBtn: 2,
|
|
shift: 5,
|
|
shadeClose: false,
|
|
btn: [lan.public.import, lan.public.cancel],
|
|
content: '<form id="editIpRuleForm" class="bt-form bt-form pd20" onsubmit="return false"></form>',
|
|
yes:function(index,layers){
|
|
bt_tools.verifyForm('#editIpRuleForm',[
|
|
{name:'s_ports',validator:function (value,row){
|
|
if(!value) return lan.security.firewall.source_port_val1
|
|
if(!bt.check_port(value)) return lan.security.firewall.source_port_val2
|
|
}},
|
|
{name:'d_ports',validator:function (value,row){
|
|
if(!value) return lan.security.firewall.target_port_val1
|
|
if(!bt.check_port(value)) return lan.security.firewall.target_port_val2
|
|
}},
|
|
],function(verify,form){
|
|
if(verify){
|
|
// 添加、修改
|
|
if(form['d_address'] === '') form['d_address'] = '127.0.0.1'
|
|
bt_tools.send({
|
|
url:'/safe/firewall/' + (isEdit?'modify_forward':'create_forward'),
|
|
data:{data:JSON.stringify($.extend({id:row.id},form))}
|
|
}, function (rdata) {
|
|
bt.msg(rdata)
|
|
if(rdata.status){
|
|
layer.close(index)
|
|
that.portForwardTable()
|
|
that.getFirewallInfo()
|
|
}
|
|
},(isEdit ? lan.public.editing : lan.public.adding) + lan.security.firewall.forward.form_title);
|
|
}
|
|
})
|
|
},
|
|
success:function(layero,index){
|
|
if(typeof row.id !== 'undefined') row = {s_ports:row.start_port,d_address:row.ended_ip,d_ports:row.ended_port,protocol:row.protocol,id:row.id}
|
|
bt_tools.fromGroup('#editIpRuleForm', [
|
|
{
|
|
label: lan.security.firewall.protocol,
|
|
width: '200px',
|
|
name: 'protocol',
|
|
type: 'select',
|
|
options: [
|
|
{ value: 'tcp', label: 'TCP' },
|
|
{ value: 'udp', label: 'UDP' },
|
|
{ value: 'tcp/udp', label: 'TCP/UDP' },
|
|
],
|
|
},
|
|
{ label: lan.security.firewall.source_port, width: '200px', name: 's_ports', type: 'text', placeholder: lan.security.firewall.source_port_input },
|
|
{ label: lan.security.firewall.target_ip, width: '200px', name: 'd_address', placeholder: lan.security.firewall.target_ip_input },
|
|
{ label: lan.security.firewall.target_port, width: '200px', name: 'd_ports', type: 'text', placeholder: lan.security.firewall.target_port_input },
|
|
{ type: 'tips', style: 'padding-left: 30px; margin-top:5px;', list: [lan.security.firewall.forward.form_tips1, lan.security.firewall.forward.form_tips2] },
|
|
], row)
|
|
bt_tools.setLayerArea(layero)
|
|
}
|
|
})
|
|
},
|
|
/**
|
|
* @description 删除端口转发
|
|
* @param {object} row 当前行数据
|
|
*/
|
|
removePortForward: function (row) {
|
|
var that = this;
|
|
bt.confirm({
|
|
msg: lan.security.firewall.forward.del_msg,
|
|
title: lan.security.firewall.forward.del_tit + ' [' + lan.security.firewall.source_port + ': ' + row.start_port + ' -> ' + lan.security.firewall.target_port + ': ' + row.ended_port +']',
|
|
area: '530px'
|
|
}, function () {
|
|
bt_tools.send({
|
|
url:'/safe/firewall/remove_forward',
|
|
data:{data:JSON.stringify({id:row.id,protocol:row.protocol,s_port:row.start_port,d_ip:row.ended_ip,d_port:row.ended_port})}
|
|
}, function (rdata) {
|
|
bt.msg(rdata);
|
|
if(rdata.status) {
|
|
that.portForwardTable();
|
|
that.getFirewallInfo();
|
|
}
|
|
}, lan.security.firewall.forward.del_req);
|
|
});
|
|
},
|
|
/**
|
|
* @description 国家区域
|
|
*/
|
|
countryRegionTable: function () {
|
|
var that = this;
|
|
var cRegionTable = bt_tools.table({
|
|
el: '#countryRegion',
|
|
url: '/safe/firewall/get_country_list',
|
|
load: lan.security.firewall.area.load,
|
|
default: lan.security.firewall.area.default, // 数据为空时的默认提示
|
|
autoHeight: true,
|
|
beforeRequest: 'model',
|
|
column: [
|
|
{type: 'checkbox', class: '', width: 20},
|
|
{fid: 'country', title: lan.security.firewall.areas, width: 180,
|
|
template:function (row){
|
|
return '<span>'+ row.country + '(' + row.brief + ')</span>'
|
|
}
|
|
},
|
|
{
|
|
fid: 'types',
|
|
title: lan.security.firewall.strategy,
|
|
width: 100,
|
|
template: function (row) {
|
|
return row.types === 'accept'?'<span class="bt_success">' + lan.security.firewall.release + '</span>':'<span class="bt_danger">' + lan.security.firewall.block + '</span>'
|
|
}
|
|
},
|
|
{fid: 'ports', title: lan.security.firewall.ports, template:function (row){
|
|
return '<span>' + (!row.ports ? lan.security.firewall.all : row.ports) + '</span>'
|
|
}},
|
|
{fid: 'addtime', title: lan.security.firewall.add_time, width:150},
|
|
{
|
|
title: lan.public.operate,
|
|
type: 'group',
|
|
width: 150,
|
|
align: 'right',
|
|
group: [{
|
|
title: lan.public.edit,
|
|
event: function (row, index) {
|
|
that.editCountryRegion(row);
|
|
}
|
|
}, {
|
|
title: lan.public.del,
|
|
event: function (row, index) {
|
|
that.removeCountryRegion(row);
|
|
}
|
|
}]
|
|
}],
|
|
tootls: [
|
|
{ // 按钮组
|
|
type: 'group',
|
|
list: [{
|
|
title: lan.security.firewall.area.add_btn,
|
|
active: true,
|
|
event: function (ev) {
|
|
that.editCountryRegion()
|
|
}
|
|
}, {
|
|
title: lan.security.firewall.import_btn,
|
|
event: function (ev) {
|
|
that.ruleImport('country_rule')
|
|
}
|
|
}, {
|
|
title: lan.security.firewall.export_btn,
|
|
event: function (ev) {
|
|
that.ruleExport('country_rule')
|
|
}
|
|
}]
|
|
},
|
|
{ // 搜索内容
|
|
type: 'search',
|
|
placeholder: lan.security.firewall.area.search,
|
|
searchParam: 'query', //搜索请求字段,默认为 search
|
|
},
|
|
{
|
|
type: 'batch', // 批量操作
|
|
disabledSelectValue: lan.firewall.batch_disabled_tips('area rule'),
|
|
placeholder: 'Select batch operation',
|
|
buttonValue: 'Execute',
|
|
selectList: [
|
|
{
|
|
title: lan.firewall.batch_del_btn('area rule'),
|
|
url: '/safe/firewall/remove_country',
|
|
param: function (row) {
|
|
return {
|
|
data: JSON.stringify(row),
|
|
};
|
|
},
|
|
refresh: true,
|
|
load: true,
|
|
callback: function (that) {
|
|
bt.confirm({ title: lan.firewall.batch_del_title('area rule'), msg: lan.firewall.batch_del_msg_area_rule }, function () {
|
|
var param = {};
|
|
that.start_batch(param, function (list) {
|
|
var html = '';
|
|
for (var i = 0; i < list.length; i++) {
|
|
var item = list[i];
|
|
html +=
|
|
'<tr><td>' +
|
|
item.country +
|
|
'</td><td><div style="float:right;"><span style="color:' +
|
|
(item.request.msg.indexOf('Success') > -1 ? '#20a53a' : 'red') +
|
|
'">' +
|
|
item.request.msg +
|
|
'</span></div></td></tr>';
|
|
}
|
|
cRegionTable.$batch_success_table({ title: lan.firewall.batch_del_title('area rule'), th: 'Area', html: html });
|
|
cRegionTable.$refresh_table_list(true);
|
|
safety.getFirewallInfo();
|
|
});
|
|
});
|
|
},
|
|
},
|
|
],
|
|
},
|
|
{ //分页显示
|
|
type: 'page',
|
|
numberStatus: true, // 是否支持分页数量选择,默认禁用
|
|
jump: true, //是否支持跳转分页,默认禁用
|
|
}
|
|
]
|
|
})
|
|
return cRegionTable;
|
|
},
|
|
|
|
/**
|
|
* @description 添加/修改端口转发
|
|
* @param row
|
|
*/
|
|
editCountryRegion:function (row) {
|
|
var isEdit = !!row, that = this;
|
|
row = row || { country: 'USA', types:'drop',brief:'US',ports:'' }
|
|
bt_tools.send({
|
|
url:'/safe/firewall/get_countrys',
|
|
}, function (rdata) {
|
|
layer.open({
|
|
type: 1,
|
|
area:"420px",
|
|
title: (!isEdit ? lan.public.add : lan.public.edit) + lan.security.firewall.area.form_title,
|
|
closeBtn: 2,
|
|
shift: 5,
|
|
shadeClose: false,
|
|
btn: [lan.public.confirm, lan.public.cancel],
|
|
content: '<form id="editCountryRegionForm" class="bt-form bt-form pd20" onsubmit="return false"></form>',
|
|
yes: function (index, layers) {
|
|
bt_tools.verifyForm('#editCountryRegionForm', [
|
|
{
|
|
name: 'ports',
|
|
validator: function (value, row) {
|
|
if (!value && row.choose !== 'all') return lan.security.firewall.specify_port_val1;
|
|
}
|
|
},
|
|
], function (verify, form) {
|
|
if (verify) {
|
|
// 添加、修改
|
|
form['brief'] = form.country;
|
|
form['country'] = $('[name="country"]').find(':selected').text();
|
|
if (form.choose === 'all') form.ports = '';
|
|
bt_tools.send({
|
|
url: '/safe/firewall/' + (isEdit ? 'modify_country' : 'create_country'),
|
|
data: { data: JSON.stringify($.extend({ id: row.id }, form)) }
|
|
}, function (rdata) {
|
|
bt.msg(rdata)
|
|
if(rdata.status){
|
|
layer.close(index)
|
|
that.countryRegionTable()
|
|
that.getFirewallInfo()
|
|
}
|
|
}, (isEdit ? lan.public.editing : lan.public.adding) + lan.security.firewall.area.form_title);
|
|
}
|
|
})
|
|
},
|
|
success: function (layero, index) {
|
|
var options = [];
|
|
for (var i = 0; i < rdata.length; i++) {
|
|
var item = rdata[i]
|
|
options.push({
|
|
label: item.CH,
|
|
value: item.brief
|
|
})
|
|
}
|
|
bt_tools.fromGroup('#editCountryRegionForm', [
|
|
{ label: lan.security.firewall.areas, width: '200px', name: 'country', type: 'select', options: options },
|
|
{ label: lan.security.firewall.strategy, width: '200px', name: 'types', type: 'select', options: [{ value:'drop', label: lan.security.firewall.block }] },
|
|
{
|
|
label: lan.security.firewall.ports,
|
|
width: '200px',
|
|
name: 'choose',
|
|
type: 'select',
|
|
options:[
|
|
{ value: 'all', label: lan.security.firewall.all },
|
|
// { value: 'point', label: lan.security.firewall.specify_port }
|
|
],
|
|
on: {
|
|
change: function (ev, val) {
|
|
$(this).data('line').next().toggle()
|
|
}
|
|
}
|
|
},
|
|
{ label: '', width: '200px', name: 'ports', labelStyle: 'display:none', type: 'text', placeholder: lan.security.firewall.specify_port_input },
|
|
{
|
|
type:'tips',
|
|
list:[
|
|
lan.security.firewall.area.form_tips1,
|
|
lan.security.firewall.area.form_tips2,
|
|
lan.security.firewall.area.form_tips3
|
|
],
|
|
style: 'padding-left: 20px; margin-top:5px;'
|
|
}
|
|
], {
|
|
country: row.brief,
|
|
types: 'drop',
|
|
choose: 'all'
|
|
});
|
|
if (row.ports) {
|
|
$('select[name="choose"]').val('point');
|
|
$('select[name="choose"]').change();
|
|
$('input[name="ports"]').val(row.ports);
|
|
}
|
|
bt_tools.setLayerArea(layero);
|
|
}
|
|
});
|
|
}, lan.security.firewall.area.get_area);
|
|
},
|
|
|
|
/**
|
|
* @description 删除地区规则
|
|
* @param {object} row 当前行数据
|
|
*/
|
|
removeCountryRegion: function (row) {
|
|
var that = this;
|
|
bt.confirm({
|
|
msg: lan.security.firewall.area.del_msg,
|
|
title: lan.security.firewall.area.del_tit
|
|
}, function(){
|
|
bt_tools.send({
|
|
url:'/safe/firewall/remove_country',
|
|
data:{data:JSON.stringify(row)}
|
|
}, function (rdata) {
|
|
bt.msg(rdata)
|
|
if(rdata.status) {
|
|
that.countryRegionTable()
|
|
that.getFirewallInfo()
|
|
}
|
|
}, lan.security.firewall.area.del_req)
|
|
});
|
|
},
|
|
}
|
|
|
|
// ssh管理
|
|
var ssh = {
|
|
init: function () {
|
|
$('.state-content').show();
|
|
$('.state-content .ssh-header').show();
|
|
|
|
$('#sshView .tab-nav-border span').eq(0).trigger('click');
|
|
},
|
|
event: function () {
|
|
var that = this;
|
|
// 切换系统防火墙菜单事件
|
|
$('#sshView').unbind('click').on('click', '.tab-nav-border span', function () {
|
|
var index = $(this).index();
|
|
$(this).addClass('on').siblings().removeClass('on');
|
|
$(this).parent().next().find('.tab-block').eq(index).addClass('on').siblings().removeClass('on');
|
|
$('.state-content').show().find('.ssh-header').show().siblings().hide();
|
|
that.cutSshTab(index);
|
|
});
|
|
|
|
// SSH开关
|
|
$('#isSsh').unbind('click').on('click',function(){
|
|
var _that = $(this), status = _that.prop("checked") ? 0 : 1;
|
|
bt.firewall.set_mstsc_status(status, function (rdata) {
|
|
if(rdata === -1){
|
|
_that.prop("checked",!!status);
|
|
}else{
|
|
bt.msg(rdata);
|
|
that.getSshInfo();
|
|
}
|
|
});
|
|
});
|
|
|
|
// 保存SSH端口
|
|
$('.save_ssh_port').unbind('click').on('click',function (){
|
|
var port = $(this).prev().val();
|
|
if(port === '') return bt.msg({ msg: lan.security.ssh.port_empty, icon: 2 });
|
|
if(!bt.check_port(port)) return bt.msg({
|
|
icon: 2,
|
|
time: 0,
|
|
closeBtn: 2,
|
|
area: '400px',
|
|
msg: lan.security.ssh.port_error1 + '<br />' + lan.security.ssh.port_error2 + '<br />[80, 443, 8080, 8443, 8888]',
|
|
});
|
|
bt.firewall.set_mstsc(port);
|
|
});
|
|
|
|
// root登录
|
|
$('[name="root_login"]').unbind('change').on('change',function(){
|
|
// var _that = $(this), status = _that.prop("checked");
|
|
var root_type = $(this).val();
|
|
bt_tools.send({
|
|
url:'/ssh_security?action=set_root',
|
|
data:{p_type:root_type}
|
|
},function (rdata){
|
|
bt_tools.msg(rdata);
|
|
}, lan.security.ssh.set_root_req);
|
|
});
|
|
|
|
// SSH密码登录
|
|
$('[name="ssh_paw"]').unbind('click').on('click',function (){
|
|
var _that = $(this), start = _that.prop("checked");
|
|
bt_tools.send({
|
|
url:'/ssh_security?action=' + (start?'set_password':'stop_password')
|
|
},function (rdata){
|
|
bt_tools.msg(rdata);
|
|
}, lan.security.ssh.set_paw_req);
|
|
});
|
|
|
|
// SSH密钥登录
|
|
$('[name="ssh_pubkey"]').unbind('click').on('click',function(){
|
|
var _that = $(this);
|
|
var start = _that.prop("checked");
|
|
if(start){
|
|
that.setTemplateSshkey();
|
|
}else{
|
|
bt_tools.send({
|
|
url:'/ssh_security?action=stop_key'
|
|
},function (rdata){
|
|
that.getSeniorSshInfo();
|
|
bt_tools.msg(rdata);
|
|
}, lan.security.ssh.set_pubkey_req);
|
|
}
|
|
});
|
|
|
|
// 登录告警
|
|
$('[name="ssh_login_give"]').unbind('click').on('click',function(){
|
|
var _that = $(this), status = _that.prop("checked");
|
|
bt_tools.send({
|
|
url:'/ssh_security?action=' + (status?'start_jian':'stop_jian')
|
|
},function (rdata){
|
|
bt_tools.msg(rdata);
|
|
}, lan.security.ssh.set_alarm_req);
|
|
});
|
|
|
|
// 查看密钥
|
|
$('.checkKey').unbind('click').on('click',function (){
|
|
that.setSshKeyView()
|
|
});
|
|
|
|
// 设置登录告警
|
|
$('.setSshLoginAlarm').unbind('click').on('click',function (){
|
|
that.setSshLoginAlarmView();
|
|
});
|
|
|
|
// 下载密钥
|
|
$('.downloadKey').unbind('click').on('click',function (){
|
|
bt_tools.send({
|
|
url:'/ssh_security?action=get_key'
|
|
},function (rdata){
|
|
if(!rdata.msg) return layer.msg(lan.security.ssh.download_key_tips);
|
|
window.open('/ssh_security?action=download_key')
|
|
})
|
|
});
|
|
|
|
// 登录详情
|
|
$('#sshDetailed').unbind('click').on('click','a',function (){
|
|
var index = $(this).data('index');
|
|
$('#sshView .tab-nav-border>span').eq(1).trigger('click');
|
|
$('.cutLoginLogsType button').eq(index).trigger('click');
|
|
});
|
|
|
|
// 切换系统防火墙菜单事件
|
|
$('#sshView').unbind('click').on('click', '.tab-nav-border span', function () {
|
|
var index = $(this).index();
|
|
that.cutSshTab(index);
|
|
});
|
|
|
|
// 切换登录日志类型
|
|
$('#loginLogsContent').unbind('click').on('click','.cutLoginLogsType button',function(){
|
|
var type = $(this).data('type');
|
|
$(this).addClass('btn-success').removeClass('btn-default').siblings().addClass('btn-default').removeClass('btn-success');
|
|
$('#loginLogsContent>div:eq('+ type +')').show().siblings().hide();
|
|
that.loginLogsTable({p:1,type: Number(type)});
|
|
});
|
|
},
|
|
cutSshTab: function (index) {
|
|
switch (index){
|
|
case 0:
|
|
this.getSshInfo();
|
|
this.getLoginAlarmInfo();
|
|
this.getSeniorSshInfo();
|
|
this.getSshLoginAlarmInfo();
|
|
break;
|
|
case 1:
|
|
this.loginLogsTable();
|
|
break;
|
|
}
|
|
},
|
|
/**
|
|
* @description 获取SSH信息
|
|
*/
|
|
getSshInfo:function (load){
|
|
bt_tools.send({
|
|
url: '/safe/ssh/GetSshInfo',
|
|
verify: false
|
|
},function (rdata){
|
|
var error = rdata.error;
|
|
$('#sshDetailed .btlink').text(lan.security.ssh.success + ': '+ error.success);
|
|
$('#sshDetailed .bterror').text(lan.security.ssh.fail + ': '+ error.error);
|
|
$('#isSsh').prop("checked", rdata.status);
|
|
$('[name="ssh_port"]').val(rdata.port);
|
|
}, lan.security.ssh.get_ssh_info);
|
|
},
|
|
/**
|
|
* @description 获取登录告警信息
|
|
*/
|
|
getLoginAlarmInfo:function(load){
|
|
bt_tools.send({
|
|
url:'/ssh_security?action=get_jian'
|
|
},function (rdata){
|
|
$('#ssh_login_give').prop('checked', rdata.status);
|
|
}, {load: load ? lan.security.ssh.get_jian : '',verify:false})
|
|
},
|
|
/**
|
|
* @description 获取高级SSH信息
|
|
*/
|
|
getSeniorSshInfo:function (load){
|
|
bt_tools.send({
|
|
url: '/ssh_security?action=get_config',
|
|
verify: false
|
|
},function (rdata){
|
|
$('[name="ssh_paw"]').prop("checked",rdata.password === 'yes');
|
|
$('[name="ssh_pubkey"]').prop("checked",rdata.pubkey === 'yes');
|
|
|
|
var root_option = '';
|
|
$.each(rdata.root_login_types,function(k,v){
|
|
root_option += '<option value="'+ k +'" '+(rdata.root_login_type == k?'selected':'')+'>'+ v +'</option>';
|
|
})
|
|
$('[name="root_login"]').html(root_option);
|
|
// $('[name="root_login"]').prop("checked",rdata.root_is_login === 'yes')
|
|
}, load ? lan.security.ssh.get_config : '');
|
|
},
|
|
|
|
/**
|
|
* @description 获取SSH登录告警
|
|
*/
|
|
getSshLoginAlarmInfo: function (load) {
|
|
var that = this;
|
|
bt_tools.send({
|
|
url: '/ssh_security?action=get_login_send',
|
|
verify: false
|
|
}, function (send) {
|
|
var data = that.msgPushData;
|
|
if (!data || $.isEmptyObject(data)) {
|
|
bt_tools.send({
|
|
url: '/ssh_security?action=get_msg_push_list',
|
|
verify: false
|
|
}, function (msgData) {
|
|
that.msgPushData = msgData
|
|
that.renderLoginAlarmInfo(send);
|
|
});
|
|
} else {
|
|
that.renderLoginAlarmInfo(send);
|
|
}
|
|
}, load ? lan.security.ssh.get_login_send : '');
|
|
},
|
|
/**
|
|
* @description 渲染SSH登录告警配置
|
|
*/
|
|
renderLoginAlarmInfo: function (send) {
|
|
var data = this.msgPushData || {};
|
|
var map = {}
|
|
$.each(data, function (key, item) {
|
|
if (key === 'sms') return
|
|
map[key] = item.title
|
|
});
|
|
var key = send.msg;
|
|
var title = map[key];
|
|
if (send.status && title) {
|
|
$('a.setSshLoginAlarm').removeClass('bt_warning').addClass('btlink');
|
|
$('a.setSshLoginAlarm').text(title + ' ' + lan.security.ssh.configured);
|
|
} else {
|
|
$('a.setSshLoginAlarm').addClass('bt_warning').removeClass('btlink');
|
|
$('a.setSshLoginAlarm').text(lan.security.ssh.not_configured);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* @description 登录日志
|
|
*/
|
|
loginLogsTable:function(param){
|
|
if(!param) param = { p:1, type:0 };
|
|
var logs = [
|
|
['All', lan.security.ssh.logs, 'get_ssh_list'],
|
|
['Success', lan.security.ssh.s_logs, 'get_ssh_success'],
|
|
['Error', lan.security.ssh.f_logs, 'get_ssh_error']
|
|
];
|
|
var type = logs[param.type][0];
|
|
var tips = logs[param.type][1];
|
|
|
|
$('#login'+ type +'Logs').empty();
|
|
var arry = [lan.security.ssh.all, lan.security.ssh.success, lan.security.ssh.fail];
|
|
var html = $('<div class="btn-group mr10 cutLoginLogsType"></div>');
|
|
$.each(arry,function (i,v){
|
|
html.append('<button type="button" class="btn btn-sm btn-'+ (i === param.type ?'success':'default') +'" data-type="'+ i +'">'+ v +'</button>')
|
|
});
|
|
return bt_tools.table({
|
|
el: '#login'+ type +'Logs',
|
|
url: '/safe/syslog/' + logs[param.type][2],
|
|
default: lan.security.ssh.get_ssh_list1 + tips + lan.security.ssh.get_ssh_list2, // 数据为空时的默认提示
|
|
autoHeight: true,
|
|
dataVerify:false,
|
|
tootls: [
|
|
{ // 按钮组
|
|
type: 'group',
|
|
list: [{
|
|
title: lan.security.ssh.refresh,
|
|
active: true,
|
|
event: function (ev,that) {
|
|
that.$refresh_table_list(true)
|
|
}
|
|
}]
|
|
},
|
|
{ // 搜索内容
|
|
type: 'search',
|
|
placeholder: lan.security.ssh.login_search,
|
|
searchParam: 'search', //搜索请求字段,默认为 search
|
|
},
|
|
{ //分页显示
|
|
type: 'page',
|
|
number: 20
|
|
}
|
|
],
|
|
dataFilter: function (data) {
|
|
if ((typeof data.status === "boolean" && !data.status)) {
|
|
$('#loginLogsContent').hide().next().show();
|
|
return { data: [] }
|
|
}
|
|
return {data:data}
|
|
},
|
|
beforeRequest: function (data) {
|
|
if(typeof data.data === "string"){
|
|
delete data.data
|
|
return {data: JSON.stringify(data)}
|
|
}
|
|
return {data: JSON.stringify(data)}
|
|
},
|
|
column: [
|
|
{title: lan.security.ssh.ip_port,fid: 'address',width:'150px', template:function (row){
|
|
return '<span>'+ row.address +':' + row.port + '</span>';
|
|
}},
|
|
// {title: '登录端口',fid: 'port'},
|
|
{title: lan.security.ssh.place,template:function (row){
|
|
return '<span>'+ (row.area?'' + row.area.info + '':'-') +'</span>';
|
|
}},
|
|
{title: lan.security.ssh.user,fid: 'user'},
|
|
{title: lan.security.ssh.status, template: function (item) {
|
|
var status = Boolean(item.status);
|
|
return '<span style="color:'+ (status?'#20a53a;':'red') +'">'+ (status ? lan.security.ssh.l_success : lan.security.ssh.l_fail) +'</span>';
|
|
}},
|
|
{title: lan.security.ssh.o_time, fid: 'time', width:150}
|
|
],
|
|
success:function (config){
|
|
$(config.config.el + ' .tootls_top .pull-right').prepend(html)
|
|
$('#login'+ type +'Page').html(firewall.renderLogsPages(20,param.p,config.data.length))
|
|
}
|
|
});
|
|
},
|
|
/**
|
|
* @description 设置密钥登录
|
|
*/
|
|
setTemplateSshkey:function(){
|
|
var _this = this;
|
|
layer.open({
|
|
title: lan.security.ssh.key_title,
|
|
area: '430px',
|
|
type: 1,
|
|
closeBtn: 2,
|
|
btn: [lan.public.confirm, lan.public.cancel],
|
|
content:'<div class="bt-form bt-form pd20">'+
|
|
'<div class="line"><span class="tname" style="width: 160px">' + lan.security.ssh.key_login + '</span><div class="info-r" style="margin-left: 160px"><select class="bt-input-text mr5 ssh_select_login" style="width:200px"><option value="yes">' + lan.security.ssh.enable + '</option><option value="no">' + lan.security.ssh.disable + '</option></select></div></div>'+
|
|
'<div class="line "><span class="tname" style="width: 160px">' + lan.security.ssh.key_mode + '</span><div class="info-r" style="margin-left: 160px"><select class="bt-input-text mr5 ssh_select_encryption" style="width:200px"><option value="ed25519">ED25519(' + lan.security.ssh.recommend + ')</option><option value="ecdsa">ECDSA</option><option value="rsa">RSA</option><option value="dsa">DSA</option></select></div></div>'+
|
|
'</div>',
|
|
yes:function(indexs){
|
|
var ssh_select_login = $('.ssh_select_login').val();
|
|
var ssh_select_encryption = $('.ssh_select_encryption').val();
|
|
bt_tools.send({
|
|
url:'/ssh_security?action=set_sshkey',
|
|
data:{ ssh:ssh_select_login, type:ssh_select_encryption }
|
|
},function (rdata){
|
|
bt_tools.msg(rdata);
|
|
layer.close(indexs);
|
|
_this.getSeniorSshInfo();
|
|
}, lan.security.ssh.set_sshkey);
|
|
},
|
|
cancel:function(index){
|
|
$('[name="ssh_pubkey"]').prop('checked',false);
|
|
},
|
|
btn2:function(index){
|
|
$('[name="ssh_pubkey"]').prop('checked',false);
|
|
}
|
|
});
|
|
},
|
|
/**
|
|
* @description 设置SSH密钥视图
|
|
*/
|
|
setSshKeyView:function(){
|
|
var _this = this
|
|
bt_tools.send({
|
|
url:'/ssh_security?action=get_key'
|
|
},function (rdata){
|
|
if (!rdata.msg) return layer.msg(lan.security.ssh.key_view_msg);
|
|
layer.open({
|
|
title: lan.security.ssh.key_view_title,
|
|
area:'400px',
|
|
type:1,
|
|
closeBtn: 2,
|
|
content:'<div class="bt-form pd20">\
|
|
<textarea id="ssh_text_key" class="bt-input-text mb10" style="height:220px;width:360px;line-height: 22px;">'+ rdata.msg +'</textarea>\
|
|
<div class="btn-sshkey-group">\
|
|
<button type="button" class="btn btn-success btn-sm mr5 btn-copy-sshkey">' + lan.security.ssh.copy + '</button>\
|
|
<button type="button" class="btn btn-default btn-sm mr5 btn-download-sshkey">' + lan.security.ssh.download + '</button>\
|
|
<button type="button" class="btn btn-default btn-sm btn-rebuild-sshkey">' + lan.security.ssh.regenerate + '</button>\
|
|
</div>\
|
|
</div>',
|
|
success:function (layers,indexs){
|
|
$('.btn-copy-sshkey').on('click',function(){
|
|
bt.pub.copy_pass($('#ssh_text_key').val());
|
|
})
|
|
$('.btn-download-sshkey').on('click',function(){
|
|
window.open('/ssh_security?action=download_key')
|
|
})
|
|
$('.btn-rebuild-sshkey').on('click',function(){
|
|
bt_tools.send({
|
|
url:'/ssh_security?action=set_sshkey',
|
|
data:{ ssh:'yes', type:'ed25519' }
|
|
},function (res){
|
|
bt_tools.send({
|
|
url:'/ssh_security?action=get_key'
|
|
},function (rdata){
|
|
if(!rdata.msg) return layer.msg(lan.security.ssh.key_view_msg);
|
|
$('#ssh_text_key').val(rdata.msg);
|
|
if(res.status) bt_tools.msg({ msg: lan.security.ssh.get_key_msg, status: true });
|
|
_this.getSeniorSshInfo();
|
|
})
|
|
}, lan.security.ssh.get_key);
|
|
})
|
|
}
|
|
})
|
|
}, lan.security.ssh.get_key_req);
|
|
},
|
|
/**
|
|
* @description 设置SSH登录告警
|
|
*/
|
|
setSshLoginAlarmView:function(){
|
|
var that = this;
|
|
layer.open({
|
|
title: lan.security.ssh.alarm_title,
|
|
area: '1010px',
|
|
type: 1,
|
|
closeBtn: 2,
|
|
content: '\
|
|
<div class="bt-w-main">\
|
|
<div class="bt-w-menu">\
|
|
<p class="bgw">' + lan.security.ssh.alarm_set + '</p>\
|
|
<p>' + lan.security.ssh.ip_white + '</p>\
|
|
</div>\
|
|
<div class="bt-w-con pd15">\
|
|
<div class="plugin_body">\
|
|
<div class="content_box news-channel active">\
|
|
<div class="bt-form-new inline"></div>\
|
|
<div id="login_logs_table" class="divtable mt10">\
|
|
<div style="width: 100%; border: 1px solid #ddd; overflow: auto;">\
|
|
<table class="table table-hover" style="border: none;">\
|
|
<thead>\
|
|
<tr>\
|
|
<th>' + lan.security.ssh.login_info + '</th>\
|
|
<th class="text-right">' + lan.security.ssh.time + '</th>\
|
|
</tr>\
|
|
</thead>\
|
|
<tbody>\
|
|
<tr>\
|
|
<td colspan="2" class="text-center">' + lan.site.data_empty + '</td>\
|
|
</tr>\
|
|
</tbody>\
|
|
</table>\
|
|
</div>\
|
|
<div class="page"></div>\
|
|
</div>\
|
|
<ul class="help-info-text c7">\
|
|
<li></li>\
|
|
</ul>\
|
|
</div>\
|
|
<div class="content_box hide">\
|
|
<div class="bt-form">\
|
|
<div class="box" style="display:inline-block;">\
|
|
<input name="ipAddress" class="bt-input-text mr5" type="text" style="width: 220px;" placeholder="' + lan.security.ssh.ip_white_input + '" />\
|
|
<button class="btn btn-success btn-sm addAddressIp">' + lan.public.add + '</button>\
|
|
</div>\
|
|
</div>\
|
|
<div id="whiteIpTable"></div>\
|
|
<ul class="help-info-text c7">\
|
|
<li style="list-style:inside disc">' + lan.security.ssh.ip_white_tips + '</li>\
|
|
</ul>\
|
|
</div>\
|
|
</div>\
|
|
</div>\
|
|
</div>',
|
|
success: function ($layer, indexs) {
|
|
// layer
|
|
var _that = this;
|
|
|
|
// 切换菜单
|
|
$layer.find('.bt-w-menu p').click(function () {
|
|
var index = $(this).index();
|
|
$(this).addClass('bgw').siblings('.bgw').removeClass('bgw');
|
|
$layer.find('.content_box').addClass('hide');
|
|
$layer.find('.content_box').eq(index).removeClass('hide');
|
|
switch (index) {
|
|
// 登录日志
|
|
case 0:
|
|
_that.renderAlarm();
|
|
_that.renderLogsTable(1, false);
|
|
break;
|
|
// IP白名单
|
|
case 1:
|
|
_that.renderWhiteIpTable()
|
|
break;
|
|
}
|
|
});
|
|
|
|
// 设置告警通知
|
|
$('.news-channel .bt-form-new').on('change', 'input[type="checkbox"]', function () {
|
|
var $this = $(this);
|
|
var name = $this.attr('name');
|
|
var checked = $this.is(':checked');
|
|
var action = checked ? 'set_login_send' : 'clear_login_send'
|
|
bt_tools.send({
|
|
url: '/ssh_security?action=' + action,
|
|
data:{ type: name }
|
|
}, function (rdata) {
|
|
bt_tools.msg(rdata);
|
|
if (rdata.status) {
|
|
if (checked) {
|
|
$('.news-channel .bt-form-new input[type="checkbox"]').prop('checked', false);
|
|
$this.prop('checked', true);
|
|
}
|
|
that.getSshLoginAlarmInfo();
|
|
} else {
|
|
$this.prop('checked', !checked);
|
|
}
|
|
}, {
|
|
verify: false,
|
|
load: lan.security.ssh.login_send
|
|
});
|
|
});
|
|
|
|
// 登录日志分页操作
|
|
$('#login_logs_table .page').on('click', 'a', function (e) {
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
var page = $(this)
|
|
.attr('href')
|
|
.match(/p=([0-9]*)/)[1];
|
|
_that.renderLogsTable(page);
|
|
});
|
|
|
|
// 添加ip
|
|
$('.addAddressIp').click(function () {
|
|
var address = $('[name="ipAddress"]');
|
|
var ip = address.val();
|
|
address.val('');
|
|
if (!ip) {
|
|
bt_tools.msg({ msg: lan.security.ssh.ip_white_input, status: false });
|
|
return;
|
|
}
|
|
bt_tools.send({
|
|
url:'/ssh_security?action=add_return_ip',
|
|
data:{ ip: ip }
|
|
}, function (rdata) {
|
|
bt_tools.msg(rdata);
|
|
_that.renderWhiteIpTable();
|
|
}, lan.security.ssh.add_return_ip);
|
|
});
|
|
|
|
$layer.find('.bt-w-menu p').eq(0).click();
|
|
},
|
|
// 生成告警
|
|
renderAlarm: function () {
|
|
// 获取告警列表
|
|
bt_tools.send({
|
|
url: '/ssh_security?action=get_msg_push_list',
|
|
}, function (alarms) {
|
|
// 获取选中告警
|
|
bt_tools.send({
|
|
url: '/ssh_security?action=get_login_send',
|
|
}, function (send) {
|
|
var html = '';
|
|
var tits = [];
|
|
// 当前选中的告警key
|
|
var cKey = send.msg;
|
|
// 渲染生成告警列表
|
|
$.each(alarms, function (key, item) {
|
|
if (item.name === 'sms') return;
|
|
var checked = cKey === item.name ? 'checked="checked"' : '';
|
|
html += '\
|
|
<div class="form-item">\
|
|
<div class="form-label">Send to ' + item.title + '</div>\
|
|
<div class="form-content">\
|
|
<input type="checkbox" id="' + item.name + '_alarm" class="btswitch btswitch-ios" ' + checked + ' name="' + item.name + '" />\
|
|
<label class="btswitch-btn" for="' + item.name + '_alarm"></label>\
|
|
</div>\
|
|
</div>';
|
|
tits.push(item.title);
|
|
});
|
|
$('.news-channel .bt-form-new').html(html);
|
|
$('.news-channel .help-info-text li').eq(0).text('Only one of the above options can be enabled simultaneously');
|
|
});
|
|
}, lan.security.ssh.get_msg_push_list);
|
|
},
|
|
// 生成日志表格
|
|
renderLogsTable: function (p, load) {
|
|
p = p || 1;
|
|
load = load !== undefined ? load : true;
|
|
if (load) var loadT = bt_tools.load(lan.security.ssh.get_logs);
|
|
bt_tools.send({
|
|
url: '/ssh_security?action=get_logs',
|
|
data: { p: p, p_size: 8, }
|
|
}, function (rdata) {
|
|
if (load) loadT.close();
|
|
var html = '';
|
|
if (rdata.data) {
|
|
for (var i = 0; i < rdata.data.length; i++) {
|
|
var item = rdata.data[i];
|
|
html += '<tr><td style="white-space: nowrap;" title="' + item.log + '">' + item.log + '</td><td class="text-right">' + item.addtime + '</td></tr>';
|
|
}
|
|
}
|
|
html = html || '<tr><td class="text-center">' + lan.site.data_empty + '</td></tr>';
|
|
$('#login_logs_table table tbody').html(html);
|
|
$('#login_logs_table .page').html(rdata.page || '');
|
|
});
|
|
},
|
|
// 生成IP白名单表格
|
|
renderWhiteIpTable: function () {
|
|
var _that = this;
|
|
if (this.ipTable) {
|
|
this.ipTable.$refresh_table_list();
|
|
return;
|
|
}
|
|
this.ipTable = bt_tools.table({
|
|
el: '#whiteIpTable',
|
|
url: '/ssh_security?action=return_ip',
|
|
autoHeight: true,
|
|
height: '425px',
|
|
default: lan.security.ssh.return_ip_default,
|
|
dataFilter: function (data) {
|
|
return { data: data.msg };
|
|
},
|
|
column: [
|
|
{
|
|
title: 'IP',
|
|
template: function (item) {
|
|
return '<span>'+ item + '</span>';
|
|
}
|
|
},
|
|
{
|
|
title: lan.public.operate,
|
|
type: 'group',
|
|
width: 150,
|
|
align: 'right',
|
|
group: [
|
|
{
|
|
title: lan.public.del,
|
|
event: function (row, index) {
|
|
bt_tools.send({
|
|
url: '/ssh_security?action=del_return_ip',
|
|
data: { ip: row }
|
|
},function (rdata){
|
|
bt_tools.msg(rdata)
|
|
_that.renderWhiteIpTable();
|
|
}, lan.security.ssh.del_return_ip);
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|
|
});
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
// 入侵防御
|
|
var intrusion = {
|
|
init: function () {
|
|
$('.state-content').hide();
|
|
|
|
bt.soft.get_soft_find('bt_security', function (rdata) {
|
|
// 判断插件未安装 && 插件是否过期
|
|
if (!rdata.setup && rdata.endtime > -1) {
|
|
$('.buyIntrusion').hide();
|
|
}
|
|
// 判断插件已安装 && 插件是否过期
|
|
if ((rdata.setup && rdata.endtime > -1)) {
|
|
$('.state-content').show();
|
|
$('.state-content .intrusion-header').show();
|
|
$('#intrusion .installSoft').hide();
|
|
$('#intrusion .tab-nav-border, #intrusion .tab-nav-con').show();
|
|
$('#intrusion .tab-nav-border span').eq(0).trigger('click');
|
|
} else {
|
|
$('.state-content').hide();
|
|
$('#intrusion .installSoft').show();
|
|
$('#intrusion .tab-nav-border,#intrusion .tab-nav-con').hide();
|
|
|
|
if (rdata.endtime > -1) {
|
|
$('.purchaseIntrusion').hide();
|
|
}else{
|
|
$('.installIntrusion').hide();
|
|
}
|
|
}
|
|
});
|
|
},
|
|
event: function () {
|
|
var that = this;
|
|
|
|
// 切换系统防火墙菜单事件
|
|
$('#intrusion').on('click', '.tab-nav-border span', function () {
|
|
var index = $(this).index();
|
|
that.cutSshTab(index);
|
|
});
|
|
$('#isIntrusion').unbind('click').on('click', function () {
|
|
var status = $(this).prop('checked');
|
|
that.setIntrusionSwitch(status);
|
|
});
|
|
$('.installSoft .thumbnail-tab li').on('click',function(){
|
|
var index = $(this).index();
|
|
$(this).addClass('on').siblings().removeClass('on');
|
|
$('.installSoft .thumbnail-item').eq(index).addClass('show').siblings().removeClass('show');
|
|
});
|
|
$('.installIntrusion').on('click', function (){
|
|
bt.soft.install('bt_security', function (rdata) {
|
|
location.reload();
|
|
});
|
|
});
|
|
$('.purchaseIntrusion').on('click', function () {
|
|
bt.soft.updata_ltd(true);
|
|
});
|
|
},
|
|
/**
|
|
* @description 切换SSH管理页面
|
|
*/
|
|
cutSshTab:function (index){
|
|
switch (index){
|
|
case 0:
|
|
this.overviewList();
|
|
break;
|
|
case 1:
|
|
this.processWhiteList();
|
|
break;
|
|
case 2:
|
|
this.interceptLog();
|
|
break;
|
|
case 3:
|
|
this.operationLog();
|
|
break;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* @description 设置防入侵开关
|
|
*/
|
|
setIntrusionSwitch:function (status){
|
|
bt_tools.send({
|
|
url:'/plugin?action=a&name=bt_security&s='+ (status?'start_bt_security':'stop_bt_security'),
|
|
},function(rdata){
|
|
bt_tools.msg(rdata);
|
|
}, lan.security.intrusion.switch_req);
|
|
},
|
|
|
|
/**
|
|
* @description 概览列表
|
|
*/
|
|
overviewList:function () {
|
|
var _that = this;
|
|
return bt_tools.table({
|
|
el: '#antiOverviewList',
|
|
url: '/plugin?action=a&name=bt_security&s=get_total_all',
|
|
load: lan.security.intrusion.overview_req,
|
|
default: lan.security.intrusion.overview_default, // 数据为空时的默认提示
|
|
autoHeight: true,
|
|
height: '450px',
|
|
dataFilter: function (data) {
|
|
$('#isIntrusion').prop('checked', data.open);
|
|
$('.totlaDays').html(data.totla_times).css(data.totla_times ? { 'color': '#d9534f', 'font-weight': 'bold' } : {});
|
|
$('.totlaTimes').html(data.totla_days).css(data.totla_days ? { 'color': '#d9534f', 'font-weight': 'bold' } : {});
|
|
return { data: data.system_user };
|
|
},
|
|
column: [
|
|
{title: lan.security.intrusion.user, fid: '0'},
|
|
{title: lan.security.intrusion.total,align: 'center', template:function (row){
|
|
var total = row[4].totla;
|
|
return '<span class="'+ (total > 0?'bt_danger':'') +'">'+ total + '</span>';
|
|
}},
|
|
{title: lan.security.intrusion.today, align: 'center', template:function (row){
|
|
var today = row[4].day_totla;
|
|
return '<span class="'+ (today > 0?'bt_danger':'') +'">'+ today + '</span>';
|
|
}},
|
|
{
|
|
title: lan.security.intrusion.protection,
|
|
fid:'3',
|
|
type: 'switch',
|
|
event: function (row, index, ev, key, that) {
|
|
bt_tools.send({
|
|
url:'/plugin?action=a&name=bt_security&s='+(row[3]?'stop_user_security':'start_user_security'),
|
|
data:{ user: row[0] }
|
|
},function (rdata){
|
|
bt_tools.msg(rdata);
|
|
that.$refresh_table_list();
|
|
}, function (rdata) {
|
|
bt_tools.msg(rdata);
|
|
$(ev.currentTarget).prop('checked', row[3]);
|
|
}, lan.security.intrusion.protection_req);
|
|
}
|
|
},
|
|
{
|
|
title: lan.security.intrusion.log,
|
|
fid:'5',
|
|
type: 'switch',
|
|
event: function (row, index, ev, key, that) {
|
|
bt_tools.send({
|
|
url:'/plugin?action=a&name=bt_security&s='+(row[5]?'stop_user_log':'start_user_log'),
|
|
data:{ uid:row[1] }
|
|
},function (rdata){
|
|
bt_tools.msg(rdata);
|
|
that.$refresh_table_list();
|
|
}, lan.security.intrusion.log_req);
|
|
}
|
|
},
|
|
{title: lan.security.intrusion.remark, fid:'6'},
|
|
{
|
|
title: lan.public.operate,
|
|
type: 'group',
|
|
width: 150,
|
|
align: 'right',
|
|
group: [{
|
|
title: lan.security.intrusion.logs,
|
|
event: function (row, index) {
|
|
_that.getCmdLogs(row)
|
|
}
|
|
}]
|
|
}
|
|
]
|
|
})
|
|
},
|
|
|
|
/**
|
|
* @description 获取命令日志
|
|
* @param {Object} row 当前行数据
|
|
*/
|
|
getCmdLogs:function (row){
|
|
var that = this;
|
|
bt_tools.send({
|
|
url:'/plugin?action=a&name=bt_security&s=get_logs_list',
|
|
data:{ user:row[0] }
|
|
},function (rdata){
|
|
if(rdata.length > 0){
|
|
that.openLogsView(rdata,row[0]);
|
|
}else{
|
|
layer.msg(lan.security.intrusion.no_logs, { icon: 6 });
|
|
}
|
|
})
|
|
},
|
|
|
|
/**
|
|
* @description 打开日志视图
|
|
*/
|
|
openLogsView:function (arr,user){
|
|
var that = this;
|
|
layer.open({
|
|
type: 1,
|
|
title: "["+ user +"] - " + lan.security.intrusion.logs_title,
|
|
area: ['840px', '570px'],
|
|
closeBtn: 2,
|
|
shadeClose: false,
|
|
content: '<div class="logs-list-box pd15">\
|
|
<div class="logs-data-select">\
|
|
<div class="logs-title">' + lan.security.intrusion.select_date + ': </div>\
|
|
<div class="logs-unselect">\
|
|
<div class="logs-inputs"><div class="logs-inputs-tips">'+ arr[0] +'</div></div>\
|
|
<dl class="logs-input-list" data-val="'+ arr[0] +'"></dl>\
|
|
</div>\
|
|
</div>\
|
|
<div class="logs-table bt-table">\
|
|
<div id="logsTable"></div>\
|
|
<div class="logs-page page-style pull-right page"></div>\
|
|
</div>\
|
|
</div>',
|
|
success:function(layers,index){
|
|
var _html = '';
|
|
for(var i = 0;i<arr.length;i++){
|
|
_html += '<dd logs-data="'+ arr[i] +'" '+ ( i === 0?'class="logs_checked"':'' ) +'>'+ arr[i] +'</dd>';
|
|
}
|
|
$('.logs-list-box .logs-input-list').html(_html);
|
|
$('.logs-list-box .logs-inputs').on('click',function(e){
|
|
if(!$(this).parent().hasClass('active')){
|
|
$(this).parent().addClass('active');
|
|
}else{
|
|
$(this).parent().removeClass('active');
|
|
}
|
|
$(document).unbind('click').click(function(e){
|
|
$('.logs-unselect').removeClass('active');
|
|
$(this).unbind('click');
|
|
});
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
});
|
|
|
|
$('.logs-input-list dd').on('click',function(e){
|
|
var _val = $(this).attr('logs-data');
|
|
$(this).addClass('logs_checked').siblings().removeClass('logs_checked');
|
|
$(this).parent().attr('data-val',_val);
|
|
$(this).parent().prev().find('.logs-inputs-tips').html(_val);
|
|
that.renderLogsTable({ page:1, day:_val, user:user});
|
|
});
|
|
|
|
$('.logs-page').unbind().on('click','a.nextPage',function(e){
|
|
var _page = parseInt($(this).attr('data-page'));
|
|
var _day = $('.logs-input-list dd').attr('logs-data');
|
|
that.renderLogsTable({ page:_page, day:_day, user:user});
|
|
});
|
|
|
|
$('.logs-input-list dd:eq(0)').click();
|
|
|
|
}
|
|
})
|
|
},
|
|
|
|
/**
|
|
* @description 渲染日志视图
|
|
* @param {object} data 日志数据
|
|
*/
|
|
renderLogsTable:function (data){
|
|
var _that = this, table = $('#logsTable'), dataTable = table.data('table');
|
|
table.empty();
|
|
return bt_tools.table({
|
|
el: '#logsTable',
|
|
url: '/plugin?action=a&name=bt_security&s=get_user_log',
|
|
load: lan.security.intrusion.logs_req,
|
|
default: lan.security.intrusion.logs_default, // 数据为空时的默认提示
|
|
autoHeight: true,
|
|
column: [
|
|
{title: lan.security.intrusion.user, template:function (row) { return '<span>'+ data.user +'</span>' }},
|
|
{title: lan.security.intrusion.user, fid: 'cwd'},
|
|
{title: lan.security.intrusion.command_executed, fid: 'cmd'},
|
|
{title: lan.security.intrusion.command_path, fid: 'filename'},
|
|
{title: lan.security.intrusion.time,align:'right', template: function (row) {
|
|
return '<span>'+ bt.format_data(row.timestamp) +'</span>';
|
|
}}
|
|
],
|
|
beforeRequest: function (param) {
|
|
return $.extend(param,{ p:data.page, day:data.day, user:data.user, num:11});
|
|
},
|
|
success: function (rdata) {
|
|
$('.logs-page').html(firewall.renderLogsPages(10,data.page,rdata.data.length));
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
* @description 进程白名单
|
|
*/
|
|
processWhiteList:function (){
|
|
var _that = this;
|
|
return bt_tools.table({
|
|
el: '#antiProcessWhiteList',
|
|
url: '/plugin?action=a&name=bt_security&s=porcess_set_up_log',
|
|
load: lan.security.intrusion.whitelist_req,
|
|
default: lan.security.intrusion.whitelist_default, // 数据为空时的默认提示
|
|
autoHeight: true,
|
|
dataFilter: function (data) {
|
|
return {data:data};
|
|
},
|
|
tootls: [
|
|
{ // 按钮组
|
|
type: 'group',
|
|
list: [{
|
|
title: lan.security.intrusion.add_whitelist,
|
|
active: true,
|
|
event: function (ev) {
|
|
bt.open({
|
|
title: lan.security.intrusion.add_whitelist,
|
|
area:'430px',
|
|
btn: [lan.public.confirm, lan.public.cancel],
|
|
content:'<div class="bt-form">\
|
|
<div class="line">\
|
|
<span class="tname" style="font-size: 12px;">' + lan.security.intrusion.process_name + '</span>\
|
|
<div class="info-r"><input type="text" name="cmd" placeholder="' + lan.security.intrusion.process_name_input + '" class="bt-input-text mr10 " style="width:220px;" value="" /></div>\
|
|
</div>\
|
|
</div>\
|
|
<ul class="help-info-text c7" style="margin: 5px 0 0 0;font-size: 12px;"><li style="color:red">' + lan.security.intrusion.add_whitelist_tips + '</li></ul>',
|
|
yes:function (){
|
|
var cmd = $('[name="cmd"]').val();
|
|
bt_tools.send({
|
|
url: '/plugin?action=a&name=bt_security&s=add_porcess_log',
|
|
data: { cmd:cmd }
|
|
},function (rdata){
|
|
bt_tools.msg(rdata);
|
|
_that.processWhiteList()
|
|
})
|
|
}
|
|
})
|
|
}
|
|
}]
|
|
},
|
|
// { // 批量操作
|
|
// type: 'batch', //batch_btn
|
|
// disabledSelectValue: '请选择需要批量操作的站点!',
|
|
// selectList: [{
|
|
// title: "删除项目",
|
|
// url: '/project/nodejs/remove_project',
|
|
// param: function (row) {
|
|
// return { data: JSON.stringify({ project_name: row.name }) }
|
|
// },
|
|
// refresh: true,
|
|
// callback: function (that) {
|
|
//
|
|
// }
|
|
// }
|
|
// ],
|
|
// },
|
|
],
|
|
column: [
|
|
{
|
|
title: lan.security.intrusion.process_whitelist,
|
|
template: function (row) {
|
|
return '<span>'+ row + '</span>';
|
|
}
|
|
},
|
|
{
|
|
title: lan.public.operate,
|
|
type: 'group',
|
|
width: 150,
|
|
align: 'right',
|
|
group: [{
|
|
title: lan.public.del,
|
|
event: function (row, index) {
|
|
console.log(arguments);
|
|
bt.confirm({
|
|
title: lan.security.intrusion.del_whitelist_title + ' ['+ row +']',
|
|
msg: lan.security.intrusion.del_whitelist_msg
|
|
}, function () {
|
|
bt_tools.send({
|
|
url:'/plugin?action=a&name=bt_security&s=del_porcess_log',
|
|
data:{ cmd: row }
|
|
},function (rdata){
|
|
_that.processWhiteList()
|
|
bt_tools.msg(rdata)
|
|
})
|
|
})
|
|
}
|
|
}]
|
|
}
|
|
]
|
|
})
|
|
},
|
|
|
|
/**
|
|
* @description 拦截日志
|
|
*/
|
|
interceptLog:function (){
|
|
var _that = this;
|
|
return bt_tools.table({
|
|
el: '#antiInterceptLog',
|
|
url: '/plugin?action=a&name=bt_security&s=get_log_send',
|
|
load: lan.security.intrusion.intercept_logs_req,
|
|
default: lan.security.intrusion.intercept_logs_default, // 数据为空时的默认提示
|
|
autoHeight: true,
|
|
dataFilter: function (res) {
|
|
return { data: res.data };
|
|
},
|
|
column: [
|
|
{title: lan.security.intrusion.intercept_content, template:function (row){
|
|
return '<span>'+ row.log + '</span>';
|
|
}},
|
|
{title: lan.security.intrusion.trigger_time, width:'170px', align: 'right', template:function (row){
|
|
return '<span>'+ row.addtime + '</span>';
|
|
}}
|
|
]
|
|
})
|
|
},
|
|
|
|
/**
|
|
* @description 操作日志
|
|
*/
|
|
operationLog:function (){
|
|
var _that = this;
|
|
return bt_tools.table({
|
|
el: '#antiOperationLog',
|
|
url: '/plugin?action=a&name=bt_security&s=get_log',
|
|
load: lan.security.intrusion.operation_logs_req,
|
|
default: lan.security.intrusion.operation_logs_default, // 数据为空时的默认提示
|
|
autoHeight: true,
|
|
tootls:[{ //分页显示
|
|
type: 'page',
|
|
jump: true, //是否支持跳转分页,默认禁用
|
|
}],
|
|
column: [
|
|
{title: lan.public.operate, template:function (row){
|
|
return '<span title="'+ row.log +'">'+ row.log + '</span>';
|
|
}},
|
|
{title: lan.security.intrusion.date, fid:'addtime', width:'170px'},
|
|
]
|
|
})
|
|
}
|
|
}
|
|
|
|
// 系统加固
|
|
var system = {
|
|
ipTable: null,
|
|
init: function () {
|
|
$('.state-content').show();
|
|
$('.state-content .system-header').show();
|
|
|
|
bt.soft.get_soft_find('syssafe', function (rdata) {
|
|
// 判断插件未安装 && 插件是否过期
|
|
if (!rdata.setup && rdata.endtime > -1) {
|
|
$('.buySystem').hide();
|
|
}
|
|
// 判断插件已安装 && 插件是否过期
|
|
if ((rdata.setup && rdata.endtime > -1)) {
|
|
$('#system .tab-nav-border, #system .tab-nav-con').show();
|
|
$('#system .installSoft').hide();
|
|
$('#system .tab-nav-border span').eq(0).trigger('click');
|
|
} else {
|
|
$('#system .tab-nav-border, #system .tab-nav-con').hide();
|
|
$('#system .installSoft').show();
|
|
$('.state-content').hide();
|
|
|
|
if (rdata.endtime > - 1) {
|
|
$('.purchaseSystem').hide();
|
|
} else {
|
|
$('.installSystem').hide();
|
|
}
|
|
}
|
|
});
|
|
},
|
|
/**
|
|
* @description SSH管理列表
|
|
*/
|
|
event: function () {
|
|
var that = this;
|
|
|
|
// 切换系统防火墙菜单事件
|
|
$('#system').on('click', '.tab-nav-border span', function () {
|
|
var index = $(this).index();
|
|
that.cutSshTab(index);
|
|
});
|
|
|
|
// 系统加固开关
|
|
$('#isReinforcement').unbind('change').change(function () {
|
|
var $this = $(this)
|
|
bt_tools.send({
|
|
url: '/plugin?name=syssafe&action=a&s=set_open',
|
|
}, function (rdata) {
|
|
bt_tools.msg(rdata);
|
|
}, function (rdata) {
|
|
bt_tools.msg(rdata);
|
|
var checked = $this.prop('checked');
|
|
$this.prop('checked', !checked);
|
|
}, lan.security.system.switch_req);
|
|
});
|
|
|
|
// 添加封锁ip地址
|
|
$('.system_add_ip').click(function () {
|
|
var $ip = $('input[name="system_address"]')
|
|
var ip = $ip.val().trim();
|
|
if (!ip) {
|
|
$ip.focus();
|
|
return layer.msg(lan.security.system.add_ip_val1, { icon: 2 });
|
|
}
|
|
if (!bt.check_ip(ip)) {
|
|
$ip.focus();
|
|
return layer.msg(lan.security.system.add_ip_val2, { icon: 2 });
|
|
}
|
|
bt_tools.send({
|
|
url: '/plugin?name=syssafe&action=a&s=add_ssh_limit',
|
|
data: { ip: ip }
|
|
}, function (rdata) {
|
|
bt_tools.msg(rdata);
|
|
if (rdata.status) $ip.val('');
|
|
that.getBlockIp();
|
|
}, lan.security.system.add_ip_req);
|
|
});
|
|
|
|
$('#system .installSoft .thumbnail-tab li').unbind('click').on('click',function(){
|
|
var index = $(this).index()
|
|
$(this).addClass('on').siblings().removeClass('on')
|
|
$('#system .installSoft .thumbnail-item').eq(index).addClass('show').siblings().removeClass('show')
|
|
});
|
|
|
|
$('.installSystem ').unbind('click').on('click',function (){
|
|
bt.soft.install('syssafe',function (rdata) {
|
|
// location.reload();
|
|
});
|
|
});
|
|
|
|
$('.purchaseSystem').unbind('click').on('click',function (){
|
|
bt.soft.updata_ltd(true);
|
|
});
|
|
},
|
|
|
|
/**
|
|
* @description 切换SSH管理页面
|
|
*/
|
|
cutSshTab:function (index){
|
|
switch (index){
|
|
case 0:
|
|
this.reinforceSystem();
|
|
break;
|
|
case 1:
|
|
this.reinforceBlockIp();
|
|
break;
|
|
case 2:
|
|
this.reinforceLog();
|
|
break;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* @description 渲染系统加固配置
|
|
*/
|
|
renderSafeConfig:function (){
|
|
if (s_key === 'process') {
|
|
system_reinforcement.process_config()
|
|
return;
|
|
}
|
|
|
|
if (s_key === 'ssh') {
|
|
system_reinforcement.ssh_config()
|
|
return;
|
|
}
|
|
bt_tools.send({
|
|
url: '/plugin?name=syssafe&action=a&s=get_safe_config',
|
|
data: { s_key: s_key }
|
|
},function (rdata){
|
|
var chattrs = { "a": "追加", "i": "只读" }
|
|
var states = { true: "<a style=\"color:green;\">已保护</a>", false:"<a style=\"color:red;\">未保护</a>" }
|
|
var tbody = '';
|
|
for (var i = 0; i < rdata.paths.length; i++) {
|
|
tbody += '<tr>\
|
|
<td>' + rdata.paths[i].path + '</td>\
|
|
<td>' + chattrs[rdata.paths[i].chattr] + '</td>\
|
|
<td>' + (rdata.paths[i].s_mode === rdata.paths[i].d_mode ? rdata.paths[i].s_mode:(rdata.paths[i].s_mode + ' >> ' + rdata.paths[i].d_mode)) + '</td>\
|
|
<td>' + states[rdata.paths[i].state] + '</td>\
|
|
<td style="text-align: right;"><a class="btlink" onclick="system_reinforcement.remove_safe_config(\''+ s_key + '\',\'' + rdata.paths[i].path + '\')">删除</a></td>\
|
|
</tr>'
|
|
}
|
|
if (system_reinforcement.message_box_noe) {
|
|
layer.close(system_reinforcement.message_box_noe);
|
|
system_reinforcement.message_box_noe = null;
|
|
}
|
|
|
|
system_reinforcement.message_box_noe = layer.open({
|
|
type: 1,
|
|
title: "配置【" + rdata.name + "】",
|
|
area: ['700px', '550px'],
|
|
closeBtn: 2,
|
|
shadeClose: false,
|
|
content: '<div class="pd15">\
|
|
<div style="border-bottom:#ccc 1px solid;margin-bottom:10px;padding-bottom:10px">\
|
|
<input class="bt-input-text" name="s_path" id="s_path" type="text" value="" style="width:250px;margin-right:5px;" placeholder="被保护的文件或目录完整路径"><a class="glyphicon cursor glyphicon-folder-open" onclick="bt.select_path(\'s_path\')" style="color:#edca5c;margin-right:20px;font-size:16px"></a>\
|
|
<select class="bt-input-text" name="chattr"><option value="i">只读</option><option value="a">追加</option></select>\
|
|
<input class="bt-input-text mr5" name="d_mode" type="text" style="width:120px;" placeholder="权限">\
|
|
<button class="btn btn-success btn-sm va0 pull-right" onclick="system_reinforcement.add_safe_config(\''+ s_key + '\');">添加</button>\</div>\
|
|
<div class="divtable">\
|
|
<div id="jc-file-table" class="table_head_fix" style="max-height:300px;overflow:auto;border:#ddd 1px solid">\
|
|
<table class="table table-hover" style="border:none">\
|
|
<thead>\
|
|
<tr>\
|
|
<th width="360">路径</th>\
|
|
<th>模式</th>\
|
|
<th>权限</th>\
|
|
<th>状态</th>\
|
|
<th style="text-align: right;">操作</th>\
|
|
</tr>\
|
|
</thead>\
|
|
<tbody class="gztr">'+ tbody+'</tbody>\
|
|
</table>\
|
|
</div>\
|
|
</div>\
|
|
<ul class="help-info-text c7 ptb10" style="margin-top: 5px;">\
|
|
<li>【只读】无法修改、创建、删除文件和目录</li>\
|
|
<li>【追加】只能追加内容,不能删除或修改原有内容</li>\
|
|
<li>【权限】设置文件或目录在受保护状态下的权限(非继承),关闭保护后权限自动还原</li>\
|
|
<li>【如何填写权限】请填写Linux权限代号,如:644、755、600、555等,如果不填写,则使用文件原来的权限</li>\
|
|
</ul>\
|
|
</div>',
|
|
success:function (){
|
|
|
|
}
|
|
})
|
|
},'获取系统加固配置');
|
|
},
|
|
|
|
/**
|
|
* @description 防护配置
|
|
*/
|
|
reinforceSystem:function (){
|
|
var _that = this;
|
|
return bt_tools.table({
|
|
el: '#reinforceSystem',
|
|
url: '/plugin?name=syssafe&action=a&s=get_safe_status',
|
|
load: lan.security.system.protection_req,
|
|
default: lan.security.system.protection_default, // 数据为空时的默认提示
|
|
autoHeight: true,
|
|
dataFilter: function (data) {
|
|
$('#isReinforcement').prop('checked', data.open);
|
|
return { data: data.list };
|
|
},
|
|
column: [
|
|
{title: lan.security.system.name, fid:'name'},
|
|
{title: lan.security.system.desc, fid:'ps'},
|
|
{
|
|
title: lan.security.system.status,
|
|
fid:'open',
|
|
type: 'switch',
|
|
event: function (row, index, ev, key, that) {
|
|
bt_tools.send({
|
|
url:'/plugin?action=a&name=syssafe&s=set_safe_status',
|
|
data:{ s_key: row.key }
|
|
},function (rdata){
|
|
bt_tools.msg(rdata);
|
|
that.$refresh_table_list();
|
|
}, function (rdata) {
|
|
bt_tools.msg(rdata);
|
|
$(ev.currentTarget).prop('checked', row[3]);
|
|
}, lan.security.system.change_status_req);
|
|
}
|
|
},
|
|
{
|
|
title: lan.public.operate,
|
|
type: 'group',
|
|
width: 150,
|
|
align: 'right',
|
|
group: [{
|
|
title: lan.public.set,
|
|
event: function (row, index) {
|
|
switch (row.key) {
|
|
case 'ssh':
|
|
_that.renderReinforceSSHView(row);
|
|
break;
|
|
case 'process':
|
|
_that.renderReinforceAbnormalProcess(row);
|
|
break;
|
|
default:
|
|
_that.renderReinforceSystemView(row);
|
|
break;
|
|
}
|
|
}
|
|
}]
|
|
}
|
|
]
|
|
})
|
|
},
|
|
|
|
/**
|
|
* @description 渲染防护配置 服务加固、环境变量加固、用户加固、关键目录加固、计划任务加固
|
|
*/
|
|
renderReinforceSystemView:function (row){
|
|
var that = this;
|
|
bt_tools.open({
|
|
title: lan.security.system.config + " [" + row.name + "]",
|
|
area: ['700px', '600px'],
|
|
btn:false,
|
|
content:'<div class="pd20">\
|
|
<div id="ReinforceSystemTable"></div>\
|
|
<ul class="help-info-text c7 ptb10" style="margin-top: 5px;font-size: 12px;">\
|
|
<li>' + lan.security.system.config_tips1 + '</li>\
|
|
<li>' + lan.security.system.config_tips2 + '</li>\
|
|
<li>' + lan.security.system.config_tips3 + '</li>\
|
|
<li>' + lan.security.system.config_tips4 + '</li>\
|
|
</ul>\
|
|
</div>',
|
|
success:function (){
|
|
that.reinforceSystemFind(row.key);
|
|
}
|
|
})
|
|
},
|
|
|
|
|
|
/**
|
|
* @description 渲染指定系统加固配置列表信息
|
|
* @param {String} s_key 系统加固配置key
|
|
*/
|
|
reinforceSystemFind: function (s_key) {
|
|
var _that = this;
|
|
var chattrs = { "a": lan.security.system.append, "i": lan.security.system.read }
|
|
return bt_tools.table({
|
|
el: '#ReinforceSystemTable',
|
|
url: '/plugin?name=syssafe&action=a&s=get_safe_config',
|
|
default: lan.security.system.config_defualt, // 数据为空时的默认提示
|
|
height: 350,
|
|
beforeRequest: function (data) {
|
|
return $.extend(data, { s_key: s_key });
|
|
},
|
|
dataFilter: function (data) {
|
|
return { data: data.paths };
|
|
},
|
|
column: [
|
|
{title: lan.security.system.path, fid:'path'},
|
|
{title: lan.security.system.model, fid:'chattr', template: function (row) {
|
|
return '<span>'+ chattrs[row.chattr] +'</span>';
|
|
}},
|
|
{title: lan.security.system.permissions, fid:'ps', template: function (row) {
|
|
return '<span>'+ (row.s_mode === row.d_mode?row.s_mode:(row.s_mode + ' >> ' + row.d_mode)) +'</span>';
|
|
}},
|
|
{title: lan.security.system.status, fid:'state', template: function (row) {
|
|
return '<span class="'+ (row.state?'bt_success':'bt_danger') +'">'+ (row.state?lan.security.system.protected:lan.security.system.unprotected) +'</span>';
|
|
}},
|
|
{
|
|
title: lan.public.operate,
|
|
type: 'group',
|
|
width: 150,
|
|
align: 'right',
|
|
group: [{
|
|
title: lan.public.del,
|
|
event: function (row, index, ev, id, that) {
|
|
bt_tools.send({
|
|
url: '/plugin?name=syssafe&action=a&s=remove_safe_path',
|
|
data: { s_key: s_key, path: row.path }
|
|
}, function (rdata) {
|
|
bt_tools.msg(rdata);
|
|
that.$refresh_table_list();
|
|
}, lan.security.system.del_config_req);
|
|
}
|
|
}]
|
|
}
|
|
],
|
|
tootls:[{ // 按钮组
|
|
type: 'group',
|
|
list: [{
|
|
title: lan.security.system.add_config_btn,
|
|
active: true,
|
|
event: function (ev, that) {
|
|
_that.reinforceAddProtectFile(s_key, that);
|
|
}
|
|
}]
|
|
}]
|
|
})
|
|
},
|
|
|
|
/**
|
|
* @description 渲染添加保护文件/目录
|
|
* @param {String} s_key 系统加固配置key
|
|
*/
|
|
reinforceAddProtectFile: function (s_key, table) {
|
|
bt_tools.open({
|
|
title: lan.security.system.add_config_btn,
|
|
area: '480px',
|
|
btn: [lan.public.confirm, lan.public.cancel],
|
|
skin:'addProtectFile',
|
|
content: {
|
|
class: 'pd20',
|
|
form: [
|
|
{
|
|
label: lan.security.system.path,
|
|
group:{
|
|
type: 'text',
|
|
name: 'path',
|
|
width: '250px',
|
|
icon: { type: 'glyphicon-folder-open', event: function (ev) { }, select: 'dir' },
|
|
placeholder: lan.security.system.path_input,
|
|
}
|
|
},
|
|
{
|
|
label: lan.security.system.model,
|
|
group:{
|
|
type: 'select',
|
|
name: 'chattr',
|
|
width: '250px',
|
|
list: [
|
|
{ title: lan.security.system.read, value: 'i' },
|
|
{ title: lan.security.system.append, value: 'a' },
|
|
]
|
|
}
|
|
},
|
|
{
|
|
label: lan.security.system.permissions,
|
|
group: {
|
|
type: 'text',
|
|
name: 'd_mode',
|
|
width: '250px',
|
|
placeholder: lan.security.system.permissions_input,
|
|
}
|
|
}
|
|
]
|
|
},
|
|
yes: function (form, indexs) {
|
|
if (form.path === '') return layer.msg(lan.security.system.path_val1, { icon: 2 });
|
|
if (form.chattr === '') return layer.msg(lan.security.system.model_val1, { icon: 2 });
|
|
if (form.d_mode === '') return layer.msg(lan.security.system.permissions_input, { icon: 2 });
|
|
form.s_key = s_key;
|
|
bt_tools.send({
|
|
url: '/plugin?name=syssafe&action=a&s=add_safe_path',
|
|
data: form
|
|
}, function (rdata) {
|
|
bt_tools.msg(rdata);
|
|
layer.close(indexs);
|
|
table.$refresh_table_list();
|
|
}, lan.security.system.add_config_req);
|
|
}
|
|
})
|
|
},
|
|
|
|
/**
|
|
* @description 渲染配置SSH加固策略
|
|
* @param {object} row 表格单行数据
|
|
*/
|
|
renderReinforceSSHView: function (row) {
|
|
bt_tools.open({
|
|
title: lan.security.system.config + ' [' + row.name + ']',
|
|
area: ['700px'],
|
|
btn:false,
|
|
content:'<div class="pd15">\
|
|
<div style="border-bottom:#ccc 1px solid;padding-bottom:15px">\
|
|
' + lan.security.system.ssh_view1 + '\
|
|
<input class="bt-input-text" min="30" max="1800" name="s_cycle" type="number" value="0" style="width:80px;margin-right:8px;">' + lan.security.system.ssh_view2 + '\
|
|
<input min="3" max="100" class="bt-input-text" name="s_limit_count" type="number" value="0" style="width:80px;margin-right:8px;">' + lan.security.system.ssh_view3 + '\
|
|
<input min="60" class="bt-input-text" name="s_limit" type="number" value="0" style="width:80px;margin-right:8px;">' + lan.security.system.ssh_view4 + '\
|
|
<button class="btn btn-success btn-sm va0 pull-right" id="saveSshConfig">' + lan.public.save + '</button>\
|
|
</div>\
|
|
<ul class="help-info-text c7 ptb10" style="margin-top: 5px;">\
|
|
<li>' + lan.security.system.config_tips5 + '</li>\
|
|
<li>' + lan.security.system.config_tips6 + '</li>\
|
|
<li>' + lan.security.system.config_tips7 + '</li>\
|
|
</ul>\
|
|
</div>',
|
|
success: function () {
|
|
bt_tools.send({
|
|
url: '/plugin?name=syssafe&action=a&s=get_ssh_config',
|
|
}, function (rdata) {
|
|
$('input[name="s_cycle"]').val(rdata.cycle);
|
|
$('input[name="s_limit"]').val(rdata.limit);
|
|
$('input[name="s_limit_count"]').val(rdata.limit_count);
|
|
});
|
|
|
|
// 保存配置
|
|
$('#saveSshConfig').click(function () {
|
|
var data = {
|
|
cycle: $("input[name='s_cycle']").val(),
|
|
limit: $("input[name='s_limit']").val(),
|
|
limit_count: $("input[name='s_limit_count']").val()
|
|
}
|
|
if (data.cycle === '') return layer.msg(lan.security.system.ssh_view5, { icon: 2 });
|
|
if (data.limit === '') return layer.msg(lan.security.system.ssh_view6, { icon: 2 });
|
|
if (data.limit_count === '') return layer.msg(lan.security.system.ssh_view7, { icon: 2 });
|
|
|
|
bt_tools.send({
|
|
url: '/plugin?name=syssafe&action=a&s=save_ssh_config',
|
|
data: data
|
|
}, function (rdata) {
|
|
bt_tools.msg(rdata);
|
|
}, lan.security.system.ssh_view8);
|
|
})
|
|
}
|
|
})
|
|
},
|
|
|
|
/**
|
|
* @description 渲染异常进程监控配置
|
|
* @param {object} row 表格单行数据
|
|
*/
|
|
renderReinforceAbnormalProcess: function (row) {
|
|
var that = this;
|
|
bt_tools.open({
|
|
title: lan.security.system.config + ' [' + row.name + ']',
|
|
area: ['700px', '600px'],
|
|
btn:false,
|
|
content:'<div class="pd20">\
|
|
<div id="AbnormalProcessTable"></div>\
|
|
<ul class="help-info-text c7 ptb10" style="margin-top: 5px;font-size: 12px;">\
|
|
<li>' + lan.security.system.config_tips8 + '</li>\
|
|
<li>' + lan.security.system.config_tips9 + '</li>\
|
|
</ul>\
|
|
</div>',
|
|
success: function () {
|
|
bt_tools.table({
|
|
el: '#AbnormalProcessTable',
|
|
url: '/plugin?name=syssafe&action=a&s=get_process_white',
|
|
height: 343,
|
|
dataFilter: function (rdata) {
|
|
var data = []
|
|
$.each(rdata, function (index, item) {
|
|
data.push({ name: item })
|
|
})
|
|
return { data: data }
|
|
},
|
|
column: [
|
|
{
|
|
title: lan.security.system.process_name,
|
|
fid: 'name'
|
|
},
|
|
{
|
|
title: lan.public.operate,
|
|
type: 'group',
|
|
width: 150,
|
|
align: 'right',
|
|
group: [{
|
|
title: lan.public.del,
|
|
event: function (row, index, ev, id, that) {
|
|
bt_tools.send({
|
|
url: '/plugin?name=syssafe&action=a&s=remove_process_white',
|
|
data: { process_name: row.name }
|
|
}, function (rdata) {
|
|
bt_tools.msg(rdata);
|
|
that.$refresh_table_list();
|
|
}, lan.security.system.del_process_req);
|
|
}
|
|
}]
|
|
}
|
|
],
|
|
tootls:[{ // 按钮组
|
|
type: 'group',
|
|
list: [{
|
|
title: lan.security.system.add_process_btn,
|
|
active: true,
|
|
event: function (ev, that) {
|
|
bt_tools.open({
|
|
title: lan.security.system.add_process_btn,
|
|
area: '450px',
|
|
btn: [lan.public.save, lan.public.cancel],
|
|
skin:'addProtectFile',
|
|
content: {
|
|
class: 'pd20',
|
|
form: [
|
|
{
|
|
label: lan.security.system.process_name,
|
|
group:{
|
|
type: 'text',
|
|
name: 'process_name',
|
|
width: '250px',
|
|
placeholder: lan.security.system.process_name_input,
|
|
}
|
|
}
|
|
]
|
|
},
|
|
yes: function (form, indexs) {
|
|
if (form.process_name === '') return layer.msg(lan.security.system.process_name_input, { icon: 2 });
|
|
bt_tools.send({
|
|
url: '/plugin?name=syssafe&action=a&s=add_process_white',
|
|
data: form
|
|
}, function (rdata) {
|
|
bt_tools.msg(rdata);
|
|
layer.close(indexs);
|
|
that.$refresh_table_list();
|
|
}, lan.security.system.add_config_req)
|
|
}
|
|
})
|
|
}
|
|
}]
|
|
}]
|
|
})
|
|
}
|
|
})
|
|
},
|
|
|
|
/**
|
|
* @description 封锁IP
|
|
*/
|
|
reinforceBlockIp: function () {
|
|
var _that = this;
|
|
var table = bt_tools.table({
|
|
el: '#reinforceBlockIp',
|
|
url: '/plugin?name=syssafe&action=a&s=get_ssh_limit_info',
|
|
default: lan.security.system.ip_list_default, // 数据为空时的默认提示
|
|
autoHeight: true,
|
|
dataFilter: function (data) {
|
|
return {data:data};
|
|
},
|
|
column: [
|
|
{title: lan.security.system.ip, fid: 'address'},
|
|
{title: lan.security.system.unblock_time, fid:'end', width: 300, template:function (row){
|
|
return '<span>'+ (row.end ? bt.format_data(row.end) : lan.security.system.manually_unblock) + '</span>';
|
|
}},
|
|
{
|
|
title: lan.public.operate,
|
|
type: 'group',
|
|
width: 150,
|
|
align: 'right',
|
|
group: [{
|
|
title: lan.security.system.unblock_now,
|
|
event: function (row, index) {
|
|
bt_tools.send({
|
|
url: '/plugin?name=syssafe&action=a&s=remove_ssh_limit',
|
|
data: { ip: row.address }
|
|
}, function (rdata) {
|
|
bt_tools.msg(rdata);
|
|
_that.getBlockIp();
|
|
}, lan.security.system.unblock_now_req);
|
|
}
|
|
}]
|
|
}
|
|
]
|
|
});
|
|
this.ipTable = table
|
|
return table
|
|
},
|
|
|
|
/**
|
|
* @description 表格重新生成封锁IP
|
|
*/
|
|
getBlockIp: function () {
|
|
if (this.ipTable) this.ipTable.$refresh_table_list()
|
|
},
|
|
|
|
/**
|
|
* @description 操作日志
|
|
*/
|
|
reinforceLog:function (){
|
|
var _that = this;
|
|
$('#reinforceLog').empty()
|
|
return bt_tools.table({
|
|
el: '#reinforceLog',
|
|
url: '/data?action=getData',
|
|
default: lan.security.system.operate_logs_default, // 数据为空时的默认提示
|
|
autoHeight: true,
|
|
beforeRequest: function (param) {
|
|
return $.extend(param,{ search: 'System hardening', table:'logs', order:'id desc'});
|
|
},
|
|
tootls: [
|
|
{ //分页显示
|
|
type: 'page',
|
|
numberStatus: true, // 是否支持分页数量选择,默认禁用
|
|
jump: true, //是否支持跳转分页,默认禁用
|
|
}
|
|
],
|
|
column: [
|
|
{ title: lan.security.system.date, fid: 'addtime' },
|
|
{ title: lan.security.system.detail, fid: 'log' },
|
|
],
|
|
})
|
|
}
|
|
}
|
|
|
|
// 日志审计
|
|
var logAudit = {
|
|
data:{},
|
|
init: function () {
|
|
this.getLogFiles();
|
|
$('#logAudit .logAuditTab').empty();
|
|
$('#logAudit').height($(window).height() - 180)
|
|
},
|
|
/**
|
|
* @description SSH管理列表
|
|
*/
|
|
event:function (){
|
|
var that = this;
|
|
|
|
$(window).unbind('resize').on('resize', function () {
|
|
if ($('.logAuditTabContent').is(':hidden')) return;
|
|
var height = $(window).height() - 180;
|
|
$('#logAudit').height(height);
|
|
$('#logAuditTable .divtable').css('max-height', height - 150);
|
|
});
|
|
|
|
$('.logAuditTab').unbind('click').on('click', '.logAuditItem',function (){
|
|
var data = $(this).data(), list = [];
|
|
$.each(data.list, function (key, val){
|
|
list.push(val.log_file)
|
|
});
|
|
$(this).addClass('active').siblings().removeClass('active');
|
|
that.getSysLogs({log_name: data.log_file, list: list, p:1});
|
|
});
|
|
|
|
$('#logAuditPages').unbind('click').on('click', 'a', function (){
|
|
var page = $(this).data('page');
|
|
that.getSysLogs({log_name: that.data.log_name, list: that.data.list, p: page});
|
|
return false;
|
|
});
|
|
},
|
|
|
|
/**
|
|
* @description 获取日志审计类型
|
|
*/
|
|
getLogFiles: function () {
|
|
var that = this;
|
|
bt_tools.send({
|
|
url: '/safe/syslog/get_sys_logfiles'
|
|
}, function (rdata) {
|
|
if(rdata.hasOwnProperty('status') ){
|
|
if(!rdata.status && rdata.msg === 'Sorry, this feature is only available for Pro users!') {
|
|
$('.logAuditTabContent').hide();
|
|
$('#logAudit .daily-thumbnail').show();
|
|
$('#logAudit').css('height', 'auto');
|
|
return false;
|
|
}
|
|
}
|
|
var initData = rdata[0], list = []
|
|
$.each(rdata, function (i, v) {
|
|
var logSize = 0;
|
|
$.each(v.list,function (key, val){
|
|
logSize += val.size;
|
|
})
|
|
$('#logAudit .logAuditTab').append($('<div class="logAuditItem" title="'+ (v.name + ' - '+ v.title +'('+ ToSize(v.size)) +'" data-file="'+ v.log_file +'">' + v.name + ' - '+ v.title +'('+ ToSize(v.size + logSize) +')</div>').data(v))
|
|
})
|
|
$('#logAudit .logAuditTab .logAuditItem:eq(0)').trigger('click')
|
|
}, { load: lan.security.logs.get_logfiles, verify: false })
|
|
},
|
|
|
|
/**
|
|
* @description 获取日志审计类型列表
|
|
*/
|
|
getSysLogs: function (param) {
|
|
var that = this;
|
|
var page = param.p || 1;
|
|
that.data = { log_name: param.log_name, list: param.list, limit: 20, p: page }
|
|
bt_tools.send({
|
|
url: '/safe/syslog/get_sys_log',
|
|
data: {data:JSON.stringify(that.data)}
|
|
}, function (rdata) {
|
|
if(typeof rdata[0] === 'string'){
|
|
$('#logAuditPre').show().siblings().hide()
|
|
that.renderLogsAuditCommand(rdata)
|
|
}else{
|
|
$('#logAuditTable,#logAuditPages').show()
|
|
$('#logAuditPre').hide()
|
|
that.renderLogsAuditTable({ p:page }, rdata)
|
|
}
|
|
}, {
|
|
load: lan.security.logs.get_sys_logs,
|
|
verify: false
|
|
})
|
|
},
|
|
|
|
/**
|
|
* @description 渲染日志审计命令
|
|
* @param {Object} rdata 参数
|
|
*/
|
|
renderLogsAuditCommand: function (rdata) {
|
|
var logAuditLogs = $('#logAuditPre');
|
|
var str = rdata.join('\r').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"');
|
|
logAuditLogs.html('<pre style="height: 600px; background-color: #333; color: #fff; overflow-x: hidden; word-wrap:break-word; white-space:pre-wrap;">' + str + '</pre>');
|
|
logAuditLogs.find('pre').scrollTop(9999999999999).css({height: $(window).height() - 180})
|
|
},
|
|
|
|
/**
|
|
* @description 渲染日志审计表格
|
|
* @param {object} param 参数
|
|
*/
|
|
renderLogsAuditTable: function (param, rdata){
|
|
var that = this;
|
|
var column = [], data = rdata[0] ? rdata[0] : { 'Time': '--', 'Role': '--', 'Even': '--' }, i = 0;
|
|
$.each(data, function (key) {
|
|
// console.log(key === '时间',i)
|
|
column.push({ title: key, fid: key,width: (key === 'Time' && i === 0) ? '200px' : (key === 'Time'?'300px':'') })
|
|
i++;
|
|
})
|
|
$('#logAuditTable').empty()
|
|
return bt_tools.table({
|
|
el: '#logAuditTable',
|
|
url:'/safe/syslog/get_sys_log',
|
|
default: lan.security.logs.logs_default, // 数据为空时的默认提示
|
|
column: column,
|
|
dataFilter: function (data) {
|
|
if(typeof data.status === "boolean" && !data.status){
|
|
$('.logAuditTabContent').hide().next().show();
|
|
return { data: [] }
|
|
}
|
|
if(typeof data[0] === 'string'){
|
|
$('#logAuditPre').show().siblings().hide()
|
|
that.renderLogsAuditCommand(rdata)
|
|
}else{
|
|
$('#logAuditTable,#logAuditPages').show()
|
|
$('#logAuditPre').hide()
|
|
return {data:data}
|
|
}
|
|
},
|
|
beforeRequest: function (param) {
|
|
delete param.data
|
|
return {data:JSON.stringify($.extend(that.data,param))}
|
|
},
|
|
tootls: [{ // 按钮组
|
|
type: 'group',
|
|
list: [{
|
|
title: lan.security.logs.refresh,
|
|
active: true,
|
|
event: function (ev) {
|
|
that.getSysLogs(that.data)
|
|
}
|
|
}]
|
|
},{ // 搜索内容
|
|
type: 'search',
|
|
width: '300px',
|
|
placeholder: lan.security.logs.search,
|
|
searchParam: 'search', //搜索请求字段,默认为 search
|
|
},{
|
|
type:'page',
|
|
number:20
|
|
}],
|
|
success:function (config){
|
|
$('#logAuditTable .divtable').css('max-height', $(window).height() - 280)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// 面板日志
|
|
var logs = {
|
|
init: function () {
|
|
$('#logsBody .tab-nav-border span').eq(0).trigger('click');
|
|
},
|
|
/**
|
|
* @description 事件绑定
|
|
*/
|
|
event:function (){
|
|
var that = this;
|
|
$('#logsBody').unbind('click').on('click','.tab-nav-border span',function(){
|
|
var index = $(this).index();
|
|
that.cutLogsTab(index);
|
|
});
|
|
$(window).unbind('resize').resize(function (){
|
|
$('#runningLog .crontab-log').height((window.innerHeight - 310) +'px')
|
|
});
|
|
},
|
|
|
|
/**
|
|
* @description 切换日志菜单
|
|
* @param {number} index 索引
|
|
*/
|
|
cutLogsTab:function(index){
|
|
switch (index) {
|
|
case 0:
|
|
this.operationLogTable()
|
|
break;
|
|
case 1:
|
|
this.runningLog()
|
|
break;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* @description 日志表格
|
|
*/
|
|
operationLogTable:function(){
|
|
var that = this;
|
|
return bt_tools.table({
|
|
el: '#operationLog',
|
|
url: '/data?action=getData',
|
|
default: lan.security.logs.operate_default, // 数据为空时的默认提示
|
|
autoHeight: true,
|
|
beforeRequest: function (data) {
|
|
return $.extend(data, {table: 'logs',order: 'id desc'})
|
|
},
|
|
tootls: [
|
|
{ // 按钮组
|
|
type: 'group',
|
|
list: [{
|
|
title: lan.security.logs.refresh,
|
|
active:true,
|
|
event: function (ev, _that) {
|
|
_that.$refresh_table_list(true)
|
|
}
|
|
},{
|
|
title: lan.security.logs.clear,
|
|
event: function (ev) {
|
|
bt.firewall.clear_logs(function(){
|
|
that.operationLogTable()
|
|
});
|
|
}
|
|
}]
|
|
},
|
|
{ // 搜索内容
|
|
type: 'search',
|
|
placeholder: lan.security.logs.operate_search,
|
|
searchParam: 'search', //搜索请求字段,默认为 search
|
|
},
|
|
{ //分页显示
|
|
type: 'page',
|
|
numberStatus: true, // 是否支持分页数量选择,默认禁用
|
|
jump: true, //是否支持跳转分页,默认禁用
|
|
}],
|
|
column: [
|
|
{title: lan.security.logs.user, fid: 'username', width: 80},
|
|
{title: lan.security.logs.type, fid: 'type', width: 150},
|
|
{title: lan.security.logs.details,fid: 'log'},
|
|
{title: lan.security.logs.time, fid: 'addtime', width:150}
|
|
]
|
|
})
|
|
},
|
|
|
|
/**
|
|
* @description 运行日志
|
|
*/
|
|
runningLog:function (){
|
|
var that = this;
|
|
bt_tools.send({
|
|
url:'/config?action=get_panel_error_logs'
|
|
},function (rdata){
|
|
$('#runningLog').html('<div style="font-size: 0;">\
|
|
<button type="button" title="' + lan.security.logs.refresh + '" class="btn btn-success btn-sm mr5 refreshRunLogs" ><span>' + lan.security.logs.refresh + '</span></button>\
|
|
<button type="button" title="' + lan.security.logs.clear + '" class="btn btn-default btn-sm mr5 clearRunningLog" ><span>' + lan.security.logs.clear + '</span></button>\
|
|
<pre class="crontab-log">'+ (rdata.msg || lan.security.logs.no_logs) +'</pre>\
|
|
</div>');
|
|
$('.refreshRunLogs').click(function (){
|
|
that.runningLog();
|
|
})
|
|
$('.clearRunningLog').click(function (){
|
|
that.clearRunningLog();
|
|
})
|
|
|
|
$('#runningLog .crontab-log').height((window.innerHeight - 310) +'px')
|
|
var div = document.getElementsByClassName('crontab-log')[0]
|
|
div.scrollTop = div.scrollHeight;
|
|
}, lan.security.logs.get_logs_req);
|
|
},
|
|
|
|
/**
|
|
* @description 清除日志
|
|
*/
|
|
clearRunningLog:function (){
|
|
var that = this;
|
|
bt.confirm({
|
|
title: lan.security.logs.clear_logs_title,
|
|
msg: lan.security.logs.clear_logs_msg,
|
|
},function (){
|
|
bt_tools.send({
|
|
url:'/config?action=clean_panel_error_logs'
|
|
},function (rdata){
|
|
bt.msg(rdata)
|
|
that.runningLog()
|
|
}, lan.security.logs.clear_logs_req)
|
|
})
|
|
}
|
|
}
|
|
|
|
firewall.init();
|