Configurando uma máquina Linux e acesso remoto via SSH

By on 6 Dec 2022 | 03:00 .

Categories | | | |

Tempo de leitura: #

Visualizações: #

Olá leitores, já faz algum tempo, espero encontrar los bem, recentemente adquiri um computador antigo e dele fiz um servidor linux para uso pessoal, e após configura lo desejo imortalizar e transmitir os passos que fiz para instalar e configurar o servidor com sua aplicações e serviços, bem como as dores de cabeça que enfrentei e suas soluções. Gostaria então de expor aqui a configuração inicial do servidor, instalando Archlinux nele e então configurando cesso via ssh.

Sumário

Instalação do ambiente

Estarei utilizando arch linux para esta série, pois é o meu sistema de uso diário e que me sinto mais confortável, porém para uso enterprise e profissional recomendo utilizar o CentOS ou Redhat ou ainda Debian, pela sua estabilidade.

Em minha máquina que será instalada headless, sem periféricos, eu instalei o archlinux conforme o manual oficial. Nada fora do normal aqui, caso deseje um tutorial de instalação completa eu recomendo este video do DistroTube.

Já de cara também instalei as seguintes aplicações:

$ sudo pacman -S {package}
  • ufw (firewall)
  • openssh (shell remoto)

ssh

server

Como nossa máquina será headless devemos habilitar a conexão remota a ela, para isso usaremos o ssh, para começar instale e habilite o serviço:

$ sudo systemctl enable sshd --now

Verifique com o comando:

$ sudo systemctl status sshd
● sshd.service - OpenSSH Daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: disabled)
     Active: active (running) since ###################; ############
   Main PID: ### (sshd)
      Tasks: 1 (limit: 3698)
     Memory: 5.5M
        CPU: 474ms
     CGroup: /system.slice/sshd.service
             └─### "sshd: /usr/bin/sshd -D [listener] 0 of 10-100 startups"

Ele deverá estar active.

Com isso o daemon será executado e aceitará conexões remotas, neste passo você já pode remover os periféricos da máquina ligar ela a uma tomada onde ficará rodando eternamente, mas antes, cuidado, execute o comando a seguir e lembre do número de endereço MAC da interface de rede padrão.

$ ip a

Se sua máquina possuí interface wifi e de rede ela exibirá três resultados, o primeiro é a interface de retorno para própria máquina, ignore, queremos a interface de rede, geralmente será enp3s0, ou alguma variação de enp, e o link/ether é o endereço MAC, em nosso exemplo: d0:d0:d0:d0:d0:d0.

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether d0:d0:d0:d0:d0:d0 brd ff:ff:ff:ff:ff:ff
    inet #################/16 brd ################# scope global noprefixroute enp3s0
       valid_lft forever preferred_lft forever
    inet6 #################/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether ################# brd ff:ff:ff:ff:ff:ff
    inet #################/16 brd ################# scope global dynamic noprefixroute wlp2s0
       valid_lft 4520sec preferred_lft 4520sec
    inet6 #################/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

client

Com a máquina já plugada e conectada na mesma rede que seu computador pessoal, devemos então procurar pelo ip a dado, para tal você pode ir ao roteador padrão no navegador, ex: 192.168.0.1, procurar pela opção DHCP e reserva de endereço, onde então você poderá atribuir um ip estático a seu servidor.

Observação: Recomendo utilizar um computador com linux/mac, nesta série também teremos um computador com archlinux, mas se usar windows baixe e instale o ambiente Msys2 e utilize o terminal Mingw64 para realizar os passos da série, para isso após a instalação, baixe o pacote ssh com:

$ pacman -S ssh

Note que o pacman é o mesmo que do archlinux, mas não confunda com os comandos aqui mostrados para o servidor archlinux

Exemplo de um roteador:

Adicione um endereço ip padrão a máquina e agora temos a máquina jś configurada na rede, por exemplo 192.168.10.10. Tente dar um ping na máquina e veja se a máquina responde.

$ ping 192.168.10.10

Tente logar via ssh:

$ ssh server_user@192.168.10.10

Em primeiro momento será pedido sua senha, depois se deseja adicionar o host como host conhecido, então você finalmente estará logado.

Para sair a qualquer momento do ssh digite:

$ exit

Agora vamos gerar um par de chaves para você, que serão usadas no lugar das senhas, maior segurança, esse par será diferente da chave padrão id_rsa e por isso haverão mais passos que o comum, como você possa ter visto pela web.

$ ssh-keygen

E então insira um nome completo como server_key:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/client_user/.ssh/id_rsa): /home/client_user/.ssh/server_key
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/client_user/.ssh/server_key
Your public key has been saved in /home/client_user/.ssh/server_key.pub
The key fingerprint is:
SHA256:t4K9dasdsadY+7yTWWadnafyuuh464CDfgd7fDFcZ+U client_user@arch
The key's randomart image is:
+---[RSA 3072]----+
|ooo o o oo ooo o |
|ooo o o oo ooo o |
|ooo o o oo ooo o |
|ooo o o oo ooo o |
|ooo o o oo ooo o |
|ooo o o oo ooo o |
|ooo o o oo ooo o |
|ooo o o oo ooo o |
|ooo o o oo ooo o |
+----[SHA256]-----+

Com isso você terá uma nova chave privada ~/.ssh/server_key e uma publica ~/.ssh/server_key.pub.

Para facilitar a vida vamos criar um alias para o servidor em um novo arquivo, para isto crie o arquivo ~/.ssh/config e digite o conteúdo a seguir.

~/.ssh/config:

Host server_name
   	User server_user
   	Hostname 192.168.10.10
   	IdentityFile ~/.ssh/server_key
   	Port 22

Onde o usuário de login será o usuário do servidor, server_user, ip, porta, e IdentityFile será nossa chave recém criada.

Agora vamo copiar a chave publica para o servidor com o seguinte comando.

$ ssh-copy-id -i ~/.ssh/server_key server_user@192.168.10.10

E por fim podemos acessar nosso servidor como:

$ ssh server_name

Agora vamos desativar o login via senha e ativar somente autenticação via chave, para isso, estando conectado via ssh ao servidor, edite o arquivo a seguir como root, sudo, e altere o parâmetro para no:

$ sudo vim /etc/ssh/sshd_config 

/etc/ssh/sshd_config:

PasswordAuthentication no

Lembre de remover o # da frente do parâmetro se o mesmo existir.

Tente logar novamente e você continuará conseguindo acessar, mas se tentar acessar como:

$ ssh server_user@192.168.10.10

Você verá que não conseguimos acessar devido a um acesso negado, pois login via senha foi desabilitado.

ufw

Para finalizar a instalação, vamos configurar um firewall, usarei o ufw, que é de simples utilização.

Após a instalação no servidor e estando logado via ssh, execute:

$ sudo systemctl enable ufw --now

E verifique se está rodando:

$ sudo systemctl status ufw

Atenção!, execute os próximos passos a risca, pois em caso de erro fecharemos todas as portas e então a conexão ssh será interrompida para sempre, obrigando você a reconectar os periféricos no servidor e realizar a configuração do firewall do zero

Por hora vamos fechar todas as portas de conexão, para isso execute:

$ sudo ufw default deny

Habilitar ssh:

$ sudo ufw allow 22
$ sudo ufw limit ssh

E por fim habilitar o firewall:

$ sudo ufw enable

Agora saia do ssh e tente reconectar, se der tudo certo todas as portas estarão fechadas exceto do ssh.

Por hora é isto pessoal, você agora tem um servidor archlinux rodando de forma completa, seguro e com acesso restrito via ssh somente para chaves publicas registradas.