Abrir porta SSH é uma má ideia 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, faço o SSH nele para executar manutenção nele.

É uma má idéia ter portas abertas (TCP) no meu roteador para que eu possa conectar-me remotamente ao meu Pi enquanto estiver fora de casa? Eu não uso a porta 22 habitual; é uma porta aleatória que eu escolhi. No entanto, quando digitalizo meu endereço IP usando nmapon pentest-tools.com, vejo a porta aberta que escolhi usar para SSH. Meu Pi é protegido por senha e não há dados confidenciais ou números de cartão de crédito nele que eu conheça. Mas, considerando que eu o uso para tunelamento VPN ou SSH, dados confidenciais podem passar por ele. Então, é ruim ter essa porta SSH aberta no meu roteador? Alguém pode fazer algo malicioso na minha rede doméstica com essa porta aberta, considerando que o meu Pi está sempre ligado e escutando essa porta?


11
Você deve desativar todos os serviços que não planeja usar. Se você precisar desses serviços, eles devem estar ativados e siga as etapas necessárias para reforçar a segurança do sistema operacional.
Ramhound #

Respostas:


5

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

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

Para aumentar a segurança, você pode configurar o servidor SSH para usar a autenticação de chave pública. Ou seja, além de ou em vez de uma senha forte, a conexão será aberta apenas se o cliente SSH fornecer a chave privada que corresponde à chave pública no servidor. Mesmo que um invasor pudesse obter 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 verificações de porta com a configuração do servidor SSH para escutar uma porta diferente de 22. A opção de configuração padrão correspondente /etc/ssh/sshd_configé

Port 22

Você pode mudar isso para, digamos 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, deve indicar um prompt raiz aqui nos meus exemplos.)

Não se preocupe, sua sessão SSH atual permanecerá ativa. Vale a pena tentar abrir uma segunda sessão SSH na porta 54322 para ver se o logon ainda funciona. Lembrar de

  • configure seu cliente SSH para a nova porta
  • se aplicável, encaminhe a nova porta do seu roteador da Internet para o Raspberry Pi

C: feche a porta e abra-a apenas mediante solicitação

Se você realmente não deseja mostrar à "Internet" que você tem essa porta aberta, consulte daemons de porta aberta, por exemplo knockd. Esses programas escutam portas (fechadas) definidas por você e, após uma seqüência de batida, também definida por você, abrem uma porta diferente, por exemplo, sua porta SSH. Em um telefone celular ou laptop, você inicia a sequência de batidas e o daemon de batida no Raspberry Pi abre a porta SSH, que não era visível.

Mais detalhadamente, a batida na porta adicionará uma linha à sua iptablesconfiguração. Esta linha abrirá a porta do seu Raspberry. Isso também significa que a porta SSH deve ser fechada iptablesantes. E isso significa que você não pode fazer login via SSH.

Um exemplo knockd.confpode 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 batidas do seu roteador da Internet para o seu Raspberry.

Os scripts de abertura / fechamento correspondentes podem ter a seguinte aparência:

#!/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 chmod +x /usr/local/bin/knockd*. Além disso, você deve iniciar e ativar o serviço de bloqueio com um dos seguintes

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

Especialmente se você usar um computador remoto no qual não tenha acesso ao console, convém atdrevogar automaticamente quaisquer alterações e / ou reiniciar o Raspberry em caso de erros de configuração.

Como o iptables não será armazenado automaticamente nas reinicializações, em um exemplo, você pode ser root (via su) e

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

Um exemplo ./script-which-closes-iptables.shpode ser assim (lembre-se de torná-lo executável com chmod +x)

#!/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 sua sessão SSH estiver acabando agora, o Raspberry será reiniciado 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 através de uma segunda sessão SSH. Isso não deve funcionar. Em seguida, use seu telefone celular e bata nas portas que você configurou /etc/knockd.conf. Depois disso, tente novamente fazer login através de uma segunda sessão SSH. Desta vez, deve funcionar.

Então você pode fazer com que o iptables persista uma reinicialização. No seu sistema, pode ser necessário instalar um pacote via

# apt-get install iptables-persistent

Salve suas iptables com

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

e habilite o serviço iptables com

# systemctl enable iptables

1

Se o seu Raspberry Pi tiver uma senha forte e uma segurança SSH forte, você estará bem; os invasores não podem fazer nada com o SSH se não puderem fazer login ou explorá-lo. Eles encontrarão a porta com certeza, no entanto.

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

Se os atacantes não conseguem ter acesso SSH, eles próprios de forma eficaz o 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 ponto de partida para ataques a outros hosts. O Pi é um computador como outro qualquer, e você precisa ter cuidado para protegê-lo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.