#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.


## Modsecurity Configuration file for CRS. See README.md for details

SecRuleEngine On

## Uncomment the following 2 lines to enable auditing and put audit logs in /tmp/audit.log
#SecAuditEngine On
#SecAuditLog /tmp/audit.log

# Uncomment the following 2 lines to enable debugging and put debug logs in /tmp/debug.log
#SecDebugLog /tmp/debug.log
#SecDebugLogLevel 9

## include CRS setup configuration and rules
Include "crs-setup.conf"
Include "rules/*.conf"

# E.g Remove rules by Id
#SecRuleRemoveById 920240
