"reject": {
"type": "integer",
"minimum": 0
+ },
+ "reject_both": {
+ "type": "integer",
+ "minimum": 0
}
}
}
/* EXCEPTION_POLICY_DROP_PACKET */ false,
/* EXCEPTION_POLICY_DROP_FLOW */ false,
/* EXCEPTION_POLICY_REJECT */ true,
+ /* EXCEPTION_POLICY_REJECT_BOTH */ true,
},
.valid_settings_ips = {
/* EXCEPTION_POLICY_NOT_SET */ false,
/* EXCEPTION_POLICY_DROP_PACKET */ true,
/* EXCEPTION_POLICY_DROP_FLOW */ true,
/* EXCEPTION_POLICY_REJECT */ true,
+ /* EXCEPTION_POLICY_REJECT_BOTH */ true,
},
};
// clang-format on
/* EXCEPTION_POLICY_DROP_PACKET */ false,
/* EXCEPTION_POLICY_DROP_FLOW */ false,
/* EXCEPTION_POLICY_REJECT */ true,
+ /* EXCEPTION_POLICY_REJECT_BOTH */ true,
},
.valid_settings_ips = {
/* EXCEPTION_POLICY_NOT_SET */ false,
/* EXCEPTION_POLICY_DROP_PACKET */ true,
/* EXCEPTION_POLICY_DROP_FLOW */ false,
/* EXCEPTION_POLICY_REJECT */ true,
+ /* EXCEPTION_POLICY_REJECT_BOTH */ true,
},
};
// clang-format on
/* EXCEPTION_POLICY_DROP_PACKET */ false,
/* EXCEPTION_POLICY_DROP_FLOW */ false,
/* EXCEPTION_POLICY_REJECT */ true,
+ /* EXCEPTION_POLICY_REJECT_BOTH */ true,
},
.valid_settings_ips = {
/* EXCEPTION_POLICY_NOT_SET */ false,
/* EXCEPTION_POLICY_DROP_PACKET */ true,
/* EXCEPTION_POLICY_DROP_FLOW */ false,
/* EXCEPTION_POLICY_REJECT */ true,
+ /* EXCEPTION_POLICY_REJECT_BOTH */ true,
},
};
// clang-format on
/* EXCEPTION_POLICY_DROP_PACKET */ false,
/* EXCEPTION_POLICY_DROP_FLOW */ false,
/* EXCEPTION_POLICY_REJECT */ true,
+ /* EXCEPTION_POLICY_REJECT_BOTH */ true,
},
.valid_settings_ips = {
/* EXCEPTION_POLICY_NOT_SET */ false,
/* EXCEPTION_POLICY_DROP_PACKET */ true,
/* EXCEPTION_POLICY_DROP_FLOW */ true,
/* EXCEPTION_POLICY_REJECT */ true,
+ /* EXCEPTION_POLICY_REJECT_BOTH */ true,
},
};
// clang-format on
/* EXCEPTION_POLICY_DROP_PACKET */ false,
/* EXCEPTION_POLICY_DROP_FLOW */ false,
/* EXCEPTION_POLICY_REJECT */ true,
+ /* EXCEPTION_POLICY_REJECT_BOTH */ true,
},
.valid_settings_ips = {
/* EXCEPTION_POLICY_NOT_SET */ false,
/* EXCEPTION_POLICY_DROP_PACKET */ true,
/* EXCEPTION_POLICY_DROP_FLOW */ true,
/* EXCEPTION_POLICY_REJECT */ true,
+ /* EXCEPTION_POLICY_REJECT_BOTH */ true,
},
};
// clang-format on
/* EXCEPTION_POLICY_DROP_PACKET */ false,
/* EXCEPTION_POLICY_DROP_FLOW */ false,
/* EXCEPTION_POLICY_REJECT */ false,
+ /* EXCEPTION_POLICY_REJECT_BOTH */ false,
},
.valid_settings_ips = {
/* EXCEPTION_POLICY_NOT_SET */ false,
/* EXCEPTION_POLICY_DROP_PACKET */ false,
/* EXCEPTION_POLICY_DROP_FLOW */ false,
/* EXCEPTION_POLICY_REJECT */ false,
+ /* EXCEPTION_POLICY_REJECT_BOTH */ false,
},
};
// clang-format on
/* EXCEPTION_POLICY_DROP_PACKET */ false,
/* EXCEPTION_POLICY_DROP_FLOW */ false,
/* EXCEPTION_POLICY_REJECT */ true,
+ /* EXCEPTION_POLICY_REJECT_BOTH */ true,
},
.valid_settings_ips = {
/* EXCEPTION_POLICY_NOT_SET */ false,
/* EXCEPTION_POLICY_DROP_PACKET */ false,
/* EXCEPTION_POLICY_DROP_FLOW */ true,
/* EXCEPTION_POLICY_REJECT */ true,
+ /* EXCEPTION_POLICY_REJECT_BOTH */ true,
},
};
// clang-format on
EXCEPTION_POLICY_BYPASS_FLOW,
EXCEPTION_POLICY_DROP_PACKET,
EXCEPTION_POLICY_DROP_FLOW,
- EXCEPTION_POLICY_REJECT,
+ EXCEPTION_POLICY_REJECT, /**< reject src */
+ EXCEPTION_POLICY_REJECT_BOTH /**< reject both src and dest */
};
-#define EXCEPTION_POLICY_MAX (EXCEPTION_POLICY_REJECT + 1)
+#define EXCEPTION_POLICY_MAX (EXCEPTION_POLICY_REJECT_BOTH + 1)
/* Max length = possible exception policy scenarios + counter names
* + exception policy type. E.g.:
return "reject";
case EXCEPTION_POLICY_BYPASS_FLOW:
return "bypass";
+ case EXCEPTION_POLICY_REJECT_BOTH:
+ return "reject_both";
case EXCEPTION_POLICY_DROP_FLOW:
return is_json ? "drop_flow" : "drop-flow";
case EXCEPTION_POLICY_DROP_PACKET:
case EXCEPTION_POLICY_NOT_SET:
break;
case EXCEPTION_POLICY_REJECT:
- SCLogDebug("EXCEPTION_POLICY_REJECT");
- PacketDrop(p, ACTION_REJECT, drop_reason);
+ case EXCEPTION_POLICY_REJECT_BOTH:
+ if (policy == EXCEPTION_POLICY_REJECT) {
+ SCLogDebug("EXCEPTION_POLICY_REJECT");
+ PacketDrop(p, ACTION_REJECT, drop_reason);
+ } else {
+ SCLogDebug("EXCEPTION_POLICY_REJECT_BOTH");
+ PacketDrop(p, ACTION_REJECT_BOTH, drop_reason);
+ }
if (!EngineModeIsIPS()) {
break;
}
case EXCEPTION_POLICY_PASS_PACKET:
break;
case EXCEPTION_POLICY_REJECT:
+ case EXCEPTION_POLICY_REJECT_BOTH:
break;
case EXCEPTION_POLICY_NOT_SET:
break;
policy = EXCEPTION_POLICY_PASS_PACKET;
} else if (strcmp(value_str, "reject") == 0) {
policy = EXCEPTION_POLICY_REJECT;
+ } else if (strcmp(value_str, "reject-both") == 0) {
+ policy = EXCEPTION_POLICY_REJECT_BOTH;
} else if (strcmp(value_str, "ignore") == 0) { // TODO name?
policy = EXCEPTION_POLICY_NOT_SET;
} else if (strcmp(value_str, "auto") == 0) {