> This page is for Applications Protection.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.humansecurity.com/llms.txt.

# Installation

1. Install the dependencies:

**`Debian and Ubuntu`**

```markdown title="Debian and Ubuntu"
   Debian and Ubuntu
   apt install -y libcurl4 libapr1 libjansson4 libaprutil1 libpcre3
```

**`CentOS and RHEL`**

```Text title="CentOS and RHEL"
CentOS and RHEL
yum install -y jansson apr apr-util pcre libcurl pcre
```

2. Copy `libvmod_px.so` file to Varnish VMODS directory (this directory depends on Linux distribution: `/usr/lib/varnish/vmods/` or `/usr/lib64/varnish/vmods/`).

3. In your configuration `.vcl` file:
   * At the top of the file, add these two lines that will import the Enforcer:\
     `import px;`\
     `import std;`

4. Add the following lines to the `sub vcl_init` block to enable the Enforcer and provide the required parameters:

   ```javascript
   new px_module = px.px();

   px_module.setconf("px_enabled", "true");

   px_module.setconf("px_appId", "ENTER APP ID HERE");
   px_module.setconf("px_cookie_secret", "ENTER RISK COOKIE KEY HERE");
   px_module.setconf("px_auth_token", "ENTER AUTHENTICATION TOKEN HERE");

   if (!px_module.setup()) {
       std.syslog(9, "Failed to init PX module");
   }
   ```

   * **px\_enabled** - Set to `true` to enable the Enforcer.
   * **px\_appId** - Enter the HUMAN application ID.\
     **To retrieve the ID:**
     1. Open the HUMAN Console.
     2. Go to **Platform Settings > Applications**.
     3. Copy the ID from the **Application ID** field.
   * **px\_cookie\_secret** - Enter a risk cookie key used by the cookie signing page.\
     **To generate a risk cookie key:**
     1. Open the HUMAN Console.
     2. Go to **Product Settings > Security Policy > Policy Information**.
     3. Click **Generate new**.
   * **px\_auth\_token** - Enter a JWT authentication token for REST API.\
     **To retrieve the authentication token:**
     1. Open the HUMAN Console.
     2. Go to **Platform Settings > Applications > Tokens > Server Tokens**.
     3. Click **Copy token**.

5. Add the following section to the existing `sub vcl_recv` block. This section enables the Enforcer to process requests.

   ```javascript
   if (px_module.is_first_party(req.url)) {
       std.cache_req_body(100KB);
   }

   px_module.process_request(req.url, req.method, regsub(req.proto, "^.*/", ""), client.ip, req.http.host);

   if (px_module.get_result() > 0) {
       return (synth(px_module.get_result()));
   }
   ```

6. Add a new block named `vcl_synth`. This block displays a CAPTCHA if a request is blocked.

   ```javascript
   sub vcl_synth {
       set resp.status = px_module.get_resp_status();
       px_module.set_resp_headers();

       if (px_module.get_resp_body_len()) {
           synthetic(px_module.get_resp_body());
       }

       return(deliver);
   }
   ```

7. Add a new (or edit an existing) block named `vcl_deliver`. This block is executed when a response is sent back to a client.
   ```javascript
   sub vcl_deliver {
       px_module.set_resp_headers();
       return(deliver);
   }
   ```