Wazuh does not maintain a suppression state after a correlation rule fires. The frequency + timeframe logic only controls when the rule itself triggers, but it does not block or silence future matches of 100030.
That iss why:
Your approach with chaining (if_sid / if_matched_sid) won’t work either, because Wazuh rules are stateless beyond the aggregation window, there is no concept of “mute after trigger”.
A cleaner way to handle burst scenarios (like IPsec restarts) is to invert the logic: make the base rule silent and only alert on the aggregated condition.
For example:
<rule id="100030" level="0">
<decoded_as>openvpn-pfsense-ipsec</decoded_as>
<status>^installing</status>
</rule>
<rule id="100034" level="5" frequency="5" timeframe="1">
<if_matched_sid>100030</if_matched_sid>
<same_field>host</same_field>
<description>Possible IPsec restart detected on $(host)</description>
</rule>
With this approach, the individual tunnel events won’t generate alerts and a burst of 5+ events in 1 second will generate a single meaningful alert.
Of course, this depends on whether that behavior fits your use case. If you still need visibility on individual events, then you’ll probably need to rethink the rule design, since Wazuh doesn’t support true post-trigger suppression.