Comandos do Linux e Unix: Sistema; Processos; Sistema de Arquivos; Rede; SSH SCP; VPN com SSH; RSYNC; SUDO; Arquivos Encriptados; Partições Encriptadas; Certificados SSL; CVS; SVN; Comando Úteis; Instalar Software; Converter Mídia; Impressão; Banco de Dados; Quota de Disco; Shells; Scripting; Programação

Comandos de Rede Linux

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

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *