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 80 netcat -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 UDP netcat -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 portas sudo nmap -sS -v 192.168.88.1 # Para ver o que está acontecendo em tempo real "verbose" sudo nmap -sS -p 80 sudo 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 # comandos sudo lsof -i sudo lsof -i -P -n sudo 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 -tulpn netstat -tulpn | grep LISTEN sudo netstat -lptu sudo netstat -lptu | grep LISTEN # ou... sudo ss -tulw sudo ss -tulwn # Windows netstat -bano | more netstat -bano | grep LISTENING netstat -bano | findstr /R /C:"[LISTENING]" # OpenBSD netstat -na -f inet | grep LISTEN netstat -nat | grep LISTEN #FreeBSD/MacOS netstat -anp tcp | grep LISTEN netstat -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 junto sudo 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.br nslookup google.com.br
Quais servidores DNS estão sendo utilizados?
# Funciona se o systemd-resolve estiver sendo usado para gerenciar o DNSsystemd-resolve --status # Ou cat /etc/resolv.conf # Se estiver usando o NetworkManager, veja ele aqui nmcli device show | grep DNS # Outra forma de ver com o NetworkManager Ubuntu>= 15 nmcli device show | grep IP4.DNS # Outra forma de ver com o NetworkManager Ubuntu<= 14 nmcli device list iface | grep IP4
# Como fazer uma consulta DNS usando um servidor específico?dig @8.8.8.8 google.com.br dig @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 interface tcpdump -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 é recomendado sudo 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 mais sudo traceroute -T website.com sudo traceroute -T -p 443 website.com # Usando traceroute com pacotes UDP traceroute -U website.com # Usando traceroute com pacotes UDP na porta 53 traceroute -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