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

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

Quero permitir conexões na porta x para endereços IP que tenham um estado 'estabelecido' na porta y.

Isso é possível apenas usando iptables?

Responder1

Talvez você possa usar batidas na porta? Abrir porta quando uma conexão TCP é estabelecida pode ser possível: http://en.wikipedia.org/wiki/Port_knocking

Responder2

A resposta é “mais ou menos”. Você precisará instalar ipseto pacote e garantir que seu kernel tenha ipsetsuporte.

Primeiro você terá que criar um "Conjunto de IP" com tempo limite:

ipset create MySet hash:ip timeout 60

em seguida, adicione uma regra que redefinirá o tempo limite para cada pacote estabelecido

iptables -A INPUT -p tcp --dport $port1 -m state --state ESTABLISHED -j SET --add-set MySet src

por fim, adicione um conjunto de regras para permitir o acesso à segunda porta somente se a fonte tiver sido gravada e descarte 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 recentextensão match. 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

informação relacionada