Redirecionar portas iptables

Iniciado por danielfventuri, 09 de Março de 2009, 10:47

tópico anterior - próximo tópico

danielfventuri

Bom dia pessoal

script no iptables e gostaria de saber como faço para fazer um redirecionamento de portas aleatório a cada certo intervalo de tempo?

por exemplo no comando abaixo gostaria de mudar a porta 1234 para uma porta qualquer a cada 10 min. a porta de destino continuará sendo a mesma.

iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination :5678

Obrigado

raidicar

Não serviria se criasse um script onde nele, definiria um ranjo aleatório de portas e, depois, agenda-lo no cron para executa-lo a cada 10 min?
Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

danielfventuri

é exatamente um script q quero fazer, mais quais os comandos uso para fazer isso de modo aleatório?

uso estruturas de repetição como em programação c/c++? quais os comandos corretos?

raidicar

#3
Olá,
vc pode usar os comandos while, ou until, ou... Existe muitas formas de fazer isso.
vou dar um exemplo com o comando until para facilitar o entendimento.


#! /bin/bash
port=1234
endport=1580
           until [ $port = "0" ]; do
                iptables -t nat -A PREROUTING -p tcp --dport $port -j DNAT --to-destination :5678
                sleep 600
                port=`expr $port + 2`
                    if [ $port = "1579" ]; then
                        port=1234
                    fi
                    if [ $port -gt $endport ]; then
                        port=1235
                    fi
           done


Esse script funcionara da seguinte forma,
Ele atribui a variavel $port o valor 1234.
Ele atribiu a variavel $endport o valor 1580
Ou seja, o ranjo de portas que defini para ser utilizada para o comando vai de 1234 à 1580.
O valor inicial de $port é 1234, então, o script colocará "1234" no lugar de "$port" e ocomando dado será:
iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination :5678
Após o comando o script executará o comando sleep 600, o que significa que ele fará uma pausa de 600 segundos, isso equivale a 10 minutos. Em seguida, somará 1234 + 2, o que equivale a 1236.
Ele retornará ao inicio do script para testar a condição UNTIL
until [ $port = "0" ]; do # Traduzindo: Enquanto a variável $port NÃO for igual a zero, faça.
e ele fará, executará o comando:
iptables -t nat -A PREROUTING -p tcp --dport 1236 -j DNAT --to-destination :5678
Aqui foi mudado o valor para 1236 pois o comando port=`expr $port + 2` somou + 2 ao valor anterior da variavel $port que era 1234.

Como a variavel $port iniciou valendo 1234 e agora vale 1236, o script continuára rodando e somando + 2 ao valor atual da variavel port até que a variavel $port seja igual a zero, quando isso ocorrer ele para de rodar, mas nesse script isso nunca vai ocorrer, pois criamos um laço infinito onde $port nunca será igual a zero.

Quando a variável $port for maior que 1580, ela retornará ao valor 1235, assim, definimos o valor mais alto que a variável $port terá, que é 1580. Ao chegar nesse valor, a variável volta recebera o valor = 1235.
Isso foi definido nessa linha:
if [ $port -gt $endport ]; then
port=1235

Traduzindo: se $port for maior que $endport (que equivale 1580), então $port valerá 1235
E ai começa tudo de novo, mas dessa vez, somando 1235 + 2, dessa vez as portas impares serão utilizadas.
Ou seja, após executado, sabemos qual é o valor inicial da porta, após um tempo, o valor da porta será qualquer um entre 1234 e 1580.

Como vê, é simples, é mais demorado explicar o script do que faze-lo, pelo nivel de sua pergunta e pela sua resposta, creio que nem é preciso explicar o funcionamento, parece-me que apenas precisava saber os comandos e não a lógica, mas assim, já esclarece as duvidas de quem pode estar começando a mexer com shell script.

Seja como for, esse foi um exemplo, agora, o ranjo de portas é vc quem determina, assim como o tempo de execução e sua aleatoriedade.
Existem muitas formas de fazer isso, até mesmo formas mais complexas para que o valor que equivale a porta possua um valor bem mais aleatório, porém, para isso, bolariamos calculos mais interessantes, uma lógica mais complexa para aplicar os calculos, mas ai, o script ficaria mais complexo, achei que essa forma de fazer seria simples e fácil para todos entenderem e, creio que a partir dai, vc consiga melhora-lo sozinho.
Sejá como for, esse script vai funcionar.

ps:

                    if [ $port = "1579" ]; then
                        port=1234


Essas linhas são para após utilizar portas com valores impares, voltar a ulizar portas com valores pares, assim vai alternando, ora portas impares, ora pares.
Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

danielfventuri