Quero abrir uma porta no meu firewall por um tempo limitado, digamos 22, e desligá-la após alguns minutos (para que as conexões de outros IPs, em vez do que está estabelecido no momento, encontrem a porta fechada). Até agora, isso é o que eu vim com:
a) Ter uma regra permanente no iptables informando para manter vivas as conexões existentes
iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
b) Adicione uma regra no iptables permitindo conexões de IP específico para conectar e remova-a após algum tempo:
iptables -I INPUT -p tcp --dport 22 -s XXX.XXX.XXX.XXX -j ACCEPT
Isso deveria funcionar ou há algo errado no meu raciocínio?
Sim, todos os pacotes TCP serão correspondidos
--state ESTABLISHED
, desde que o conntrack não esqueça a entrada de estado correspondente. Certifique-se de que os tempos limite de conntrack do servidor sejam suficientemente longos (você pode encontrá-los nonet.netfilter.nf_conntrack_tcp_timeout_established
sysctl – o padrão é 5 dias, mas alguns sistemas o alteram para tempos limite muito curtos).(Na verdade, você também deve aceitar pacotes ICMP estabelecidos/relacionados, para permitir que o servidor receba coisas como pacotes de descoberta Path MTU e outros pacotes de erro ICMP.)
Você pode usar um ipset para combinar novos endereços IP – ele possui um recurso de tempo limite embutido.