FPSetRule
Adds (or updates existing) rule in Forcepoint Triton. Preserves order of rules and modifies policy in-place if a rule exists with the exact type and value.
- Type
- python
- Pack
- Forcepoint
Source
import demistomock as demisto # noqa: F401
from CommonServerPython import * # noqa: F401
from re import escape
FILTER_CONFIG_PATH = "/opt/WCG/config/filter.config"
CMD_SET_RULE_FORMAT = (
"sed -i '/^{0}={1} action=/{{h;s/{0}={1} action=[A-Za-z]*$/{0}={1} action={2}/}};${{x;/^$/{{"
"s//{0}={1} action={2}/;H}};x}}' {3} "
)
CMD_TRITON_RELOAD_CONFIG = "/opt/WCG/bin/content_line -x" # && /opt/WCG/WCGAdmin runds"
ALLOWED_TYPES = ["dest_domain", "dest_ip", "dest_host", "url_regex"]
def set_rule(policy, ruleType):
if policy not in ["allow", "deny"]:
demisto.results(
{
"Type": entryTypes["error"],
"ContentsFormat": formats["text"],
"Contents": 'Policy argument must be "allow" or "deny". Invalid value: ' + policy,
}
)
elif ruleType not in ALLOWED_TYPES:
demisto.results(
{
"Type": entryTypes["error"],
"ContentsFormat": formats["text"],
"Contents": 'Type argument must be "dest_domain", "dest_ip", "dest_host" or "url_regex". '
"Invalid value: " + ruleType,
}
)
else:
valueFormat = escape(demisto.args()["value"])
if ruleType in ["dest_domain", "url_regex"]:
valueFormat = r"\"" + valueFormat + r"\""
# sed command that modifies the action of the rule if found, otherwise it adds it in a new line
cmdSetRule = CMD_SET_RULE_FORMAT.format(ruleType, valueFormat, policy, FILTER_CONFIG_PATH)
sshArgs = {"cmd": cmdSetRule + " && " + CMD_TRITON_RELOAD_CONFIG}
if "tritonsystem" in demisto.args():
if "remoteaccessname" in demisto.args():
demisto.results(
{
"Type": entryTypes["error"],
"ContentsFormat": formats["markdown"],
"Contents": "You cannot uses both **tritonsystem** and **remoteaccessname**. Please choose one.",
}
)
sys.exit(0)
sshArgs["system"] = demisto.args()["tritonsystem"]
elif "remoteaccessname" in demisto.args():
sshArgs["using"] = demisto.args()["remoteaccessname"]
else:
demisto.results(
{
"Type": entryTypes["error"],
"ContentsFormat": formats["markdown"],
"Contents": "You must provide either **tritonsystem** or **remoteaccessname** as arguments.",
}
)
sys.exit(0)
if "using" in sshArgs or "system" in sshArgs:
resSSH = demisto.executeCommand("ssh", sshArgs)
if not isError(resSSH[0]) and demisto.gets(resSSH[0], "Contents.success"):
demisto.results("Command executed successfully.")
else:
demisto.results(resSSH)
def main(): # pragma: no cover
policy = demisto.args()["policy"]
ruleType = demisto.args()["type"]
set_rule(policy, ruleType)
if __name__ in ("__main__", "__builtin__", "builtins"):
main()
README
Adds (or updates an existing) rule in Forcepoint Triton. Preserves orders of rules and modifies policy in-place if a rule exists with the exact type and value.
Script Data
| Name | Description |
|---|---|
| Script Type | python |
| Tags | forcepoint, triton |
Dependencies
This script uses the following commands and scripts.
- ssh
Inputs
| Argument Name | Description |
|---|---|
| policy | The policy/action assigned to the rule. Can be, “allow” or “deny” only. |
| type | The Triton rule type. Can be, “dest_domain”, “dest_ip”, “dest_host” or “url_regex”. |
| value | The value to match for this rule. Can be, “domain”, “regex”, etc… depending on the type. |
| remoteaccessname | If the Forcepoint Triton instance is configured as a RemoteAccess integration instance ‐ insert its name here. Replaces argument “tritonsystem”. |
| tritonsystem | The system name of the linux host on which Forcepoint Triton is installed. Only use this if it is not working with Triton as a RemoteAccess integration instance ‐ if so, use the “remoteaccessname” argument instead. |
Outputs
There are no outputs for this script.