Guto Carvalho # 2022-21-08 @ BSB
Guto Carvalho # 2022-21-08 @ BSB

O que significa ter uma base sólida em redes?

by

Qual o objetivo desse post?

Às vezes lemos em vagas ou ouvimos em palestras que é necessário ter uma base sólida em redes e sistemas operacionais para atuar com Cloud ou DevOps, contudo, isso pode ser vago e sem contexto para a maioria.

Quando falamos de redes estamos falando de um vasto CONTINENTE de conceitos e tecnologias, neste post vamos arranhar – de leve – a superfície desse continente, acredite.

Aqui reunimos quais os conhecimentos de REDE necessários no dia-a-dia, e podemos dizer que eles podem ser considerados uma “BASE SÓLIDA” de alguém que está pronto para atuar em projetos no mercado profissional.

Esperamos que as pessoas possam avaliar se já conhecem os temas, ou o quanto conhecem dos temas ou então, encontrar em que nível de conhecimento estão e caso não conheçam algo, podem colocar o assunto no seu ToDo para estudar.

Neste post nós não devemos entrar em questões e termos de cloud providers, vamos tentar focar no que é comum em todos eles.

A ideia desse post surgiu após o post do GOMEX sobre os primeiros passos para entrar no mundo DevOps.

Nosso desejo é fazer os seguintes posts de forma coletiva:

  • O que é ter uma base sólida em redes;
  • O que é ter uma base sólida em linux;
  • O que é ter uma base sólida em git;
  • O que é ter uma base sólida em shell.

E quem sabe podemos entrar em Python, Ruby e Go. Se tiver gente que manje e queria compartilhar eu ajudo a escrever :)

Se quiser ajudar comenta aí ou me chama no twitter :)

Momento Merchan :P

Me siga no twitter @gutocarvalho e acompanhe meus posts sobre Cloud Native e CI/CD.

Aproveite e siga a CD Foundation e Cloud Native Foundation no twitter.

Para quem foi feito esse post?

Aqui o foco está nas pessoas atuando nas posições abaixo:

  • Sysadmin;
  • Cloud Native Engineer;
  • Cloud Engineer;
  • DevOps Engineer;
  • Plataform Engineer;
  • GitOps Engineer.

Como entender as indicações do texto?

Aqui vamos usar alguns termos simples

  • Conheça, se usado indica uma leitura de alto nível do assunto.
  • Entenda, se usado indica que deve estudar a fundo, instalar e testar, se possível.
  • Aprenda, vai lá e usa de verdade

O que eu vou encontrar aqui?

Vamos falar desde redes, protocolos, modelos, tecnologias, métodos, técnicas, ferramentas e poderemos tocar em alguns aspectos do Sistema Operacional Linux também.

Nosso foco aqui é Open Source, Open Standards e sistemas Linux e Unix Like.

No primeiro momento vamos indicar alguns links para você iniciar seus estudos, os esforços estarão centrados nisso, com o tempo vamos expandir esses links.

Eu já conheço quase tudo, o que isso significa?

De pronto eu posso dizer:

  • Significa que você tem uma base sólida nesta área de redes, significa que você consegue se sair bem reuniões que envolvam o tema, conseguindo falar a mesma língua das pessoas presentes e consegue colaborar com todos;
  • Significa que você consegue construir e desenhar projetos levando em conta aspectos fundamentais de redes;
  • Significa que você consegue fazer troubleshooting de forma efetiva.

E o que mais?

  • Significa também que é hora de ir além :)
  • Significa que pode contribuir com o post, mas só se quiser :P
  • Se você tem todos esses skills, certamente é uma pessoa que eu gostaria de trabalhar junto ;)

Conheça os colaboradores do post

Pessoas que colaboraram com o texto.

  • Rafael Gomex (@gomex)
  • Rafael Silva (@rafaotetra)
  • Saulo Madalozzo (@madalozzo)

Esse documento será atualizado regularmente?

A ideia é essa, acompanhe pelo histórico de revisões.

Histórico de revisões

  • 2022-03-10
    • Atualizada a seção Network
    • Atualizada a seção de CertManager/LetsEncrypt
    • Atualizada a seção Redes Linux
      • Atualizada a seção Interfaces de rede
      • Atualizada a seção Iptables
    • Atualizada a seção NTP
    • Atualizada a seção VPN
    • Atualizada a seção Materiais complementares
      • Atualizada a seção Load Balancer
      • Atualizada a seção Reverse Proxy
    • Links adicionados na parte de Network
    • Links adicionados na parte de modelo OSI
    • Links adicionados na parte de DNS
    • Links adicionados em protocolos de rede
    • Links adicionados em conceitos de rede
    • Links adicionados em DHCP 2022-03-09
    • Primeira versão

Tabela de conteúdo

Entenda o que é network

  • Entendenda redes
    • Entender o que é uma rede e para que serve
    • Entender o que é um IP e para que serve
    • Entender o que é uma máscara de rede e para que serve
    • Entender o que é uma sub-rede e paera que server
      • Entender as classes de rede A, B, C, D, E
      • Entender e conhecer as redes reservadas
      • Entender o que é localhost
    • Conheça a conversao binária para endereços IP
    • Aprender a usar calculadora de redes
  • Conhecer Organizações
    • Conhecer a IETF
    • Conhecer a IRTF
    • Conhecer a IANA
    • Conhecer a EFF
    • Conhecer a ICANN
  • Conhecer padrões de documentação
    • RFC

Definições

Organizações

Documentos

Youtube

Ferramentas

Videos Professor Paulo Kretcheu

Entenda o modelo OSI

  • Entenda o modelo
    • Entenda as camadas
    • Conheça os principais protocolos de cada camada
    • Entenda que é apenas uma referência e nunca foi implementado
    • Entenda que ainda assim é a referência mais utilizada

Definições

Videos Professor Paulo Kretcheu

Entenda o modelo TCP/IP

  • Entenda o modelo
    • Entenda as camadas
    • Conheça os principais protocolos de cada camada
    • Entença que foi o modelo que se tornou padrão e ganhou o mercado
    • Entenda que toda a internet roda em cima dele :)

Entenda os protocolos de rede mais importantes

  • IP
    • Entenda IPv4
      • Entenda o 3 Way Handshake
    • Entenda IPSEC
    • Entenda IPv6
  • TCP
    • Entenda seus benefícios e drawbacks
    • Entenda IANA e Portas
    • Entenda o processo de handshake
  • UDP
    • Entenda seus benefícios e drawbacks
  • ICMP
    • Entenda seus benefícios e para que serve
  • ARP
    • Entenda para que serve e como funciona

IP

TCP

UDP

ICMP

ARP

Videos Prof. Paulo Kretcheu

Entenda os conceitos de rede mais importantes

Entenda formas de comunicação

  • Entenda o que é unicast
  • Entenda o que é broadcast
  • Entenda o que é multicast
  • Entenda o que é anycast
  • Entenda a diferença entre unicast e multicast

Entenda NAT

  • Entenda o que é para que serve?
  • Entenda o que é PAT e qual a diferença pro nat?

Entenda essa tal de VLAN, 802.1Q (alto nível)

  • Entenda o que é VLAN
  • Entenda para que usamos uma VLAN e sua importância

Videos Prof. Paulo Kretcheu

Entenda DHCP

  • Entenda para que serve o DHCP
  • Entenda como funciona o DHCP
  • Entenda o dhcp process (discovery, offer, request, ack )
  • Entenda o dhcp lease
  • Entenda como configurar um interface de rede para uso de DHCP
    • ambiente debian-like
    • ambiente redhat-like
  • Conheça e veja um arquivo de configuração de algum dhcp server.

Videos Prof. Paulo Kretcheu

Entenda DNS

DNS Fundamentos

  • Entenda para que serve o DNS
  • Entenda como funciona a infraestrutura de DNS
  • Conheça as RFCs 1034 e 1035
  • Entenda a relação da IANA e DNS
  • Entenda a relação da ICANN e DNS

DNS estrutura

  • Entenda uma árvore de DNS
  • Entenda o que são os RootServers
  • Entenda como funciona a DNS Database
  • Entenda o que é um Registrar de DNS

DNS Domínios

  • Entenda o que é um TLDN
  • Entenda o que é um FQDN

DNS como serviço

  • Entenda o que é um servidor de autoridade DNS
  • Entenda o que é um servidor de cache de DNS
  • Entenda o que é pesquisa recursiva e como funciona
  • Entenda o que é uma zonas de DNS
  • Entenda o que é TTL de uma zona
  • Entenda o que são registros de DNS
  • Entenda quais são os tipos de registro de DNS
  • Entenda o que é um DNS Reverso e IP Reverso

DNSSEC

  • Entenda o que faz e como faz

DNS no Brasil

  • Conheça o NIC.Br
  • Entenda o Registro.Br

Principais implementações de serviços de DNS

  • Conheça Projeto BIND
  • Conheça Projeto PowerDNS
  • Conheça Projeto UnBound DNS

Troubleshooting

  • Aprenda a usar DIG para fazer troubleshooting de DNS
  • Aprenda a usar NSLOOKUP para fazer troubleshotting de DNS

Arquivos importantes no SO para lidar com DNS

  • Entenda o arquivo /etc/hosts
  • Entenda o arquivo /etc/resolv.conf
  • Entenda o arquivo /etc/nsswitch.conf

Definições principais

Definições sobre infraestrutura de DNS

Definições sobre domínios

Implementações mais comuns de serviço de DNS

Implementações de DNS para Kubernetes

Entidades que administram DNS no Brasil

RFCs

Videos Prof. Paulo Kretcheu

Entenda os protocolos de serviços para WEB

Entenda e conheça o protocolos para web

  • HTTPv1
    • Conheça os principais códigos de retorno do HTTP
      • 404 not-found
      • 503 service unavailable
      • 200 ok
    • Conheça os grupo de códigos HTTP
      • 500-599 erros do servidor
      • 400-499 erros do cliente
      • 300-399 redirecionamentos
      • 200-299 repostas de sucesso
      • 100-199 repostas de informacao
    • Entenda os principais verbos ou métodos HTTP
      • GET
      • POST
      • PUT
      • DELETE
  • HTTPv2
    • Entenda o que mudou
    • Entenda no que você precisa ficar mais atento
  • HTTPS
    • Entenda Como funciona
    • Entenda por que é importante
    • Entenda como implementar em seu projeto e infra

Entenda Transport Layer Security ou TLS

  • Entenda para que serve
  • Entenda como funciona
  • Entenda a diferença de SSL para TLS

Entenda o que são certificados

  • Entenda para que servem certificados
  • Entenda o que é uma CA
  • Entenda o que é um certificado wildcard
  • Entenda o que é um certificado auto assinado

Aprenda trabalhar com openssl

  • Entenda como criar certificados auto assinados
  • Entenda como ler informações de certificados

Aprenda a trabalhar com letsencrypt e certbot

  • Entenda o projeto letsencrypt
  • Entenda o certbot
    • Entenda como gerar certificados standalone
      • Entenda como gerar um certificado simples
      • Entenda como gerar um certificado wildcard
    • Entenda como gerar um certificado usando DNS
      • Aprenda a usar o plugin CloudFlare
      • Aprenda a usar o plugin Route53
      • Aprenda a usar o plugin GCP
  • Entenda como usar certbot com webservers
    • Aprenda a usar o plugin para NGINX
    • Aprenda a usar o plugin para Apache HTTPd
    • Aprenda a usar o plugin para HAPROXY
  • Entenda como renovar certificados
  • Entenda como automatizar a renovação de certificados
  • Entenda o cert-manager

Implementações de TLS

LetsEncrypt, Certbot e Cert-Manager

Entenda o NTP

  • Entenda o que é o Network time Protocol ou NTP
    • Conheça as principais implementações do NTP server
      • Conheça o timesyncd (parte do projeto systemd)
      • Conheça o chrony (usado em redhat systems)
      • Conheça o ntpd (ntp.org)
    • Conheça o principal cliente NTP, ntpdate
    • Entenda o que é timezone e sua ligação com NTP

Comparações entre implementações NTP

Entenda o network filesystem ou NFS

  • Entenda o que é o NFS
  • Entenda para que serve o NFS
  • Entenda como montar um volume NFS
  • Conheça um servidor NFS e seu arquivo de configuração

Conheça e entenda o protocolo LDAP de autenticação

  • Entenda o que é o LDAP
  • Entenda para que serve o LDAP
  • Entenda como integrar sua ferramenta a um serviço LDAP
  • Entenda como integrar seu Linux com um serviço LDAP

Entenda o protocolo SSH para acesso remoto

  • Entenda o que é SSH e para que ele serve
    • Entenda o funcionamento do SSH Client
      • Conheça um arquivo de config exemplo
    • Entenda o funcionamento do SSH Server
      • Conheça um arquivo de config exemplo
    • Entenda o funcionamento do comando SCP
    • Entenda o funcionamento do SFTP
    • Entendo o funcionamento do RSYNC com SSH
    • Entenda o funcionamento do Tuneling
    • Entenda o funcionamento do Port Forward
    • Entenda o funcionamento do X Forward
    • Entenda o funcionamento do Jump Server
    • Entenda o conceito de Bastion Host

Conheça os protocolos de correio mais comuns

  • Entendo o protocolo de envio ou SMTP
  • Entenda o protocolo de acesso ao correio ou IMAP
  • Entenda o protocolo de download de mensagens de correio ou POP

conheça soluções de segurança para correio eletrônico

  • Entenda a política de proteção de envios SPF
  • Entenda a proteção de domínios DKIM
  • Entenda a proteção DMARC

Protocolos

Segurança no correio

Dicas do Antispam[.]br

Entenda o que é VPN

  • Entenda o que é uma vpn?
  • Entenda para que serve?
  • Entenda os tipos mais comuns
    • Entenda o tipo REMOTE ACCESS
    • Entenda o tipo POINT TO POINT
    • Entenda o tipo IPSEC

Aprenda a trabalhar com openvpn

  • Entenda o uso de um cliente cli openvpn
  • Conheça exemplo de config de servidor openvpn

Aprenda a trabalhar com wireguard

  • Entenda o uso de um cliente cli wireguard
  • Conheça exemplo de config de servidor wireguard

Aprenda a trabalhar com ipsec

  • Entenda o que preciso saber sobre ipsec
  • Conheça os projetos e implementações mais importantes
    • Conheça o projeto openswan
    • Conheça o projeto strongswan
    • Conheça o projeto libreswan

Definição

Protocolos

Projetos de VPN que implementam PPTP e L2TP

Projetos de VPN que implementam IPSEC

Redes no Linux

Entenda configuração de redes no linux

  • Entenda o que são interfaces ethernet
    • Entenda que é mac address
    • Entenda os tipos de configuração de interface
      • Entenda como criar uma interface BOND
      • Entenda como criar uma interface BRIDGE
      • Entenda como criar uma interface VLAN
      • Entenda como criar uma interface VIRTUAL
      • Entenda como criar uma interface LOOPBACK
  • Entenda como configurar interfaces
    • Entenda a configuração em sistemas debian like
    • Entenda a configuração em sistemas redhat like
    • Entenda a configuração usando netplan
  • Entenda como usar ferramentas
    • Aprenda a usar o ifconfig, netstat
    • Aprenda a usar o ip, ss
    • Aprenda a usar o ethtool

Entenda roteamento no Linux

  • IP ROUTE
    • Entenda como funciona
    • Entenda como ver rotas
    • Entenda como criar rotas
    • Entenda como deletar rotas
    • Entenda como ver e criar tabelas e rotas para tabelas
    • Entenda como persistir rotas de forma estática

Entenda filtro de pacotes no linux

  • IPTABLES Packet Filter
    • Entenda para que serve e como funciona
    • Entenda a tabela filter
      • Entenda a cadeia foward
      • Entenda a cadeia ouput
      • Entenda a cadeia input
    • Entenda a tabela nat
      • Entenda cadeia prerouting
      • Entenda cadeia forwarding
      • Entenda cadeia output
      • Entenda cadeia postrouting
      • Aprenda a fazer um DNAT
      • Aprenda a fazer um SNAT
      • Aprenda a fazer um Redirect
      • Aprenda a fazer um Masquerade
    • Entenda tabela Mangle
      • Aprenda a marcar pacotes para roteamento
    • Conheça a tabela RAW
    • Conheça a tabela Security

Docker

  • Entenda a relação entre Iptables e Docker

Básicos

Avançados

Entenda técnicas e ferramentas de troubleshooting

Testando a conectividade

  • Aprenda a usar netcat para testes de conectividade
  • Aprenda a usar telnet para testes de conectividade
  • Aprenda a usar CURL e WGET para interagir com sites
  • Aprenda a usar CURL e WGET para fazer download

Analisando tráfego

  • Aprenda a usar tcpdump
  • Aprenda a usar wireshark e tshark

Redes no Linux

  • Aprenda a ver portas abertas e portas listen
  • Aprenda a ver conexões estabelecidas
  • Aprenda como encontrar processo que abriu uma porta
  • Aprenda a usar o PING
  • Aprenda a usar o Traceroute
  • Aprenda a usar o MTR

Material complementar

Assuntos com conexão direta e indireta com redes

Entenda o que é um Load Balancer

  • Entenda o que faz um Load Balancer?
    • Entenda Load Balancer HTTP (camada 7)
    • Entenda Load Balancer TCP (camada 4)
    • Entenda estratégias de LB
      • Entenda RoudRobin
      • Entenda Weighted Round Robin
      • Entenda Least Connection
      • Entenda IP HASH
      • Entenda o conceiro de Stick Session
  • Qual a diferença entre um LB 4 e 7?

Entenda o que é um Reverse Proxy

  • Entenda o que faz e para que serve?
  • Entenda Qual sua relacao com load balancers?
  • Exemplos
    • Config no NGINX
    • Config no HAPROXY

Entenda o que é High Availbility

  • Entenda o que é HA (high availbility) ?
  • Entenda quando usar

Entenda o que é Escalabilidade

  • Entenda o que significa escalar?
  • Entenda o que é escalabilidade horizontal?
  • Entenda o que é escalabilidade vertical?

Elasticidade

  • Entenda o que significa?

Entenda o que são APIs

  • Entender o que são ENDPOINTS
  • Entender o que é REST
  • Conheça o que é SOAP
  • Usando CURL para consumir uma API

Entenda o que é cloud-init

  • Entenda o que é e para que serve
  • Entenda como funciona
  • Aprenda a usar

Outras coisas que vale a pena ler

  • zeroconf
  • bonjour

Termos comuns para entender

Comuns

  • Bastion host
  • Jump /Jump Server
  • Redirect
  • Nat
  • Masquerede
  • Timezone
  • VPN
  • WebService

Erros e problemas

  • Time Out/Timed out
  • DOS
  • DDOS
  • Outage
  • Unavailable

Não tão comuns

  • MTTR
  • IaC
  • SDN

Termos especiais

  • Gambeta/Gambiarra/Solução Extraordiária Temporária #SQN :P
  • POG

Amarrando as pontas

Esse post é uma tentativa de dar um norte ou um caminho para se tornar uma pessoa sólida em redes, entendendo quais são os aspectos fundamentais e necessários para o dia-a-dia na vida profissional.

Se você conseguir ler, estudar, pesquisar e responder as perguntas, entender, conhecer e aprender os assuntos, estará no caminho certo.

Aquele abraço!

Mando aquele abraço para o professor MESTRE Ulysses Almeida (@ulyssesalmeida) que me ensinou boa parte destes conceitos no início desse século.

Mando aquele abraço para o Pizza (José Pissin) que me apresentou o Software Livre e isso mudou a minha vida.

Mando aquele abraço pro @gomex e @badtux que via exemplo me fazem contribuir mais e mais e mais :)

Mando aquele abraço para todos que leram, comentaram, revisaram e contribuiram de alguma forma com esse post!

[s]
Guto

Este post é do tipo #TLDR, entenda aqui.

Se gostou manda um alo no twitter @gutocarvalho ou deixa um comentário bacana :)