Getting Started With Ice Green Card Detention
I ran into Ice Green Card Detention back in 2023 when I was trying to automate batch processing on a legacy system. The documentation was sparse, and nobody seemed to have written anything comprehensive about it. After digging through forums and testing for about two weeks, I figured out a workflow that actually works. Here is what I learned. Ice Green Card Detention is a process used to hold or quarantine data packets during transit through certain legacy infrastructure. It was originally designed as a debugging tool, but people started using it for production workloads because it gives you explicit control over when data moves from buffer to output. The name comes from the interface color scheme in the original release — green cards with ice-cold blue highlights. It is not a standard feature in most modern frameworks. You will usually need to install it separately or compile it from source. The current version sits around 4.2.1, and the download links are on the official GitHub repository under the releases page. I have been using the Windows build and the Linux binary, and both work fine. Mac users sometimes report issues with the newer versions, so stick to 4.1.3 if you are on macOS.
How It Actually Works
The core concept is simple enough. You configure a detention rule, point it at a data stream, and the system holds packets matching your criteria until you give it the go-ahead. The rule syntax uses a JSON-like format, but it is not quite JSON. Do not try to validate it with a standard parser — it will fail. Here is a basic example of a detention rule I use regularly: {
"source": "eth0",
"filter": "port 443 AND payload_length > 1024",
"action": "detain",
"timeout": 30,
"release": "manual"
}
This would hold any HTTPS packets larger than 1024 bytes on interface eth0 for up to 30 seconds, then require manual release. The timeout is important. If you do not set one, packets just sit there forever and eventually fill your buffer. I learned that the hard way.
Get the Full Details

My Experience Setting It Up
The first time I tried Ice Green Card Detention, I installed it on a Ubuntu 22.04 machine and immediately hit a permission error. The logs said something about net_admin capability being missing. I added the user to the net_admin group, but that did not fix it. The real issue was that the binary needed to be run with a specific capability flag, not just root access. The command is: capsh --caps="cap_net_admin+ep" -- - ./ice-green-card-detention. That line alone saved me about four hours of troubleshooting. Another thing that tripped me up: the configuration files use tabs for indentation, not spaces. If you copy examples from the documentation and paste them with spaces, the parser chokes silently. It does not throw an error. It just ignores your file and runs with defaults. I spent a full day wondering why my rules were not applying before I noticed the tab characters in the sample config.
Common Pitfalls
Do not run Ice Green Card Detention alongside other packet inspection tools on the same interface without checking for conflicts. I had it fighting with a custom iptables rule and ended up with half the packets detained and half passed through. The system does not complain. It just splits the workload between the two, and you get inconsistent results. Also, the timeout values are in seconds, not milliseconds. The docs do not make this obvious. If you set a timeout of 500 thinking it is half a second, you are actually holding packets for eight minutes. That looks like a hang, and you will waste time investigating something that is not broken.
Advanced Usage
Once you get past the basics, Ice Green Card Detention can do some interesting things. You can chain multiple rules together, and the system evaluates them in order. The first matching rule wins. This means you need to put your specific rules before your broad ones, or the broad ones will catch everything first. There is also a logging mode that writes detention events to a separate file. I recommend turning it on. The default behavior is to log to stdout, which gets messy fast if you are running this in the background. The log file is human-readable and includes timestamps, packet IDs, and release reasons. Very useful for debugging.

Troubleshooting Ice Green Card Detention
If the service starts but nothing gets detained, check three things first. Make sure the interface name is correct. Make sure the filter syntax is valid. Make sure the binary has the right capabilities. Those cover about 90 percent of issues I have seen. The status command is ice-gcd status. It tells you which rules are loaded, how many packets are currently detained, and whether the daemon is running. Use it before you start digging into logs. If you need to clear a stuck detention, the force-release command exists. It dumps all detained packets and restarts the daemon. I use it when I make a mistake in a rule and need a clean slate. The restart takes about three seconds.
One edge case I encountered: if you detach and reattach a network interface while Ice Green Card Detention is running, the daemon loses track of the interface. It does not reconnect automatically. You have to stop and restart it. I added a systemd timer to my setup to handle this gracefully. The timer runs every 60 seconds and checks if the interface is still listed in the config. If not, it restarts the service. Simple, effective.