Debugging (Veja também Análise de tráfego)
Linux
# ethtool eth0 # Exibe o status da ethernet (substitui mii-diag) # ethtool -s eth0 speed 100 duplex full # Força o Full duplex de 100Mbit # ethtool -s eth0 autoneg off # Desabilita negociação automática ( auto negotiation) # ethtool -p eth1 # Pisca o led de ethernet - muito útil quando suportado # ip link show # Exibe todas as interfaces no Linux (similar ao ifconfig) # ip link set eth0 up # Traz o dispositivo ao funcionamento (ou derruba-o). O mesmo que "ifconfig eth0 up" # ip addr show # Exibe todos os endereços de IP no Linux (similar ao ifconfig) # ip neigh show # Similar ao arp -a
Outros OSes
# ifconfig fxp0 # Verifica o campo "media" no FreeBSD # arp -a # Verifica a entrada ARP do roteador (ou host) (todos os OS) # ping cb.vu # A primeira coisa a testar... # traceroute cb.vu # Imprime o caminho do roteador para o destino # ifconfig fxp0 media 100baseTX mediaopt full-duplex # 100 Mbit full duplex (FreeBSD) # netstat -s # Estatisticas do System-wide para cada protocolo de rede
Comandos adicionais que não são sempre instalados por padrão, mas fáceis de encontrar:
# arping 192.168.16.254 # Ping na camada Ethernet # tcptraceroute -f 5 cb.vu # utiliza o TCP ao invés do icmp para traçar pelos firewalls
Rotear
Imprimir tabela de roteamento
# route -n # Linux ou utilize o "ip route" # netstat -rn # Linux, BSD e UNIX # route print # Windows
Adicionar e excluir uma rota
FreeBSD
# route add 212.117.0.0/16 192.168.1.1 # route delete 212.117.0.0/16 # route add default 192.168.1.1
Adiciona rota permanentemente em in /etc/rc.conf
static_routes="myroute" route_myroute="-net 212.117.0.0/16 192.168.1.1"
Linux
# route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.16.254 # ip route add 192.168.20.0/24 via 192.168.16.254 # o mesmo que acima com o ip route # route add -net 192.168.20.0 netmask 255.255.255.0 dev eth0 # route add default gw 192.168.51.254 # ip route add default via 192.168.51.254 dev eth0 # o mesmo que acima com o ip route # route delete -net 192.168.20.0 netmask 255.255.255.0
Solaris
# route add -net 192.168.20.0 -netmask 255.255.255.0 192.168.16.254
# route add default 192.168.51.254 1 # 1 = salta para o próximo gateway
# route change default 192.168.50.254 1
Entradas permanentes são configuradas na entrada em /etc/defaultrouter
.
Windows
# Route add 192.168.50.0 mask 255.255.255.0 192.168.51.253 # Route add 0.0.0.0 mask 0.0.0.0 192.168.51.254
Utilize add -p para tornar a rota persistente.
Configurar endereços de IP adicionais
Linux
# ifconfig eth0 192.168.50.254 netmask 255.255.255.0 # Primeiro IP # ifconfig eth0:0 192.168.51.254 netmask 255.255.255.0 # Segundo IP # ip addr add 192.168.50.254/24 dev eth0 # Comandos de ip equivalentes # ip addr add 192.168.51.254/24 dev eth0 label eth0:1
FreeBSD
# ifconfig fxp0 inet 192.168.50.254/24 # Primeiro IP # ifconfig fxp0 alias 192.168.51.254 netmask 255.255.255.0 # Segundo IP # ifconfig fxp0 -alias 192.168.51.254 # Remove o apelido do segundo IP
Entradas permanentes em /etc/rc.conf
ifconfig_fxp0="inet 192.168.50.254 netmask 255.255.255.0" ifconfig_fxp0_alias0="192.168.51.254 netmask 255.255.255.0"
Solaris
Verifica as configurações com o ifconfig -a
# ifconfig hme0 plumb # Habilita a placa de rede # ifconfig hme0 192.168.50.254 netmask 255.255.255.0 up # Primeiro IP # ifconfig hme0:1 192.168.51.254 netmask 255.255.255.0 up # Segundo IP
Altera o MAC address
Normalmente tem se que derrubar a interface antes da alteração. Não me diga o por que você quer deseja alterar o endereço de máquina (MAC address)…
# ifconfig eth0 down # ifconfig eth0 hw ether 00:01:02:03:04:05 # Linux # ifconfig fxp0 link 00:01:02:03:04:05 # FreeBSD # ifconfig hme0 ether 00:01:02:03:04:05 # Solaris # sudo ifconfig en0 ether 00:01:02:03:04:05 # OS X Tiger, Snow Leopard LAN* # sudo ifconfig en0 lladdr 00:01:02:03:04:05 # OS X Leopard
*Interface de rede sem fio típica é en1
e precisa desassociar do qualquer rede primeiro (osxdaily howto).
# echo "alias airport='/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport'"\ >> ~/.bash_profile # ou symlink para /usr/sbin # airport -z # Desassocia das redes sem fio # airport -I # Obter informação da rede sem fio
Muitas ferramentas existem para Windows. Por exemplo etherchangehttp://ntsecurity.nu/toolbox/etherchange. Ou procure por “Mac Makeup”, “smac”.
Portas em uso
Escutar portas abertas:
# netstat -an | grep LISTEN # lsof -i # Lista todas as conexões com a internet no Linux # socklist # Exibe lista de sockets abertos no Linux # sockstat -4 # Lista aplicações no FreeBSD # netstat -anp --udp --tcp | grep LISTEN # Linux # netstat -tup # Lista conexões ativas para/a partir do sistema (Linux) # netstat -tupl # Lista portas que estão sendo escutadas a partir do sistema (Linux) # netstat -ano # Windows
Firewall
Verificar se um firewall está rodando (somente a configuração típica):
Linux
# iptables -L -n -v # Para status Open the iptables firewall # iptables -P INPUT ACCEPT # Abre tudo # iptables -P FORWARD ACCEPT # iptables -P OUTPUT ACCEPT # iptables -Z # Zera o pacote e os contadores de byte em todas as CHAINS # iptables -F # Nivelar todas as CHAINS # iptables -X # Exclui todas as CHAINS
FreeBSD
# ipfw show # para status # ipfw list 65535 # se a resposta for "65535 deny ip from any to any" o fw está desabilitado # sysctl net.inet.ip.fw.enable=0 # Desabilita # sysctl net.inet.ip.fw.enable=1 # habilita
Direcionamento de IP para roteamento
Linux
Verificar e então habilitar o direcionamento de IP com:
# cat /proc/sys/net/ipv4/ip_forward # Verifica o direcionamento de IP 0=off, 1=on
# echo 1 > /proc/sys/net/ipv4/ip_forward
ou editar /etc/sysctl.conf com:
net.ipv4.ip_forward = 1
FreeBSD
Verifique e habilite com:
# sysctl net.inet.ip.forwarding # Verifica o direcionamento de IP 0=off, 1=on # sysctl net.inet.ip.forwarding=1 # sysctl net.inet.ip.fastforwarding=1 # Para roteador ou firewall dedicado Permanent with entry in /etc/rc.conf: gateway_enable="YES" # Define para YES se esse host vai ser um gateway.
Solaris
# ndd -set /dev/ip ip_forwarding 1 # Define o direcionamento do IP 0=off, 1=on
NAT Network Address Translation (Tradução de Endereço de Rede)
Linux
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # para ativar o NAT # iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 20022 -j DNAT \ --to 192.168.16.44:22 # Direcionamento de porta 20022 para porta ssh de IP interno # iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 993:995 -j DNAT \ --to 192.168.16.254:993-995 # Direcionamento de porta com alcance (range) entre 993-995 # ip route flush cache # iptables -L -t nat # Verifica status do NAT
Exclui o direcionamento de porta com o -D ao invés do -A. O programa netstat-nathttp://tweegy.nl/projects/netstat-nat é muito útil para rastrear conexões (ele utiliza /proc/net/ip_conntrack
ou /proc/net/nf_conntrack
).
# netstat-nat -n # Exibe todas as conexões com IPs
FreeBSD
# natd -s -m -u -dynamic -f /etc/natd.conf -n fxp0 Or edit /etc/rc.conf with: firewall_enable="YES" # Define para YES para habilitar a funcionalidade do firewall firewall_type="open" # Tipo de Firewall (veja /etc/rc.firewall) natd_enable="YES" # Habilita natd (se firewall_enable == YES). natd_interface="tun0" # Interface pública ou endereço de IP para utilizar. natd_flags="-s -m -u -dynamic -f /etc/natd.conf"
Port forward with:
# cat /etc/natd.conf
same_ports yes
use_sockets yes
unregistered_only
# redirect_port tcp insideIP:2300-2399 3300-3399 # range de porta
redirect_port udp 192.168.51.103:7777 7777
DNS
Em Unix as entradas de DNS são válidas para todas as interfaces e são armazenadas em /etc/resolv.conf. O domínio para a qual o host pertence também está armazenado nesse arquivo. Uma configuração mínima é:
nameserver 78.31.70.238 search sleepyowl.net intern.lab domain sleepyowl.net
Verificar o nome do domínio com:
# hostname -d # O mesmo que dnsdomainname
Windows
No Windows os DNS estão configurados por interface. Para exibir os DNS configurados e para limpar (flush) o cache de DNS utilize:
# ipconfig /? # Exibir ajuda # ipconfig /all # Veja todas as informações incluindo DNS
Flush DNS
Limpar (flush) o cache de DNS do sistema operacional, algumas aplicações utilizando seu próprio cache (ex. Firefox) e não serão afetados.
# /etc/init.d/nscd restart # Reiniciar nscd se utilizado - Linux/BSD/Solaris # lookupd -flushcache # OS X Tiger # dscacheutil -flushcache # OS X Leopard e mais recentes # ipconfig /flushdns # Windows
Consulta de direcionamento
Dig é seu amigo nos testest de configurações de DNS. Por exemplo o servidor de DNS público 213.133.105.2 ns.second-ns.de
pode ser utilizado para teste. Veja de qual servidor o cliente recebe a resposta (resposta simplificada).
# dig sleepyowl.net sleepyowl.net. 600 IN A 78.31.70.238 ;; SERVER: 192.168.51.254#53(192.168.51.254)
O roteadr 192.168.51.254 respondeu e a resposta é a entrada A. Qualquer entrada pode ser consultada e o servidor DNS pode ser selecionado com @:
# dig MX google.com # dig @127.0.0.1 NS sun.com # Para testar o servidor local # dig @204.97.212.10 NS MX heise.de # Consulta um servidor externo # dig AXFR @ns1.xname.org cb.vu # Obtém a zona completa (zone transfer)
O programa host também é poderoso.
# host -t MX cb.vu # obtém a entrada do mail MX # host -t NS -T sun.com # Obtém registro de NS sobre uma conexão TCP # host -a sleepyowl.net # Obter tudo
Reverter consultas
Encontre um nome pertencente á um endereço de IP (in-addr.arpa.). Isso pode ser feito com dig
, host
e nslookup
:
# dig -x 78.31.70.238 # host 78.31.70.238 # nslookup 78.31.70.238
/etc/hosts
Hosts únicos pode ser configurados no arquivo /etc/hosts ao invés de rodar named
localmente para resolver as consultas de hostname. o formato é simples, por exemplo:
78.31.70.238 sleepyowl.net sleepyowl
A prioridade entre hosts e uma consulta de dns, que é a ordem de resolução de nome, pode ser configurada em /etc/nsswitch.conf
AND /etc/host.conf. O arquivo também existe no Windows, normalmente está em:
C:\WINDOWS\SYSTEM32\DRIVERS\ETC
DHCP
Linux
Algumas distribuições (SuSE) utilizam dhcpcd como cliente. a interface padrão é eth0.
# dhcpcd -n eth0 # Renova (nem sempre funciona) # dhcpcd -k eth0 # libera e derruba
O lease com a informação completa está armazenada em:
/var/lib/dhcpcd/dhcpcd-eth0.info
FreeBSD
FreeBSD (e Debian) utiliza o dhclient. Para configurar uma interface (por exemplo bge0) rode:
# dhclient bge0
O lease com a informação completa está armazenada em:
/var/db/dhclient.leases.bge0
Utilize
/etc/dhclient.conf
to preceder opções ou forçar opções diferentes:
# cat /etc/dhclient.conf interface "rl0" { prepend domain-name-servers 127.0.0.1; default domain-name "sleepyowl.net"; supersede domain-name "sleepyowl.net"; }
Windows
O dhcp lease pode ser renovado com ipconfig
:
# ipconfig /renew # renova todos os adaptadores # ipconfig /renew LAN # renova o adaptador nomeado "LAN" # ipconfig /release WLAN # libera o adaptador nomeado "WLAN"
Sim é uma boa idea nomear seus adaptadores com nomes simples!
Análise de tráfego
Bmonhttp://people.suug.ch/~tgr/bmon/ é um pequeno console monitor de largura de banda e pode exibir o fluxo nas diferentes interfaces.
Sniff com tcpdump
# tcpdump -nl -i bge0 not port ssh and src \(192.168.16.121 or 192.168.16.54\) # tcpdump -n -i eth1 net 192.168.16.121 # seleciona para/de um único IP # tcpdump -n -i eth1 net 192.168.16.0/24 # seleciona tráfego para/de uma rede # tcpdump -l > dump && tail -f dump # Saída em Buffer # tcpdump -i rl0 -w traffic.rl0 # Escreve cabeçalho tráfego em arquivo binário # tcpdump -i rl0 -s 0 -w traffic.rl0 # Escrever tráfego + payload em arquivo binário # tcpdump -r traffic.rl0 # Lê a partir do arquivo (também para ethereal # tcpdump port 80 # Os dois comandos clássicos # tcpdump host google.com # tcpdump -i eth0 -X port \(110 or 143\) # Verifica se pop ou imap é seguro # tcpdump -n -i eth0 icmp # Somente captura pings # tcpdump -i eth0 -s 0 -A port 80 | grep GET # -s 0 para total de pacotes -A para ASCII
Opções adicionais importação:
-A
Printa cada pacote em texto limpo (sem cabeçalho)-X
Printa pacotes em hex e ASCII-l
Faz linha de saída (stdout)em buffer-D
Printa todas a interfaces disponíveis
No Windows usa windump a partir www.winpcap.org. Use o windump -D para listar as interfaces.
Scan com nmap
Nmaphttp://insecure.org/nmap/ é scanner de portas com detecção do OS, é normalmente instalado em muitas distribuições e também está disponível para. Se você não scanear seu servidor, hackers (nota do tradutor: black hats no caso, e não white hats) fazem isso por você…
# nmap cb.vu # scanea todas as portas TCP reservadas no host # nmap -sP 192.168.16.0/24 # Descobre quais IP são utilizados e por qual host no 0/24 # nmap -sS -sV -O cb.vu # Faz um stealth SYN scan com versão e detecção de OS PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 3.8.1p1 FreeBSD-20060930 (protocol 2.0) 25/tcp open smtp Sendmail smtpd 8.13.6/8.13.6 80/tcp open http Apache httpd 2.0.59 ((FreeBSD) DAV/2 PHP/4. [...] Running: FreeBSD 5.X Uptime 33.120 days (since Fri Aug 31 11:41:04 2007)
Outras não padrões, mas ferramentas utei são hping
(www.hping.org) um analizador/assembler (juntador) de pacotes IP e fping
(fping.sourceforge.net). fping pode verificar múltiplos hosts em um estilo round-robin.
Controle de Tráfego (QoS)
Controle de Tráfego gerencia a fila, policiamento, rotina, e outros parâmetros de tráfego para uma rede. Os exemplos a seguir são compatibilidades de usos práticos e simples do Linux e do FreeBSD para melhor uso da largura de banda disponível.
Limit upload
Modens DSL ou cabeados tem uma longa fila para melhorar o rendimento de upload. No entanto encher a fila com um dispositivo rápido (ex. ethernet) diminuirá dramaticamente a interatividade. É logo, util para limitar a taxa de upload do dispositivo para igualar a capacidade do modem, Isso deve melhorar grandemente a interatividade. Define em torno da máxima de 90% da velocidade do modem (cabo).
Linux
Para upload em um modem de 512 Kbit.
# tc qdisc add dev eth0 root tbf rate 480kbit latency 50ms burst 1540 # tc -s qdisc ls dev eth0 # Status # tc qdisc del dev eth0 root # Exclui a fila # tc qdisc change dev eth0 root tbf rate 220kbit latency 50ms burst 1540
FreeBSD
FreeBSD utiliza o dummynet
modelador de tráfego que é configurado com o ipfw. Pipes são utilizados para definir os limites da largura de banda em unidades de [K|M]{bit/s|Byte/s}, 0 significa largura de banda ilimitada. Utilizando o mesmo número pipe configurá-lo. Por exemplo, limitar a largura de banda de upload para 500 Kbit.
# kldload dummynet # carrega o módulo se necessário # ipfw pipe 1 config bw 500Kbit/s # cria um pipe com a largura de banda limitada # ipfw add pipe 1 ip from me to any # desvia o upload total para dentro do pipe
Qualidade de serviço
Linux
Fila de prioridade com o tc
para otimizar o VoIP. Veja o exemplo todo em voip-info.org ou www.howtoforge.com. Suponhamos que o VoIP utiliza udp nas portas 10000:11024 e o dispositivo eth0 (poderia ser também ppp0 ou outro). Os comandos a seguir definem o QoS para três filas e força o VoIP a trafegar para a fila 1com o QoS 0x1e
(todos os bits definidos). A configuração padrão flui dentro da fila 3 e o QoS Minimize-Delay flui na fila 2.
# tc qdisc add dev eth0 root handle 1: prio priomap 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 0 # tc qdisc add dev eth0 parent 1:1 handle 10: sfq # tc qdisc add dev eth0 parent 1:2 handle 20: sfq # tc qdisc add dev eth0 parent 1:3 handle 30: sfq # tc filter add dev eth0 protocol ip parent 1: prio 1 u32 \ match ip dport 10000 0x3C00 flowid 1:1 # utiliza o range de porta do servidor match ip dst 123.23.0.1 flowid 1:1 # ou/e utiliza o IP do servidor
Status e remover com
# tc -s qdisc ls dev eth0 # status de fila # tc qdisc del dev eth0 root # exclui todo o QoS
Calcular range de porta e mascara
O tc filter define o range da porta com porta e mascara que você tem que calcular. Encontre o 2^N ending do range da porta, deduza o range e converta para HEX. Essa é a sua máscara. Exemplo para for 10000 -> 11024, o range é 1024.
# 2^13 (8192) < 10000 < 2^14 (16384) # Final é 2^14 = 16384 # echo "obase=16;(2^14)-1024" | bc # mascara é 0x3C00
FreeBSD
O link máximo de largura de banda é de 500 Kbit/s e definimos 3 filas com prioridade 100:10:1 para VoIP:ssh:all the rest.
# ipfw pipe 1 config bw 500Kbit/s # ipfw queue 1 config pipe 1 weight 100 # ipfw queue 2 config pipe 1 weight 10 # ipfw queue 3 config pipe 1 weight 1 # ipfw add 10 queue 1 proto udp dst-port 10000-11024 # ipfw add 11 queue 1 proto udp dst-ip 123.23.0.1 # ou/e utiliza IP do servidor # ipfw add 20 queue 2 dsp-port ssh # ipfw add 30 queue 3 from me to any # todo o resto
Status e remover com
# ipfw list # status de regras # ipfw pipe list # status do pipe # ipfw flush # exclui todas as regras, menos a padrão
Debugar o NIS
Algums comando que dever funcionar em um cliente NIS bem configurado:
# ypwhich # obtém o nome do servidor NIS conectado # domainname # O nome do domínio NIS como está configurado # ypcat group # deve exibir o grupo a partir do servidor NIS # cd /var/yp && make # Reconstrói a base de dados do yp # rpcinfo -p servername # Reporta os serviços RPC do servidor
O ypbind está rodando?
# ps auxww | grep ypbind /usr/sbin/ypbind -s -m -S servername1,servername2 # FreeBSD /usr/sbin/ypbind # Linux # yppoll passwd.byname Map passwd.byname has order number 1190635041. Mon Sep 24 13:57:21 2007 The master server is servername.domain.net.
Linux
# cat /etc/yp.conf ypserver servername domain domain.net broadcast
Netcat
Netcathttp://netcat.sourceforge.net (nc) é melhor conhecido como o “Canivete Suíço de Rede”, ele pode manipular, criar ou ler/escrever conexões TCP/IP. Aqui alguns exemplos úteis, há muitos mais na net, por exemplo g-loaded.eu[…]http://www.g-loaded.eu/2006/11/06/netcat-a-couple-of-useful-examples e aquihttp://www.terminally-incoherent.com/blog/2007/08/07/few-useful-netcat-tricks.
Você pode precisar usar o comando netcat
ao inves do nc
. Veja também o comando similar socat.
Transferência de arquivo
Cópia um diretório grande através de uma conexão tcp bruta. A transferência é bem rápida (sem sobrecarga de protocolo) e você não precisa bagunçar com NFS ou SMB ou FTP ou outros, simplesmente torne o arquivo disponível no servidor, e ser obtido a partir do cliente. Aqui 192.168.1.1 é o endereço de Ip do servidor.
server# tar -cf - -C VIDEO_TS . | nc -l -p 4444 # Serve o arquivo tar na porta 4444 client# nc 192.168.1.1 4444 | tar xpf - -C VIDEO_TS # Puxa o arquivo na porta 4444 server# cat largefile | nc -l 5678 # Serve um único arquivo client# nc 192.168.1.1 5678 > largefile # Puxa um único arquivo server# dd if=/dev/da0 | nc -l 4444 # Imagem da partição do servidor client# nc 192.168.1.1 4444 | dd of=/dev/da0 # Puxa partição para clonagem client# nc 192.168.1.1 4444 | dd of=da0.img # Puxa partição para o arquivo
Outras hacks
Especialmente aqui, você deve saber o que está fazendo.
Shell Remoto
Opção -e somente na versão do Windows? Ou utilize nc 1.10.
# nc -lp 4444 -e /bin/bash # Provê um shell remoto (backdoor de servidor) # nc -lp 4444 -e cmd.exe # shell remoto para Windows
Servidor web de emergência
Serve um único arquivo na 80 em um laço (loop).
# while true; do nc -l -p 80 < unixtoolbox.xhtml; done
Chat
Alice e Bob podem bater-papo (chat) sobre um simples socket TCP. O texto é transferido com a tecla enter.
alice# nc -lp 4444 bob # nc 192.168.1.1 4444