Ok. Meu problema foi que $ PAM_RHOST retorna o hostname não ip.
Script corrigido
#!/bin/sh
ip=$(getent hosts "$PAM_RHOST" | awk '{ print $1 }')
if [ "$PAM_TYPE" = "close_session" ]; then
ufw delete allow from $ip
else
ufw allow from $ip
fi
NOTA: Certifique-se de que o ufw tenha o IPv6 ativado porque "hosts getent" podem retornar IPv6 ou IPv4