FAQ¶
This page answers the questions that come up most often when running, deploying, or tuning Rustinel.
General¶
What does Rustinel do?¶
Rustinel is a cross-platform EDR agent. It collects telemetry from ETW on Windows and eBPF on Linux, normalizes events into a shared model, evaluates Sigma, YARA, and IOC detections, writes ECS NDJSON alerts, and can optionally terminate offending processes.
See Architecture and Detection for the detailed runtime flow.
Which platforms are supported?¶
- Windows 10/11 and Server 2016+
- Linux with kernel 5.8+, BTF, and the required eBPF privileges
Current telemetry coverage is broader on Windows than Linux. Windows includes process, image load, network, file, registry, DNS, PowerShell, WMI, service, and task telemetry. Linux currently covers process, network, file, and DNS.
Do I need Administrator or root?¶
Yes.
- Windows ETW collection requires Administrator privileges.
- Linux eBPF collection requires root or equivalent capabilities such as
CAP_BPForCAP_SYS_ADMIN, depending on your setup.
Running And Deployment¶
What happens if I run rustinel without a subcommand?¶
It behaves the same as rustinel run.
See CLI Reference.
Can I run Rustinel as a Windows service?¶
Yes. Windows supports built-in service commands:
rustinel service installrustinel service startrustinel service stoprustinel service uninstall
The installed service points at the current executable path, so moving the binary to a new directory requires reinstalling the service.
See Operations and Upgrade Guide.
Can I run Rustinel as a Linux service?¶
Yes, but Rustinel does not include built-in Linux service-management commands. Run it under systemd or another supervisor.
See Operations and Upgrade Guide for the example systemd unit.
Why does Rustinel look in the wrong directory for rules or logs?¶
Because relative paths resolve from the current working directory.
That matters especially for:
- Windows services, which often start in
C:\Windows\System32 - Linux supervisors, which may start outside your install directory
For production deployments, use absolute paths for config.toml, rules, logs, and alerts.
See Configuration.
Where does Rustinel read configuration from?¶
Configuration precedence is:
- CLI flags where supported
EDR__...environment variablesconfig.tomlin the current working directory- Built-in defaults
See Configuration.
Can I override the embedded eBPF object during Linux development?¶
Yes. Set RUSTINEL_EBPF_OBJECT to an absolute path to a compiled .o file.
Example:
See CLI Reference.
Alerts, Logs, And Validation¶
Where do logs and alerts go?¶
By default:
- Operational logs:
logs/rustinel.log.<date> - Alerts:
logs/alerts.json.<date>
Both paths are configurable.
See Output Format and Configuration.
How do I quickly validate that Rustinel is working?¶
Use the bundled demo Sigma rules:
- Windows: run
whoami /all - Linux: run
whoami
Then confirm:
- startup messages exist in the operational log
- the corresponding alert exists in
alerts.json.<date>
See Getting Started.
Why do I see startup logs but no alerts?¶
The most common reasons are:
- the agent is running from a directory that does not contain the expected
config.tomlor rule paths - the relevant detector is disabled in config
- the rule files were not loaded from the path you expected
- the event source you are testing is not covered on that platform
- the event was suppressed by network aggregation or skipped by an allowlist
The operational log is the first place to check because it records sensor startup, rule loading, reload activity, warnings, and response decisions.
Detection Behavior¶
Can I disable Sigma, YARA, or IOC independently?¶
Yes.
scanner.sigma_enabledscanner.yara_enabledioc.enabled
See Configuration.
Does hot reload require a restart?¶
No. If reload.enabled = true, Rustinel polls Sigma, YARA, and IOC files and reloads them automatically.
A restart is still useful when you change deployment layout, supervisor configuration, privileges, or the binary itself.
What exactly hot reloads?¶
- Sigma rule files under
scanner.sigma_rules_path - top-level YARA rule files under
scanner.yara_rules_path - IOC files configured in
ioc.hashes_path,ioc.ips_path,ioc.domains_path, andioc.paths_regex_path
If a rebuild produces an empty detector set, Rustinel keeps the last known good one instead of swapping in an empty configuration.
Do Sigma and YARA load subdirectories the same way?¶
No.
- Sigma rules are loaded recursively.
- YARA rules are compiled from top-level
.yarand.yarafiles in the configured directory.
See Detection.
Why are my Linux DNS or domain-based detections not matching?¶
Because Linux DNS coverage is currently more limited than Windows.
The current eBPF DNS path preserves record_type, Image, and ProcessId, but it does not currently populate QueryName or QueryResults. That means:
- Sigma DNS rules that depend on the queried domain name are much more effective on Windows
- IOC domain matching is also much stronger on Windows today
- IOC IP matching from DNS answers is effectively Windows-only right now
See Detection.
Why did YARA not scan a process I expected?¶
The common causes are:
- the event was not a process-start event
- the executable path was under an allowlisted prefix
- YARA is disabled
- the rule file was not loaded from the configured directory
- the queue was full and the job was dropped
See Detection and Configuration.
How are severities assigned?¶
- Sigma uses the rule
level - YARA always emits
critical - IOC uses
ioc.default_severity
Active response applies response.min_severity after those mappings.
See Detection and Active Response.
What does alerts.match_debug do?¶
It controls how much match metadata is attached to alerts.
off: no match detailssummary: short structured match informationfull: more detailed match data, including matched values or YARA string details where supported
See Detection and Output Format.
Active Response And Allowlists¶
Why didn’t active response kill the process?¶
Active response only acts when all of the following are true:
response.enabled = true- the alert severity is at or above
response.min_severity - the process has a usable PID and image path
- the PID is not protected
- the target is not Rustinel itself
- the image or path is not allowlisted
prevention_enabled = true
If prevention_enabled = false, Rustinel logs what it would have done without terminating the process.
See Active Response.
Are allowlists shared across modules?¶
Yes, by default.
allowlist.paths is the shared trusted-prefix list. If module-specific path allowlists are empty, they inherit from it:
response.allowlist_pathsscanner.yara_allowlist_pathsioc.hash_allowlist_paths
See Configuration.
Can I test active response safely?¶
Yes. Start with dry-run mode:
Then trigger a known benign bundled rule such as:
whoami /allon Windowswhoamion Linux
After you confirm the log output looks correct, enable prevention mode.
See Active Response.
Data Export¶
Does Rustinel ship alerts directly to a SIEM?¶
Not by itself. Rustinel writes ECS NDJSON alert files and operational logs. A log shipper such as Filebeat can forward them.
See Output Format.