How to: Configure NAXSI with NginX
As part of a series of articles regarding NginX, today I will cover how to configure NAXSI with NginX. Currently there is a distribution of NginX that comes with NAXSI (you can read about some of the standard distributions here: http://kx.cloudingenium.com/technologies/web/nginx/custom-nginx-distribution-available-packages/) which you can find with the ngxinx dev team (they have a ppa) or use the one we maintain (it is based off of the dev team’s ppa but we try to release latest versions more quickly… try at least) .
What is NAXSI?
(obtained from their site at github: https://github.com/nbs-system/naxsi)
NAXSI means Nginx Anti Xss & Sql Injection.
Technically, it is a third party nginx module, available as a package for many UNIX-like platforms. This module, by default, reads a small subset of simple rules (naxsi_core.rules) containing 99% of known patterns involved in websites vulnerabilities. For example, ‘<‘, ‘|’ or ‘drop’ are not supposed to be part of a URI.
Being very simple, those patterns may match legitimate queries, it is Naxsi’s administrator duty to add specific rules that will whitelist those legitimate behaviours. The administrator can either add whitelists manually by analyzing nginx’s error log, or (recommended) start the project by an intensive auto-learning phase that will automatically generate whitelisting rules regarding website’s behaviour.
In short, Naxsi behaves like a DROP-by-default firewall, the only job needed is to add required ACCEPT rules for the target website to work properly.
On the contrary of most Web Application Firewall, Naxsi doesn’t rely on a signature base, like an antivirus, and thus cannot be circumvented by an “unknown” attack pattern. Another main difference between Naxsi and other WAF, Naxsi filters Get & Posts resquests and is OpenSource and free to use for your company or personal own use (ie: as long as you don’t resell a service or product based on Naxsi to customers).