Por que minha configuração do iptables para port-knocking não funciona?

0

Eu implementei as seguintes regras iptables no meu servidor de teste para um curso. O firewall é desligado e não consigo acessar a porta 22. No entanto, após batendo nas portas 1111, 2222 e 3333 nessa ordem - a porta 22 deve ser aberta. No entanto, meu ssh ainda está bloqueado.

Estou batendo em cada porta por meio de um script Python:

# knock_list = [1111, 2222, 3333]

for port in knock_list:
    time.sleep(1.5)

    sock = None
    try:
        print 'Knocking:', ip_address, port
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.set_timeout(1)
        sock.connect((ip_address, port))

    except:
        pass

    finally:
        if sock:
            sock.close()

Por que minha configuração do iptables para port-knocking não funciona?

Minha configuração do iptables

sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F

sudo iptables -N KNOCKING
sudo iptables -N GATE1
sudo iptables -N GATE2
sudo iptables -N GATE3
sudo iptables -N PASSED

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT

sudo iptables -A INPUT -j KNOCKING

sudo iptables -A GATE1 -p tcp --dport 1111 -m recent --name AUTH1 --set -j DROP
sudo iptables -A GATE1 -j DROP

sudo iptables -A GATE2 -m recent --name AUTH1 --remove
sudo iptables -A GATE2 -p tcp --dport 2222 -m recent --name AUTH2 --set -j DROP
sudo iptables -A GATE2 -j GATE1

sudo iptables -A GATE2 -j GATE1

sudo iptables -A GATE3 -m recent --name AUTH2 --remove
sudo iptables -A GATE3 -p tcp --dport 3333 -m recent --name AUTH3 --set -j DROP
sudo iptables -A GATE3 -j GATE1

sudo iptables -A PASSED -m recent --name AUTH3 --remove
sudo iptables -A PASSED -p tcp --dport 22 -j ACCEPT
sudo iptables -A PASSED -j GATE1

sudo iptables -A KNOCKING -m recent --rcheck --seconds 30 --name AUTH3 -j PASSED
sudo iptables -A KNOCKING -m recent --rcheck --seconds 10 --name AUTH2 -j GATE3
sudo iptables -A KNOCKING -m recent --rcheck --seconds 10 --name AUTH1 -j GATE2

sudo iptables -A KNOCKING -j GATE1
    
por Philipp 08.10.2014 / 18:21

1 resposta

1

Duas coisas para mencionar.

Primeiramente você faz uma política (-P) ACEITAR para cada um dos INPUT, OUTPUT e FORWARD. Melhor você fechar (DROP) tudo, especialmente em INPUT, e abrir apenas o que for necessário.

Segundo, eu não conheço Python muito bem, mas geralmente esse tipo de conexão não envia apenas um pacote, mas muitos mais. Mesmo se você fizer um tempo limite de 1 segundo, haverá (eu acho) 2 pacotes idênticos enviados, porque não houve resposta para o primeiro. Então o primeiro pacote traz a fonte na próxima lista AUTH + 1, e o segundo pacote o remove e traz a fonte de volta para a lista AUTH1.

Eu aconselho a reescrever seu portknocking levando em conta vários pacotes idênticos enviados na mesma porta.

    
por 09.10.2014 / 00:24