iptables - permite conexões a uma porta apenas para endereços IP com o estado estabelecido em uma porta diferente

4

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?

    
por rdoll 18.12.2013 / 00:20

2 respostas

1

Talvez você possa usar a porta batendo? Abrir porta quando uma conexão tcp é estabelecida, poderia ser possível: link

    
por 18.12.2013 / 09:59
1

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
    
por 27.12.2013 / 21:50