分类 默认分类 下的文章

你可以尝试在参数中加上container属性,比如

{
...
container: '#j-datetimepicker-wrap'
...
}

这个属性设置为你的控件放到哪个容器对象中里面。

这个容器(j-datetimepicker-wrap) 请加上 position: relative; 的样式,这是为了计算控件需要的偏移量,就是坐标位置。

源代码有这么一行

this.container = options.container || 'body';

如果你没有设置container这个属性,那么默认你的日历控件是在body里面

如果你绑定了弹出层div,那么日历控件就和弹出层是一体的了

nftables 相较于 iptables 的优点
更新速度更快
在 iptables 中添加一条规则,会随着规则数量增多而变得非常慢。这种状况对 nftables 而言就不存在了,因为 nftables 使用原子的快速操作来更新规则集合。

内核更新更少。
使用 iptables 时,每一个匹配或投递都需要内核模块的支持。因此,如果你忘记一些东西或者要添加新的功能时都需要重新编译内核。而在 nftables 中就不存在这种情况了, 因为在 nftables 中,大部分工作是在用户态完成的,内核只知道一些基本指令(过滤是用伪状态机实现的)。例如,icmpv6 支持是通过 nft 工具的一个简单的补丁实现的,而在 iptables 中这种类型的更改需要内核和 iptables 都升级才可以。

nftables 基础操作
nftables 和 iptables 一样,由表(table)、链(chain)和规则(rule)组成,其中表包含链,链包含规则,规则是真正的动作。

在 nftables 中,表是链的容器。所以开始使用 nftables 时你首先需要做的是添加至少一个表。然后,你可以向你的表里添加链,然后往链里添加规则。

nftables 的表管理
与 iptables 中的表不同,nftables 中没有内置表。表的数量和名称由用户决定。但是,每个表只有一个地址簇,并且只适用于该簇的数据包。nftables 表可以指定为以下五个簇中的一个:

nftables 簇    对应 iptables 的命令行工具
ip    iptables
ip6    ip6tables
inet    iptables 和 ip6tables
arp    arptables
bridge    ebtables

ip(即 IPv4)是默认簇,如果未指定簇,则使用该簇。如果要创建同时适用于 IPv4 和 IPv6 的规则,请使用 inet 簇 。inet 允许统一 ip 和 ip6 簇,以便更容易地定义规则。

注意: inet 不能用于 nat 类型的链,只能用于 filter 类型的链。

下面我们来看看 nftables 是如何进行表管理操作的,以下为 nftables 创建表的基本命令语法。

sudo nft list tables [<family>]
sudo nft list table [<family>] <name> [-n] [-a]
sudo nft (add | delete | flush) table [<family>] <name>

这里我们以创建一个 inet 簇的表为例,演示如何创建和管理一个新的表。

创建表

# 创建一个新的表
sudo nft add table inet mytable

列出表

# 列出所有表
sudo nft list tables

# 列出指定族的所有表
sudo nft list tables inet

# 列出 inet 簇中 mytable 表中的所有规则
sudo nft list table inet mytable

删除表

# 删除一个表
sudo nft delete table inet mytable

注意:只能删除不包含链的表。

清空表

# 清空一个表中的所有规则
sudo nft flush table inet mytable

一款开源的waf网关,感觉不错 janusec

Janusec应用网关,一种适用于各种场景(公有云、私有云、传统IDC等)的应用安全解决方案,提供WAF(Web应用防火墙)、CC防护、身份认证、安全运维、Web路由、负载均衡、自动化证书等功能,可用于构建安全的、可扩展的应用。

产品特点:
WAF (Web Application Firewall, Web应用防火墙,天然支持HTTPS且不需要Agent )
CC防护(多道防线)
统一的Web化管理
证书加密保护
负载均衡(可扩展的部署架构)
让防御更简单
SQL注入
跨站脚本
敏感数据泄露
CC攻击
阻断(Block)、验证码(Captcha)等多种策略
支持多个检查点的组合策略
让管理更简单
统一的Web化管理中心
架构可扩展
多网关节点支持
自动化策略同步
证书保护
私钥加密存储
只在内存使用

https://doc.janusec.com/cn/introduction/

ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。

在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。

什么是ModSecurity
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。

ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。

ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。

官网:https://www.modsecurity.org/

什么是OWASP CRS
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。

ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。

HTTP Protection(HTTP防御)
HTTP协议和本地定义使用的detectsviolations策略。

Real-time Blacklist Lookups(实时黑名单查询)
利用第三方IP名单。

HTTP Denial of Service Protections(HTTP的拒绝服务保护)
防御HTTP的洪水攻击和HTTP Dos攻击。

Common Web Attacks Protection(常见的Web攻击防护)
检测常见的Web应用程序的安全攻击。

Automation Detection(自动化检测)
检测机器人,爬虫,扫描仪和其他表面恶意活动。

Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
检测通过Web应用程序上传的恶意文件。

Tracking Sensitive Data(跟踪敏感数据)
信用卡通道的使用,并阻止泄漏。

Trojan Protection(木马防护)
检测访问木马。

Identification of Application Defects(应用程序缺陷的鉴定)
检测应用程序的错误配置警报。

Error Detection and Hiding(错误检测和隐藏)
检测伪装服务器发送错误消息。

安装ModSecurity
软件基础环境准备
下载对应软件包

$ cd /root
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz

安装Nginx和ModSecurity依赖包
Centos/RHEL

$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel

Ubuntu/Debian

$ apt-get install libreadline-dev libncurses5-dev libssl-dev perl make build-essential git  libpcre3 libpcre3-dev libtool autoconf apache2-dev libxml2 libxml2-dev libcurl4-openssl-dev g++ flex bison curl doxygen libyajl-dev libgeoip-dev dh-autoreconf libpcre++-dev

编译安装ModSecurity
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。

方法一:编译为Nginx静态模块

编译为独立模块(modsecurity-2.9.1)

$ tar xzvf modsecurity-2.9.1.tar.gz
$ cd modsecurity-2.9.1/
$ ./autogen.sh
$ ./configure --enable-standalone-module --disable-mlogc
$ make

编译安装Nginx并添加ModSecurity模块

$ tar xzvf nginx-1.9.2.tar.gz
$ cd nginx-1.9.2
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
$ make && make install

方法二:编译通过ModSecurity-Nginx Connector加载的动态模块

编译LibModSecurity(modsecurity-3.0)

$ cd /root
$ git clone https://github.com/SpiderLabs/ModSecurity
$ cd ModSecurity
$ git checkout -b v3/master origin/v3/master
$ sh build.sh
$ git submodule init
$ git submodule update
$ ./configure
$ make
$ make install

LibModSecurity会安装在/usr/local/modsecurity/lib目录下。

$ ls /usr/local/modsecurity/lib
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0

编译安装Nginx并添加ModSecurity-Nginx Connector模块
使用ModSecurity-Nginx模块来连接LibModSecurity

$ cd /root
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
$ tar xzvf nginx-1.9.2.tar.gz
$ cd nginx-1.9.2
$ ./configure --add-module=/root/modsecurity-nginx
$ make
$ make && make install

添加OWASP规则
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。

下载OWASP规则并生成配置文件

$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
$ cp crs-setup.conf.example  crs-setup.conf

配置OWASP规则
编辑crs-setup.conf文件

$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf

默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。

启用ModSecurity模块和CRS规则
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。

modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。

$ cd /root/modsecurity-2.9.1/
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
$ cp unicode.mapping  /usr/local/nginx/conf/

将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。

$ vim /usr/local/nginx/conf/modsecurity.conf

SecRuleEngine On
ModSecurity中几个常用配置说明:

1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。

2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。

3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。

4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。

在owasp-modsecurity-crs/rules下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。

3.x版本CRS

$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
# 生成例外排除请求的配置文件
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
$ cp rules/*.data /usr/local/nginx/conf

为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。

$ vim /usr/local/nginx/conf/modsec_includes.conf

include modsecurity.conf
include owasp-modsecurity-crs/crs-setup.conf
include owasp-modsecurity-crs/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
include owasp-modsecurity-crs/rules/REQUEST-901-INITIALIZATION.conf
Include owasp-modsecurity-crs/rules/REQUEST-903.9002-WORDPRESS-EXCLUSION-RULES.conf
include owasp-modsecurity-crs/rules/REQUEST-905-COMMON-EXCEPTIONS.conf
include owasp-modsecurity-crs/rules/REQUEST-910-IP-REPUTATION.conf
include owasp-modsecurity-crs/rules/REQUEST-911-METHOD-ENFORCEMENT.conf
include owasp-modsecurity-crs/rules/REQUEST-912-DOS-PROTECTION.conf
include owasp-modsecurity-crs/rules/REQUEST-913-SCANNER-DETECTION.conf
include owasp-modsecurity-crs/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf
include owasp-modsecurity-crs/rules/REQUEST-921-PROTOCOL-ATTACK.conf
include owasp-modsecurity-crs/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf
include owasp-modsecurity-crs/rules/REQUEST-931-APPLICATION-ATTACK-RFI.conf
include owasp-modsecurity-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf
include owasp-modsecurity-crs/rules/REQUEST-933-APPLICATION-ATTACK-PHP.conf
include owasp-modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf
include owasp-modsecurity-crs/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf
include owasp-modsecurity-crs/rules/REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION.conf
include owasp-modsecurity-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf
include owasp-modsecurity-crs/rules/RESPONSE-950-DATA-LEAKAGES.conf
include owasp-modsecurity-crs/rules/RESPONSE-951-DATA-LEAKAGES-SQL.conf
include owasp-modsecurity-crs/rules/RESPONSE-952-DATA-LEAKAGES-JAVA.conf
include owasp-modsecurity-crs/rules/RESPONSE-953-DATA-LEAKAGES-PHP.conf
include owasp-modsecurity-crs/rules/RESPONSE-954-DATA-LEAKAGES-IIS.conf
include owasp-modsecurity-crs/rules/RESPONSE-959-BLOCKING-EVALUATION.conf
include owasp-modsecurity-crs/rules/RESPONSE-980-CORRELATION.conf
include owasp-modsecurity-crs/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf

注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。

配置Nginx支持Modsecurity
启用Modsecurity
使用静态模块加载的配置方法
在需要启用Modsecurity的主机的location下面加入下面两行即可:

ModSecurityEnabled on;
ModSecurityConfig modsec_includes.conf;

修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。

$ vim /usr/local/nginx/conf/nginx.conf

server {
  listen       80;
  server_name  example.com;

  location / {
    ModSecurityEnabled on;
    ModSecurityConfig modsec_includes.conf;
    root   html;
    index  index.html index.htm;
  }
}

使用动态模块加载的配置方法
在需要启用Modsecurity的主机的location下面加入下面两行即可:

modsecurity on;
modsecurity_rules_file modsec_includes.conf;

修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。

$ vim /usr/local/nginx/conf/nginx.conf

server {
  listen  80;
  server_name localhost mike.hi-linux.com;
  access_log /var/log/nginx/yourdomain.log;

  location / {

  modsecurity on;
  modsecurity_rules_file modsec_includes.conf;
  root   html;
  index  index.html index.htm;
}
}

验证Nginx配置文件

$ /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

启动Nginx

$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

测试Modsecurity
ModSecurity现在已经成功配置了OWASP的规则。现在我们将测试对一些最常见的Web应用攻击。来测试ModSecurity是否挡住了攻击。这里我们启用了XSS和SQL注入的过滤规则,下面的例子中不正常的请求会直接返回403。

Brotli是一种开源的压缩算法,可以让数据在互联网上以更快的速度传输。

现代的网页通常包含了由大量的HTML, CSS和JavaScript代码编写的图片、视频或其他大型文件数据,导致了网页打开的速度很慢。如果能有一种好的压缩算法将这些内容和数据进行压缩后传输,那么用户只需要等待很短时间就可以完全加载整个页面上的内容。

2015年9月谷歌发布了Brotli压缩算法,直到现在才开始被大多数的浏览器所兼容。

现在最新的HTTP服务器程序Apache和nginx也支持了Brotli压缩算法,谷歌和一些商业公司也开始对Brotli提供支持服务。和谷歌的gzip解压缩格式比起来,Brotli能在此基础上将数据在压缩20~25%。它通过一本英语、西班牙语、汉语、印地语、俄语、阿拉伯语的常用字、词汇字典,结合机器语言,特别是HTML和JavaScript的常用术语,能够将数据比gzip, bzip2, LZMA等压缩算法的基础上进一步进行压缩,减少了数据内容的容量大小,使得网页在加载时速度更快。

Cloudflare公司的工程师们为了验证Brotli压缩算法比其他压缩算法更好,还特意做了实验来说明。还有http://Discouse.org的联合创始人Sam Saffron给各种压缩算法的文件压缩大小和压缩速度打分,事后证明Brotli不仅全面吊打其他压缩算法,还能支持HTTPS网络加密下的压缩。

有些网络服务运营商已经开始部署Brotli压缩服务,例如DreamHost公司在2016年12 月就发布了DreamPress插件,可以在使用nginx来TLS连接时,直接调用谷歌在Brotli内置的ngx模块来部署Brotli。

当然目前还有一些浏览器并不支持这种压缩算法,比如苹果的safari浏览器,微软也只有Edge浏览器才支持,老旧的IE并不支持,而且微软自家的web server套件IIS目前还没有免费的插件可以支持Brotli压缩,这就意味着使用IIS作为web server的网站也不无法支持Brotli压缩传输。

用户如果想要检查网站是否使用了Brotli压缩进行传输,可以在浏览器的页面解码的头部分,会看到br:

最早使用的是“bro”缩写,但是由于在美式英语中,这个缩写还有其他的含义,因此最后改为了“br”,这样还能节省字节。

虽然在日常使用中,普通的用户对Brotli压缩传输的内容不会有特别的感受,但只要是能加快网络数据内容的传输又有什么不好呢?