在本教程中,我将向您展示如何使用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多年的工作经验。 他也被认为在编程方面变得笨拙。
他在完成一个特定的项目之后,往往会写出指南或者说如何做,主要是因为他的记忆不好,如果他再次做同样的事情,他不想重新发明轮子。
保持联系