Mudanças entre as edições de "Hardening de SSH em Linux e FreeBSD"
(Criar página em branco) |
|||
| Linha 1: | Linha 1: | ||
| + | Muitas pessoas acabam negligenciando a segurança de algo muito importante nos servidores, e isso aumenta consideravelmente os riscos de segurança. | ||
| + | Aqui irei demonstrar duas técnicas de '''várias que você deve implementar em seu ambiente''', a primeira delas é a criação de uma '''Chave SSH''' para acesso e a segunda uma configuração mais rígida do '''SSH''' em si através do '''sshd_config'''. | ||
| + | |||
| + | Independente se você utiliza alguma distribuição '''Linux''' ou '''FreeBSD''', os comandos e maneiras de configurar são muito similares, diferenciando alguns poucos comandos, portanto, fique tranquilo. | ||
| + | |||
| + | == Propósito == | ||
| + | A real intenção desse tutorial é te ajudar a aumentar a segurança do seu ambiente, assim tanto você quanto a comunidade da internet ficará agradecida por ter menos um host com alta exposição podendo ser um ativo de ataque. | ||
| + | |||
| + | Ao final você ficará com o seguinte cenário: | ||
| + | |||
| + | # Usuário root não conseguirá mais fazer acesso SSH; | ||
| + | # Apenas os seus usuários sem privilégio poderão fazer o acesso SSH; | ||
| + | # Seu login será exclusivo via SSH, não serão mais utilizados usuário e senha; | ||
| + | # A porta do Servidor SSH estará diferente da padrão; | ||
| + | # Você poderá ter 2 sessões (pode aumentar); | ||
| + | # Desconexão após 600 segundos automático. | ||
| + | |||
| + | == Gerando as Chaves SSH == | ||
| + | 1 - Gere as chaves pública e privada. | ||
| + | |||
| + | Por padrão as chaves serão geradas na pasta .ssh do seu usuário, porém, por boa prática pessoal eu sempre digito o caminho completo incluindo o nome que será atribuído as chaves. | ||
| + | $ ssh-keygen | ||
| + | Enter file in which to save the key (/home/<usuario>/.ssh/id_ed25519): /home/<usuario>/.ssh/<nome-da-chave> | ||
| + | Agora defina uma senha para a chave privada, você tem o poder de não configurar uma senha apenas pressionando Enter, mas é '''altamente recomendável que se configure uma senha'''. | ||
| + | Enter passphrase for "/home/<usuario>/.ssh/<nome-da-chave>" (empty for no passphrase): | ||
| + | Enter same passphrase again: | ||
| + | Por último, você verá as chaves geradas com o nome escolhido e diretório. | ||
| + | Your identification has been saved in /home/<usuario>/.ssh/<nome-da-chave> | ||
| + | Your public key has been saved in /home/<usuario>/.ssh/<nome-da-chave>.pub | ||
| + | 2 - Copie o conteúdo da chave pública para o arquivo de chaves autorizadas. | ||
| + | |||
| + | Se você gerou as chaves no próprio servidor, copie o conteúdo da chave pública para o arquivo '''authorized_keys'''. que está no mesmo diretório das chaves criadas, caso o arquivo não exista, quando você executar o comando ele será criado automaticamente. | ||
| + | $ cat ~/.ssh/<nome-da-chave>.pub >> ~/.ssh/authorized_keys | ||
| + | Se você gerou as chaves em seu computador ou em algum outro host FreeBSD ou Linux, copie a chave pública para o diretório do seu usuário com o scp e depois execute o cat como no exemplo acima. | ||
| + | $ scp -P 5902 ~/.ssh/<nome-da-chave>.pub usuario@IP:~/.ssh/ | ||
| + | Outra maneira de copiar a chave pública para o servidor é com o comando '''ssh-copy-id'''. Precisa ter a chave privada no mesmo diretório da chave pública. | ||
| + | $ ssh-copy-id -i ~/.ssh/<nome-da-chave>.pub -p 5902 <usuario>@<IP-de-Destino> | ||
| + | Você também pode enviar a chave pública utilizando o FTP FileZilla e copia o conteúdo com o comando cat. | ||
| + | |||
| + | 3 - Teste se a conexão vai funcionar. | ||
| + | |||
| + | Se você copiou a chave privada para outro host '''Linux''', por exemplo, o comando abaixo irá te ajudar a testar se tudo está funcionando da maneira correta. Se você quiser verificar localmente, basta inserir o IP da máquina onde você gerou as chaves. | ||
| + | |||
| + | A alteração de permissão para 600 se dá por questões de privacidade, basicamente com o 600 você diz que apenas o seu usuário tem permissão para utilizar essa chave. | ||
| + | $ chmod 600 ~/.ssh/<nome-da-chave> | ||
| + | |||
| + | $ ssh -i ~/.ssh/<nome-da-chave> -p 5902 <usuario>@<IP-de-Destino> | ||
| + | 4 - Edite o arquivo que contém as configurações do SSH. | ||
| + | |||
| + | O comando abaixo irá zerar e abrir a edição do arquivo, não tem uma cópia de backup caso você erre alguma linha, por tanto, verifica antes de por em produção se tudo está correto. | ||
| + | # echo > /etc/ssh/sshd_config ; nano /etc/ssh/sshd_config | ||
| + | Abaixo estarão os parâmetros que você deve inserir no arquivo '''sshd_config'''. Altere as linhas de acordo com a sua Porta SSH atual e usuário que terá privilégio para acessar o servidor. | ||
| + | Protocol 2 | ||
| + | Port '''<Porta-SSH>''' | ||
| + | LoginGraceTime 30 | ||
| + | PermitRootLogin no | ||
| + | StrictModes yes | ||
| + | MaxAuthTries 2 | ||
| + | MaxSessions 2 | ||
| + | PubkeyAuthentication yes | ||
| + | AuthorizedKeysFile .ssh/authorized_keys | ||
| + | PasswordAuthentication no | ||
| + | PermitEmptyPasswords no | ||
| + | KbdInteractiveAuthentication no | ||
| + | UsePAM yes | ||
| + | X11Forwarding no | ||
| + | AllowTcpForwarding no | ||
| + | ClientAliveInterval 300 | ||
| + | ClientAliveCountMax 2 | ||
| + | Banner /etc/banner | ||
| + | Subsystem sftp /usr/libexec/sftp-server | ||
| + | AllowUsers erick '''usuarioX usuarioY usuarioZ''' | ||
| + | 5 - Crie um banner de aviso. | ||
| + | # nano /etc/banner | ||
| + | Conteúdo do banner: | ||
| + | Equipamento pertencente a empresa '''NOME DA SUA EMPRESA''', acessos nao autorizados serao monitorados, investigados e entregues as autoridades responsaveis. | ||
| + | 7 - Recarregue o arquivo de configuração depois das alterações. | ||
| + | |||
| + | Comando para o Linux: | ||
| + | # sudo systemctl restart sshd | ||
| + | Comando para o FreeBSD: | ||
| + | # sudo service sshd reload | ||
| + | 8 - Verifique se o serviço está executando na porta configurada. | ||
| + | # sockstat -4 -6 | grep sshd | ||
Edição das 10h31min de 22 de junho de 2026
Muitas pessoas acabam negligenciando a segurança de algo muito importante nos servidores, e isso aumenta consideravelmente os riscos de segurança.
Aqui irei demonstrar duas técnicas de várias que você deve implementar em seu ambiente, a primeira delas é a criação de uma Chave SSH para acesso e a segunda uma configuração mais rígida do SSH em si através do sshd_config.
Independente se você utiliza alguma distribuição Linux ou FreeBSD, os comandos e maneiras de configurar são muito similares, diferenciando alguns poucos comandos, portanto, fique tranquilo.
Propósito
A real intenção desse tutorial é te ajudar a aumentar a segurança do seu ambiente, assim tanto você quanto a comunidade da internet ficará agradecida por ter menos um host com alta exposição podendo ser um ativo de ataque.
Ao final você ficará com o seguinte cenário:
- Usuário root não conseguirá mais fazer acesso SSH;
- Apenas os seus usuários sem privilégio poderão fazer o acesso SSH;
- Seu login será exclusivo via SSH, não serão mais utilizados usuário e senha;
- A porta do Servidor SSH estará diferente da padrão;
- Você poderá ter 2 sessões (pode aumentar);
- Desconexão após 600 segundos automático.
Gerando as Chaves SSH
1 - Gere as chaves pública e privada.
Por padrão as chaves serão geradas na pasta .ssh do seu usuário, porém, por boa prática pessoal eu sempre digito o caminho completo incluindo o nome que será atribuído as chaves.
$ ssh-keygen Enter file in which to save the key (/home/<usuario>/.ssh/id_ed25519): /home/<usuario>/.ssh/<nome-da-chave>
Agora defina uma senha para a chave privada, você tem o poder de não configurar uma senha apenas pressionando Enter, mas é altamente recomendável que se configure uma senha.
Enter passphrase for "/home/<usuario>/.ssh/<nome-da-chave>" (empty for no passphrase): Enter same passphrase again:
Por último, você verá as chaves geradas com o nome escolhido e diretório.
Your identification has been saved in /home/<usuario>/.ssh/<nome-da-chave> Your public key has been saved in /home/<usuario>/.ssh/<nome-da-chave>.pub
2 - Copie o conteúdo da chave pública para o arquivo de chaves autorizadas.
Se você gerou as chaves no próprio servidor, copie o conteúdo da chave pública para o arquivo authorized_keys. que está no mesmo diretório das chaves criadas, caso o arquivo não exista, quando você executar o comando ele será criado automaticamente.
$ cat ~/.ssh/<nome-da-chave>.pub >> ~/.ssh/authorized_keys
Se você gerou as chaves em seu computador ou em algum outro host FreeBSD ou Linux, copie a chave pública para o diretório do seu usuário com o scp e depois execute o cat como no exemplo acima.
$ scp -P 5902 ~/.ssh/<nome-da-chave>.pub usuario@IP:~/.ssh/
Outra maneira de copiar a chave pública para o servidor é com o comando ssh-copy-id. Precisa ter a chave privada no mesmo diretório da chave pública.
$ ssh-copy-id -i ~/.ssh/<nome-da-chave>.pub -p 5902 <usuario>@<IP-de-Destino>
Você também pode enviar a chave pública utilizando o FTP FileZilla e copia o conteúdo com o comando cat.
3 - Teste se a conexão vai funcionar.
Se você copiou a chave privada para outro host Linux, por exemplo, o comando abaixo irá te ajudar a testar se tudo está funcionando da maneira correta. Se você quiser verificar localmente, basta inserir o IP da máquina onde você gerou as chaves.
A alteração de permissão para 600 se dá por questões de privacidade, basicamente com o 600 você diz que apenas o seu usuário tem permissão para utilizar essa chave.
$ chmod 600 ~/.ssh/<nome-da-chave>
$ ssh -i ~/.ssh/<nome-da-chave> -p 5902 <usuario>@<IP-de-Destino>
4 - Edite o arquivo que contém as configurações do SSH.
O comando abaixo irá zerar e abrir a edição do arquivo, não tem uma cópia de backup caso você erre alguma linha, por tanto, verifica antes de por em produção se tudo está correto.
# echo > /etc/ssh/sshd_config ; nano /etc/ssh/sshd_config
Abaixo estarão os parâmetros que você deve inserir no arquivo sshd_config. Altere as linhas de acordo com a sua Porta SSH atual e usuário que terá privilégio para acessar o servidor.
Protocol 2 Port <Porta-SSH> LoginGraceTime 30 PermitRootLogin no StrictModes yes MaxAuthTries 2 MaxSessions 2 PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no PermitEmptyPasswords no KbdInteractiveAuthentication no UsePAM yes X11Forwarding no AllowTcpForwarding no ClientAliveInterval 300 ClientAliveCountMax 2 Banner /etc/banner Subsystem sftp /usr/libexec/sftp-server AllowUsers erick usuarioX usuarioY usuarioZ
5 - Crie um banner de aviso.
# nano /etc/banner
Conteúdo do banner:
Equipamento pertencente a empresa NOME DA SUA EMPRESA, acessos nao autorizados serao monitorados, investigados e entregues as autoridades responsaveis.
7 - Recarregue o arquivo de configuração depois das alterações.
Comando para o Linux:
# sudo systemctl restart sshd
Comando para o FreeBSD:
# sudo service sshd reload
8 - Verifique se o serviço está executando na porta configurada.
# sockstat -4 -6 | grep sshd