I'm sorry, but I am not seeing the behavior that you describe.
My iptables rule which blocks IP addresses is at the highest precedence, and
in fact, it is my *only* iptables rule. I repeatedly and regularly see that this
rule does not terminate nor block existing connections. It only blocks *future*
connections by the IP addresses that it references.
This is my one and only iptables rule (where "drop-list" is an ipset list).
iptables -I INPUT -m set --match-set drop-list src -j DROP
As soon as I detect a "bad" login attempt, I cause the following command to run:
ipset add drop-list aaa.bbb.ccc.ddd -exist
(where aaa.bbb.ccc.ddd is the offending IP address)
Perhaps there is a delay before the iptable rule takes effect whenever the
ipset list is updated. Or perhaps this is some sort of behavior that only exists
on earlier linux versions such as debian-8, which I am running.
In any case, I often see activity on existing connections that continues after
this ipset command is invoked for those connections' IP addresses.