ansible.builtin.fortios_waf_profile (v2.8.20) — module

Web application firewall configuration in Fortinet's FortiOS and FortiGate.

| "added in version" 2.8 of ansible.builtin"

Authors: Miguel Angel Munoz (@mamunozgonzalez), Nicolas Thomas (@thomnico)

preview | supported by community

Install Ansible via pip

Install with pip install ansible==2.8.20

Description

This module is able to configure a FortiGate or FortiOS by allowing the user to set and modify waf feature and profile category. Examples include all parameters and values need to be adjusted to datasources before usage. Tested with FOS v6.0.2


Requirements

Usage examples

  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
- hosts: localhost
  vars:
   host: "192.168.122.40"
   username: "admin"
   password: ""
   vdom: "root"
  tasks:
  - name: Web application firewall configuration.
    fortios_waf_profile:
      host:  "{{ host }}"
      username: "{{ username }}"
      password: "{{ password }}"
      vdom:  "{{ vdom }}"
      https: "False"
      waf_profile:
        state: "present"
        address-list:
            blocked-address:
             -
                name: "default_name_5 (source firewall.address.name firewall.addrgrp.name)"
            blocked-log: "enable"
            severity: "high"
            status: "enable"
            trusted-address:
             -
                name: "default_name_10 (source firewall.address.name firewall.addrgrp.name)"
        comment: "Comment."
        constraint:
            content-length:
                action: "allow"
                length: "15"
                log: "enable"
                severity: "high"
                status: "enable"
            exception:
             -
                address: "<your_own_value> (source firewall.address.name firewall.addrgrp.name)"
                content-length: "enable"
                header-length: "enable"
                hostname: "enable"
                id:  "24"
                line-length: "enable"
                malformed: "enable"
                max-cookie: "enable"
                max-header-line: "enable"
                max-range-segment: "enable"
                max-url-param: "enable"
                method: "enable"
                param-length: "enable"
                pattern: "<your_own_value>"
                regex: "enable"
                url-param-length: "enable"
                version: "enable"
            header-length:
                action: "allow"
                length: "39"
                log: "enable"
                severity: "high"
                status: "enable"
            hostname:
                action: "allow"
                log: "enable"
                severity: "high"
                status: "enable"
            line-length:
                action: "allow"
                length: "50"
                log: "enable"
                severity: "high"
                status: "enable"
            malformed:
                action: "allow"
                log: "enable"
                severity: "high"
                status: "enable"
            max-cookie:
                action: "allow"
                log: "enable"
                max-cookie: "62"
                severity: "high"
                status: "enable"
            max-header-line:
                action: "allow"
                log: "enable"
                max-header-line: "68"
                severity: "high"
                status: "enable"
            max-range-segment:
                action: "allow"
                log: "enable"
                max-range-segment: "74"
                severity: "high"
                status: "enable"
            max-url-param:
                action: "allow"
                log: "enable"
                max-url-param: "80"
                severity: "high"
                status: "enable"
            method:
                action: "allow"
                log: "enable"
                severity: "high"
                status: "enable"
            param-length:
                action: "allow"
                length: "90"
                log: "enable"
                severity: "high"
                status: "enable"
            url-param-length:
                action: "allow"
                length: "96"
                log: "enable"
                severity: "high"
                status: "enable"
            version:
                action: "allow"
                log: "enable"
                severity: "high"
                status: "enable"
        extended-log: "enable"
        external: "disable"
        method:
            default-allowed-methods: "get"
            log: "enable"
            method-policy:
             -
                address: "<your_own_value> (source firewall.address.name firewall.addrgrp.name)"
                allowed-methods: "get"
                id:  "113"
                pattern: "<your_own_value>"
                regex: "enable"
            severity: "high"
            status: "enable"
        name: "default_name_118"
        signature:
            credit-card-detection-threshold: "120"
            custom-signature:
             -
                action: "allow"
                case-sensitivity: "disable"
                direction: "request"
                log: "enable"
                name: "default_name_126"
                pattern: "<your_own_value>"
                severity: "high"
                status: "enable"
                target: "arg"
            disabled-signature:
             -
                id:  "132 (source waf.signature.id)"
            disabled-sub-class:
             -
                id:  "134 (source waf.sub-class.id)"
            main-class:
             -
                action: "allow"
                id:  "137 (source waf.main-class.id)"
                log: "enable"
                severity: "high"
                status: "enable"
        url-access:
         -
            access-pattern:
             -
                id:  "143"
                negate: "enable"
                pattern: "<your_own_value>"
                regex: "enable"
                srcaddr: "<your_own_value> (source firewall.address.name firewall.addrgrp.name)"
            action: "bypass"
            address: "<your_own_value> (source firewall.address.name firewall.addrgrp.name)"
            id:  "150"
            log: "enable"
            severity: "high"

Inputs

    
host:
    description:
    - FortiOS or FortiGate ip address.
    required: true

vdom:
    default: root
    description:
    - Virtual domain, among those defined previously. A vdom is a virtual instance of
      the FortiGate that can be configured and used as a different unit.

https:
    default: true
    description:
    - Indicates if the requests towards FortiGate must use HTTPS protocol
    type: bool

password:
    default: ''
    description:
    - FortiOS or FortiGate password.

username:
    description:
    - FortiOS or FortiGate username.
    required: true

waf_profile:
    default: null
    description:
    - Web application firewall configuration.
    suboptions:
      address-list:
        description:
        - Black address list and white address list.
        suboptions:
          blocked-address:
            description:
            - Blocked address.
            suboptions:
              name:
                description:
                - Address name. Source firewall.address.name firewall.addrgrp.name.
                required: true
          blocked-log:
            choices:
            - enable
            - disable
            description:
            - Enable/disable logging on blocked addresses.
          severity:
            choices:
            - high
            - medium
            - low
            description:
            - Severity.
          status:
            choices:
            - enable
            - disable
            description:
            - Status.
          trusted-address:
            description:
            - Trusted address.
            suboptions:
              name:
                description:
                - Address name. Source firewall.address.name firewall.addrgrp.name.
                required: true
      comment:
        description:
        - Comment.
      constraint:
        description:
        - WAF HTTP protocol restrictions.
        suboptions:
          content-length:
            description:
            - HTTP content length in request.
            suboptions:
              action:
                choices:
                - allow
                - block
                description:
                - Action.
              length:
                description:
                - Length of HTTP content in bytes (0 to 2147483647).
              log:
                choices:
                - enable
                - disable
                description:
                - Enable/disable logging.
              severity:
                choices:
                - high
                - medium
                - low
                description:
                - Severity.
              status:
                choices:
                - enable
                - disable
                description:
                - Enable/disable the constraint.
          exception:
            description:
            - HTTP constraint exception.
            suboptions:
              address:
                description:
                - Host address. Source firewall.address.name firewall.addrgrp.name.
              content-length:
                choices:
                - enable
                - disable
                description:
                - HTTP content length in request.
              header-length:
                choices:
                - enable
                - disable
                description:
                - HTTP header length in request.
              hostname:
                choices:
                - enable
                - disable
                description:
                - Enable/disable hostname check.
              id:
                description:
                - Exception ID.
                required: true
              line-length:
                choices:
                - enable
                - disable
                description:
                - HTTP line length in request.
              malformed:
                choices:
                - enable
                - disable
                description:
                - Enable/disable malformed HTTP request check.
              max-cookie:
                choices:
                - enable
                - disable
                description:
                - Maximum number of cookies in HTTP request.
              max-header-line:
                choices:
                - enable
                - disable
                description:
                - Maximum number of HTTP header line.
              max-range-segment:
                choices:
                - enable
                - disable
                description:
                - Maximum number of range segments in HTTP range line.
              max-url-param:
                choices:
                - enable
                - disable
                description:
                - Maximum number of parameters in URL.
              method:
                choices:
                - enable
                - disable
                description:
                - Enable/disable HTTP method check.
              param-length:
                choices:
                - enable
                - disable
                description:
                - Maximum length of parameter in URL, HTTP POST request or HTTP body.
              pattern:
                description:
                - URL pattern.
              regex:
                choices:
                - enable
                - disable
                description:
                - Enable/disable regular expression based pattern match.
              url-param-length:
                choices:
                - enable
                - disable
                description:
                - Maximum length of parameter in URL.
              version:
                choices:
                - enable
                - disable
                description:
                - Enable/disable HTTP version check.
          header-length:
            description:
            - HTTP header length in request.
            suboptions:
              action:
                choices:
                - allow
                - block
                description:
                - Action.
              length:
                description:
                - Length of HTTP header in bytes (0 to 2147483647).
              log:
                choices:
                - enable
                - disable
                description:
                - Enable/disable logging.
              severity:
                choices:
                - high
                - medium
                - low
                description:
                - Severity.
              status:
                choices:
                - enable
                - disable
                description:
                - Enable/disable the constraint.
          hostname:
            description:
            - Enable/disable hostname check.
            suboptions:
              action:
                choices:
                - allow
                - block
                description:
                - Action.
              log:
                choices:
                - enable
                - disable
                description:
                - Enable/disable logging.
              severity:
                choices:
                - high
                - medium
                - low
                description:
                - Severity.
              status:
                choices:
                - enable
                - disable
                description:
                - Enable/disable the constraint.
          line-length:
            description:
            - HTTP line length in request.
            suboptions:
              action:
                choices:
                - allow
                - block
                description:
                - Action.
              length:
                description:
                - Length of HTTP line in bytes (0 to 2147483647).
              log:
                choices:
                - enable
                - disable
                description:
                - Enable/disable logging.
              severity:
                choices:
                - high
                - medium
                - low
                description:
                - Severity.
              status:
                choices:
                - enable
                - disable
                description:
                - Enable/disable the constraint.
          malformed:
            description:
            - Enable/disable malformed HTTP request check.
            suboptions:
              action:
                choices:
                - allow
                - block
                description:
                - Action.
              log:
                choices:
                - enable
                - disable
                description:
                - Enable/disable logging.
              severity:
                choices:
                - high
                - medium
                - low
                description:
                - Severity.
              status:
                choices:
                - enable
                - disable
                description:
                - Enable/disable the constraint.
          max-cookie:
            description:
            - Maximum number of cookies in HTTP request.
            suboptions:
              action:
                choices:
                - allow
                - block
                description:
                - Action.
              log:
                choices:
                - enable
                - disable
                description:
                - Enable/disable logging.
              max-cookie:
                description:
                - Maximum number of cookies in HTTP request (0 to 2147483647).
              severity:
                choices:
                - high
                - medium
                - low
                description:
                - Severity.
              status:
                choices:
                - enable
                - disable
                description:
                - Enable/disable the constraint.
          max-header-line:
            description:
            - Maximum number of HTTP header line.
            suboptions:
              action:
                choices:
                - allow
                - block
                description:
                - Action.
              log:
                choices:
                - enable
                - disable
                description:
                - Enable/disable logging.
              max-header-line:
                description:
                - Maximum number HTTP header lines (0 to 2147483647).
              severity:
                choices:
                - high
                - medium
                - low
                description:
                - Severity.
              status:
                choices:
                - enable
                - disable
                description:
                - Enable/disable the constraint.
          max-range-segment:
            description:
            - Maximum number of range segments in HTTP range line.
            suboptions:
              action:
                choices:
                - allow
                - block
                description:
                - Action.
              log:
                choices:
                - enable
                - disable
                description:
                - Enable/disable logging.
              max-range-segment:
                description:
                - Maximum number of range segments in HTTP range line (0 to 2147483647).
              severity:
                choices:
                - high
                - medium
                - low
                description:
                - Severity.
              status:
                choices:
                - enable
                - disable
                description:
                - Enable/disable the constraint.
          max-url-param:
            description:
            - Maximum number of parameters in URL.
            suboptions:
              action:
                choices:
                - allow
                - block
                description:
                - Action.
              log:
                choices:
                - enable
                - disable
                description:
                - Enable/disable logging.
              max-url-param:
                description:
                - Maximum number of parameters in URL (0 to 2147483647).
              severity:
                choices:
                - high
                - medium
                - low
                description:
                - Severity.
              status:
                choices:
                - enable
                - disable
                description:
                - Enable/disable the constraint.
          method:
            description:
            - Enable/disable HTTP method check.
            suboptions:
              action:
                choices:
                - allow
                - block
                description:
                - Action.
              log:
                choices:
                - enable
                - disable
                description:
                - Enable/disable logging.
              severity:
                choices:
                - high
                - medium
                - low
                description:
                - Severity.
              status:
                choices:
                - enable
                - disable
                description:
                - Enable/disable the constraint.
          param-length:
            description:
            - Maximum length of parameter in URL, HTTP POST request or HTTP body.
            suboptions:
              action:
                choices:
                - allow
                - block
                description:
                - Action.
              length:
                description:
                - Maximum length of parameter in URL, HTTP POST request or HTTP body in
                  bytes (0 to 2147483647).
              log:
                choices:
                - enable
                - disable
                description:
                - Enable/disable logging.
              severity:
                choices:
                - high
                - medium
                - low
                description:
                - Severity.
              status:
                choices:
                - enable
                - disable
                description:
                - Enable/disable the constraint.
          url-param-length:
            description:
            - Maximum length of parameter in URL.
            suboptions:
              action:
                choices:
                - allow
                - block
                description:
                - Action.
              length:
                description:
                - Maximum length of URL parameter in bytes (0 to 2147483647).
              log:
                choices:
                - enable
                - disable
                description:
                - Enable/disable logging.
              severity:
                choices:
                - high
                - medium
                - low
                description:
                - Severity.
              status:
                choices:
                - enable
                - disable
                description:
                - Enable/disable the constraint.
          version:
            description:
            - Enable/disable HTTP version check.
            suboptions:
              action:
                choices:
                - allow
                - block
                description:
                - Action.
              log:
                choices:
                - enable
                - disable
                description:
                - Enable/disable logging.
              severity:
                choices:
                - high
                - medium
                - low
                description:
                - Severity.
              status:
                choices:
                - enable
                - disable
                description:
                - Enable/disable the constraint.
      extended-log:
        choices:
        - enable
        - disable
        description:
        - Enable/disable extended logging.
      external:
        choices:
        - disable
        - enable
        description:
        - Disable/Enable external HTTP Inspection.
      method:
        description:
        - Method restriction.
        suboptions:
          default-allowed-methods:
            choices:
            - get
            - post
            - put
            - head
            - connect
            - trace
            - options
            - delete
            - others
            description:
            - Methods.
          log:
            choices:
            - enable
            - disable
            description:
            - Enable/disable logging.
          method-policy:
            description:
            - HTTP method policy.
            suboptions:
              address:
                description:
                - Host address. Source firewall.address.name firewall.addrgrp.name.
              allowed-methods:
                choices:
                - get
                - post
                - put
                - head
                - connect
                - trace
                - options
                - delete
                - others
                description:
                - Allowed Methods.
              id:
                description:
                - HTTP method policy ID.
                required: true
              pattern:
                description:
                - URL pattern.
              regex:
                choices:
                - enable
                - disable
                description:
                - Enable/disable regular expression based pattern match.
          severity:
            choices:
            - high
            - medium
            - low
            description:
            - Severity.
          status:
            choices:
            - enable
            - disable
            description:
            - Status.
      name:
        description:
        - WAF Profile name.
        required: true
      signature:
        description:
        - WAF signatures.
        suboptions:
          credit-card-detection-threshold:
            description:
            - The minimum number of Credit cards to detect violation.
          custom-signature:
            description:
            - Custom signature.
            suboptions:
              action:
                choices:
                - allow
                - block
                - erase
                description:
                - Action.
              case-sensitivity:
                choices:
                - disable
                - enable
                description:
                - Case sensitivity in pattern.
              direction:
                choices:
                - request
                - response
                description:
                - Traffic direction.
              log:
                choices:
                - enable
                - disable
                description:
                - Enable/disable logging.
              name:
                description:
                - Signature name.
                required: true
              pattern:
                description:
                - Match pattern.
              severity:
                choices:
                - high
                - medium
                - low
                description:
                - Severity.
              status:
                choices:
                - enable
                - disable
                description:
                - Status.
              target:
                choices:
                - arg
                - arg-name
                - req-body
                - req-cookie
                - req-cookie-name
                - req-filename
                - req-header
                - req-header-name
                - req-raw-uri
                - req-uri
                - resp-body
                - resp-hdr
                - resp-status
                description:
                - Match HTTP target.
          disabled-signature:
            description:
            - Disabled signatures
            suboptions:
              id:
                description:
                - Signature ID. Source waf.signature.id.
                required: true
          disabled-sub-class:
            description:
            - Disabled signature subclasses.
            suboptions:
              id:
                description:
                - Signature subclass ID. Source waf.sub-class.id.
                required: true
          main-class:
            description:
            - Main signature class.
            suboptions:
              action:
                choices:
                - allow
                - block
                - erase
                description:
                - Action.
              id:
                description:
                - Main signature class ID. Source waf.main-class.id.
                required: true
              log:
                choices:
                - enable
                - disable
                description:
                - Enable/disable logging.
              severity:
                choices:
                - high
                - medium
                - low
                description:
                - Severity.
              status:
                choices:
                - enable
                - disable
                description:
                - Status.
      state:
        choices:
        - present
        - absent
        description:
        - Indicates whether to create or remove the object
      url-access:
        description:
        - URL access list
        suboptions:
          access-pattern:
            description:
            - URL access pattern.
            suboptions:
              id:
                description:
                - URL access pattern ID.
                required: true
              negate:
                choices:
                - enable
                - disable
                description:
                - Enable/disable match negation.
              pattern:
                description:
                - URL pattern.
              regex:
                choices:
                - enable
                - disable
                description:
                - Enable/disable regular expression based pattern match.
              srcaddr:
                description:
                - Source address. Source firewall.address.name firewall.addrgrp.name.
          action:
            choices:
            - bypass
            - permit
            - block
            description:
            - Action.
          address:
            description:
            - Host address. Source firewall.address.name firewall.addrgrp.name.
          id:
            description:
            - URL access ID.
            required: true
          log:
            choices:
            - enable
            - disable
            description:
            - Enable/disable logging.
          severity:
            choices:
            - high
            - medium
            - low
            description:
            - Severity.

Outputs

build:
  description: Build number of the fortigate image
  returned: always
  sample: '1547'
  type: str
http_method:
  description: Last method used to provision the content into FortiGate
  returned: always
  sample: PUT
  type: str
http_status:
  description: Last result given by FortiGate on last operation applied
  returned: always
  sample: '200'
  type: str
mkey:
  description: Master key (id) used in the last call to FortiGate
  returned: success
  sample: id
  type: str
name:
  description: Name of the table used to fulfill the request
  returned: always
  sample: urlfilter
  type: str
path:
  description: Path of the table used to fulfill the request
  returned: always
  sample: webfilter
  type: str
revision:
  description: Internal revision number
  returned: always
  sample: 17.0.2.10658
  type: str
serial:
  description: Serial number of the unit
  returned: always
  sample: FGVMEVYYQT3AB5352
  type: str
status:
  description: Indication of the operation's result
  returned: always
  sample: success
  type: str
vdom:
  description: Virtual domain used
  returned: always
  sample: root
  type: str
version:
  description: Version of the FortiGate
  returned: always
  sample: v5.6.3
  type: str