Eu realmente estava sentindo falta de algo óbvio e descobri algo não tão óbvio:
Esta é a cadeia de comandos que irá criar um ipset com um tempo limite no firewalld
firewall-cmd --permanent --new-ipset=whitelist --type=hash:ip --option=timeout=30
firewall-cmd --reload
firewall-cmd --zone=external --add-source=ipset:whitelist
Eu estava sem o bit --add-source (note que a regra rich não é necessária). Mas, tentar adicionar uma entrada ao ipset através do firewall-cmd ainda dá o mesmo erro da pergunta inicial. No entanto, é possível usar diretamente o comando nativo ipset:
#ipset add whitelist AA.BB.CC.DD
#ipset list whitelist
Name: whitelist
Type: hash:ip
Revision: 1
Header: family inet hashsize 1024 maxelem 65536 timeout 30
Size in memory: 16592
References: 7
Members:
AA.BB.CC.DD timeout 22
Esta configuração coloca na lista de permissões o endereço IP fornecido por 30 segundos. Apenas o que eu precisava.
O motivo de tudo isso é poder fornecer um mecanismo automático para fornecer acesso a um serviço de área de trabalho remota para usuários que fazem login em nossos servidores com o ssh. O comando ipset add é executado a partir de um manipulador de eventos syslog que detecta logins ssh bem-sucedidos e captura o ip de origem associado do qual o usuário está efetuando login. O tempo limite da lista branca limita a janela de ataque para a conexão vnc remota de forma significativa. Temos usado uma configuração semelhante no CentOS6 com base no tcp-wrapper. Agora estamos nos movendo para o CentOS7 e usar o tempo limite do ipset elimina a necessidade de nossa própria contabilidade fechar os endereços IP permitidos após a expiração da janela de tempo limite.