Make sure you have the mod_unique_id
module installed. The module is packaged with Apache Http.
Check if mod_unique_id is enabled with:
$ sudo apachectl -M | grep unique_id Syntax OK unique_id_module (shared)
if the command doesn't return the mod name we need to enable it with:
$ cd /etc/apache2/mods-enabled $ sudo ln -s ../mods-available/unique_id.load .
The commands will be little different if you use Centos or Windows.
Test configuration with:
$ apachectl -t Syntax OK
Restart the server:
# for Ubuntu $ sudo service apache2 reload # for Centos $ sudo service httpd reload
Now try again the command:
$ sudo apachectl -M | grep unique_id Syntax OK unique_id_module (shared)
Now the module is enabled and you can go to step 2.
Take the source files from http://www.modsecurity.org/download.html. Or just execute the command below:
$ wget https://www.modsecurity.org/tarball/2.9.1/modsecurity-2.9.1.tar.gz
Before keep going we need to install some dependencies.
For Ubuntu:
# apt-get install apache2-dev # apt-get install liblua5.1-0-dev # apt-get install libxml2-dev
For Centos:
# yum install httpd-devel # yum install libxml2-devel # yum install lua-static
For compiling the module apxs is required.
Find apxs location we need to use it later:
$ which apxs /usr/sbin/apxs
Extract the archive with you have already downloaded:
$ tar -xvf modsecurity-2.9.1.tar.gz $ cd modsecurity-2.9.1
Configure and change the path of apxs with the correct one:
$ ./configure --with-apxs=/usr/sbin/apxs
Make and install:
$ make $ sudo make install
After the installation the module file should be in one of these locations:
/usr/local/modsecurity/lib/mod_security2.so
/usr/lib/apache2/modules/mod_security2.so
/usr/local/apache2/modules/mod_security2.so
Check if the file mod_security2.so
is present inside the Apache modules
folder,
if not, copy the file inside the folder.
Edit the main Apache httpd config file (usually httpd.conf
or apache2.conf
)
On UNIX you must load libxml2
and lua5.1
before enabling ModSecurity with something like this:
#The libraries can be in different locations #For Ubuntu: LoadFile /usr/lib/x86_64-linux-gnu/libxml2.so LoadFile /usr/lib/x86_64-linux-gnu/liblua5.1.so #For Centos: LoadFile /usr/lib64/libxml2.so LoadFile /usr/lib64/liblua-5.1.so
Load the ModSecurity module adding the following directive to httpd.conf
or apache2.conf
# [IMPORTANT] Put this directive before the Include directives! LoadModule security2_module modules/mod_security2.so
We need to copy the default configuration file for the module inside apache conf folder.
Important
Change the apache folder accordingly
Go to the extracted source folder (in my case modsecurity-2.9.1
)
and follow these commands.
For Ubuntu:
$ cd modsecurity-2.9.1 $ cp modsecurity.conf-recommended /etc/apache2/conf-available/modsecurity.conf $ cp unicode.mapping /etc/apache2/conf-enabled/ $ cd /etc/apache2/conf-enabled $ ln -s /etc/apache2/conf-available/modsecurity.conf .
For Centos:
$ cd modsecurity-2.9.1 $ cp modsecurity.conf-recommended /etc/httpd/conf.d/modsecurity.conf $ cp unicode.mapping /etc/httpd/conf.d/
In this case inside apache2.conf
or httpd.conf
there will be a directive like
# For Ubuntu: IncludeOptional conf-enabled/*.conf # For Centos: Include conf.d/*.conf
Test the configuration with:
$ apachectl -t Syntax OK
Note
OWASP ModSecurity Core Rule Set Project - OWASP -> (https://www.modsecurity.org/CRS/Documentation/quickstart.html)
Get the archive with all the rules from here: https://github.com/SpiderLabs/owasp-modsecurity-crs/releases
For this tutorial I will use the version 2.2.9 taken from here: https://github.com/SpiderLabs/owasp-modsecurity-crs/releases/tag/2.2.9
$ cd /usr/local/modsecurity/ $ wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/2.2.9.tar.gz $ tar -xvf 2.2.9.tar.gz
Rename the folder because too long...:
$ mv owasp-modsecurity-crs-2.2.9 crs $ cd crs $ mv modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf
Copy inside the folder activated_rules
all the rules that you find here:
http://125.141.221.126/repo/STND_PMIS_util/mod-security/pmis_rules
Create a file modsecurity_crs_99_whitelist.conf
inside the activated_rules
folder
and add the following whitelist directives at the end of the file:
Whitelisted rules -> http://125.141.221.126/repo/STND_PMIS_util/mod-security/pmis_rules.conf
Add the following directives to the main apache conf file and change the location with the right one:
# Apache 2.4 IncludeOptional /usr/local/modsecurity/crs/*.conf IncludeOptional /usr/local/modsecurity/crs/activated_rules/*.conf # Apache 2.2 Include /usr/local/modsecurity/crs/*.conf Include /usr/local/modsecurity/crs/activated_rules/*.conf
Important
Put all the ``Include`` directives after the LAST ``LoadModule`` directive!
ModSecurity by default is DetectionOnly
in order to stop bad things happening
we need to change the SecRuleEngine
directive and turn it On
!
$ cd /etc/httpd/conf.d $ sudo sed -i "s/SecRuleEngine DetectionOnly/SecRuleEngine On/" modsecurity.conf
Restart the apache server and we have done!
ModSecurity will write his log into the file defined from the following directive:
SecAuditLog logs/modsec_audit.log
Check it and see if it block bad things!
Note
- Reference Manual
- https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual