De acordo com a sugestão de Darren, eu escrevi o script de shell que procura o IP, então ajustei as regras de firewall conforme necessário (e, por necessário, eu quis dizer apagar tudo de antes e substituir pelo IP correto). Aqui está o script:
#!/bin/bash
target_hosts="dynhost.does-not-exist.com another-host.does-not-exist.com"
if [ -f "/root/dynblock-curr" ]; then
mv /root/dynblock-curr /root/dynblock-prev
fi
touch /root/dynblock-curr
if [ -f "/root/dynblock-prev" ]; then
# Remove previously set firewall allows
for prev_ip in 'cat /root/dynblock-prev'; do
ufw delete allow from $prev_ip to any app OpenSSH > /dev/null
done
fi
for target_host in $target_hosts; do
# Look up IP per host
# echo "Looking up IP for host:" $target_host
target_ip='host $target_host | cut -d ' ' -f 4'
if [ $? -eq 0 ]; then
echo $target_ip >> /root/dynblock-curr
ufw allow from $target_ip to any app OpenSSH > /dev/null
fi
done
Obviamente, eu não pretendia gastar mais do que o número necessário de células cerebrais nisso. Isso foi testado e garantido para Work For Me (tm). Isso é executado através de cron
a cada 15 minutos.
Outra nota (óbvia): acabei usando ufw
para gerenciar iptables
regras para mim (como eu disse, contagem mínima de células cerebrais).