Ubuntu 16.04上使用libmodsecurity的Nginx和OWASP ModSecurity核心规则

在本教程中,我将向您展示如何使用libmodsecurity(Modsecurity 3.x)编译最新版本的Nginx不要与Modsecurity 2.9混淆。 我们还将整合OWASP ModSecurity核心规则集(CRS)。

Libmodsecurity是ModSecurity的一个重大改写,可以提供更好的性能和稳定性。 尽管Modsecurity 2.9.x被提供给不同的平台,但它确实喜欢使用Apache进行部署,并且与其他平台部署需要以性能为代价的各种第三方依赖关系。 Libmodsecurity通过从头开始重写来更改所有这些。 有关Libmodsecurity的更多信息,请点击这里

本指南假设您已经有一个全新的Ubuntu 16.04 64位更新实例。

1.安装先决条件

安装先决条件

apt-get install apache2-dev autoconf automake build-essential bzip2 checkinstall devscripts flex g++ gcc git graphicsmagick-imagemagick-compat graphicsmagick-libmagick-dev-compat libaio-dev libaio1 libass-dev libatomic-ops-dev libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev libavutil-dev libbz2-dev libcdio-cdda1 libcdio-paranoia1 libcdio13 libcurl4-openssl-dev libfaac-dev libfreetype6-dev libgd-dev libgeoip-dev libgeoip1 libgif-dev libgpac-dev libgsm1-dev libjack-jackd2-dev libjpeg-dev libjpeg-progs libjpeg8-dev liblmdb-dev libmp3lame-dev libncurses5-dev libopencore-amrnb-dev libopencore-amrwb-dev libpam0g-dev libpcre3 libpcre3-dev libperl-dev libpng12-dev libpng12-0 libpng12-dev libreadline-dev librtmp-dev libsdl1.2-dev libssl-dev libssl1.0.0 libswscale-dev libtheora-dev libtiff5-dev libtool libva-dev libvdpau-dev libvorbis-dev libxml2-dev libxslt-dev libxslt1-dev libxslt1.1 libxvidcore-dev libxvidcore4 libyajl-dev make openssl perl pkg-config tar texi2html unzip zip zlib1g-dev

2.下载ModSecurity

Git克隆Modsecurity,检出并构建libmodsecurity

cd /opt/ 
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

Git克隆Modsecurity-nginx连接器

cd /opt/ 
git clone https://github.com/SpiderLabs/ModSecurity-nginx.git

您现在应该具有包含Modsecurity-nginx连接器的以下目录

/opt/ModSecurity-nginx

3.下载Nginx

下载最新的Nginx稳定源码

转到http://nginx.org/en/download.html并获取Nginx最新稳定版本的链接。 在撰写本文时,最新的稳定版本是nginx-1.12.0.tar.gz。 调整您的具体版本下面的说明。 下载并提取

cd /opt 
wget http://nginx.org/download/nginx-1.12.0.tar.gz
tar -zxf nginx-1.12.0.tar.gz
cd nginx-1.12.0

4.配置和安装Nginx

使用Modsecurity-nginx连接器配置Nginx并进行安装

./configure --user=www-data --group=www-data --with-pcre-jit --with-debug --with-http_ssl_module --with-http_realip_module --add-module=/opt/ModSecurity-nginx 
make
make install

我们之前下载的ModSecurity源代码包含一些示例modsecurity.conf文件,其中包含一些推荐的设置。 将此文件复制到具有Nginx配置文件的文件夹

cp /opt/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf

从/ usr / local / nginx / sbin / nginx创建一个符号链接到/ bin / nginx

ln -s /usr/local/nginx/sbin/nginx /bin/nginx

创建以下目录:

mkdir /usr/local/nginx/conf/sites-available 
mkdir /usr/local/nginx/conf/sites-enabled
mkdir /usr/local/nginx/conf/ssl
mkdir /etc/nginx

从/ usr / local / nginx / conf / ssl / etc / nginx / ssl克隆一个符号链接

ln -s /usr/local/nginx/conf/ssl /etc/nginx/ssl

制作conf / nginx.conf文件的备份副本

cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.bak

配置/usr/local/nginx/conf/nginx.conf文件

vi /usr/local/nginx/conf/nginx.conf

找到并删除以“server {”开头的所有条目,并以第二个到最后一个关闭大括号“}”结尾。 换句话说,保留最后的Curl。

在最后一个大括号上方,插入以下内容。 这将指示Nginx在“/ usr / local / nginx / conf / sites-enabled”目录中查找我们的站点配置

include /usr/local/nginx/conf/sites-enabled/*;

所以文件的结尾应该如下所示(确保关闭}存在):

include /usr/local/nginx/conf/sites-enabled/*; 
}

通过删除“#”前缀,如果禁用,确保它设置为用户“www-data”而不是默认的“nobody”,启用“user”指令,如下所示:

user www-data;

保存文件。

下载Jason Giedymin的Nginx初始化脚本,用于管理nginx服务并将其配置为服务

wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx 
chmod +x /etc/init.d/nginx
update-rc.d nginx defaults

此脚本提供以下选项来管理Nginx服务:

# service nginx start|stop|restart|force-reload|reload|status|configtest|quietupgrade|terminate|destroy

5.安装OWASP ModSecuirty核心规则集

Git克隆并复制当前版本的OWASP规则集并配置为Nginx

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

使用OWASP ModSecuirty核心规则集配置Nginx

编辑/usr/local/nginx/conf/modsecurity.conf

vi /usr/local/nginx/conf/modsecurity.conf

在文件末尾粘贴以下内容:

#Load OWASP Config 
Include crs-setup.conf
#Load all other Rules
Include rules/*.conf
#Disable rule by ID from error message
#SecRuleRemoveById 920350

在您的Nginx modsecurity.conf文件或您的个人服务器conf文件中,在服务器或位置块中输入以下内容。 下面的示例显示了在服务器和位置块中添加条目的组合:

server { 
.....
modsecurity on;
location / {
modsecurity_rules_file /usr/local/nginx/conf/modsecurity.conf;
.....
}
}

测试你的Nginx配置

service nginx configtest

如果没有错误,重新加载或重新启动您的Nginx

service nginx reload

您现在可以查看任何ModSecurity事件的/var/log/modsec_audit.log

tail -f /var/log/modsec_audit.log

如果您满意,请编辑/usr/local/nginx/conf/modsecurity.conf文件,并将“SecouleEngine”从“DetectionOnly”设置为“On”,如下所示

SecRuleEngine On

本指南到此结束。

关于作者

Dino Edwards是一名IT专业人士,在联邦,州和私营部门拥有20多年的工作经验。 他也被认为在编程方面变得笨拙。

他在完成一个特定的项目之后,往往会写出指南或者说如何做,主要是因为他的记忆不好,如果他再次做同样的事情,他不想重新发明轮子。

保持联系

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏