Não acredito que isso seja possível ufw
. ufw
é apenas uma interface para a iptables
qual também não há esse recurso, portanto, uma abordagem seria criar uma entrada crontab que seria executada periodicamente e verificar se o endereço IP foi alterado. Se tiver, ele será atualizado.
Você pode ser tentado a fazer isso:
$ iptables -A INPUT -p tcp --src mydomain.dyndns.org --dport 22 -j ACCEPT
Mas isso resolverá o nome do host para um IP e o utilizará para a regra, portanto, se o IP mudar posteriormente, essa regra se tornará inválida.
Idéia alternativa
Você pode criar um script como esse, chamado iptables_update.bash
,.
#!/bin/bash
#allow a dyndns name
HOSTNAME=HOST_NAME_HERE
LOGFILE=LOGFILE_NAME_HERE
Current_IP=$(host $HOSTNAME | cut -f4 -d' ')
if [ $LOGFILE = "" ] ; then
iptables -I INPUT -i eth1 -s $Current_IP -j ACCEPT
echo $Current_IP > $LOGFILE
else
Old_IP=$(cat $LOGFILE)
if [ "$Current_IP" = "$Old_IP" ] ; then
echo IP address has not changed
else
iptables -D INPUT -i eth1 -s $Old_IP -j ACCEPT
iptables -I INPUT -i eth1 -s $Current_IP -j ACCEPT
/etc/init.d/iptables save
echo $Current_IP > $LOGFILE
echo iptables have been updated
fi
fi
fonte: Usando IPTables com nomes de host de IP dinâmico como dyndns.org
Com esse script salvo, você pode criar uma entrada crontab como esta no arquivo /etc/crontab
:
*/5 * * * * root /etc/iptables_update.bash > /dev/null 2>&1
Essa entrada executaria o script a cada 5 minutos, verificando se o endereço IP atribuído ao nome do host foi alterado. Nesse caso, ele criará uma nova regra permitindo, enquanto exclui a regra antiga para o endereço IP antigo.
Current_IP=$(host $HOSTNAME | cut -f4 -d' ')
paraCurrent_IP=$(host $HOSTNAME | head -n1 | cut -f4 -d ' ')
Eu sei que isso é antigo, mas eu o encontrei e acabei com essa solução no final, o que parece ainda melhor porque nenhum arquivo de log é necessário e é muito fácil adicionar hosts adicionais conforme necessário. Funciona como um encanto!
Fonte: http://rdstash.blogspot.ch/2013/09/allow-host-with-dynamic-ip-through.html
fonte
Com base nas respostas anteriores, atualizei o seguinte como script bash que funciona no Debian Jessie
fonte
cron
que seja executado periodicamente por conta própria.LOGFILE=$HOME/ufw.log
paraLOGFILE=$HOME/ufw.$HOSTNAME.log
permitir mais de uma execução de script ao mesmo tempoCom base em todas as respostas antes de eu combiná-las. Nenhum arquivo de log necessário. Testado no Ubuntu 18.04
Você pode adicionar uma porta às regras com o parâmetro "port". por exemplo:
fonte