Talvez você possa usar a porta batendo? Abrir porta quando uma conexão tcp é estabelecida, poderia ser possível: link
Eu quero permitir conexões na porta x para endereços IP que tenham um estado 'estabelecido' na porta y.
Isso é possível usando apenas iptables?
Talvez você possa usar a porta batendo? Abrir porta quando uma conexão tcp é estabelecida, poderia ser possível: link
A resposta é "meio que". Você precisará instalar o pacote ipset
e garantir que seu kernel tenha ipset
support.
Primeiro, você precisa criar um "IP Set" com tempo limite:
ipset create MySet hash:ip timeout 60
adicione uma regra que redefina o tempo limite para cada pacote estabelecido
iptables -A INPUT -p tcp --dport $port1 -m state --state ESTABLISHED -j SET --add-set MySet src
finalmente, adicione um conjunto de regras para permitir acesso à segunda porta somente se a fonte tiver sido gravada e soltar outras
iptables -A INPUT -p tcp --dport $port2 -j Port2_Test
iptables -A Port2_Test -m state --state ESTABLISHED -j ACCEPT
iptables -A Port2_Test -m state --state NEW -m set --match-set MySet src -j ACCEPT
iptables -A Port2_Test -p tcp -j REJECT
EDITAR
Acabei de perceber que também é possível usar a extensão de correspondência recent
. Você faz assim:
-A INPUT -p tcp --dport $portY -m state --state ESTABLISHED -m recent --name YThenX --set -j ACCEPT
...
-A INPUT -p tcp --dport $portX -j Port2_Test
...
-A Port2_Test -m state --state ESTABLISHED -j ACCEPT
-A Port2_Test -m state --state NEW -m recent --name YThenX --rcheck --seconds $timeout --reap $timeout -j ACCEPT
-A Port2_Test -p tcp -j REJECT