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

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

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 SSH nele para realizar manutenção.

É uma má ideia 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 normal; é uma porta aleatória que escolhi. No entanto, quando faço a varredura do meu endereço IP usando nmapon pentest-tools.com, vejo a porta aberta que escolhi usar para SSH. Meu Pi é protegido por senha e, que eu saiba, não há dados confidenciais ou números de cartão de crédito nele. Mas considerando que eu o uso para tunelamento VPN ou SSH, dados confidenciais podem trafegar por ele. Então é ruim ter essa porta SSH aberta no meu roteador? Alguém pode fazer algo malicioso na minha rede doméstica ao abrir esta porta, considerando que meu Pi está sempre ligado e ouvindo essa porta?

Responder1

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 seu servidor SSH para usar autenticação de chave pública. Ou seja, adicionalmente ou em vez de uma senha forte, a conexão será aberta somente se o cliente SSH fornecer a chave privada que corresponde à chave pública no servidor. Mesmo que um invasor conseguisse obter a chave pública de alguma forma, ele não conseguiria recuperar a chave privada a partir disso. No entanto, isso não ocultará sua porta dos scanners de porta.

B: use uma porta diferente

Além disso, obtive uma boa experiência em termos de menos varreduras de portas ao configurar o 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ê poderia 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, indicará um prompt de root aqui em meus exemplos.)

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

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

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

Se você realmente não deseja mostrar à "internet" que você tem esta porta aberta, dê uma olhada nos daemons de porta, por exemplo knockd. Esses programas escutam portas (fechadas) definidas por você e, após uma sequência de batidas, também definida por você, abrem uma porta diferente, por exemplo, 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 estava 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.confpoderia 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 bloqueadas do seu roteador de Internet para o Raspberry.

Os scripts de abertura/fechamento correspondentes poderiam 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 ambos os scripts executáveis ​​com chmod +x /usr/local/bin/knockd*. 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ê bater em um computador remoto ao qual não tem acesso ao console, você pode querer usar atdpara revogar 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ê poderia ser root (via su) e

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

Um exemplo ./script-which-closes-iptables.shpoderia 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 morrendo 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 por meio de uma segunda sessão SSH. Isso não deveria funcionar. Em seguida, use seu celular e bata nas portas que você configurou /etc/knockd.conf. Depois disso, tente fazer login novamente por meio de uma segunda sessão SSH. Desta vez, deve funcionar.

Então você pode fazer com que seu iptables persista na reinicialização. No seu sistema, talvez você precise instalar um pacote via

# apt-get install iptables-persistent

Salve seu iptables com

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

e habilite o serviço iptables com

# systemctl enable iptables

Responder2

Se o seu Raspberry Pi tiver uma senha forte e segurança SSH forte, tudo bem; os invasores não podem fazer nada com o SSH se não conseguirem fazer login ou explorá-lo. Eles encontrarão o porto com certeza.

Nota histórica: No passado,tem havido um problemacom a configuração SSH; a chave gerada automaticamente era previsível. Isso foi corrigido.

Se os atacantesfazerconseguem obter acesso SSH, eles efetivamente possuem o dispositivo. Então eles podem usá-lo para fazer coisas ruins comoEnvenenamento por ARP, o que lhes permite capturar e alterar dados não criptografados que cruzam sua rede. Eles também poderiam usar o Pi como ponto de partida para ataques a outros hosts. O Pi é um computador como qualquer outro e você precisa ter cuidado para protegê-lo.

informação relacionada