Esta é uma boa configuração do meu servidor SSH para o acesso somente à rede local?

2

Intenção

Gostaria de permitir o acesso root do SSH ao meu servidor, mas por motivos de segurança apenas da rede local.

Ambiente

  • SO: GNU / Linux Debian 9 Stretch totalmente atualizado.
  • SSH: OpenSSH versão 1: 7.4p1-10 + deb9u3.

Procedimento

  1. No arquivo de configuração principal:

    /etc/ssh/sshd_config
    

    Eu removi a linha global que proíbe o acesso direto à raiz, ou seja:

    PermitRootLogin no
    

    e configurou-o da seguinte forma:

    # root is allowed from local network only
    Match Address 192.168.0.*
        PermitRootLogin yes
    
    # otherwise you need to log in as a user
    Match all
        PermitRootLogin no
    
  2. Eu habilitei temporariamente o acesso por senha com:

    PasswordAuthentication yes
    
  3. Eu gerou um par de chaves público-privado para conta root com:

    ssh-keygen -t rsa -b 8192
    

    enquanto logado como root, é claro.

  4. Em seguida, no laptop do cliente, copiei a chave pública usando:

    ssh-copy-id [email protected] -p yyyyy    # I have hidden the port number and ip
    
  5. Eu consegui fazer login com sucesso no meu servidor usando a chave pública como root, então desativei o acesso por senha com:

    # use only public key, never a password
    PubkeyAuthentication yes
    PasswordAuthentication no
    AuthenticationMethods publickey
    

Perguntas

Fiz todas as etapas necessárias para que computadores não locais não consigam sequer efetuar login em meu servidor?

Se não, por favor, explique o que você recomenda?

    
por Vlastimil 28.07.2018 / 15:45

1 resposta

3

Did I do all the steps necessary in order for non-local computers to be unable to even try to log into my server?

Você os impediu de tentar entrar no seu servidor como root . Então isso faz a diferença:

  1. Se você adicionar uma chave SSH para uma segunda conta.
  2. Durante qualquer etapa de manutenção como essa, em que você ativou temporariamente logins de senha. A menos que você desconecte sua rede da Internet, mas percebo que você não mencionou isso em seus passos.

Se você pretende satisfazer a pergunta acima, parece melhor codificá-la diretamente. Por exemplo, acredito que você pode controlar logins de todos os usuários com uma linha. Isso evitaria a necessidade de "temporariamente" se abrir para ataques de adivinhação de senha baseados na Internet: -).

AllowUsers *@192.168.0.*

Mas você não deve confiar em uma configuração do daemon SSH. Você deve perguntar por que não está aplicando essa política em um firewall central. Se você não deseja logins não locais, não há necessidade de se expor a erros hipotéticos no código de pré-autenticação do seu servidor SSH , por exemplo.

Vou me limitar a um conselho não solicitado. Você pode se surpreender se alguma vez melhorar seus sistemas locais para resolver nomes de hosts para endereços IPv6, mesmo que não intencionalmente. Porque o acima não permitirá nenhuma conexão feita em um endereço IPv6 :). Se você confiar apenas em um firewall central, não precisará se preocupar com isso também.

A configuração de rede mais simples é ter um firewall centralizado que distingue sua rede local do tráfego da Internet (e qualquer outra coisa, por exemplo, guest wireless). Bloqueie qualquer conexão da Internet, a menos que você tenha um motivo específico para permitir isso.

Isso foi padronizado como padrão em roteadores domésticos / de pequenas empresas. (Você ainda deve verificar essas suposições porque esses dispositivos são notoriamente baratos e desafiados pela segurança. Esse problema em particular é muito óbvio que os ativistas fazem fazer aviso, mas sabe-se que alguns dispositivos fizeram o "errado" escolha quando implementaram o IPv6 pela primeira vez.

Claro que se você quiser, você também pode configurar um firewall "redundante" no próprio host. Por exemplo. isso é potencialmente útil para aplicar uma política "sem portas abertas" por padrão no Ubuntu ou Debian . A desvantagem é que os firewalls são coisas difíceis de lembrar, configurar e solucionar problemas quando eles quebram coisas, e agora você tem dois separados! Ir de um para dois aumenta significativamente a complexidade, cada vez que você quiser começar a usar um aplicativo de servidor puro (como o SSH) ou um aplicativo ponto a ponto que não projetou uma variante maximamente confiável de hole punch .

A próxima configuração de rede mais simples é adicionar opções redundantes no estilo de sshd ListenAddress . Para adicionar suporte a IPv6, você pode garantir que o roteador atribua endereços locais exclusivos, bem como os endereços globalmente roteáveis, e ouça o endereço local exclusivo. Quando você tem IPv6, forçar a% específica de ListenAddress adiciona uma margem de segurança de material. Isso é diferente de quando você só tinha IPv4, e a internet não seria capaz de atacar seu servidor de qualquer maneira (por causa do NAT), a menos que

  1. seu servidor era o roteador ou
  2. você tinha um modem puro e não uma combinação modem + roteador ou
  3. você alugou pelo menos um endereço IP global adicional e ele foi atribuído ao seu servidor.

Em geral, ainda faria sentido usar um firewall (e não me lembro de nenhuma exceção específica), enquanto tratava os gostos de ListenAddress como uma segunda margem de segurança.

Codificar sua configuração do daemon SSH não apenas com o endereço IP do servidor, mas o intervalo da rede em que está, é de longe a menos desejável das técnicas listadas aqui IMO:). / p>     

por 28.07.2018 / 16:28

Tags