Cheatsheet de comandos de redes no Linux

Verificando conexões com um computador remoto em uma porta (TCP e UDP)

Usando netcat (já pré instalado na maioria dos Linux)

Verificando se a conexão do host para um pc remoto está ok usando a linha de comando com netcat/nc:

# -v = verbose, mostra mais output# -z = envia um pacote vazio, apenas vê se existe alguem escutando# Use o parâmetro -n para não usar DNS# Use o parâmetro -w  para definir o tempo de timeout# Testa a conexão com a porta 80netcat -v google.com 80# testa a conexão entre a porta 1 e a porta 1000 TCP (port scanning)netcat -v domain.com 1-1000# -u tenta conexão entre a porta 1 e a porta 100 UDPnetcat -z -u -v domain.com 1-1000

Referências
https://www.digitalocean.com/community/tutorials/how-to-use-netcat-to-establish-and-test-tcp-and-udp-connections-on-a-vps

https://www.computerhope.com/unix/nc.htm

Usando nmap (precisa instalar)

Instale o nmap:

sudo apt install nmap

Comandos interessantes:

# Escaneando todas as portas TCP abertas de um computador ou vários computadores usando só o começo, SYN, do three-way-handshake. Ele não chega a fazer o handshake completo.# Esse método requer que os alvos estejam abertos para receber pacotes ICMP, isso porque o ICMP acelera o processo de escanemaneto dos hosts.sudo nmap -sS  #Escaneando todas as portassudo nmap -sS -v 192.168.88.1 # Para ver o que está acontecendo em tempo real "verbose"sudo nmap -sS  -p 80sudo nmap -sS  -p 80,443,1234 # Escaneando várias portas# Para fazer o three-way-handshake completo, substitua o -sS por -sT. Nesse modo não precisamos de sudo pois o pacote não precisa ser forjado.nmap -sT nmap -sT  -p 80,443,1234# Para utilizar TCP puro, útil em casos onde o ICMP está bloqueado use o parâmetro -Pn# Os pacotes demorarão mais tempo para ocorrer mas funcionam puramente com TCP.sudo nmap -sS -Pn nmap -sT -Pn 

Conexão com servidor usando SSL/TLS (TCP)

Usando openssl (nativo, geralmente)

Uma forma de testar conexão com um servidor usando SSL/TLS é usar o openssl:

openssl s_client -connect google.com:443

Usando nmap (precisa instalar)

Verificando conexões conexões abertas no seu computador

Comando ss (nativo)

Comando netstat (nativo)

Comando tcptrack (precisa instalar)

Comando iftop (precisa instalar)

Referências
https://computingforgeeks.com/how-to-check-tcp-connections-states-in-linux-with-netstat/

https://www.cyberciti.biz/faq/check-network-connection-linux/

Descobrindo quais portas estão abertas no seu Computador

Comando lsof

# para instalarsudo apt install lsof# comandossudo lsof -isudo lsof -i -P -nsudo lsof -i -P -n | grep LISTEN

Comand netstat

# yum install net-tools     [On CentOS/RHEL]# apt install net-tools     [On Debian/Ubuntu]# zypper install net-tools  [On OpenSuse]# pacman -S netstat-nat     [On Arch Linux]

# Linuxsudo netstat -tulpnnetstat -tulpn | grep LISTENsudo netstat -lptusudo netstat -lptu | grep LISTEN# ou...sudo ss -tulwsudo ss -tulwn# Windowsnetstat -bano | morenetstat -bano | grep LISTENINGnetstat -bano | findstr /R /C:"[LISTENING]"# OpenBSDnetstat -na -f inet | grep LISTENnetstat -nat | grep LISTEN#FreeBSD/MacOSnetstat -anp tcp | grep LISTENnetstat -anp udp | grep LISTEN

Comando nmap

sudo nmap -sT -O localhostsudo nmap -sU -O 192.168.2.13 ##[ list open UDP ports ]##sudo nmap -sT -O 192.168.2.13 ##[ list open TCP ports ]### Ou listar TCP/UDP tudo juntosudo nmap -sTU -O 192.168.2.13

Referências

Artigos do Cyberciti
https://www.cyberciti.biz/faq/unix-linux-check-if-port-is-in-use-command/
https://www.cyberciti.biz/faq/how-to-check-open-ports-in-linux-using-the-cli/
https://www.cyberciti.biz/tips/linux-display-open-ports-owner.html

Artigo maketecheasier
https://www.maketecheasier.com/check-open-ports-linux/

Descobrindo conexões SSH abertas no Linux
https://www.golinuxcloud.com/list-check-active-ssh-connections-linux/

Cheats com SSH

Criando túnel SSH

ssh [email protected] -L 8080:server1.example.com:3000

Agora é possível acessar, a partir do computador local usando localhost:8080, o endereço server1.example.com:3000 do computador remoto.

Extra - Usando o mesmo IP ou hostname para acessar o endereço desejado

Algumas páginas web (conexão HTTP ou HTTPS) usam o IP ou hostname (DNS) digitado no browser como garantia de que a conexão não esteja sendo passada por um tunel. Isso é comum com Modens 3g/4g, por exemplo.

Para falsear um DNS é fácil, basta alterar o arquivo /etc/hosts e colocar lá o endereço desejado

Para falsear um IP, você precisará usar o iptables.
No exemplo abaixo fazemos todos pacotes direcionados ao IP 192.168.1.1 na porta 80 TCP serem redirecionados ao localhost (127.0.0.1) na porta 80

sudo iptables -t nat -I OUTPUT --dst 192.168.1.1 -p tcp --dport 80 -j REDIRECT --to-ports 80

Ou para redirecionar todas as portas:

sudo iptables -t nat -A OUTPUT -d 192.168.1.1 -j DNAT --to-destination 127.0.0.1

Lembre-se que ao criar um túnel apontando para a porta 80 localhost, você precisa criá-lo com sudo (pois a porta 80 é especial):

sudo ssh [email protected] -L 80:192.168.1.1:80

Para ver e excluir a regra de NAT no iptables:

# Ver regras cadastradas com seus númerossudo iptables -t nat -L -- # Anote o nome da CHAIN e o numero da linha e substitua-o no comando para apagar a regra# https://www.svennd.be/remove-iptables-prerouting-nat-rule/sudo iptables -t nat -D OUTPUT 1

Criando túnel reverso SSH

ssh [email protected] -R 8080:localhost:3000

Agora é possível acessar, a partir do computador remoto usando localhost:8080, o endereço localhost:3000 do computador local .

Permitindo servidor SSH acessar cliente SSH

Referências
https://www.tecmint.com/create-ssh-tunneling-port-forwarding-in-linux/

Fazendo proxy dinâmico SOCKS com OpenSSH

ssh -D 1080 [email protected]

Entrar no navegador, configurar o proxy com SOCKS.

Usar!

Referências
https://www.tecmint.com/create-ssh-tunneling-port-forwarding-in-linux/

https://www.digitalocean.com/community/tutorials/how-to-route-web-traffic-securely-without-a-vpn-using-a-socks-tunnel

DNS

Utilizando o DNS para obter um IP

host google.com.brdig google.com.brnslookup google.com.br

Quais servidores DNS estão sendo utilizados?

# Funciona se o systemd-resolve estiver sendo usado para gerenciar o DNSsystemd-resolve --status# Oucat /etc/resolv.conf# Se estiver usando o NetworkManager, veja ele aquinmcli device show | grep DNS# Outra forma de ver com o NetworkManager Ubuntu>= 15nmcli device show  | grep IP4.DNS# Outra forma de ver com o NetworkManager Ubuntu<= 14nmcli device list iface  | grep IP4

# Como fazer uma consulta DNS usando um servidor específico?dig @8.8.8.8 google.com.brdig @1.1.1.1 cade.com.br

Descobrindo servidores de DNS na rede com nmap (precisa instalar)

Descobrindo servidores DNS na rede com NMAP

sudo nmap --script broadcast-dhcp-discover

Ferramentas do pacote dnsutils (vale a pena instalar)

sudo apt install dnsutils# Isso habilitará os comandos# dig# nslookup

Detectando atividade de DNS com tcpdump

# Verificando todas as interfacestcpdump -nt udp port 53# Limitando a uma interfacetcpdump -nt -i eth0 udp port 53

Referência
https://nil.uniza.sk/using-tcpdump-diagnostics-dns-debian/

Referências
https://wiki.archlinux.org/index.php/Domain_name_resolution

Rotas e Roteamento

Qual caminho um pacote fará para chegar até seu destino? Por qual interface? Por qual ip?

Usando traceroute

# instalando traceroutesudo apt install traceroute# Usando traceroute com pacotes UDP (modo legado)traceroute website.com# Usando traceroute com pacotes ICMP (método semelhante usado pelo windows, tracert). Se você consegue fazer ping no computador de destino, esse é recomendadosudo traceroute -I website.com# Usando traceroute com pactoes TCP, por padrão, na porta 80.# Usa o método half-open, onde manda um pacote SYN e não responde maissudo traceroute -T website.comsudo traceroute -T -p 443 website.com# Usando traceroute com pacotes UDPtraceroute -U website.com# Usando traceroute com pacotes UDP na porta 53traceroute -UL website.com

Referências

Manual do traceroute
https://linux.die.net/man/8/traceroute

Tutorial do traceroute - How to Geek
https://www.howtogeek.com/657780/how-to-use-the-traceroute-command-on-linux/

Usando ip route

# Usando ip route# essa solução funciona apenas para endereços de IP (não DNS)ip route get 200.200.200.200

You should also read:

Cheatsheet de Wireshark

Se você está vasculhando pacotes diferentes de HTTP e HTTPS, o Wireshark possivelmente é capaz de abrir, mas é preciso informar a ele…

Ffmpeg Cheatsheet

Split video without transcoding ffmpeg -i INFILE.mp4 -vcodec copy -acodec copy -ss 00:01:00.000 -t 00:00:10.000 OUTFILE.mp4 Rotate video Example "D:\ProgramasPortable\Media Softwares\ffmpeg-4.1.1-win64-static\bin\ffmpeg.exe" -i "S:\VID_20200307_213049.mp4"…