SSH: 01 – Instalação e configuração inicial

O SSH é composto de duas aplicações, uma para o cliente e outra para o servidor, sendo a do cliente instalada por padrão em várias distribuições do Linux.

O cliente permite conexões a outros nós via SSH, mas não permite que outros nós conectem a você. Nesse caso é necessário a aplicação do servidor instalada, que muitas vezes não é instalada por padrão por questões de segurança, evitando que hajam aplicações inativas no dispositivo e que podem ser usadas maliciosamente.

As duas distribuições que serão usadas como base nos artigos serão o Debian e o Fedora, por serem largamente utilizadas.

No Debian para checar que se a aplicação servidor é necessário executar o comando e checar se a letra i é indicada logo à frente do nome do pacote.

aptitude search openssh-server

Para instalar o pacote é necessário executar o comando pelo terminal: 

# apt-get install openssh-server

Para checar se o serviço está ativo, execute o comando:

ps ax | grep sshd

Se estiver inativo execute (sem #):

# systemctl start ssh.service

No Debian, o status do serviço pode ser identificado pelo comando, e se estiver executando retornará o status running:

# systemctl status ssh.service

No Fedora, os passos são os mesmos com exceção que o nome do serviço é sshd, como demonstrado pelo comando abaixo:

systemctl status sshd.service

Ele é instalado por padrão mas caso não esteja é só executar:

# dnf install openssh-server

Após instalação para checar o status, execute: 

systemctl status sshd.service

Se o serviço não estiver habilitado, execute o comando para que ele seja iniciado automaticamente com o sistema:

# systemctl enable sshd.service

Agora que ele está instalado e ativo, é necessário saber como usar o openssh-client, avance clicando aqui.

SSH: 02 – Conexão remota pela rede via openssh-client

Para checar as configurações, você terá que ter uma instalação do Linux com a aplicação servidor do SSH instalado, e outra com a aplicação cliente. No Fedora o pacote é openssh-clients no Debian é o pacote openssh-client. Eles são instalados por padrão nas duas distribuições, então caso não tenha sido removido é só utilizar.


Vamos lá!


É necessário saber o IP da máquina remota, para isso digite o comando:


ip addr show


Para conectar à máquina remota, supondo que o comando acima tenha retornado 10.1.1.76, execute o seguinte comando:


ssh 10.1.1.76


Para conectar com o SSH na máquina remota supondo que o usuário seja diegohtg, execute o comando:


ssh diegohtg@10.1.1.76


Com SSH você pode conectar usando qualquer usuário, até o root caso o login com ele esteja habilitado.


No sistemas baseado em Debian, o login por padrão ao usar o usuário root só poderá ser realizado usando uma chave RSA, enquanto que nos sistemas Red Hat é habilitado por padrão.


Caso queira agora acesse o tutorial de como desabilitar o acesso pelo usuário root,avance clicando aqui. Senão siga a sequências de tutoriais que no momento adequado aprenderá isso. Fique à vontade em decidir quando aprenderá isso.


Caso saiba o nome da máquina remota (hostname) é possível substituir o IP pelo nome da máquina, conforme comando abaixo: 


ssh diegohtg@classroom


Caso não haja uma entrada no servidor DNS para ela, ou o servidor DNS não tenha sido configurado ainda, acesse o artigo explicando como configurá-lo, avance clicando aqui. Caso contrário siga a sequência de tutoriais e aprenderá em tempo devido.

Esse passo poderá ser realizado futuramente, caso leia a sequências de tutoriais. Fique à vontade em decidir quando aprenderá isso.


Para conectar à máquina remota é necessário especificar a porta, especialmente se não está mais sendo usada a porta padrão (22) para uso do serviço.


ssh -p 6022 diegohtg@classroom


No próximo tutorial o arquivo de configuração do SSH será estudado, avance clicando aqui.

SSH: 04 – Transferindo arquivos com o SCP

Para usar o scp são necessárias duas máquinas: uma com a aplicação servidor instalada e outra com a aplicação cliente e ambas executando. O objetivo será transferir arquivos de uma máquina para outra. Veremos como isso poderá ser feito.

Para uso do tutorial será usado a máquina classroom para transferir um arquivo à máquina de nome livingroom:

Um exemplo de uso do scp:

scp image001.jpg 10.1.1.88:/home/henriquetg/

Será transferida a imagem imagem001.jpg, sendo que a máquina de destino tem IP 10.1.1.88. Então é digitado dois pontos após o nome da máquina destino e antes do diretório em que será transferida, nesse caso o diretório home do usuário henriquetg.

Já que temos o nome da máquina (classroom), podemos usá-lo ao invés do IP desde que o servidor DNS esteja executando. A configuração deve estar em ~/.ssh/config, ou em uma entrada no arquivo /etc/hosts da máquina livingroom. O comando é:

scp imagem001.jpg livingroom:/home/henriquetg

O comando foi simplificado já que o nome da máquina é conhecido. Adicionalmente, não é necessário digitar o nome do diretório home já que ele pode ser simplificado por um ponto:

scp imagem001.jpg livingroom:.

Nesse outro exemplo /home/henriquetg, foi substituído pelo acento ~. Obtendo-se o comando:

scp imagem001.jpg livingroom:~

Caso deseje-se copiar um diretório inteiro digita-se a flag -r para cópia recursiva do diretório, conforme comando abaixo:

scp -r minha_pasta livingroom:~

Agora o diretório minha_pasta e o seu conteúdo serão copiados. Outra flag útil é -p que preserva as datas de modificação, criação dos arquivos, usando-se o comando abaixo:

scp -rp minha_pasta livingroom:~

No entanto, se o usuário logado na máquina de origem (classroom) não existir na máquina de destino (livingroom) é necessário adicioná-lo com @ para ser o usuário utilizado na transferência e autorizado pela máquina de destino:

scp imagem001.jpg henriquetg@livingroom:~

Então a senha do usuário henriquetg será requisitada com o diretório /home/henriquetg como diretório de destino.

Caso outra porta que não seja a 22 (padrão) esteja sendo usada é necessário adicionar a flag-P precisa ser adicionada e a porta especificada:

scp -P 4022 imagem001.jpg henriquetg@livingroom:~

Caso queira copiar um arquivo da máquina remota (até então a de destino) para a sua local (até então a de origem) pode ser usado o comando abaixo, especificando o arquivo que deve ser copiado da máquina remota, nesse caso a imagem imagem001.jpg da máquina remota (livingroom):

scp @livingroomroom:~/imagem001.jpg .


Pronto, esses são os exemplos para transferência de arquivos com scp. 

O próximo tutorial mostrará como criar túneis com o SSH, avance clicando aqui.

SSH: 03 – Entendendo o arquivo de configuração do SSH

Ao utilizar o SSH pela primeira vez, o diretório .ssh será criado no diretório home. Esse diretório contém todos os arquivos úteis para o seu cliente SSH e que inclue os computadores conhecidos (know_hosts) e as chaves privada e pública (id_rsa e id_rsa.pub). E há outro arquivo importante que deve ser criado manualmente: .config.

O que esse arquivo de configuração faz? Se você tem mais de uma máquina remota para conectar frequentemente, você pode incluir nesse arquivo as especificações de cada um deles, sem ter que configurar novamente essas máquinas, até que haja alterações neles. Será usado o cenário abaixo para mostrar como configurar o arquivo ~/.ssh/config.

Host classroom

Hostname 10.1.1.76

Port 22

User diegohtg


Host sittingroom

Hostname 10.1.1.88

Port 65000

User henriquetg


Host livingroom

Hostname 10.1.1.99

Port 22

User diegohtg

Com esse arquivo o SSH irá reconhecer as três máquinas: livingroom, sittingroom e classroom. Não sendo necessário que o serviço DNS os reconheça já que o IP foi incluído no arquivo, e também a porta. E se o usuário estiver corretamente configurado será usado automaticamente. Incluindo nome-do-usuário@ antes do nome da máquina de destino permite conectar com outro usuário, caso assim seja necessário.

Para finalizar crie o arquivo, abrindo um editor de texto em:

~/.ssh/config

Se tudo foi digitado corretamente o arquivo pode ser utilizado para carregar as configurações de cada máquina.

O próximo tutorial mostra como transferir arquivos com o scppara avance clicando aqui.

SSH: 07 – Mantendo conexões SSH ativas

Dependendo em como o servidor SSH ou os firewalls internos forem configurados, a sua sessão SSH poderá ser desconectada após um período de tempo. É possível configurar o SSH para enviar um pacote especial a cada certo período de tempo, para manter a conexão ativa e não se tornar uma candidata a desconexão. Isso é útil se você usar um serviço que utiliza o SSH, se você não desejar ser desconectado. Para aplicar esse tweak, você deve configurar a opção ServerAliveInterval.

Há duas maneiras de configurar isso, uma afeta a conta do usuário e outra que irá extender as configurações de extensão do sistema. Em primeiro lugar, será apresentado a que afeta as contas do usuário. O arquivo ~/.ssh/config que foi editado antes, será novamente acessado. Eis um exemplo abaixo, cujos nomes das máquinas replica os nomes, usuários e IPs que foram utilizados anteriormente nos tutoriais: 02. Conectando remotamente pela rede via openssh-client) e 04. Transferindo arquivos com o SCP).

Host classroom

Hostname 10.1.1.76

Port 22

User diegohtg

Host livingroom


Hostname 10.1.1.88

Port 65000

User henriquetg

Host sittingroom


Hostname 10.1.1.99

Port 22

User diegohtg

Como anteriormente, há três sistemas. Se você deseja configurar uma máquina, por exemplo icarus, para enviar um pacote a cada 60 segundos, poderá adicionar a seguinte configuração a ela:

Host classroom

ServerAliveInterval 60

Hostname 10.1.1.76

Port 22

User diegohtg

Se você deseja configurar a opção ServerAliveInterval para todas as máquinas em que for se conectar, adicione essa opção como um coringa adicionando ela no início do arquivo:

Host *

ServerAliveInterval 60

Com isso, a configuração passa a ter efeito para todos os sistemas em que iniciamos uma conexão. Embora a questão não tenha sido discutida, há dois arquivos extensores das configurações do sistema (globais) para o SSH, que em outros tutoriais futuros serão explicados. No momento, apenas será feita uma breve introdução:

• /etc/ssh/ssh_config: Esse arquivos contém configurações que serão utilizadas para todas as conexões de saída.

• /etc/ssh/sshd_config: arquivo de configuração global do servidor, e será utilizado para todas as conexões de entrada.

No arquivo que contém as configurações de saída (/etc/ssh/ssh_config) há a opção ServerAliveInterval que determinada quanto tempo o servidor irá esperar um pacote vazio do cliente. Nesse exemplo, determinou-se 60 segundos (1 minuto) como tempo de espera.

ServerAliveInterval 60

Essas as opções básicas que podem ser alteradas nos arquivos de configuração.

O próximo tutorial abordará as boas práticas de configuração de segurança para a execução do SSH, avance clicando aqui.

SSH: 06 – Gerando chaves públicas

Além das senhas, o SSH permite autenticação por chaves públicas, que oferece maior segurança, apesar de não ser inviolável.


Por padrão o OpenSSH permitirá o usuário fazer o login autenticandotanto com o par usuário / senha ou com o par usuário / chave pública. Usando o par usuário / chave pública descarta a necessidade de login com requisição da senha. No entanto, se o servidor ainda permitir a autenticação com a senha a segurança não será tão alta quanto se esse modo de autenticação estiver desabilitado.


Para desativar a autenticação acesse o tutorial que mostra como desabilitá-la, em que são discutidos  as configurações necessárias para manter o SSH seguro o suficiente, avance clicando aqui. Se quiser configurar depois, é só seguir a sequência de tutoriais que irá será feito em tempo devido.


Para desabilitar a autenticação com senha é necessário realizar a configuração no servidor. Se o invasor não tiver a chave privada, estará impossibilitado de conectar ao servidor.


Para gerar o par de chaves é necessário usar o comando ssh-keygen, o que será demonstrado logo abaixo. Você poderá criar uma frase de segurança caso queira, se não considerar necessário execute o comando ssh-keygen e aperte ENTER, e é mais seguro criar a frase de segurança e ter o benefício da segurança adicional.


Para a autenticação com o par de chaves ser realizada serão criados dois arquivos no diretório home do usuário logo que forem criadas as chaves: id_rsa e id_rsa.pub. O primeiro arquivo é a chave privada, a segunda a chave pública.


De forma breve, a forma mais segura de autenticação é realizada com os seguintes passo: após realizar o login na sua máquina principal, executar pelo terminal o comando ssh-keygen criando uma frase de segurança.


Depois execute o comando ssh-copy-id para copiar a chave para o servidor remoto que você deseja se conectar. O comando é esse logo abaixo:


ssh-copy-id -i ~/.ssh/id_rsa.pub <remote host IP or name>


Caso ainda não saiba o nome do host, execute o comando abaixo:


$ hostname


A alteração é ensinada em um tutorial com as várias formas de configuração, avance clicando aqui. Senão configure depois acessando a seção de Administração LINUX. 


O comando usando o ssh-copy-id copiará a chave pública na pasta ~/.ssh da máquina de destino. Esse arquivo armazena todas as chaves conhecidas pelo dispositivo. Se você checar antes de executar o comando perceberá que esse arquivo só é criado após a execução.


No próximo tutorial será tratado como manter as conexões ativas, avance clicando aqui.

SSH: 05 – Criando túneis para tráfego de dados com o SSH

Um dos melhores recursos do SSH é a criação de túneis. Eles permitem acessar serviços localmente de outra máquina ou servidor. O que permite ultrapassar filtros de DNS, ou até mesmo acessar um servidor de bate-papo com retransmissão na Internet (IRC) que é segregado dentro de sua empresa, ou casa.


Ao ultrapassar bloqueio de recursos por algum administrador apenas garanta que tenha permissão para tal e que não irá sofrer penalidades.


Se você for capaz de iniciar uma conexão SSH em uma rede contendo o serviço, as possibilidades de que você abrirá com sucesso as conexões serão altas.


Ao criar um túnel, o comando muda muito. Ao invés de somente executar o comando sshhá algumas flags adicionais a serem utilizadas. Em primeiro lugar, adiciona-se a flag -L. Ela é um endereço de ligação, que basicamente significa que uma porta local estará sendo utilizada e sendo redirecionada para uma porta específica na outra ponta.


A sintaxe do comando deve ser conforme o exemplo abaixo:


ssh -L <porta-local>:localhost:<porta-remota> <usuário>@10.1.1.110


A flag -L é usada porque se pretende redirecionar uma porta local para uma outra porta remota. O comando é encaixado com dois pontos em cada lado. No lado esquerdo a porta, no lado direito o IP da máquina, dois pontos e então a porta remota. E o comando é finalizado com a sintaxe usual, que é, o nome do usuário e então o IP do gateway usado na conexão. 


Para ficar mais simples de entender, será mostrado um exemplo abaixo. Por padrão, o VNC, um programa gráfico de acesso remoto, utiliza as portas 5900-5902. Se deseja obter acesso a um ambiente de área de trabalho em uma máquina remota com um IP 10.1.1.110, use o seguinte comando:


ssh -L 5900:localhost:5901 diegohtg@10.1.1.110


Nesse caso estará sendo redirecionado a porta 5900 para uma 5901 em 10.1.1.110. Assim que a sessão conectar e ser estabelecida, o VNC poderá ser utilizado na máquina local para conectar ao serviço VNC na máquina remota:


localhost:5900


No VNC é necessário especificar qual sessão será usada, e nesse caso ela será aberta no IP 10.10.10.110, e para isso, executa-se o seguinte comando:


vncviewer localhost:1


No entanto, qual máquina ou serviço com o qual deseja-se conectar e que está por trás de um outro gateway? O exemplo anterior somente funciona com o IP 10.1.1.110, que é roteável através da Internet, ou através da mesma rede que deseja-se conectar. Esse não é sempre o caso, e de uma forma geral serviços úteis não são expostos diretamente na Internet. Por exemplo, se você está em casa e deseja conectar-se a um protocolo de uma área de trabalho remota em uma máquina na rede da sua empresa, o exemplo anterior não irá funcionar. 


Nesse exmplo, no escritório, tem-se uma máquina com acesso remoto disponível com um endereço IP 10.10.10.40. Não podemos conectar-se á ela diretamente de casa, porque ela não está roteável pela Internet. No entanto, o que acontece é que tem-se um servidor na empresa que atualmente, está disponível na Internet com um endereço IP externo 66.215.110.40. Pode-se conectar diretamente a essa máquina de casa, mas a máquina 10.1.1.40 está em uma camada mais distante do interior daquela rede. 


Nesse exemplo, será usada a máquina 66.215.110.40 para facilitar a conexão com 10.1.1.40 dentro da rede da empresa. Veja o comando abaixo:


ssh -L 3186:10.1.1.80:3187 diegohtg@66.215.110.40


Nesse exemplo, diegohtg tem uma conta de usuário na máquina 66.215.110.40 e deseja conectar à máquina 10.1.1.80, que está dentro da rede da empresa. Nesse exemplo, a porta 3186 na máquina local está sendo redirecionada para a porta 3187 na máquina remota 10.1.1.60, mas estabelecendo a conexão através do gateway 66.215.110.40. Agora, diegohtg está habilitado a abrir uma área de trabalho remota no cliente e usar o seguinte comando para a conexão com aquele endereço:


localhost:3186


Enquanto a conexão permanecer aberta, diegohtg poderá então utilizar uma área de trabalho no servidor do computador local. Se o terminal for fechado, a conexão será finalizada. 


Fique à vontade e utilize os túneis para redirecionar os serviços que bem quiser.


O próximo tutorial ensinará como gerar chaves públicas, avance clicando aqu

Serviços de Rede: 03 – Servidor DNS

O Sistema de Nomes de Domínio (DNS) faz com que a navegação de recursos em rede muito simples. Caso você não tenha uma rede pequena, será necessário estabelecer meios de saber qual endereço IP pertence a cada máquina, para que não haja confusão na identificação de cada uma delas. O DNS permite mapear os nomes aos endereços IP, então você pode se referir aos computadores pelos seus nomes (hostnames) e o DNS fará o trabalho de traduzir novamente o endereço IP.


DNS é uma daqueles serviços que virtualmente todo mundo em uma rede com dispositivos conectados usa, não importa se o usuário faça questão disso. Os provedores de serviços na Internet usam o DNS, tanto que é incomum acessar sites pelo seu endereço IP. Mas ele também é muito usado dentro de redes particulares das empresas.


Por exemplo, é muito mais conveniente acessar à uma impressora conectada na rede local por epson-repeccao do que lembrar o seu endereço IP, tal como 10.1.1.25. O que permite uma identificação mais fácil aos dispositivos conectados à rede.


O nome dos pacotes, como geralmente ocorre, são diferentes entre as distribuições. Nos sistemas baseados em Debian é bind9. As distribuições que se baseiam no sistema da Red Hat (Fedora e CentOS, por exemplo) o chamarão de bind. O nome BIND vem de Berkeley Internet Name Domain, criado na Universidade da California em Berkeley, e é o sistema de nomes de domínio mais popular. Se você está usando o CentOS é recomendado instalar o pacote bind-utils, já que ele contém o comando dig (domain information groper), que é útil em diversas situações. Nos sistemas da Red Hat e Debian, ele vem instalado por padrão.


O primeiro passo é garantir que o BIND esteja executando, o que pode ser feito com esse comando, no Debian:


# systemctl status bind9


As distribuições que se baseiam no sistema da Red Hat iniciam o daemon do bind automaticamente, caso esteja usando essas distribuições do Linux, execute os comandos abaixo apenas para garantir o início automático e também a execução na sessão atual:


# systemctl enable named

# systemctl start named


Com isso feito, você tem um servidor DNS operando. Não é necessário nenhuma configuração adicional para executá-lo corretamente, e agora é possível adicionar registros dos IPs e os respectivos nomes de outras máquinas.


Em primeiro lugar, checaremos o arquivo de configuração padrão. Os sistemas baseados no Debian armazenam o arquivo em /etc/bind/named.conf, os sistemas da Red Hat em /etc/named.conf. Apenas atentar para essas diferenças.


Para que haja a inclusão de novas configurações, para seguir as instruções desse tutorial, crie um arquivo vazio name.conf em /etc/bind:


include “/etc/bind/named.conf.options”;

include “/etc/bind/named.conf.local”;


Nos sistemas Red Hat será necessário criar o diretório, antes de criar o arquivo vazio:


# mkdir /etc/bind


E então criar /etc/bind/named.conf.options file e customizá-lo, nesse caso com o DNS da OpenDNS (208.67.222.222; 208.67.220.220), mas pode ser algum outro à sua escolha:


options {

forwarders {

208.67.222.222; 208.67.220.220;

};

};


Estarão sendo criadas opções com um bom tanto de código unido entre chaves, que então incluirá um conjunto adicional de chaves aonde serão identificados os endereços de redirecionamento. Já que o servidor DNS é usado para localizar recursos dentro de nossa rede interna, os blocos de redirecionamento indicam para onde serão enviadas requisições, e ele seja capaz de encontrar o que se realizar de buscas localmente. O servidor DNS irá igualmente continuar funcionando perfeitamente sem isso, já que na maioria dos casos ele irá buscar outro servidor DNS além do que está na cadeia. Mas configurar os redirecionadores permitirá forçar consultas externas aos DNS listados. Nesse exemplo são usados os servidores DNS do OpenDNS. No entanto, você pode escolher um da sua preferência. Alguns servidores DNS de boa performance podem ser encontrados em http://www.opennicproject.org, que é também uma boa escolha se você está ciente se levar em conta a privacidade e rastreamento.


O próximo arquivo é /etc/bind/named.conf.local, que contém o seguinte código:


zone “local.lan” IN {

type master; file “/etc/bind/net.local.lan”;

};

zone “81.10.10.in-appr.arpa” {

type master; notify no; file “/etc/bind/revp.10.1.96”;

};

zone “82.10.10.in-appr.arpa” {

type master; notify no; file “/etc/bind/revp.10.1.97”;

};

zone “83.10.10.in-appr.arpa” {

type master; notify no; file “/etc/bind/revp.10.1.98”;

};

zone “84.10.10.in-appr.arpa” {

type master; notify no; file “/etc/bind/revp.10.1.99”;

};


Nesse arquivo, iniciaremos a identificação de nosso nome de domínio. Aqui, eu escolhi local.lan. Como esse servidor não é autoritativo de qualquer coisa na Internet, esse nome é útil. Dentro desse bloco, estamos chamando outro arquivo, /etc/bind/net.local.lan. Na verdade, como pode ser visto, há diversos arquivos sendo chamados aqui (5 no total). O primeiro é a zona DNS principal, e ela é a mais importante dentre elas. Os seguintes são os arquivos aonde serão configuradas as buscas reversas de DNS. Essencialmente, o DNS nos permite não somente mapear hostnames aos endereços IP, mas pode também fazer o contrário: retornar mapas de endereços IP aos hostnames. Você não deve precisar de todos esses arquivos que foram criados no exemplo, pois estão sendo criados um arquivo de busca reversa para cada uma das 4 sub-redes. Se você não está criando múltiplas sub-redes, você só precisará criar um arquivo. O nome que convencionou-se usar é revp, seguido da porção do endereço IP na rede. Então, por exemplo, a busca reversa pela rede10.1.1.0 é revp.10.1.99. Os arquivos serão armazenados em /etc/bind.

Agora veremos o arquivo mestre, o arquivo /etc/bind/net.local.lan:


;

; dns zone for for local.lan

;

$TTL 1D

@ IN SOA local.lan. hostmaster.local.lan. (

201910151 ; serial

8H ; refresh

4H ; retry

4W ; expire

1D ) ; minimum

IN A 10.1.96.1

;

@ IN NS chewbaca.local.lan.

darth IN A 10.1.98.1

luke IN A 10.1.97.4

yoda IN A 10.1.96.4

chewbaca IN A 10.1.96.1

star CNAME yoda

;

; dns zone for for local.lan

;


Primeiro, foram posicionados alguns comentários genéricos, com linhas no início e um ponto e vírgula. Se uma linha iniciar com um ponto e vírgula, ela é ignorada pelo bind. Comentários são um bom método de armazenar notas ou eventos sem levar em conta a configuração. No entanto, comentários não são usados com frequência pelo bind. E após isso, será configurado o Tempo de Vida (TTL) para um dia:


$TTL 1D


Esse valor controla o quanto os outros servidores DNS serão capazes de armazenar cada registro. Após esse período, quaisquer servidores que tenham armazenado um desses registros devem descartá-los. Para o propósito de configurar um servidor DNS interno, esse valor não interfere tanto. No entanto, ele é extremamente importante ao usar múltiplos servidores DNS. Um exemplo de porquê o valor de TTL pode se provar útil é alterar um endereço de registro para um IP diferente. Suponha que você está fazendo a troca do provedor de e-mail. Nesse caso você terá que trocar o e-mail adequadamente. No entanto, antes de você determinar essa mudança, você deve reduzir o TTL, para um tempo menor, tal como uma hora, e fazer isso antes de realizar a troca. Então, os servidores são forçados a descartar essa zona e atualizá-lo, causando que a mudança seja aplicada o mais rápido possível nos servidores. Quando tiver terminado, você poderá mudá-lo novamente. Com a seguinte linha identifica-se um Início de Autoridade (SOA):


@ IN SOA local.lan. hostmaster.local.lan. (


Nesse caso, estamos identificando que esse servidor DNS tem autoridade sobre o domínio local.lan, que hostmaster.local.lan é o responsável. Embora não pareça, hostmaster.local.lan é um endereço de -e-mail no formato que o bind escolher. No entanto, é óbvio que é um endereço fake , o que não importa para o servidor DNS desse tutorial. No final da linha, estará sendo aberto um bloco de configuração com parênteses. A seguinte linha representa o serial, e é um conceito importante a se entender para que o servidor DNS opere adequadamente:


201910151 ; serial


Cada vez que o daemon do bind é reiniciado, ele irá recarregar o arquivo. Mas quando isso é feito, o númeo de série é a primeira coisa a ser examinada. Se ele for o mesmo, ele não terá carregado qualquer atualização. Mas quando ele for alterado, é o primeiro a ser examinado já que algo nos arquivos de configuração das zonas. Nesse exemplo, a data atual está sendo usada sem hífens ou espaços. O último dígito é somente um número de revisão para aquele dia, se o arquivo for alterado múltiplas vezes em um dia. Você pode usar qualquer esquema que prefira. Mas usar a data é uma forma bem comum de esquema. Sem levar em conta o formato que você usa, sempre garanta que o o incremento ocorra no serial, toda vez que a mudança ocorrer. Assim evita frustações de não saber a razão pela qual novos registros foram criados.


8H ; refresh

4H ; retry

4W ; expire

1D ) ; minimum


Esses valores determinam quantas vezes as checagens de atualização serão requisitadas aos servidores-escravo DNS. O primeiro valor exige a atualização dos registros de zona do servidor-mestre a cada 8 horas. Ao invés de realizar novas tentativas, os servidores-escravo serão configurados para considerar que ocorreu um problema na tentativa de conexão, e chequem novamente após um período de tempo. E por último, configurou-se o período mínimo de registros de zona por dia, e o máximo a cada 4 semanas. Configurando o servidor-escravo DNS está além do objetivo desse tutorial, e ter essa configuração concluída posteriormente não causa dano algum, caso decida configurá-los.


@ IN NS chewbaca.local.lan.


Aqui, estamos identificando esse nome do servidor. Nesse exemplo está sendo chamado de hermes e o seu nome de domínio completo échewbaca.local.lan.


yoda IN A 10.1.1.30

chewbaca IN A 10.1.96.1

Finalmente, nesse exemplo, quadro registro de endereços são mostrados. Isso basicamente significa que qualquer ver que alguém está olhando para um dessas máquinas, a requisição é mapeada para o nome de domínio listado. Esses podem estar entre múltiplas sub-redes ou uma única sub-rede. Nesse exemplo, essas máquina estão em diferentes sub-redes: 


star CNAME yoda


A linha final dessa configuração contém um registro de Nome Canônico (CNAME). Basicamente, isso nos permite referir-se ao servidor por outro nome. Nesse exemplo, star é também usado para um software também conhecido por yoda, e o registro CNAME foi desenvolvido para isso. Desse modo, se alguém tentar acessar yoda.local.lan ou star.local.lan, essa requisição poderia resolver o mesmo endereço (10.1.1.30). Um registro CNAME pode ser muito útil se um servidor único provê mais que um serviço para a rede.


Anteriormente, foram realizadas quadro consultas reversas a registros /etc/bind/revp.10.1.96/etc/bind/revp.10.1.97/etc/bind/revp.10.1.98, e revp.10.1.99. Abaixo um exemplo de configuração  para a rede 10.10.96.0:


$TTL 1D


@ IN SOA chewbaca.local.lan. hostmaster.local.lan. (

201910151 ; serial

28800 ; refresh (8 hours)

14400 ; retry (4 hours)

2419200 ; expire (4 weeks)

86400 ; minimum (1 day)

)

;

@ NS chewbaca.local.lan.

1 PTR chewbaca.local.lan.

3 PTR galaxy.local.lan.

4 PTR yoda.local.lan.


Com essa configuração, iniciam-se os registros de autoridade, assim como uma zona mestre, e tendo um número serial. A mesma ideia se aplica aqui. Seja qual for a atualização do registro (incluindo registros de consulta reversos), você deverá atualizar o número serial do arquivo. O início da autoridade opera como antes, sem novidades. O que difere nesse arquivo é como as máquinas serão chamadas. Ao invés de chamar por um número IP inteiro, será identificado apenas o último octeto já que o arquivo inteiro é dedicado a buscas reversas da rede 10.1.96.0. Para cada uma das sub-redes, você terá que criar um arquivo similar. No exemplo dado nessa configuração há quatro sub-redes, mas não é necessário tantas assim. Isso foi provido de forma a prover um exemplo de como separar sub-redes distintas, conforme for necessário ser feito. 


Com essa configuração finalizada, é possível reiniciar o serviço bind no servidor DNS e testá-lo.


Para os sistemas Debian, use o seguinte comando:


# systemctl restart bind9


Para os sistemas da Red Hat, use o seguinte comando:


# systemctl restart named


Pelo comando dig é possível testar o servidor DNS, já que ele requisita informações do servidor DNS:


dig myhostname.local.lan


Se o servidor DNS retornar a mensagem SERVER na saída, então o seu servidor está funcionando coretamente. Se isso não ocorrer algo não foi configurado corretamente.


Com essas instruções a configuração de nós adicionais e outros registros podem ser realizados adequadamente dentro do servidor DNS. Asegure que os hostnames e endereços IPs contidos dentro dos arquivos de configuração em relação àqueles que correspondam aos da sua rede. Adicionalmente, se certifique que você ligou suas sub-redes, ou remova menções à outras sub-redes se você não tem alguma. Para estar seguro, ao invés de copiar a configuração diretamente desse tutorial, é mais interessante digitar manualmente, dependendo o caso.

Segurança: 02 – SSH

O SSH é uma ferramenta excelente. Permite acessar os arquivos de uma outra máquina conectada à rede sem ter que se deslocar até ele. No entanto, é necessário que ele esteja bem configurado para evitar problemas de segurança.

O primeiro e mais comum ajuste de segurança é usar somente o protocolo Versão 2. Para determinar qual versão a instalação do Linux está usando, acesse o arquivo /etc/ssh/sshd_config e pesquise nele qual é a versão usada:

cat /etc/ssh/sshd_config |grep Protocol

Se ele retornar 1, o arquivo sshd_conf deverá ser editado para utilizar a versão 2 e o serviço reiniciado para carregar a nova configuração.

Outra configuração que recomenda-se alterar é a porta do serviço, que por padrão é a 22.

cat /etc/ssh/sshd_config |grep Port

A menos que isso tenha sido alterado, será a porta 22. Isso garantirá que algum invasor em potencial tenha que escanear as portas em uso, já que não é padrão. No entanto, os usuários terão que ser comunicados da nova porta em uso.

Para conectar após a porta de uso ter sido alterada é necessário usar a flag -p e selecionar a nova porta. Nesse caso selecionarei a porta 58187.

ssh -p 58187 myhost.mynetwork

Ela pode ser especificada usando o scp também:

scp -P 58187

O parâmetro -P é utilizado com letras maiúsculas no scp mas não no comando ssh. Isso porque o scp utiliza a flag -p para preservar as propriedades originais dos arquivos na transferência.

Uma forma de facilitar a utilização dos comandos é usar um apelido para o comando ssh já com a porta utilizada especificada. Só não utilizar esse recurso caso haja máquinas usando outras portas para o serviço.

alias ssh=”ssh -p 58187″

Outra forma de aumentar a segurança do sistema é desabilitar o login do root. Para checar se está habilitado, use o comando:

cat /etc/ssh/sshd_config |grep PermitRootLogin

Se ele estiver habilitado, altere a linha PermitRootLogin do arquivo /etc/ssh/sshd_config, conforme mostrado abaixo. Mas garanta que os outros usuários possam realizar login com o SSH.

PermitRootLogin no

Reinicie o serviço. E quanto às transferências: fique tranquilo. Não serão interrompidas.

Para sistemas Debian, use:

systemctl restart ssh

Para sistemas Red Hat, use:

systemctl restart sshd

Outra boa prática é permitir conexões de grupos e usuários específicos. Para autorizar um usuário adicione a linha abaixo no final do arquivo de configuração:

AllowUsers diegohtg

Se você tem mais de um usuário no sistema é só alterar a linha AllowUsers do arquivo de configuração do SSH e identificá-los:

AllowUsers diegohtg henriquetg

Você pode também habilitar grupos de usuários no SSH. Para isso crie inicialmente um grupo:

groupadd ssh_admins

Depois adicione usuários nesse grupo. Nesse exemplo serão diegohtg e henriquetg:

usermod -aG ssh_admins diegohtg henriquetg

E finalmente só adicionar uma linha no final do arquivo de configuração, autorizando o grupo, e caso mais algum usuário seja criado é só adicionar o ID dele ao grupo (conforme o comando anterior) e estará liberado para realizar conexões.

AllowGroups ssh_admins

E finalmente, para desabilitar a autenticação por senha, e manter apenas a autenticação com o par de chaves, execute o ssh-keygen:

ssh-keygen

Você será questionado diversas vezes, no entanto, a maioria das questões permitirá manter a configuração padrão.

Quanto à frase de segurança, é recomendável fazer uma. No entanto, se for incômodo ter que digitá-la toda vez que for necessário conectar, deixe em branco.

A forma mais fácil de permitir que a sua máquina conecta a um servidor é importar as chaves dele, digitando o comando:

ssh-copy-id -i ~/.ssh/id_rsa.pub myserver.mynetwork.com

Nesse momento o servidor pedirá a sua senha. Nas próximas conexões será utilizado para autenticação o par de chaves mais a frase de segurança (caso tenha criado uma).

Após ter copiado as chaves acesse a última linha do arquivo de configuração do SSH e altere yes para no, desabilitando a autenticação por senha. Após alterar a configuração, reinicie o serviço para carregá-la.

PasswordAuthentication yes

Essa forma de configuração funciona porque ao copiar as chaves com o comando ssh-copy-id, o que você está fazendo é copiando o conteúdo da chave pública (~/.ssh/id_rsa.pub) na sua máquina local ao final do arquivo ~/.ssh/authorized_keys no arquivo de chaves autorizadas da máquina remota. Com isso o SSH checará que as chaves listadas conferem com as chaves públicas (~/.ssh/id_rsa) e permitirá o acesso.

Com essas configurações o OpenSSH terá a segurança devidamente implementada.

Caso não tenha realizado ainda acesse os seguintes tutoriais para garantir que todas as configurações serão implantadas.

Administração Linux: 01. Configurando o nome do hospedeiro (hostname)

Caso não tenha sido configurado na instalação ao executar hostname no terminal será retornado: localhost.localdomain


Caso queira alterá-lo:


$ hostnamectl set-hostname <novo-nome>

Caso o sistema não esteja na última versão, pode ser que esteja não usando o systemd então é necessário acessar arquivo /etc/hosts:

  • 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
  • ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  • 192.168.25.15 debian10-001

Ao digitar, é mostrado abaixo um exemplo de saída, aonde configurações completas do sistema serão mostradas: 

$ hostnamectl

  • Static hostname: DEBIAN10-PC
  • Icon name: computer-laptop
  • Chassis: laptop
  • Machine ID: 938004c73b414f76976845ea03921ccc
  • Boot ID: 865fce899ec143388c600d9e994bd3b5
  •   Operating System: Debian GNU/Linux 10 (buster)
  • Kernel: Linux 4.19.0-6-amd64
  • Architecture: x86-64
Design a site like this with WordPress.com
Get started