Top 20 OpenSSH Server Melhores Práticas de Segurança

O OpenSSH é a implementação do protocolo SSH. O OpenSSH é recomendado para login remoto, fazendo backups, transferência remota de arquivos via scp ou sftp, e muito mais. O SSH é perfeito para manter a confidencialidade ea integridade dos dados trocados entre duas redes e sistemas. No entanto, a principal vantagem é a autenticação do servidor, através do uso de criptografia de chave pública. De vez em quando há rumores sobre OpenSSH zero dia explora. Aqui estão algumas coisas que você precisa ajustar para melhorar a segurança do servidor OpenSSH.

Arquivos de configuração padrão e porta SSH

  • / Etc / ssh / sshd_config – Arquivo de configuração do servidor OpenSSH.
  • / Etc / ssh / ssh_config – Arquivo de configuração do cliente OpenSSH.
  • ~ / .ssh / – Usuários diretório de configuração ssh.
  • ~ / .ssh / authorized_keys ou ~ / .ssh / authorized_keys – Lista as chaves públicas (RSA ou DSA) que podem ser usadas para fazer login na conta do usuário
  • / Etc / nologin – Se este arquivo existir, sshd se recusa a permitir que qualquer pessoa, exceto o root, faça login.
  • /etc/hosts.allow e /etc/hosts.deny : As listas de controles de acesso que devem ser aplicadas pelos tcp-wrappers são definidas aqui.
  • Porta padrão SSH : TCP 22
Sessão SSH em Ação

SSH Sessão em Ação

# 1: Desativar OpenSSH Server

Workstations e laptop podem funcionar sem servidor OpenSSH. Se você não precisa fornecer o login remoto e os recursos de transferência de arquivos do SSH, desative e remova o servidor SSHD. O usuário do CentOS / RHEL / Fedora Linux pode desativar e remover o openssh-server com o comando yum:
# chkconfig sshd off
# yum erase openssh-server

O usuário Debian / Ubuntu Linux pode desativar e remover o mesmo com o comando apt-get:
# apt-get remove openssh-server
Você pode precisar atualizar seu script iptables para remover a regra de exceção ssh. Em CentOS / RHEL / Fedora edite os arquivos / etc / sysconfig / iptables e / etc / sysconfig / ip6tables. Depois de reiniciar o serviço iptables :
# service iptables restart
# service ip6tables restart

# 2: Usar somente protocolo SSH 2

SSH protocolo versão 1 (SSH-1) tem man-in-the-middle ataques problemas e vulnerabilidades de segurança. SSH-1 é obsoleto e deve ser evitado a todo o custo. Abra o arquivo sshd_config e verifique se a seguinte linha existe:

  Protocolo 2

# 3: Limitar o Acesso SSH dos Usuários

Por padrão, todos os usuários do sistema podem efetuar login via SSH usando sua senha ou chave pública. Às vezes, você cria uma conta de usuário do UNIX / Linux para fins de ftp ou email. No entanto, esses usuários podem fazer login no sistema usando o ssh. Eles terão pleno acesso a ferramentas do sistema, incluindo compiladores e linguagens de script como Perl, Python, que pode abrir portas de rede e fazer muitas outras coisas extravagantes. Um dos meus clientes tem realmente desatualizado php script e um atacante foi capaz de criar uma nova conta no sistema através de um script php. No entanto, o invasor não conseguiu entrar na caixa via ssh porque não estava em AllowUsers.

Somente permitir root, vivek e jerry usuário para usar o sistema via SSH, adicione o seguinte para sshd_config:

  AllowUsers raiz vivek jerry

Como alternativa, você pode permitir que todos os usuários efetuem login via SSH, mas negam apenas alguns usuários, com a seguinte linha:

  DenyUsers saroj anjali foo

Você também pode configurar Linux PAM permite ou negar o login através do servidor sshd. Você pode permitir que a lista do nome do grupo acesse ou negue o acesso ao ssh.

# 4: Configurar Intervalo de tempo de espera de finalização de inactividade

O usuário pode efetuar login no servidor via ssh e você pode definir um intervalo de tempo de espera idel para evitar a sessão autônoma do ssh. Abra o sshd_config e certifique-se de que os seguintes valores estejam configurados:

  ClientAliveInterval 300
 ClientAliveCountMax 0

Você está definindo um intervalo de tempo limite ocioso em segundos (300 seg = 5 minutos). Após este intervalo ter passado, o usuário inativo será automaticamente expulso (lido como desconectado). Veja como registrar automaticamente os usuários do BASH / TCSH / SSH após um período de inatividade para obter mais detalhes.

# 5: Desativar arquivos .rhosts

Não leia os arquivos ~ / .rhosts e ~ / .shosts do usuário. Atualize o arquivo sshd_config com as seguintes configurações:

  IgnoreRhosts sim

O SSH pode emular o comportamento do comando rsh obsoleto, basta desabilitar o acesso inseguro via RSH.

# 6: Desativar a autenticação baseada em host

Para desabilitar a autenticação baseada em host, atualize o sshd_config com a seguinte opção:

  HostbasedAuthentication não

# 7: Desabilitar login root via SSH

Não é necessário fazer login como root via ssh através de uma rede. Usuários normais podem usar su ou sudo (recomendado) para obter acesso ao nível root. Isso também garante a obtenção de informações de auditoria completas sobre quem executou comandos privilegiados no sistema via sudo. Para desativar o login raiz via SSH, atualize o sshd_config com a seguinte linha:

  PermitRootLogin não

No entanto, Bob fez ponto excelente :

Dizer “não faça login como root” é h ****** t. Ela decorre dos dias em que as pessoas cheiram os primeiros pacotes de sessões, de modo que entrar como você e su-ing diminuiu a chance de um invasor ver a raiz pw, e diminuir a chance de você ter falsificado quanto ao seu telnet host target, You’d Pegue sua senha falsificada, mas não pw da raiz. Da UM tempo. Este é 2005 – Nós temos o ssh, usado corretamente é seguro. Usado indevidamente nenhum deste 1989 fará uma maldita diferença. -Prumo

# 8: Ativar uma faixa de aviso

Defina um banner de aviso atualizando sshd_config com a seguinte linha:

  Banner / etc / issue

Exemplo de arquivo / etc / issue:

  -------------------------------------------------- --------------------------------------------
 Você está acessando um XYZ Governo (XYZG) Information System (IS) que é fornecido para uso autorizado apenas. 
 Ao usar este IS (que inclui qualquer dispositivo anexado a este IS), você concorda com as seguintes condições:

 + O XYZG rotineiramente intercepta e monitora comunicações neste IS para fins que incluem, mas não se limitam a, 
 Testes de penetração, monitoramento COMSEC, operações de rede e defesa, má conduta do pessoal (PM), 
 (LE) e de contra-inteligência (CI). 

 + A qualquer momento, o XYZG pode inspecionar e capturar dados armazenados neste IS.

 + As comunicações que utilizam, ou os dados armazenados neste SI não são privadas, estão sujeitas a monitorização de rotina, 
 Intercepção e pesquisa, e podem ser divulgados ou usados para qualquer propósito autorizado da XYZG.

 + Este IS inclui medidas de segurança (por exemplo, autenticação e controles de acesso) para proteger interesses XYZG - não 
 Para seu benefício pessoal ou privacidade.

 + Não obstante o acima exposto, a utilização deste IS não constitui consentimento para a pesquisa investigativa de PM, LE ou CI 
 Ou monitoramento do conteúdo de comunicações privilegiadas, ou produto de trabalho, relacionado à representação pessoal 
 Ou serviços por advogados, psicoterapeutas, ou clero, e seus assistentes.  Tais comunicações e 
 Produtos são privados e confidenciais.  Consulte o Contrato de Usuário para obter detalhes. 
 -------------------------------------------------- --------------------------------------------

Acima é uma amostra padrão, consulte a equipe jurídica para detalhes exatos do contrato de usuário e detalhes legais.

# 8: Firewall Porta SSH # 22

Você precisa firewall ssh porta # 22, atualizando iptables ou pf firewall configurações. Geralmente, o servidor OpenSSH só deve aceitar conexões de sua LAN ou outros sites WAN remotos apenas.

Configuração do Netfilter (Iptables)

Atualize o arquivo / etc / sysconfig / iptables (arquivo específico Redhat e amigos) para aceitar apenas a conexão de 192.168.1.0/24 e 202.54.1.5/29, insira:

  -A RH-Firewall- 1 -INPUT -s 192.168.1.0 / 24 -m estado - state NEW -p tcp --dport 22 -j ACEITAR
 -A RH-Firewall- 1 -INPUT -s 202.54.1.5 / 29 -m state - state NEW -p tcp --dport 22 -j ACCEPT

Se você tiver dual stacked sshd com IPv6, edite / etc / sysconfig / ip6tables (arquivo específico Redhat e amigos), digite:

  -A RH-Firewall- 1 -INPUT -s ipv6network :: / ipv6mask -m tcp -p tcp --dport 22 -j ACEITAR

Substitua ipv6network :: / ipv6mask por intervalos IPv6 reais.

* BSD PF Firewall Configuração

Se você estiver usando o firewall PF atualize /etc/pf.conf da seguinte maneira:

  Passe em $ ext_if inet proto tcp de {192.168.1.0/24, 202.54.1.5/29} para $ ssh_server_ip port ssh flags S / SA synproxy state

# 9: Alterar a porta SSH e limite de ligação IP

Por padrão SSH ouvir todas as interfaces disponíveis e endereço IP no sistema. Limite a ligação da porta ssh e mude a porta ssh (por padrão, os scripts de forçamento bruto tentam apenas se conectar à porta # 22). Para ligar a 192.168.1.5 e 202.54.1.5 IPs e à porta 300, adicione ou corrija a seguinte linha:

  Porta 300
 ListenAddress 192.168.1.5
 ListenAddress 202.54.1.5

Uma abordagem melhor para usar scripts proativos de abordagens como fail2ban ou denyhosts (veja abaixo).

# 10: Usar senhas SSH fortes e senha

Não se pode sublinhar o suficiente como é importante usar senhas de usuário forte e senha para suas chaves. O ataque de força bruta funciona porque você usa senhas baseadas em dicionário. Você pode forçar os usuários a evitar senhas contra um ataque de dicionário e usar a ferramenta john the ripper para descobrir senhas fracas existentes. Aqui está um exemplo de gerador de senhas aleatórias (coloque no seu ~ / .bashrc):

  Genpasswd ( ) { 
	 Local l = US $ 1
       	 [ " $ L " == "" ] && l = 20
      	 Tr -dc A-Za-z0- 9 _ < / dev / urandom |  Head -c $ {l} |  Xargs 
 }

Executá-lo:
genpasswd 16
Saída:

  Uw8CnDVMwC6vOKgW

# 11: Usar autenticação baseada em chave pública

Use o par de chaves públicas / privadas com proteção por senha para a chave privada. Veja como usar a autenticação baseada em chave RSA e DSA . Nunca use a senha sem senha (chave senha menos) login.

# 12: Use autenticação baseada em chave

Keychain é um script bash especial projetado para tornar a autenticação baseada em chave incrivelmente conveniente e flexível. Ele oferece vários benefícios de segurança sobre chaves sem senha. Veja como configurar e usar o software do chaveiro .

# 13: Chroot SSHD (Lock Down usuários para seus diretórios de casa)

Por padrão, os usuários têm permissão para navegar nos diretórios do servidor, como / etc /, / bin e assim por diante. Você pode proteger ssh, usando o chroot baseado em os ou usar ferramentas especiais como rssh . Com o lançamento do OpenSSH 4.8p1 ou 4.9p1, você não precisa mais confiar em hacks de terceiros como rssh ou configurações complicadas de chroot (1) para bloquear usuários em seus diretórios base. Veja esta postagem no blog sobre a nova diretiva ChrootDirectory para bloquear os usuários em seus diretórios base.

# 14: Usar TCP Wrappers

O TCP Wrapper é um sistema ACL de rede baseado em host, usado para filtrar o acesso à Internet. O OpenSSH suporta os wrappers TCP. Basta atualizar seu arquivo /etc/hosts.allow da seguinte forma para permitir SSH somente de 192.168.1.2 172.16.23.12:

  Sshd: 192.168.1.2 172.16.23.12

Consulte este FAQ sobre como configurar e usar wrappers TCP em Linux / Mac OS X e UNIX como sistemas operacionais.

# 15: Desativar senhas vazias

Você precisa excluir explicitamente o login remoto de contas com senhas vazias, atualize o sshd_config com a seguinte linha:

  PermitEmptyPasswords não

# 16: Thwart SSH Crackers (Ataque de Força Bruta)

A força bruta é um método de derrotar um esquema criptográfico, tentando um grande número de possibilidades usando uma rede de computadores única ou distribuída. Para evitar ataques de força bruta contra SSH, use os seguintes softwares:

  • DenyHosts é uma ferramenta de segurança baseada em Python para servidores SSH. Pretende-se evitar ataques de força bruta em servidores SSH, monitorando tentativas de login inválidas no log de autenticação e bloqueando os endereços IP de origem.
  • Explica como configurar o DenyHosts em RHEL / Fedora e CentOS Linux.
  • Fail2ban é um programa semelhante que previne ataques de força bruta contra SSH.
  • Security / sshguard-pf protege hosts de ataques de força bruta contra ssh e outros serviços usando pf.
  • Security / sshguard-ipfw protege hosts de ataques de força bruta contra ssh e outros serviços usando ipfw.
  • Security / sshguard-ipfilter protege hosts de ataques de força bruta contra ssh e outros serviços usando ipfilter.
  • Security / sshblock bloqueia as tentativas de login SSH abusivas.
  • Security / sshit verifica SSH / FTP bruteforce e bloqueia IPs dados.
  • BlockHosts Bloqueio automático de hosts IP abusivos.
  • Blacklist Livrar-se dessas tentativas de força bruta.
  • Brute Force Detection Um script de shell modular para análise de logs de aplicativos e verificação de falhas de autenticação. Ele faz isso usando um sistema de regras onde as opções específicas do aplicativo são armazenadas, incluindo expressões regulares para cada formato de autenticação exclusiva.
  • IPQ Filtro BDB Pode ser considerado como um fail2ban lite.

# 17: Limite de Taxa Conexão de Entrada # 22 Conexões

Tanto o netfilter como o pf fornecem uma opção de limite de taxa para executar o estrangulamento simples nas conexões de entrada na porta # 22.

Exemplo de Iptables

O exemplo a seguir eliminará as conexões de entrada que fazem mais de 5 tentativas de conexão na porta 22 dentro de 60 segundos:

  #! / Bin / bash
 Inet_if = eth1
 Ssh_port = 22
 $ IPT -I INPUT -p tcp --dport $ {ssh_port} -i $ {inet_if} -m estado - state NEW -m recent --set
 $ IPT -I INPUT -p tcp --dport $ {ssh_port} -i $ {inet_if} -m estado --state NEW -m recente --update --seconds 60 --hitcount 5 -j DROP

Chame script acima de seus scripts iptables. Outra opção de configuração:

  $ IPT -A INPUT -i $ {inet_if} -p tcp --dport $ {ssh_port} -m estado --state NEW -m limite --limit 3 / min --limit-burst 3 -j ACCEPT
 $ IPT -A INPUT -i $ {inet_if} -p tcp --dport $ {ssh_port} -m estado --state ESTABLISHED -j ACCEPT
 $ IPT -A OUTPUT -o $ {inet_if} -p tcp --sport $ {ssh_port} -m estado --state ESTABLISHED -j ACCEPT
 # Outro exemplo de uma linha
 # $ IPT -A INPUT -i $ {inet_if} -m state --state NOVO, ESTABELECIDO, RELACIONADO -p tcp --dport 22 -m limite --limit 5 / minuto --limit-burst 5-j ACCEPT

Consulte a página de manual do iptables para obter mais detalhes.

Exemplo de BSD PF

O seguinte limitará o número máximo de conexões por fonte a 20 e limitará o número de conexões a 15 em um intervalo de 5 segundos. Se alguém quebrar nossas regras adicioná-los à nossa tabela abusive_ips e bloqueá-los para fazer mais conexões. Finalmente, a palavra-chave flush mata todos os estados criados pela regra de correspondência que se originam do host que excede esses limites.

  Sshd_server_ip = "202.54.1.5"
 Tabela < abusive_ips > persistir
 Bloco em rápido de < abusive_ips >
 Passe em $ ext_if proto tcp para $ sshd_server_ip porta ssh sinalizadores S / SA manter estado ( max-src-conn 20 , max-src-conn-taxa 15/5, sobrecarga < abusive_ips > flush )

# 18: Use Port Knocking

Port knocking é um método de abertura externa de portas em um firewall, gerando uma tentativa de conexão em um conjunto de portas fechadas pré-especificadas. Uma vez que uma sequência correta de tentativas de conexão é recebida, as regras de firewall são dinamicamente modificadas para permitir que o host que enviou as tentativas de conexão se conectar por porta (s) específica (s). Um exemplo de porta Knocking exemplo para ssh usando iptables:

  $ IPT - fase 1
 $ IPT -A stage1 -m recente --remove --name knock
 $ IPT -A stage1 -p tcp --dport 3456 -m recente --set --name knock2

 $ IPT -N fase2
 $ IPT -A stage2 -m recente --remove --name knock2
 $ IPT -A stage2 -p tcp --dport 2345 -m recente --set --name heaven

 $ IPT- porta
 $ IPT -A porta -m recente --rcheck --seconds 5 --name knock2 -j stage2
 $ IPT -A porta -m recente --rcheck --seconds 5 --name knock -j stage1
 $ IPT -A porta -p tcp --dport 1234 -m recente --set --name knock

 $ IPT -A INPUT -m --state ESTABLISHED, RELATED -j ACCEPT
 $ IPT -A INPUT -p tcp --dport 22 -m recente --rcheck --seconds 5 --name heaven -j ACCEPT
 $ IPT -A INPUT -p tcp --syn -j porta
  • Fwknop é uma implementação que combina porta batendo e passivo OS fingerprinting.
  • Portas múltiplas batendo Netfilter / implementação IPtables apenas.

# 19: Utilizar o Log Analyzer

Leia seus logs usando logwatch ou logcheck . Essas ferramentas tornam sua vida de leitura de log mais fácil. Ele vai passar por seus logs para um determinado período de tempo e fazer um relatório nas áreas que você deseja com o detalhe que você deseja. Certifique-se LogLevel é definido como INFO ou DEBUG em sshd_config:

  LogLevel INFO

# 20: Patch OpenSSH e Sistemas Operacionais

Recomenda-se que você use ferramentas como yum , apt-get , freebsd-update e outros para manter os sistemas atualizados com os patches de segurança mais recentes.

Outras opções

Para ocultar a versão openssh, você precisa atualizar o código-fonte e compilar o openssh novamente. Verifique se as seguintes opções estão ativadas no sshd_config:

  # Ativar a separação de privilégios
 UsePrivilegeSeparation sim
 # Evitar o uso de diretórios residenciais inseguros e permissões de arquivos de chaves
 StrictModes sim
 # Ativar a verificação do nome reverso
 VerifyReverseMapping sim
 # Você precisa de encaminhamento de porta?
 AllowTcpForwarding não
 X11Forwarding não
 # Especifica se a autenticação de senha é permitida.  O padrão é yes.
 PasswordAuthentication não

Verifique seu arquivo sshd_config antes de reiniciar / recarregar as alterações:
# /usr/sbin/sshd -t

Segurança SSH mais apertada com autenticação de dois ou três fatores (ou mais) .

Referências:

  1. O projeto oficial do OpenSSH .
  2. Tópico no fórum: Falha nas tentativas de login do SSH e como evitar ataques brutos do ssh
  3. Man páginas sshd_config, ssh_config, tcpd, yum e apt-get.

Se você tiver uma técnica ou um software acessível não mencionado aqui, compartilhe os comentários abaixo para ajudar seus colegas leitores a manter seu servidor baseado em openssh seguro.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s