Abrir porta SSH uma má idéia em um Raspberry Pi?

0

Eu tenho um Raspberry Pi em casa que conectei à minha rede doméstica. Eu o uso para executar um servidor VPN, um túnel SSH e, ocasionalmente, um SSH para executar a manutenção nele.

É uma má ideia ter portas abertas (TCP) no meu roteador para que eu possa me conectar remotamente ao meu Pi enquanto estou longe de casa? Eu não uso a porta usual 22; é uma porta aleatória que eu escolhi. No entanto, quando examino meu endereço IP usando nmap on pentest-tools.com , vejo a porta aberta que escolhi usar para SSH. Meu Pi é protegido por senha, e não há dados sensíveis ou números de cartão de crédito no meu que eu saiba. Mas considerando que eu o uso para tunelamento VPN ou SSH, dados sensíveis podem viajar através dele. Então, é ruim ter essa porta SSH aberta no meu roteador? Alguém pode fazer alguma coisa mal-intencionada em minha rede doméstica tendo essa porta aberta, considerando que o meu Pi está sempre ligado e escutando essa porta?

    
por brad barnes 15.04.2016 / 18:15

2 respostas

5

Em termos de segurança, três métodos adicionais vêm à minha mente.

A: usar autenticação de chave pública

Para aumentar a segurança, você pode configurar seu servidor SSH para usar a autenticação de chave pública. Ou seja, adicionalmente ou em vez de uma senha strong, a conexão será aberta apenas se o cliente SSH fornecer a chave privada que corresponde à chave pública no servidor. Mesmo que um atacante pudesse ganhar a chave pública de alguma forma, ele não poderia recuperar a chave privada disso. No entanto, isso não ocultará sua porta dos scanners de portas.

B: use uma porta diferente

Além disso, fiz uma boa experiência em termos de menos varreduras de portas com a configuração do servidor SSH para ouvir uma porta diferente de 22. A opção de configuração padrão correspondente em /etc/ssh/sshd_config é

Port 22

Você pode alterar isso para, por exemplo, 54322:

Port 54322

Lembre-se de reiniciar o servidor SSH posteriormente; dependendo do Linux no seu Raspberry, pode ser um dos

# service sshd restart
# systemctl restart sshd

(O sinal # , se não estiver em um arquivo, indicará um prompt de root aqui nos meus exemplos.)

Não se preocupe, sua sessão SSH atual permanecerá ativa. Pode valer a pena tentar abrir uma segunda sessão SSH para a porta 54322 para ver se o login ainda funciona. Lembre-se de

  • configure seu cliente SSH para a nova porta
  • se aplicável, encaminhe a nova porta em seu roteador de internet para o Raspberry Pi

C: feche a porta e abra-a somente a seu pedido

Se você realmente não quer mostrar "a internet" que você tem esta porta aberta, dê uma olhada nos daemons de batidas de porta, e. g. %código%. Esses programas escutam as portas (fechadas) definidas por você e, em uma seqüência de detonação, também definida por você, abre uma porta diferente, e. g. sua porta SSH. De um telefone celular ou laptop, você inicia a sequência de batidas e o daemon de batida no seu Raspberry Pi abre sua porta SSH, que não era visível.

Mais detalhadamente, a batida de portas adicionará uma linha à configuração knockd . Esta linha irá abrir a porta no seu Raspberry. Isso também significa que a porta SSH deve ser fechada por iptables antes. E isso significa que você não pode fazer login via SSH.

Um exemplo iptables poderia ser assim:

[openclosessh]
    sequence    = 1000,2020,3015,65432
    seq_timeout = 15
    tcpflags    = syn
    start_command   = /usr/local/bin/knockd-open.sh %IP%
    cmd_timeout = 30
    stop_command    = /usr/local/bin/knockd-close.sh %IP%

Além disso, lembre-se de encaminhar as portas a serem acionadas do seu roteador de internet para o seu Raspberry.

Os scripts de abertura / fechamento correspondentes podem ser assim:

#!/bin/bash
# /usr/local/bin/knockd-open.sh
# adds two lines at the top of iptables which allow all incoming and outgoing traffic on tcp port 54322
iptables -I INPUT -s $1 -p tcp --dport 54322 -j ACCEPT
iptables -I OUTPUT -d $1 -p tcp --sport 54322 -j ACCEPT

e

#!/bin/bash
# /usr/local/bin/knockd-close.sh
# deletes those two lines again
iptables -D INPUT -s $1 -p tcp --dport 54322 -j ACCEPT
iptables -D OUTPUT -d $1 -p tcp --sport 54322 -j ACCEPT

Lembre-se de tornar os dois scripts executáveis com knockd.conf . Além disso, você deve iniciar e ativar o serviço knockd com um dos

# service knockd start && update-rc.d knockd enable
# systemctl start knockd && systemctl enable knockd

Especialmente se você contratar um computador remoto em que não tenha acesso ao console, talvez queira usar chmod +x /usr/local/bin/knockd* para revogar automaticamente quaisquer alterações e / ou reinicializar o Raspberry em caso de erros de configuração.

Como o iptables não será armazenado através de reinicializações automaticamente, em um exemplo, você pode ser root (via atd ) e

# at now + 5 minutes
> reboot
> (hit ctrl-d)
# ./script-which-closes-iptables.sh

Um exemplo su poderia ser assim (lembre-se de torná-lo executável com ./script-which-closes-iptables.sh )

#!/bin/bash
# allow everything on the loopback interface
iptables -A INPUT -i lo -j ACCEPT
# allow only related or established incoming ssh sessions
iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -m tcp --dport 54322 -j ACCEPT
# allow outgoing related or established ssh sessions
iptables -A OUTPUT -p tcp -m state --state RELATED,ESTABLISHED -m tcp --sport 54322 -j ACCEPT
# allow everything on the loopback interface
iptables -A OUTPUT -o lo -j ACCEPT
# drop everything else in and out
iptables -P INPUT DROP
iptables -P OUTPUT DROP

Se a sua sessão SSH estiver a morrer agora, o Raspberry irá reiniciar em 5 minutos. Se sua sessão SSH ainda estiver ativa, revogue a reinicialização pendente com

# atq
15 reboot
# atrm 15

Se a sua sessão SSH ainda estiver ativa, tente fazer login por meio de uma segunda sessão SSH. Isso não deveria funcionar. Em seguida, use seu celular e bata as portas que você configurou em chmod +x . Depois disso, tente novamente fazer login por meio de uma segunda sessão SSH. Desta vez, deve funcionar.

Então você pode fazer seu iptables persistir em uma reinicialização. No seu sistema, você pode ter que instalar um pacote via

# apt-get install iptables-persistent

Salve seus iptables com

# iptables-save > /etc/iptables/iptables-rules

e ative o serviço iptables com

# systemctl enable iptables
    
por 28.05.2016 / 22:49
1

Se o seu Raspberry Pi tiver uma senha strong e segurança SSH strong, você está bem; Os invasores não podem fazer nada com o SSH se não puderem fazer login ou explorá-lo. Eles vão encontrar o porto, com certeza.

Nota histórica: no passado, houve um problema com a configuração do SSH; a chave gerada automaticamente era previsível. Isso foi corrigido.

Se os atacantes fizerem conseguirem obter acesso SSH, eles serão os proprietários do dispositivo. Em seguida, eles podem usá-lo para fazer coisas ruins, como ARP Poisoning , que permite capturar e alterar dados não criptografados que cruzam sua rede. Eles também podem usar o Pi como um ponto de partida para ataques em seus outros hosts. O Pi é um computador como qualquer outro, e você precisa ter cuidado para protegê-lo.

    
por 15.04.2016 / 18:30