Lucas Simon

Web Developer. lucassrod@gmail.com

Deploy Flask na Digital Ocean - Parte 3 - sshd config

Criando grupo sshlogin

Crie um novo grupo conforme o comando abaixo:

# groupadd sshlogin

E insira o usuario root no grupo criado

# vim /etc/group

Procure o grupo conforme abaixo:

debian:x:1000:
sshlogin:x:1001: root

Altere as configurações padrões ao criar um usuário

Abra o arquivo abaixo com seu editor de textos:

# vim /etc/default/useradd

E realize as alterações conforme abaixo:

# Default values for useradd(8)
#
# The SHELL variable specifies the default login shell on your
# system.
# Similar to DHSELL in adduser. However, we use "sh" here because
# useradd is a low level utility and should be as general
# as possible
SHELL=/bin/zsh
#
# The default group for users
# 100=users on Debian systems
# Same as USERS_GID in adduser
# This argument is used when the -n flag is specified.
# The default behavior (when -n and -g are not specified) is to create a
# primary user group with the same name as the user being added to the
# system.
GROUP=100
#
# The default home directory. Same as DHOME for adduser
HOME=/home
#
# The number of days after a password expires until the account
# is permanently disabled
# INACTIVE=-1
#
# The default expire date
# EXPIRE=
#
# The SKEL variable specifies the directory containing "skeletal" user
# files; in other words, files such as a sample .profile that will be
# copied to the new user's home directory when it is created.
SKEL=/etc/skel
#
# Defines whether the mail spool should be created while
# creating the account
# CREATE_MAIL_SPOOL=yes

O /etc/skel

O skel é um diretório modelo de arquivos e diretórios que serão copiados para o usuário quando for criada uma nova conta.

# cd /etc/skel
# mkdir -p logs/{gunicorn,nginx,supervisor}
# mkdir run sites bkp scripts venvs .ssh
# touch .zshrc

Configurando e entendendo o ssh_config

Abra o arquivo com seu editor de textos:

# vim /etc/ssh/sshd_config

Altere as configurações do SSH Config

###############################################
# Porta padrão usada pelo servidor sshd. Múltiplas portas podem ser
# especificadas separadas por espaços.
###############################################

Port 22

###############################################
# Especifica o endereço IP das interfaces de rede que o servidor sshd
# servirá requisições. Múltiplos endereços podem ser especificados
# separados por espaços. A opção Port deve vir antes desta opção.
# O padrão é que o sshd escute em todos os endereços de rede
###############################################

#ListenAddress x.x.x.x

###################################################
# Protocolos aceitos pelo servidor, primeiro será verificado se o cliente é
# compatível com a versão 2 e depois a versão 1. Caso seja especificado
# somente a versão 2 e o cliente seja versão 1, a conexão será descartada.
# Quando não é especificada, o protocolo ssh 1 é usado como padrão.
###################################################

Protocol 2

######################################################
# Especifica os arquivos que contém as chaves privadas do sshd.
# Lembre-se que o ssh faz a criptograifa dos dados usando chaves assimétricas
# privadas e públicas.
######################################################

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

###################################################
# Lifetime and size of ephemeral version 1 server key
# Tempo para geração de nova chave do servidor (segundos). O padrão é
# 3600 segundos (1 hora).
# O propósito de regeneração de chaves é para evitar descriptografar
# trafégo capturado em sessões abertas para posteriormente tentar
# invadir a máquina e roubar as chaves.
# A chave nunca é armazenada em qualquer lugar. Se o valor for 0
# a chave nunca será regenerada.
###################################################

KeyRegenerationInterval 3600

############################################
# Tamanho da chave após ser gerada. 1024 bits é o padrão
############################################

ServerKeyBits 1024

###############################################
# Indica Facilidade e nível logs do sshd que aparecerão no syslogd
# ou no rsyslog. você pode alterar conforme sua necessídade
###############################################

SyslogFacility AUTH
LogLevel INFO

###################################################
# Mostra (yes) ou não (no) a date e hora do último login do usuário
# O padrão é "sim".
###################################################

PrintLastLog yes

#####################################################
# Mostra (yes) ou não (no) a mensagem em /etc/motd no login. O padrão é "no".
#####################################################

PrintMotd no

###############################################
# Especifica o número máximo de tentativas de autenticação permitidas
# por conexão. Uma vez que o número de falhas chega a metade desse
# valor, falhas adicionais são registrados. O padrão é 6.
###############################################

MaxAuthTries 5

######################################################
# Especifica o número máximo de sessões abertas permitida por rede-trabalhos
# de ligação. O padrão é 10.
######################################################

# MaxSessions 1

######################################################
# Especifica o número máximo de conexões de autenticação simultâneas feitas
# pelo daemon sshd. O valor padrão é 10. Valores aleatórios podem ser
# especificados usando os campos "inicio:taxa:máximo". Por exemplo,
# 5:40:15 rejeita até 40% das tentativas de autenticação que excedam o
# limite de 5 até atingir o limite máximo de 15 conexões, quando
# nenhuma nova autenticação é permitida.
######################################################

MaxStartups 5:40:15

################################################
# Se a PasswordAuthentication for usada, permite (yes) ou não (no) login
# usando senha. O padrão é "yes".
################################################

PasswordAuthentication no

######################################################
# Se a opção PasswordAuthentication for usada, permite (yes) ou não (no) login
# sem senha. O padrão é "no". Não é recomendado habilitar (yes) essa opção
######################################################

PermitEmptyPasswords no

##########################################################
# Está opção permiti (yes) ou nega (no) se a autenticação desafio-resposta será aceita.
# via PAM Por exemplo. o Padrão é (yes).
##########################################################

ChallengeResponseAuthentication no

#########################################
# ssh Permite (yes) ou nega (no) que o usuário root acesse
# remotamente o servidor. por segurança deixe desabilitada.
#########################################

PermitRootLogin yes

############################################
# Especifica se o encaminhamento pelos dispositivos tun/tap
# é permitido, criando um rede ponto-a-ponto usando ssh.
# OU seja permiti ou não a criação de túneis cifrados com sshd
############################################

#PermitTunnel yes

###################################################
# Especifica uma lista de groupos que terão acesso permitido ao sshd
# Se o usuário estiver contido no grupo especificadp nesta opção então seu
# acesso será liberado.
###################################################

AllowGroups sshlogin

######################################################
# Especifica um lista de grupos que terão seu acesso negado ao sshd
# se o usuário estiver contido no grupo espeficado nesta opção seu acesso será
# negado ao servidor sshd.
######################################################

#DenyGroups root

############################################
# Usuários que o ssh permite acessar remotamente o servidor
############################################

#AllowUsers silent joao maria

######################################################
# Está opção especifica quais usuários não terão permissão de acesso ao servidor
# sshd. a sintaxe é a mesma de AllowUsers, pode especificar vários usuários
# separados por espaço.
######################################################

#DenyUsers root

###################################################
# Tempo máximo para fazer login no sistema antes da conexão ser fechada
# O tempo e informado em segundos. se o valor for 0 não tem limite.
# o padrão é 120 segundos.
###################################################

LoginGraceTime 30

###################################################
# Privilege Separation is turned on for security
# Está opção especifica se será criado um processo filho sem privilégios
# Após a autenticação bem-sucedida, outro processo será criado que tem
# o privilégio de o usuário autenticado. O objetivo da separação de
# privilégio é para evitar a escalonamento de privilégios,  qualquer tipo de
# corrupção no âmbito dos processos sem privilégios. A padrão é "Sim".
###################################################

UsePrivilegeSeparation yes

######################################################
# Checa por permissões de dono dos arquivos e diretório de usuário antes de
# fazer o login. É muito recomendável para evitar riscos de segurança
# com arquivos lidos por todos os usuários.
######################################################

StrictModes yes

###################################################
# Especifica se a autenticação via RSA é permitida (só usado na versão 1 do
# protocolo ssh). Por padrão "yes".
###################################################

RSAAuthentication yes

###########################################
# Especifica se a autenticação usando chave pública é permitida.
# O padrão é "Sim". Note que esta opção se aplica ao protocolo
# versão 2, apenas.
###########################################

PubkeyAuthentication yes

##################################################
#Especifica o arquivo que contém as chaves públicas que podem ser usados
#para autenticação de usuários. "%h" especifica o diretório home do
# do usuário que está usando as chaves públicas e privadas.
##################################################

AuthorizedKeysFile %h/.ssh/authorized_keys

###################################
# Don't read the user's ~/.rhosts and ~/.shosts files #
# Ignora os arquivos ~/.rhosts e ~/.shosts ou não.   #
###################################

IgnoreRhosts yes

######################################################
# Ignora (yes) ou não (no) os arquivos ~/.ssh/known_hosts quando for usado
# para a opção RhostsRSAAuthentication. Se você não confia neste mecanismo
# ajuste esta opção para yes.
######################################################

#IgnoreUserKnownHosts yes

# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no

# similar for protocol version 2
HostbasedAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

######################################################
# Permite (yes) ou não (no) o redirecionamento de conexões X11. A segurança
# do sistema não é aumentada com a desativação desta opção, outros métodos
# de redirecionamento podem ser usados. Isso permite ou nega a execução de
# aplicativos gráficos no servidor ssh.
######################################################

X11Forwarding no

#######################################################
# Especifica o número do primeiro display que será usado para o redirecionamento
# X11 do ssh. Por padrão é usado o display 10 como inicial para evitar conflito
# com display X locais
#######################################################

X11DisplayOffset 10

# Verifica se o host continua conectado
KeepAlive yes

######################################################
# Permite (yes) ou não (no) o envio de pacotes keepalive (para verificar se o
# cliente responde. Isto é bom para fechar conexões que não respondem mas
# também podem fechar conexões caso não existam rotas para o cliente
# naquele momento (é um problema temporário). Colocando esta opção como
# "no" por outro lado pode deixar usuários que não tiveram a oportunidade
# de efetuar o logout do servidor dados como "permanentemente conectados"
# no sistema. Esta opção deve ser ativada/desativada aqui e no programa
# cliente para funcionar. caso queira manter uma conexão aberta mesmo estando
# inativa, habilite (yes) no servidor e no cliente está opção.
######################################################

# TCPKeepAlive yes

##################################################
# Usa (yes) ou não usa (no) o programa login para efetuar o login do cliente
# no servidor ssh. o padrão é "não"
##################################################

#UseLogin no

#####################################
# Mostra uma mensagem antes do nome de login.
#####################################

Banner /etc/issue.net

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

#############################################
# Ativa o subsistema de ftp seguro. Para desabilitar comente a linha
# abaixo
#############################################

Subsystem sftp /usr/lib/openssh/sftp-server

######################################
# Permite a autenticação usando o PAM (yes) ou não (no)
# o padrão é "não".
######################################

UsePAM yes

Em seguida reinicie o serviço ssh service sshd restart

Fontes

Viva o Linux

Próximo artigo: Deploy Flask na Digital Ocean - Parte 4 - Fail2ban