# Configurando um servidor LEMP Debian 9 - Parte 1

Fala pessoal tudo beleza?

Esse é o primeiro artigo de alguns que irei publicar com o objetivo de ajudar a configurar um servidor web do zero. Mostrarei como configurar os principais serviços e instalar um servidor web para rodar aplicações e sites.

Essa série será sempre com exemplos práticos sem muito entrar em detalhes, irei simplificar o máximo para não ficar maçante. Chega de enrolação e vamos começar...

Nessa série estou utilizando uma instalação limpa do [Debian 9 - Stretch](https://debian.org/).

## Criando um novo usuário

Sabemos que por motivos de segurança não devemos usar o usuário root para tarefas rotineiras. Para isso devemos criar um usuário para nós.

O comando abaixo irá criar um usuário com o nome john. Após confirmar com o Enter, você terá que digitar uma senha para o usuário, insira uma senha forte!

Entre com o seu nome e preencha as informações seguintes caso desejar. Não é obrigatório preencher tudo e você pode apenas confirmar com o Enter para pular as perguntas.

```bash
adduser john
```

Agora devemos adicionar seu usuário para podermos executar alguns comandos com super poderes. Para isso execute o comando abaixo:

```bash
usermod -aG sudo john
```

Assim você já poderá executar comandos com privilégios de root utilizando o sudo.

## Aumentando a segurança com autenticação de chaves

Podemos melhorar a segurança do nosso servidor inserindo uma chave pública para autenticação. Vamos criar um par de chaves e adicionar ao nosso servidor.

Caso ainda não tenha uma chave execute o comando abaixo. Caso já tenha pode pular para a parte de Instalar a chave manualmente.

Execute o comando abaixo no seu computador local, assumindo que você esteja usando Linux como sistema operacional. Caso esteja usando Windows busque por Criar chave ssh windows no Google.

```bash
$ ssh-keygen
```

Você poderá cadastrar uma senha caso queira é uma segurança a mais para você. Eu particularmente não utilizo. Com uma senha ou sem, a autenticação com a chave privada é uma maneira mais segura de efetuar o login do que uma autenticação básica com apenas a senha.

O comando acima irá gerar uma chave privada `id_rsa` e uma chave pública `id_rsa.pub` no diretório local do usuário na pasta `~/.ssh`.

### Instalar a chave manualmente

Agora vamos instalar essa chave pública que acabamos de criar no servidor. O comando abaixo irá exibir o conteúdo do arquivo id\_rsa.pub. Apenas copie o conteúdo do arquivo.

```bash
$ cat ~/.ssh/id_rsa.pub
```

Logado no servidor como root dê o comando abaixo para trocar de usuário assumindo o usuário que criamos nesse tutorial.

```bash
su - john
```

Crie um diretório chamado .ssh dentro do seu diretório home e restrinja suas permissões com os comandos:

```bash
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
```

Vamos criar agora um arquivo dentro desse diretório chamado `authorized_keys`. Nesse exemplo vamos utilizar o editor nano.

```bash
$ nano ~/.ssh/authorized_keys
```

Cole todo o conteúdo do arquivo que você copiou no passo acima para este que acabamos de criar. Para salvar pressione CTRL+O e CTRL+X para sair do arquivo.

Agora vamos restringir o acesso a esse arquivo para que apenas seu usuário tenha acesso com o comando abaixo:

```bash
$ chmod 600 ~/.ssh/authorized_keys
```

Pronto. Chave instalada no servidor e agora poderá acessar seu servidor com mais segurança. Para sair do seu usuário digite exit que ele irá voltar para o usuário root.

## Configurando o SSH

Podemos realizar algumas alterações no arquivo de configuração do SSH para proteger nosso servidor um pouco mais.

Abra o arquivo abaixo utilizando o usuário root com seu editor de texto:

```bash
nano /etc/ssh/sshd_config
```

Agora vamos fazer as alterações.

### Desabilitar login com usuário root

Vamos bloquear o acesso via SSH para o usuário root, este é um procedimento altamente recomendado para servidores. Iremos deixar que apenas o usuário que criamos tenha acesso ao servidor.

Para isso altere a linha abaixo de **yes** para **no**. Ficando conforme exemplo:

```bash
PermitRootLogin no
```

Isso irá restringir o login de root. Pessoas má intencionadas sempre utilizam ataques de força bruta em cima desse usuário e se a senha não for forte o suficiente é certeza que seu sistema estará vulnerável à esse ataque.

### Alterando a porta padrão

Agora vamos deixar nosso servidor um pouco mais seguro alterando a porta padrão do SSH que é a 22.  Procure a linha abaixo no arquivo de configuração.

```bash
Port 22
```

Nesse exemplo vamos utilizar a porta 54122. Altere a linha deixando a dessa forma:

```bash
Port 54122
```

Nesses dois exemplos que fizemos, nós melhoramos a segurança do nosso servidor. A partir de agora para efeturar login no servidor será necessário especificar a porta SSH nova. Veremos um exemplo mais abaixo.

### Quer melhorar a segurança um pouco mais?

Vamos especificar no arquivo de configuração do SSH que apenas o nosso usuário poderá acessar via SSH. Restringindo qualquer outro usuário do sistema.

Abra o arquivo de configuração caso já tenha fechado.

```bash
nano /etc/ssh/sshd_conf
```

Podemos inserir a linha abaixo em qualquer lugar do arquivo, mas para ficar mais organizado vamos inserir após a linha do PermitRootLogin.

```bash
AllowUsers john
```

Para salvar pressione CTRL+O e CTRL+X para sair do arquivo. Para que todas essas alterações surjam efeitos devemos reiniciar o serviço SSH com o comando.

```bash
service ssh restart
```

E como saber se tudo que fizemos deu certo? Vamos testar antes de fechar nossa conexão com o servidor.

Abra uma nova janela do seu terminal e efetue uma nova conexão com o servidor via SSH utilizando seu novo usuário. Agora especificando a porta que escolhemos para o serviço.

```bash
ssh john@ip_servidor -p 54122
```

Se tudo correr bem você estará logado no servidor sem utilizar uma senha. Ao logar o sistema verifica sua chave privada com a chave pública no servidor e autoriza sua entrada caso esteja tudo certo.

Para executar comando com privilégios de root informe o sudo antes do comando.

```bash
$ sudo apt update
```

Maravilha. Agora elevamos o nível de segurança do nosso servidor. Lembre-se que só isso não deixará seu servidor com segurança nível hard, é necessário um conjunto de configurações e serviços executando para ter uma proteção maior.

Até a próxima!
