最近在工作上遇到一点问题,问了大佬、百度,都没有很好地解决;经过大量搜索查阅以及试验,终于将问题解决。于是写下这篇文章以提醒自己,也可供读者参考。

环境: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目录

nginx configure没有那个文件或目录 nginx没有sbin_nginx 没有sbin目录

nginx configure没有那个文件或目录 nginx没有sbin_nginx_02

注:用时较长,大约40分钟,可能会有网速慢或者下载失败的现象,重复尝试几遍就好了

cd ModSecuritygit checkout -b v3/master origin/v3/master

nginx configure没有那个文件或目录 nginx没有sbin_nginx 没有sbin目录_03

git submodule init

nginx configure没有那个文件或目录 nginx没有sbin_nginx_04

git submodule update

nginx configure没有那个文件或目录 nginx没有sbin_git_05

注:用时几分钟。这一步我做了两次,可能是因为网络阻塞。如果不成功,多尝试几次。

sh build.sh

nginx configure没有那个文件或目录 nginx没有sbin_Web_06

先看看/usr/local下新生成有几个目录:

nginx configure没有那个文件或目录 nginx没有sbin_git_07

只有Modsecurity

进入到/usr/local/Modsecurity

//还是在/usr/local/Modsecurity目录下操作./configure make   //需要的时间稍微久一点,10分钟左右      //编译make install                                //安装//上述安装三部曲会在上一级目录/usr/local下 生成modsecurity目录

./configure图示

nginx configure没有那个文件或目录 nginx没有sbin_git_08

第一次 make图示(出错) --------  没有出错可略过

nginx configure没有那个文件或目录 nginx没有sbin_nginx 没有sbin目录_09

根据提示去到/usr/local/include,把对应的文件删了(正常情况下/usr/local存放的是下载的包,不会有诸如bin、include、lib之类的解压目录,所以放心删,一定是之前安装过什么才会存在这些目录),然后回去/usr/local/Modsecurity执行make clean命令

解决方法:

rm /usr/local/include * -rfcd /usr/local/Modsecuritymake cleanmake

由于本人是第二次装nginx+modsecurity,所以才会出现这样的问题

nginx configure没有那个文件或目录 nginx没有sbin_nginx 没有sbin目录_10

第二次 make图示(成功)

nginx configure没有那个文件或目录 nginx没有sbin_Web_11

第一次make install图示 ----- 和上面是同样问题 上述问题解决后,该问题也迎刃而解

nginx configure没有那个文件或目录 nginx没有sbin_nginx 没有sbin目录_12

第二次make install

nginx configure没有那个文件或目录 nginx没有sbin_nginx 没有sbin目录_13

编译安装三部曲以后,在/usr/local下生成modsecurity目录

nginx configure没有那个文件或目录 nginx没有sbin_Web_14

三、安装nginx与ModSecurity-nginx

cd /usr/localgit clone https://github.com/SpiderLabs/ModSecurity-nginx//上述步骤会在/usr/local下生成Modsecurity-nginx的目录

nginx configure没有那个文件或目录 nginx没有sbin_Web_15

wget http://nginx.org/download/nginx-1.16.1.tar.gz//上述步骤会在/usr/local下出现nginx-1.16.1.tar.gz文件

nginx configure没有那个文件或目录 nginx没有sbin_git_16

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 图示

nginx configure没有那个文件或目录 nginx没有sbin_nginx 没有sbin目录_17

make图示

nginx configure没有那个文件或目录 nginx没有sbin_Web_18

make install图示

nginx configure没有那个文件或目录 nginx没有sbin_Web_19

在/usr/local下生成nginx目录

nginx configure没有那个文件或目录 nginx没有sbin_Web_20

四、测试效果

输入ifconfig查看ip

我的ip:192.168.200.132

nginx configure没有那个文件或目录 nginx没有sbin_git_21

启动nginx

/usr/local/nginx/sbin/nginx

尝试启动 发现有问题

nginx configure没有那个文件或目录 nginx没有sbin_git_22

使用以下命令解决:

sudo fuser -k 80/tcp

nginx configure没有那个文件或目录 nginx没有sbin_Web_23

已经没问题了

nginx configure没有那个文件或目录 nginx没有sbin_nginx 没有sbin目录_24

1、未开启nginx的状态下,用浏览器访问虚拟机配的ip

效果:

nginx configure没有那个文件或目录 nginx没有sbin_Web_25

2、开启nginx服务后,用浏览器访问虚拟机配的ip:

/usr/local/nginx/sbin/nginx或cd /usr/local/nginx/sbin./nginx

nginx configure没有那个文件或目录 nginx没有sbin_nginx_26

效果:

nginx configure没有那个文件或目录 nginx没有sbin_nginx_27

模拟攻击,测试未启动ModSecurity时的访问效果访问URL为:http://服务器IP/?param=%22%3E%3Cscript%3Ealert(1);%3C/script%3E

nginx configure没有那个文件或目录 nginx没有sbin_nginx_28

结论:配置了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 configure没有那个文件或目录 nginx没有sbin_Web_29

nginx configure没有那个文件或目录 nginx没有sbin_nginx_30

nginx configure没有那个文件或目录 nginx没有sbin_git_31

编辑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;

nginx configure没有那个文件或目录 nginx没有sbin_nginx 没有sbin目录_32

编辑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 configure没有那个文件或目录 nginx没有sbin_Web_33

nginx configure没有那个文件或目录 nginx没有sbin_Web_34

六、重新加载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>

nginx configure没有那个文件或目录 nginx没有sbin_nginx_35

拦截成功!!

此外也可以对网页进行一些简单的攻击用来测试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 configure没有那个文件或目录 nginx没有sbin_nginx_36

第一次安装遇到的问题:启动nginx时出现错误

/usr/local/nginx/sbin/nginx -s reload

nginx configure没有那个文件或目录 nginx没有sbin_git_37

解决办法:原因是安装的时候某一步骤出了错,需要重新来一遍,将modsecurity、Modsecurity、Modsecurity-nginx、nginx删掉即可,若对自己某一步骤有信心,可以不删除相应目录,参考上述文章执行命令产生的目录所对应的具体步骤。