5.1 - Blacklist Filter

This filter blocks connections from blacklisted remote addresses. One can block Addresses or Subnets. In any case, when an event happens on a blocked session, the session will simply be closed. Here are the events this filter handles :

  • event (MINA 2.1)
  • messageReceived
  • messageSent
  • sessionCreated
  • sessionIdle
  • sessionOpened

There is no need to handle any other event.

Blocking an address

Any address or subnet can be blocked live, ie it does not matter if a session is already active or not, this dynamically activated. It’s enough to add the filter in the chain, and to set (or unset) the addresses to block:

...
BlacklistFilter blackList = new BlacklistFilter();
blackList.block(InetAddress.getByName("1.2.3.4"));
acceptor.getFilterChain().addLast("blacklist", new BlacklistFilter());
...

Here, the “1.2.3.4” address will be blocked.

Unblocking an address

It’s possible to unblock an address, it’s just a matter of fetching the filter and remove a previously blocked address:

...
BlacklistFilter blackList = (BlacklistFilter)session.getFilterChain().get(BlacklistFilter.class);
blackList.unblock(InetAddress.getByName("1.2.3.4"));
...

Here, the “1.2.3.4” address will be unblocked.

Performances

Currently, the implementation is not really optimal… We use a List to store the blocked addresses/subnet, so the more of them you have in the list the longer it will take to process any event.