O que significa ter uma base sólida em redes?
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.
Eu vou encontrar links para todos os assuntos?
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
- O que é ter uma base sólida em redes?
- TOC
- Entenda o que é network
- Entenda o modelo OSI
- Entenda o modelo TCP/IP
- Entenda protocolos de rede mais importantes
- Entenda os conceitos de rede mais importantes
- Entenda DHCP
- Entenda DNS
- Entenda os protocolos de serviços para WEB
- Entenda Transport Layer Security ou TLS
- Entenda o que são certificados
- Entenda o NTP
- Entenda o network filesystem ou NFS
- Conheça e entenda o protocolo LDAP de autenticação
- Entenda o protocolo SSH para acesso remoto
- Conheça os protocolos de correio mais comuns
- Entenda o que é VPN
- Redes no linux
- Assuntos complementares
- Termos comuns para entender
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
links
Definições
- Computer Network - Wikipedia #EN_US
- Classeful network - Wikipedia #EN_US
- Subnet - Wikipedia #EN_US
- Internetworking - Wikipedia #EN_US
- Internet - Wikipedia #EN_US
- Host - Wikipedia #EN_US
- Localhost - Wikipedia #EN_US
Organizações
- Internet Engineering Task Force ou IETF - Wikipedia #EN_US
- Internet Research Task Force ou IRTF - Wikipedia #EN_US
- Internet Assigned Numbers Authority ou IANA - Wikipedia #EN_US
- Internet Corporation for Assigned Names and Numbers ou ICANN - Wikipedia #EN_US
- Eletronic Frontier Foundation ou EFF - Wikipedia #EN_US
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
links
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 :)
links
Entenda os protocolos de rede mais importantes
- IP
- Entenda IPv4
- Entenda o 3 Way Handshake
- Entenda IPSEC
- Entenda IPv6
- Entenda IPv4
- 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
links
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
links
- Unicast - Wikipedia #EN_US
- Broadcast - Wikipedia #EN_US
- Multicast - Wikipedia #EN_US
- Anycast - Wikipedia #EN_US
- Network Address Translation - Wikipedia #EN_US
- Virtual Lan - Wikipedia #EN_US
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.
links
- Dynamic Host Configuration Protocol ou DHCP - Wikipedia #EN_US
- DHCPv6 - Wikipedia #EN_US
- DHCP Servers Comparison - Wikipedia #EN_US
- RFC 2131 - DHCP
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
links
Definições principais
- Domain Name System ou DNS - Wikipedia #EN_US
- Domain Name - Wikipedia #EN_US
- Domain Name System Security ou DNSSEC - Wikipedia #EN_US
Definições sobre infraestrutura de DNS
- DNS Root Zone - Wikipedia #EN_US
- DNS Zone - Wikipedia #EN_US
- Root Name Server - Wikipedia #EN_US
- Authoritative Name Server - Wikipedia #EN_US
- Caching Name Server - Wikipedia #EN_US
- Public Recursive Name Server - Wikipedia #EN_US
- Domain Name Registrar - Wikipedia #EN_US
- DNS Record Types - Wikipedia #EN_US
Definições sobre domínios
- Top Level Domain - Wikipedia #EN_US
- Fully Qualified Domain Name - Wikipedia #EN_US
- Generic Top-Level Domain - Wikipedia #EN_US
- Country Code Top Level Domain - Wikipedia #EN_US
Implementações mais comuns de serviço de DNS
- Projeto BIND - Wikipedia #EN_US
- Projeto PowerDNS - Wikipedia #EN_US
- Projeto UnboundDNS - Wikipedia #EN_US
- DNS Server comparison - Wikipedia #EN_US
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
- Conheça os principais códigos de retorno do HTTP
- 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
links
- World Wide Web - Wikipedia #EN_US
- Hypertext Transfer Protocol - Wikipedia #EN_US
- Hypertext Transfer Protocol Secure - Wikipedia #EN_US
- HTTP Overview - Mozilla #EN_US
- HTTP Codes - Wikipedia #EN_US
- W3.ORG
- HTTP v1 Methods - W3.ORG #EN_US
- HTTP v2 - Wikipedia #EN_US
- RFC 2616 - HTTP V1
- RFC 7540 - HTTP V2
Entenda Transport Layer Security ou TLS
- Entenda para que serve
- Entenda como funciona
- Entenda a diferença de SSL para TLS
links
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 gerar certificados standalone
- 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
links
- Public Key Certificate - Wikipedia #EN_US
- Public Key Infrastructure X.509 Standard - Wikipedia #EN_US
- Certificate Authority - Wikipedia #EN_US
- Wildcard Certificate - Wikipedia #EN_US
- TLS Implementation Comparison - Wikipedia #EN_US
- RFC 5280 - Public Key Infrastructure X.509
Implementações de TLS
- Projeto OpenSSL - Wikipedia #EN_US
- Projeto LibreSSL - Wikipedia #EN_US
- Projeto GnuTLS - Wikipedia #EN_US
- Projeto WolfSSL - Wikipedia #EN_US
- Projeto BoringSSL do Google
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
- Conheça as principais implementações do NTP server
links
- Network time protocol ou NTP - Wikipedia #EN_US
- Coordinated Universal Time ou UTC - Wikipedia #EN_US
- Clock Sync - Wikipedia #EN_US
- Timezones - Wikipedia #EN_US
- RFC 5905 - NTPv4
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
links
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
links
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
- Entenda o funcionamento do SSH Client
links
- Secure Shell - Wikipedia #EN_US
- SSH Servers comparison - Wikipedia #EN_US
- SSH Clients comparison - Wikipedia #EN_US
- OpenSSH Project
- RFC 4254 - SSH
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
links
Protocolos
- Simple Mail Transfer protocol ou SMTP - Wikipedia #EN_US
- Internet Message Access protocol ou IMAP - Wikipedia #EN_US
- Post Office Protocol ou POP - Wikipedia #EN_US
Segurança no correio
- DomainKeys Identified Mail ou DKIM - Wikipedia #EN_US
- Sender Policy Framework ou SPF - Wikipedia #EN_US
- Domain-based Message Authentication, Reporting and Conformance - Wikipedia #EN_US
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
links
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
links
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?
links
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 :)