This one was done as a challenge from one of my security peers.
First, the assumptions:
local file system inventory files, Ansible host deployed to the same VPC as the remote machines, variable files, run the playbooks from the same folder as the inventory and variable files.
No long introduction this time. If you have been following along the scenarios have started to repeat, but become more useful with more complex configurations.
The playbookThis time the OWASP playbook will be used: https://github.com/brianehlert/ansible-nginx-examples/blob/master/nginx_lb_plus_modsec_OWASP_CRS.yaml
Along with that is the same nginx_lb_plus_modsec_vars.yaml variable file as the previous post.
One difference is that the framework file this time is: https://github.com/brianehlert/ansible-nginx-examples/blob/master/modsec_owasp.conf
If you compare it to the modsec_rules file from the previous post it lacks the test rule from last time.
Why? Because I am going to build the rules on the fly within the playbook.
ansible-playbook nginx_lb_plus_modsec_OWASP_CRS.yaml -i loadbalancers
I am going to skip the basics of inventory and variables file reading.
The meat begins in the post_tasks of this playbook.
pulls the CRS from the SpiderLabs GitHub repository
unzips the archive
copies the example to a new file in the configuration directory
Selects out the rules names
Then writes out the names of the rules to implement into the framework modsec_rules.conf file.
Builds the includes
outputs the rule set just for review
and enables blocking.
After all this the configuration is tested to make sure it will work. Assuming that passes nginx is reloaded to apply the configuration.
Now, the full OWASP rule set is implemented and working.
I am sure that someone can make that into a nice demo.