“ 最近在工作上遇到一点问题,问了大佬、百度,都没有很好地解决;经过大量搜索查阅以及试验,终于将问题解决。于是写下这篇文章以提醒自己,也可供读者参考。”
环境:CentOS-7-x86_64-LiveGNOME
-2003.iso+Xshell
版本:nginx/1.16.1 + modsecurity
一、安装相关依赖工具
yum install -y git wget epel-releaseyum install -y gcc-c++ flex bison yajl yajl-devel curl-devel curl GeoIP-devel doxygen zlib-devel pcre-devel lmdb-devel libxml2-devel ssdeep-devel lua-devel libtool autoconf automake
注:如果不成功,可能是yum仓库没装好,此处可自行百度
二、安装Modsecurity
cd /usr/localgit clone https://github.com/SpiderLabs/ModSecurity//执行上面的步骤会生成Modsecurity目录
注:用时较长,大约40分钟,可能会有网速慢或者下载失败的现象,重复尝试几遍就好了
cd ModSecuritygit checkout -b v3/master origin/v3/master
git submodule init
git submodule update
注:用时几分钟。这一步我做了两次,可能是因为网络阻塞。如果不成功,多尝试几次。
sh build.sh
先看看/usr/local下新生成有几个目录:
只有Modsecurity
进入到/usr/local/Modsecurity
//还是在/usr/local/Modsecurity目录下操作./configure make //需要的时间稍微久一点,10分钟左右 //编译make install //安装//上述安装三部曲会在上一级目录/usr/local下 生成modsecurity目录
./configure图示
第一次 make图示(出错) -------- 没有出错可略过
根据提示去到/usr/local/include,把对应的文件删了(正常情况下/usr/local存放的是下载的包,不会有诸如bin、include、lib之类的解压目录,所以放心删,一定是之前安装过什么才会存在这些目录),然后回去/usr/local/Modsecurity执行make clean命令
解决方法:
rm /usr/local/include * -rfcd /usr/local/Modsecuritymake cleanmake
由于本人是第二次装nginx+modsecurity,所以才会出现这样的问题
第二次 make图示(成功)
第一次make install图示 ----- 和上面是同样问题 上述问题解决后,该问题也迎刃而解
第二次make install
编译安装三部曲以后,在/usr/local下生成modsecurity目录
三、安装nginx与ModSecurity-nginx
cd /usr/localgit clone https://github.com/SpiderLabs/ModSecurity-nginx//上述步骤会在/usr/local下生成Modsecurity-nginx的目录
wget http://nginx.org/download/nginx-1.16.1.tar.gz//上述步骤会在/usr/local下出现nginx-1.16.1.tar.gz文件
tar -xvzf nginx-1.16.1.tar.gzcd /usr/local/nginx-1.16.1./configure --add-module=/usr/local/ModSecurity-nginx//如果出错,也可以直接./configuremakemake install//做完上述这些步骤 当前目录(/usr/local)就会生成一个nginx的目
./configure --add-module=/usr/local/ModSecurity-nginx 图示
make图示
make install图示
在/usr/local下生成nginx目录
四、测试效果
输入ifconfig查看ip
我的ip:192.168.200.132
启动nginx
/usr/local/nginx/sbin/nginx
尝试启动 发现有问题
使用以下命令解决:
sudo fuser -k 80/tcp
已经没问题了
1、未开启nginx的状态下,用浏览器访问虚拟机配的ip
效果:
2、开启nginx服务后,用浏览器访问虚拟机配的ip:
/usr/local/nginx/sbin/nginx或cd /usr/local/nginx/sbin./nginx
效果:
模拟攻击,测试未启动ModSecurity时的访问效果访问URL为:http://服务器IP/?param=%22%3E%3Cscript%3Ealert(1);%3C/script%3E
结论:配置了nginx服务的虚拟机,只有开启了nginx服务,才能访问其IP
一些网站攻击:譬如SQL注入、XSS攻击,也不会被拦截。
ModSecurity作为一款入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
所以我们需要在linux以及nginx下配置modsecurity
五、最后配置
创建用于存在配置文件的文件夹
mkdir /usr/local/nginx/conf/modsecurity
1、将/usr/local/Modsecurity/modsecurity.conf-recommended
复制到/usr/local/nginx/conf/modsecurity,并重命名为modsecurity.conf;
2、将/usr/local/Modsecurity/unicode.mapping
复制到/usr/local/nginx/conf/modsecurity;
下载规则文件压缩包
owasp-modsecurity-crs-3.3-dev.zip
移动到/usr/local下
解压
unzip owasp-modsecurity-crs-3.3-dev.zip
1、解压后复制crs-setup.conf.example
到/usr/local/nginx/conf/modsecurity/下并重命名为crs-setup.conf;
2、复制rules文件夹
到/usr/local/nginx/conf/modsecurity/下,
同时修改REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example与RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example两个文件的文件名,将".example"删除,可将自己写的规则放置于此两个文件中;
编辑nginx.conf
(/usr/local/nginx/conf/nginx.conf)
在http或server节点中添加以下内容(在http节点添加表示全局配置,在server节点添加表示为指定网站配置):
vim /usr/local/nginx/conf/nginx.conf//在下面添加如下内容,下图所示modsecurity on;modsecurity_rules_file /usr/local/nginx/conf/modsecurity/modsecurity.conf;
编辑modsecurity.conf
(/usr/local/nginx/conf/modsecurity/modsecurity.conf)
SecRuleEngine DetectionOnly改为SecRuleEngine On
同时添加以下内容:
Include /usr/local/nginx/conf/modsecurity/crs-setup.confInclude /usr/local/nginx/conf/modsecurity/rules/*.conf
六、重新加载Nginx测试效果
配完以后重新启动nginx
命令行输入:
/usr/local/nginx/sbin/nginx -s reload //nginx已启动的情况或/usr/local/nginx/sbin/nginx //nginx未启动的情况
浏览器访问:
http://192.168.200.132/?param="><script>alert(1);script>
拦截成功!!
此外也可以对网页进行一些简单的攻击用来测试modsecurity是否成功拦截攻击
简单SQL注入:https://192.168.200.132/?id=1 AND 1=1简单xss攻击:https://192.168.200.132/?search=alert('xss');相应的,也是显示上述网页展现的 403Forbidden
七、查看nginx与modsecurity的版本信息
nginx:
[root@CetnOS-GUI /usr/local/nginx/sbin]# ./nginx -Vnginx version: nginx/1.16.1built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)configure arguments: --add-module=/usr/local/ModSecurity-nginx
我这里的版本是nginx/1.16.1
第一次安装遇到的问题:启动nginx时出现错误
/usr/local/nginx/sbin/nginx -s reload
解决办法:原因是安装的时候某一步骤出了错,需要重新来一遍,将modsecurity、Modsecurity、Modsecurity-nginx、nginx删掉即可,若对自己某一步骤有信心,可以不删除相应目录,参考上述文章执行命令产生的目录所对应的具体步骤。