If you want IP in list_X, list_Y, or list_Z -> action, then you can make a chain for the three lists.
Put all other criteria on the jump check, e.g. port number, nth, time of day, etc)
1) all other criteria are true -> jump to chain multi_list_check
multi 1) list_X -> action
multi 2) list_Y -> action
multi 3) list_Z -> action
multi 4) return
I think this would only be nominally slower than a single rule checking all 3 lists, because behind the scenes, a single rule would have to check each list separately anyway.
If you want "AND" behavior, then simply reversing the logic gives the desired behavior:
multi 1) ! list_X -> return
multi 2) ! list_Y -> return
multi 3) ! list_Z -> return
multi 4) action
The other nice thing about a stand-alone chain is that the same chain can be called from any other chain in the same table. It's not quite as portable as the address-lists are, but it's pretty flexible.
I suppose that if the ability to specify multiple IP lists were provided, I would expect "OR" behavior, in order to remain consistent with the other such fields (dst-port=xxxx,yyyy,zzzz is an OR behavior, for instance)
When given a spoon,
you should not cling to your fork.
The soup will get cold.