quinta-feira, 3 de dezembro de 2015

Curso "Firewall Linux com IPTables: 10 HORAS"

Montei um curso de iptables do tipo video-aula para a escola Linux Solution. Nele abordo os seguintes tópicos: 


  • O que é um protocolo
  • Modelo OSI x Modelo TCP
  • Revisão do TCP/IP
  • Endereços privados
  • Máscara de subrede
  • IPv4 x IPv6
  • Portas TCP/UDP/ICMP
  • Funcionamento de um firewall
  • Funcionamento do iptables
  • Especificando IP de origem e destino
  • Especificando o tipo de protocolo
  • Trabalhando com a chain FORWARD
  • Especificando as interfaces nas regras de firewall
  • Criando chains personalizadas
  • NAT (Network Address Translator)
  • Tabela mangle
  • Priorizando um tipo de dado
  • Roteamento dinâmico
  • Salvando e restaurando as regras
  • Módulos adicionais
  • Log do iptables
  • Administração gráfica do iptables

Quem tiver interesse em fazer o treinamento pode ver mais detalhes no link abaixo.


quinta-feira, 26 de novembro de 2015

Estatísticas do uso de memória e disco com vmstat

vmstat é uma das mais tradicionais ferramentas para analisar o uso de memória, disco e I/O no Linux. Seu uso é simples.

$ vmstat 
procs -----------memory---------- ------------swap-- -----io---- -system-- ------cpu-----
 r   b  swpd  free           buff       cache      si  so      bi  bo       in   cs       us  sy  id   wa st
 0  0         0  1290852  168412  2444644  0  0        15 1         23  13       6   2    90  1   0

Nesta tela vemos que temos 1290852 de memória livre (1,2Gb), não estou usando memória virtual e o processador está com 6% de processamento.

Com a opção "-a" vemos a memória ativa e inativa.

$ vmstat -a
procs -----------memory---------- ------------swap-- -----io---- -system-- ------cpu-----
r   b   swpd   free          inact       active       si   so    bi    bo   in   cs       us  sy  id  wa  st
1  0          0   1308492 1566532  3565632  0    0     15    1    22    9       6    2   90  1    0


Com "-d" vemos o uso do disco.

$ vmstat -d
disk- ------------reads----------------------- ------------writes----------------------------------- -----IO------
        total       merged  sectors       ms            total         merged    sectors        ms               cur  sec
sda  859697  191835   43159119  8098016  6628179  2719813  174504051 969743840  0     20324
sr0   0            0            0                0               0              0              0                 0                  0     0

No caso improvável da tua distribuição não ter o vmstat você pode instalá-lo com o comando abaixo.

# apt-get install procps

quinta-feira, 19 de novembro de 2015

Sexta edição do Fórum Brasileiro de IPv6

"A sexta edição do Fórum Brasileiro de IPv6 acontece no dia 9 de dezembro (quarta-feira) com a proposta de apresentar o andamento das ações de implantação do novo protocolo no Brasil e no mundo. O estoque central de endereços IPv4 na América Latina e Caribe esgotou-se no dia 10 de junho do ano passado, entrando na fase de “terminação gradual”. Neste ano, o estoque está quase entrando na última fase de esgotamento, situação que só permitirá a novos membros a aquisição de endereços IPv4. Tendo em vista isso, muitos provedores já começaram a implantar IPv6 em 2015, fazendo com que o Brasil alcançasse patamares expressivos no tráfego do IPv6 ! O ano de 2016 promete ser marcado por mais avanços significativos na adoção do IPv6 no país!"

Quem quiser participar (presencial ou on-line) basta de inscrever gratuitamente no site http://ipv6.br/post/sexta-edicao-do-forum-brasileiro-de-ipv6/

Pena que eu não estarei em São Paulo neste dia!

quarta-feira, 18 de novembro de 2015

Medindo o desempenho da rede com Iperf

O Iperf é uma ferramenta simples para medir o desempenho da rede, ou de um servidor. Seu uso é simples:

$ iperf -p 80 -c 172.20.1.82
------------------------------------------------------------
Client connecting to 172.20.1.82, TCP port 80
TCP window size: 43.8 KByte (default)
------------------------------------------------------------
[  3] local 172.20.120.4 port 35177 connected with 172.20.1.82 port 80
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.01 GBytes   871 Mbits/sec

Com o comando acima eu testo o desempenho do servidor web 172.20.1.82.

Pesquise outras opções com iperf --help. O Iperf está disponível na maioria das distribuições Linux e, no Debian, pode ser instalado com o comando:

# apt-get install iperf

* Artigo publicado em 04/11/2011. Atualizado e corrigido.

terça-feira, 17 de novembro de 2015

Dificuldades para calcular sub-redes? Use IPCalc

Quem administra uma rede de computadores de vêz em quando se vê as voltas com endereçamentos de rede, máscaras de sub-rede e roteamentos. Principalmente quando sua empresa recebe um bloco de endereços públicos e a operadora diz algo assim:


  • Rede: 200.136.27.0/25
  • Gateway: 200.136.27.1


e seu chefe diz: Precisamos dividir isso em 8 sub-redes. Então você, administrador de rede, precisa calcular onde cada rede começa e onde termina, quais os endereços de rede e broadcast, quantos hosts cabem em cada sub-rede, etc.

Para facilitar isso foi criado o IPCalc. No Debian ele pode ser instalado via apt-get.

Para resolver o caso acima, basta chamar o ipcalc que ele de mostra as configurações e limites de cada sub-rede. Digite:

$ ipcalc 200.136.27.0/25 28
Address:   200.136.27.0         11001000.10001000.00011011.0 0000000
Netmask:   255.255.255.128 = 25 11111111.11111111.11111111.1 0000000
Wildcard:  0.0.0.127            00000000.00000000.00000000.0 1111111
=>
Network:   200.136.27.0/25      11001000.10001000.00011011.0 0000000
HostMin:   200.136.27.1         11001000.10001000.00011011.0 0000001
HostMax:   200.136.27.126       11001000.10001000.00011011.0 1111110
Broadcast: 200.136.27.127       11001000.10001000.00011011.0 1111111
Hosts/Net: 126                   Class C

Subnets after transition from /25 to /28

Netmask:   255.255.255.240 = 28 11111111.11111111.11111111.1111 0000
Wildcard:  0.0.0.15             00000000.00000000.00000000.0000 1111

 1.
Network:   200.136.27.0/28      11001000.10001000.00011011.0000 0000
HostMin:   200.136.27.1         11001000.10001000.00011011.0000 0001
HostMax:   200.136.27.14        11001000.10001000.00011011.0000 1110
Broadcast: 200.136.27.15        11001000.10001000.00011011.0000 1111
Hosts/Net: 14                    Class C

 2.
Network:   200.136.27.16/28     11001000.10001000.00011011.0001 0000
HostMin:   200.136.27.17        11001000.10001000.00011011.0001 0001
HostMax:   200.136.27.30        11001000.10001000.00011011.0001 1110
Broadcast: 200.136.27.31        11001000.10001000.00011011.0001 1111
Hosts/Net: 14                    Class C

 3.
Network:   200.136.27.32/28     11001000.10001000.00011011.0010 0000
HostMin:   200.136.27.33        11001000.10001000.00011011.0010 0001
HostMax:   200.136.27.46        11001000.10001000.00011011.0010 1110
Broadcast: 200.136.27.47        11001000.10001000.00011011.0010 1111
Hosts/Net: 14                    Class C

 4.
Network:   200.136.27.48/28     11001000.10001000.00011011.0011 0000
HostMin:   200.136.27.49        11001000.10001000.00011011.0011 0001
HostMax:   200.136.27.62        11001000.10001000.00011011.0011 1110
Broadcast: 200.136.27.63        11001000.10001000.00011011.0011 1111
Hosts/Net: 14                    Class C

 5.
Network:   200.136.27.64/28     11001000.10001000.00011011.0100 0000
HostMin:   200.136.27.65        11001000.10001000.00011011.0100 0001
HostMax:   200.136.27.78        11001000.10001000.00011011.0100 1110
Broadcast: 200.136.27.79        11001000.10001000.00011011.0100 1111
Hosts/Net: 14                    Class C

 6.
Network:   200.136.27.80/28     11001000.10001000.00011011.0101 0000
HostMin:   200.136.27.81        11001000.10001000.00011011.0101 0001
HostMax:   200.136.27.94        11001000.10001000.00011011.0101 1110
Broadcast: 200.136.27.95        11001000.10001000.00011011.0101 1111
Hosts/Net: 14                    Class C

 7.
Network:   200.136.27.96/28     11001000.10001000.00011011.0110 0000
HostMin:   200.136.27.97        11001000.10001000.00011011.0110 0001
HostMax:   200.136.27.110       11001000.10001000.00011011.0110 1110
Broadcast: 200.136.27.111       11001000.10001000.00011011.0110 1111
Hosts/Net: 14                    Class C

 8.
Network:   200.136.27.112/28    11001000.10001000.00011011.0111 0000
HostMin:   200.136.27.113       11001000.10001000.00011011.0111 0001
HostMax:   200.136.27.126       11001000.10001000.00011011.0111 1110
Broadcast: 200.136.27.127       11001000.10001000.00011011.0111 1111
Hosts/Net: 14                    Class C


Subnets:   8
Hosts:     112

Aí estão as 8 redes, cada uma com 14 hosts. 

Se quiser algo mais bonitinho, o ipcalc tem uma página CGI que pode ser acessa pelo endereço http://servidor/cgi-bin/ipcalc.


Também fiz uma calculadora de sub-rede para endereços IPv6. Você pode acessá-la pelos links abaixo.


* Artigo publicado em 31/07/2012. Atualizado e corrigido.

sexta-feira, 6 de novembro de 2015

iptables para IPv6

Ao instalar o iptables você também instala o ip6tables, que nada mais é do que um firewall voltado para o protocolo IPv6. A sintaxe é a mesma do iptables.

Por exemplo, para liberar o ICMP digite o comando:

# ip6tables -A INPUT -p icmpv6 -j ACCEPT

Lembrando que, ao contrário do IPv4, você não pode bloquear todo o tráfego ICMP em uma rede IPv6 pois as resoluções de endereço físico, que eram feitas pelo ARP no IPv4, agora são feitas pelo ICMP no IPv6.

Para habilitar o statefull, digite:

# ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

Liberar o acesso de uma máquina é simples:

# ip6tables -A FORWARD -d 2001:470:db7e:8000::3 -p tcp --dport 80 -j ACCEPT

Como podemos ver, a sintaxe é a mesma, inclusive para a tabela de NAT. Apesar de não ser necessário usar NAT no IPv6 em algumas situações ele pode ser útil, como em técnicas de transição.

quinta-feira, 5 de novembro de 2015

Semana do Linux

Entre os dias 9 e 13 de novembro vai ocorrer a Semana do Linux, um evento on-line com vários palestrantes tratando de assuntos diversos relacionados ao Linux, como redes, infraestrutura, Android, programação, Web e segurança.


No dia 10, às 16:30, haverá uma palestra minha tratando do IPv6, o novo protocolo da internet, mostrando conceitos, práticas e os problemas que estou enfrentando na adoção do protocolo.

Quem quiser participar do evento pode se inscrever gratuitamente no site abaixo.



quarta-feira, 4 de novembro de 2015

Lançamento do meu livro

Como havia informado, no último dia 3 de novembro a Novatec lançou o meu livro "Administração de redes Linux'.


Esse livro é baseado na vasta coleção de artigos, dicas e posts que publiquei ao longo de quase 10 anos. A idéia surgiu na época da faculdade e só agora se torna relalidade.

Quem quiser saber mais detalhes do livro é só clicar no link abaixo.



quarta-feira, 28 de outubro de 2015

300 artigos!

Após quase 5 anos escrevendo cheguei a 300 artigos. E para comemorar fiz uma modificação na cara do blog.

Alguns artigos são complexos, outros mais simples como uma dica, mas sempre mostrando como você pode aproveitar melhor a tua disribuição Linux. Alguns destes artigos já foram usados como resposta em vários fóruns. Outros foram republicados em outros sites (alguns sem que eu soubesse). Outros viraram apostilas para treinamentos diversos. Fiz até uma coletânea que vai virar um livro a ser lançado em breve pela editora Novatec. Aguardem!

Mas o mais importante é que esse material está sendo útil para várias pessoas, e isso é o que importa! 

quinta-feira, 15 de outubro de 2015

Administração dos módulos do kernel

O kernel (núcleo do sistema operacional) do Linux é modular, ou seja, trabalha com componentes que podem ou não estar carregados. Módulos podem habilitar suporte a algum hardware, habilitar funções especiais ou melhorar a segurança do sistema. Desabilitando os módulos sem uso torna o kernel mais enxuto, podendo ser usado em máquinas menos potentes.

Os módulos ficam instalados na pasta /lib/modules/<kernel>/kernel

$ ls /lib/modules/3.16.0-4-686-pae/kernel/
arch  crypto  drivers  fs  lib  mm  net  sound

Em cada pasta há centenas de módulos. Para listar o módulos atualmente carregados na memória use o comando lsmod.

$ lsmod
Module                   Size  Used by
nls_utf8               12416        0 
nls_cp437            12417        0 
vfat                      16967        0 
fat                        52647        1 vfat
...

Nesta listagem temos os módulos carregados e suas dependências. Por exemplo, o módulo vfat depende do módulo fat. Não é possível retirar o módulo fat sem antes retirar o vfat.

Vamos fazer uma demonstração retirando o módulos que controla a placa de rede. Primeiramente temos que descobrir qual é o módulos usado pela nossa interface.

$ dmesg  | grep eth
[    1.349952] e1000e 0000:00:19.0 eth0: registered PHC clock
[    1.349957] e1000e 0000:00:19.0 eth0: (PCI Express:2.5GT/s:Width x1) 50:e5:49:fc:de:9b
[    1.349959] e1000e 0000:00:19.0 eth0: Intel(R) PRO/1000 Network Connection
[    1.350007] e1000e 0000:00:19.0 eth0: MAC: 10, PHY: 11, PBA No: FFFFFF-0FF
[   11.915452] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   15.036594] e1000e: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[   15.036631] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[   69.254588] device eth0 entered promiscuous mode

Vemos que o módulo da placa de rede é o e1000e. Agora, como root, executamos o comando rmmod.

# rmmod e1000e

Agora a interface de rede não está mais disponível.

$ ifconfig eth0
eth0: erro obtendo informações da interface: %s: dispositivo não encontrado

Vamos recarregar o módulo.

# insmod e1000e
insmod: ERROR: could not load module e1000e: No such file or directory

O erro ocorre porque o insmod precisa do endereço completo do arquivo de módulo. Para saber onde o arquivo se encontra podemos usar o comando modinfo, que também fornece outras informações sobre um módulo.

$ modinfo e1000e
filename:       /lib/modules/3.16.0-4-686-pae/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
version:        2.3.2-k
license:        GPL
description:    Intel(R) PRO/1000 Network Driver
author:         Intel Corporation, <linux.nics@intel.com>
srcversion:     95081067188F78203E7ECF8
alias:          pci:v00008086d000015B8sv*sd*bc*sc*i*
alias:          pci:v00008086d000015B7sv*sd*bc*sc*i*
alias:          pci:v00008086d00001570sv*sd*bc*sc*i*
alias:          pci:v00008086d0000156Fsv*sd*bc*sc*i*
alias:          pci:v00008086d000015A3sv*sd*bc*sc*i*
alias:          pci:v00008086d000015A2sv*sd*bc*sc*i*
alias:          pci:v00008086d000015A1sv*sd*bc*sc*i*
alias:          pci:v00008086d000015A0sv*sd*bc*sc*i*
...
alias:          pci:v00008086d0000105Fsv*sd*bc*sc*i*
alias:          pci:v00008086d0000105Esv*sd*bc*sc*i*
depends:        ptp
intree:         Y
vermagic:       3.16.0-4-686-pae SMP mod_unload modversions 686 
parm:           debug:Debug level (0=none,...,16=all) (int)
parm:           copybreak:Maximum size of packet that is copied to a new buffer on receive (uint)
parm:           TxIntDelay:Transmit Interrupt Delay (array of int)
parm:           TxAbsIntDelay:Transmit Absolute Interrupt Delay (array of int)
parm:           RxIntDelay:Receive Interrupt Delay (array of int)
parm:           RxAbsIntDelay:Receive Absolute Interrupt Delay (array of int)
parm:           InterruptThrottleRate:Interrupt Throttling Rate (array of int)
parm:           IntMode:Interrupt Mode (array of int)
parm:           SmartPowerDownEnable:Enable PHY smart power down (array of int)
parm:           KumeranLockLoss:Enable Kumeran lock loss workaround (array of int)
parm:           WriteProtectNVM:Write-protect NVM [WARNING: disabling this can lead to 
corrupted NVM] (array of int)
parm:           CrcStripping:Enable CRC Stripping, disable if your BMC needs the CRC (array of int)

Agora, com o caminho completo do arquivo, podemos carregar o módulo logado como root.

# insmod /lib/modules/3.16.0-4-686-pae/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko

E agora temos a interface de rede novamente.

# ifconfig eth0
eth0      Link encap:Ethernet  Endereço de HW 50:e5:49:fc:de:9b  
          inet end.: 172.20.120.4  Bcast:172.20.255.255  Masc:255.255.0.0
          endereço inet6: 2001:470:db7e:0:8000::1/64 Escopo:Global
          endereço inet6: fe80::52e5:49ff:fefc:de9b/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:343124704 errors:407 dropped:0 overruns:0 frame:272
          TX packets:13277281 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000 
          RX bytes:59616917901 (55.5 GiB)  TX bytes:1435011340 (1.3 GiB)
          IRQ:20 Memória:fe400000-fe420000 

Se tentarmos remover um módulo que outros módulos dependam dele teremos uma mensagem de erro. 

# rmmod fat
rmmod: ERROR: Module fat is in use by: vfat

Neste caso temos que remover primeiro o módulo vfat para depois remove o fat

# rmmod vfat
# rmmod fat

Agora, para recarregar o módulo vfat temos que primeiro carregar o módulo fat. Ou podemos usar o comando modprobe para carregar o módulo junto com suas dependências. 

# modprobe vfat
# lsmod  | grep fat
vfat                   16967  0 
fat                     52647  1 vfat

Reparem que, diferentemente do comando insmod, modprobe não precisa no endereço completo do arquivo de módulo. Você também pode remover um módulo usando "modprobe -r".

Uma listagem de módulos e suas dependências está no arquivo /lib/modules/3.16.0-4-686-pae/modules.dep. Para vermos as dependências relacionadas ao módulo fat digitamos:

$ grep fat /lib/modules/3.16.0-4-686-pae/modules.dep
kernel/fs/fat/fat.ko:
kernel/fs/fat/vfat.ko: kernel/fs/fat/fat.ko
kernel/fs/fat/msdos.ko: kernel/fs/fat/fat.ko

Podemos notar que os módulos vfat e msdos dependem do módulo fat.

quinta-feira, 8 de outubro de 2015

Inkscape, programa de desenho vetorial

Segundo a própria documentação do programa:

"Inkscape é um editor de ilustração que possui tudo o que é necessário para criar desenhos com qualidade profissional. Você pode utilizá-lo para criar diagramas, ilustrações, desenhos técnicos, gráficos para a web, clip art, ícones e logotipos. Uma coleção de tutoriais práticos mostram como combinar linhas, formas e textos de diferentes tipos e estilos para criar uma figura.

Uma seleção de poderosas ferramentas de edição de gráficos vetoriais está diponível por padrão. Há um excelente suporte para caminhos, gradientes, camadas, transparência alfa e controle de fluxo de texto. Uma extensa biblioteca de filtros permite que você aplique efeitos realistas e extensões permitem que você trabalhe com bitmaps, código de barras, impressão de marcas dentre outras coisas.

São suportados a maioria dos formatos vetoriais comuns incluindo arquivos em PDF, Adobe Illustrator e AutoCAD. O Inkscape possui um suporte incomparável para gráficos web no padrão SVG."


O Inkscape é um dos softwares mais utilizados para criação de desenhos vetoriais e contém várias ferramentas interessantes.

Para instalá-lo, nas distribuições Linux baseadas em Debian, digite o famoso "apt-get install inkscape".

quarta-feira, 7 de outubro de 2015

Tem dúvidas sobre um comando?

Além da vasta documentação existente em páginas de manual, fóruns e comunidades na internet sobre os comandos do Linux há também o programa info.

Digite "info" antes de qualquer comando que você terá uma descrição sobre ele. info pode trazer exemplos de uso do comando além de outras informações que as páginas de manual não trazem.

Por exmplo, para ter uma ajuda sobre o comando "dd" digite:

$ info dd

segunda-feira, 5 de outubro de 2015

Estatísticas de rede com ifstat

O programa ifstat é ótimo para ver de forma online como estão as interfaces de rede no que diz respeito ao download e upload de dados.

Para instalá-lo use:

# apt-get install ifstat

Seu uso é simples. Basta digitar o comando passando "-a" como parâmetro para mostrar os dados de todas as interfaces.

$ ifstat -a
        lo                          eth0                             eth1      
 KB/s in   KB/s out    KB/s in   KB/s out    KB/s in  KB/s out
   927.83     927.83    2808.16    7165.52    7147.57   2213.80
 1462.99   1462.99    2871.27    5219.12    5217.93   2355.21
 1552.99   1552.99    2221.81    7943.48    7928.80   1651.37
 1797.99   1797.99    1875.98    4431.78    4461.20   1312.80
 1785.94   1785.94    2260.76    6935.33    6837.54   1716.26
 1556.27   1556.27    2305.75  10295.63  10265.04   1749.11
 1218.54   1218.54    2495.21    8426.51    8388.47   1907.51
 1412.53   1412.53    2203.23    3878.96    3805.40   1606.59
 1724.88   1724.88    2108.79    3065.37    3049.91   1584.52
 1904.21   1904.21    2035.68    4292.38    3783.56   1505.63
 2534.54   2534.54    2225.66    5805.82    5645.50   1673.03
 1496.73   1496.73    2059.95    6998.29    6922.70   1491.80
 2038.61   2038.61    2121.71    4985.27    4879.74   1620.98
 2285.01   2285.01    2503.31    7688.86    7701.65   1926.83
 2753.78   2753.78    2347.53    6013.30    5902.92   1760.96
 2729.05   2729.05    2114.76  10035.34  10072.93   1612.32
 2443.32   2443.32    2295.35    9228.05    9239.88   1751.52
 3334.26   3334.26    2031.68    3971.51    3974.47   1528.43
 1907.00   1907.00    2495.21    7763.01    7460.65   1997.91
 1942.95   1942.95    2519.77    6173.28    6276.35   2029.58
 1846.70   1846.70    2911.25    3885.63    3634.37   2350.52
 1633.02   1633.02    2722.14    7003.83    5225.66   2079.18
^C

Os dados são mostrados as cada segundo e os valores estão em Kbytes. Para outras opções você pode consultar a página de manual digitando:

$ man ifstat

sexta-feira, 2 de outubro de 2015

Exemplo de uso do comando ifconfig

Apesar de não ser mais recomendado o uso do comando "ifconfig" no Linux (dê preferência ao comando "ip"), seu uso para administrar as configurações de rede ainda é muito difundido. Neste artigo  vou descrever os principais exemplos de uso do ifconfig.

Para listar as interfaces digite:

$ ifconfig
eth0      Link encap:Ethernet  Endereço de HW 50:e5:49:fc:de:9b
          inet end.: 172.20.120.4  Bcast:172.20.255.255  Masc:255.255.0.0
          endereço inet6: 2001:470:db7e:0:8000::1/64 Escopo:Global
          endereço inet6: fe80::52e5:49ff:fefc:de9b/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:1085395808 errors:573 dropped:0 overruns:0 frame:390
          TX packets:48841639 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000
          RX bytes:140423994889 (130.7 GiB)  TX bytes:11754979934 (10.9 GiB)
          IRQ:20 Memória:fe400000-fe420000

lo        Link encap:Loopback Local
          inet end.: 127.0.0.1  Masc:255.0.0.0
          endereço inet6: ::1/128 Escopo:Máquina
          UP LOOPBACKRUNNING  MTU:65536  Métrica:1
          RX packets:4957670 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4957670 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:0
          RX bytes:740981008 (706.6 MiB)  TX bytes:740981008 (706.6 MiB)

Para ver todas as interfaces de rede, inclusive as que não estão em uso, digite:

$ ifconfig -a

Para ver as configurações de uma única interface é só passar o nome dela como parâmetro.

$ ifconfig eth0
eth0      Link encap:Ethernet  Endereço de HW 50:e5:49:fc:de:9b  
          inet end.: 172.20.120.4  Bcast:172.20.255.255  Masc:255.255.0.0
          endereço inet6: 2001:470:db7e:0:8000::1/64 Escopo:Global
          endereço inet6: fe80::52e5:49ff:fefc:de9b/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:1085463928 errors:573 dropped:0 overruns:0 frame:390
          TX packets:48842438 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000 
          RX bytes:140430606152 (130.7 GiB)  TX bytes:11755089960 (10.9 GiB)
          IRQ:20 Memória:fe400000-fe420000 

Para baixar uma interface digite:

# ifconfig eth0 down

Para levantá-la use:

# ifconfig eth0 up

Só lembrando que levantar uma interface com "ifconfig" não vai fazer o roteamento ser configurado. Neste caso é também necessário usar o comando "route".

Para configurar um IP manualmente use o seguinte comando:

# ifconfig eth0 172.20.120.45 netmask 255.255.0.0

Você também pode levantar outros IPs em interfaces virtuais.

# ifconfig eth0:1 172.20.45.45 netmask 255.255.0.0
# ifconfig
eth0      Link encap:Ethernet  Endereço de HW 50:e5:49:fc:de:9b
          inet end.: 172.20.120.4  Bcast:172.20.255.255  Masc:255.255.0.0
          endereço inet6: 2001:470:db7e:0:8000::1/64 Escopo:Global
          endereço inet6: fe80::52e5:49ff:fefc:de9b/64 Escopo:Link
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          RX packets:49050651 errors:585 dropped:0 overruns:0 frame:391
          TX packets:1729648 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000
          RX bytes:5815050436 (5.4 GiB)  TX bytes:439443643 (419.0 MiB)
          IRQ:20 Memória:fe400000-fe420000

eth0:1   Link encap:Ethernet  Endereço de HW 50:e5:49:fc:de:9b
          inet end.: 172.20.45.45  Bcast:172.20.255.255  Masc:255.255.0.0
          UP BROADCASTRUNNING MULTICAST  MTU:1500  Métrica:1
          IRQ:20 Memória:fe400000-fe420000

lo        Link encap:Loopback Local
          inet end.: 127.0.0.1  Masc:255.0.0.0
          endereço inet6: ::1/128 Escopo:Máquina
          UP LOOPBACKRUNNING  MTU:65536  Métrica:1
          RX packets:59191 errors:0 dropped:0 overruns:0 frame:0
          TX packets:59191 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:0
          RX bytes:8481802 (8.0 MiB)  TX bytes:8481802 (8.0 MiB)


terça-feira, 29 de setembro de 2015

Tomada de decisão em script bash

O linguagem de script bash é bem completa. Há comandos para praticamente tudo. E como qualquer linguagem de programação não podia ficar sem os blocos de decisão "if".

A sintaxe do "if" é simples, mas nada melhor do que ver na prática.

#!/bin/bash
if [ $USER == "root" ]
then
    echo "Você é o root"
    comandos_para_root
fi

O script acima checa se quem está executando o script é o root. Agora com o uso da cláusula "else" você pode tomar caminhos diferentes no fluxo do programa.

#!/bin/bash
if [ $USER == "root" ]
then
    echo "Você é o root"
    comandos_para_root
else
    echo "Você não é o root"
    comandos_para_nao_root
fi

Você também pode fazer uma sequência de testes encadeados usando "elif"

#!/bin/bash
if [ $USER == "root" ]
then
    echo "Você é o root"
    comandos_para_root
elif [ $USER == "ricardo" ]
then
    echo "Você é o ricardo"
    comandos_para_ricardo
else
    echo "Você não é o root e nem o ricardo"
    comandos_para_demais
fi

Você pode ter uma infinidade de 'elifs" encadeados. Inclusive pode testar outras condições dentro do mesmo bloco "if/elif/else/fi".

Para mais exemplos de script usando "if" e outros comandos consulte o site http://aurelio.net/shell/canivete/

quinta-feira, 24 de setembro de 2015

Como ver a quais grupos um usuário pertence

Entre as várias formas de checar a quais grupos um usuário pertence, a mais fácil é usando o comando "id".

$ id usuário


Por exemplo

$ id teste
uid=1001(teste) gid=1002(teste) grupos=1002(teste),29(audio),1003(financeiro)


Neste caso, o usuário "teste" tem o grupo padrão "teste" e ainda pertence aos grupos "audio" e "financeiro".

quarta-feira, 23 de setembro de 2015

Por que o Firefox não está nos repositóriso oficias da Debian?

Quem usa Debian já deve ter reparado que não existe Firefox nos repositórios oficiais. No lugar dele há o Iceweasel. Qual o motivo disso?
É simples. A Debian busca ser uma distribuição 100% livre. E o Firefox não é 100% livre. O nome "Firefox" e o Logo não são livres. Por isso a Debian pega o código fonte do Firefox, retira o Logo, muda o nome para Iceweasel, recompila e distribui com sua distribuição.

Tecnicamente falando, o Iceweasel e o Firefox são identicos.

quarta-feira, 16 de setembro de 2015

Testando o desempenho da web com httping

O httping testa a conexão com uma aplicação e mostra o tempo de resposta. Semelhante ao ping, mas ele testa a aplicação e não somente a resposta da interface de rede.

Para entermos melhor, vamos analisar o tempo de resposta do servidor que hospeda o site do Google.

$ ping -c 4 www.google.com
PING www.google.com (173.194.118.52) 56(84) bytes of data.
64 bytes from gru06s10-in-f20.1e100.net (173.194.118.52): icmp_seq=1 ttl=58 time=5.62 ms
64 bytes from gru06s10-in-f20.1e100.net (173.194.118.52): icmp_seq=2 ttl=58 time=7.64 ms
64 bytes from gru06s10-in-f20.1e100.net (173.194.118.52): icmp_seq=3 ttl=58 time=13.5 ms
64 bytes from gru06s10-in-f20.1e100.net (173.194.118.52): icmp_seq=4 ttl=58 time=10.0 ms

--- www.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 5.625/9.207/13.562/2.952 ms

O tempo médio é de 9,2 milésimos de segundo. Agora vamos testar o tempo de resposta do site do Google.

$ httping -c 4 www.google.com
PING www.google.com:80 (www.google.com):
connected to 173.194.118.51:80 (238 bytes), seq=0 time=28.48 ms
connected to 173.194.118.49:80 (238 bytes), seq=1 time=24.45 ms
connected to 173.194.118.48:80 (238 bytes), seq=2 time=17.44 ms
connected to 173.194.118.52:80 (238 bytes), seq=3 time=11.69 ms
--- www.google.com ping statistics ---
4 connects, 4 ok, 0.00% failed, time 3083ms
round-trip min/avg/max = 11.7/20.5/28.5 ms

Reparem que vários IP respondem à solicitação. Isso porque o site do Google não está hospedado em um único servidor. O tempo médio de resposta foi de 21 milisegundos, mas que o dobro do valor mostrado no ping. Isso porque a requisição do httping exige um processamento pela aplicação, o que o ping não exige.

Outro exemplo, vamos comparar o tempo de resposta do site do Google quando acessado por IPv4 e IPv6.

$ httping -c 4  www.google.com
PING www.google.com:80 (www.google.com):
connected to 173.194.118.48:80 (238 bytes), seq=0 time=15.41 ms
connected to 173.194.118.52:80 (238 bytes), seq=1 time=11.78 ms
connected to 173.194.118.50:80 (238 bytes), seq=2 time=12.96 ms
connected to 173.194.118.49:80 (238 bytes), seq=3 time=25.78 ms
--- www.google.com ping statistics ---
4 connects, 4 ok, 0.00% failed, time 3066ms
round-trip min/avg/max = 11.8/16.5/25.8 ms

$ httping -6 -c 4  www.google.com
PING www.google.com:80 (www.google.com):
connected to 2800:3f0:4001:811::1014:80 (788 bytes), seq=0 time=578.46 ms
connected to 2800:3f0:4001:811::1014:80 (788 bytes), seq=1 time=586.94 ms
connected to 2800:3f0:4001:811::1014:80 (788 bytes), seq=2 time=556.28 ms
connected to 2800:3f0:4001:811::1014:80 (788 bytes), seq=3 time=546.82 ms
--- www.google.com ping statistics ---
4 connects, 4 ok, 0.00% failed, time 5269ms
round-trip min/avg/max = 546.8/567.1/586.9 ms

O IPv4 respondeu a uma média de 17 milisegundo, enquanto o tempo médio do IPv6 foi de 570 milisegundos. Isso não significa que o IPv6 é mais lento. Isso pode ser causado por dois fatores:


  1. Estou usando IPv6 através de um túnel 6to4, o que prejudica o desempenho;
  2. As requisições IPv4 passam por um proxy que faz cache, e isso aumenta o desempenho.


Em todo caso, o httping pode ser uma ótima ferramenta para fazer análises de rede e de aplicações servidoras e pode ser instalado com o apt-get.

# apt-get install httping

sexta-feira, 4 de setembro de 2015

Monitoramento de processos com htop

Em todas as distribuições Linux há um utilitário muito conhecido e bastante usado chamado top que permite monitorar, mudar a prioridade, congelar, continuar e matar processos. Mas o Htop possui mais recursos.



Apertando a tecla F2 você pode personalizar a tela para mostrar os dados de várias maneiras, como gráficos de barra (como na imagem acima), valores ou leds, bem como configurar quais informações serão mostradas.

É possível pesquisar por um processo específico, bem como mostrar os processo em cascata, onde fica evidente os processos pai e filhos. Para alterar a prioridade de um processo basta ir até ele com as setas do teclado e clicar em "+" para aumentar o nice (mais lento) e "-" para diminuir o nice (menos lento). Lembre-se que para diminuir o valor de nice é necessário ter permissões de root.

Vejam como ficou a minha tela personalizada.



Para instalar o Htop, basta usar o apt-get

# apt-get install htop

Para executá-lo, digite

# htop

*** Artigo publicado em 13 de julho de 2012 ***

quinta-feira, 3 de setembro de 2015

Como capturar o texto de um site pela linha de comandos

O comando wget, muito conhecido pelos usuários de Linux, permite baixar uma página HTML de um site pela linha de comandos. Seu uso é simples:

$ wget www.ricardo.olonca.nom.br
--2015-09-03 16:27:00--  http://www.ricardo.olonca.nom.br/
Resolvendo www.ricardo.olonca.nom.br (www.ricardo.olonca.nom.br)... 162.243.226.87, 198.199.92.59
Conectando-se a www.ricardo.olonca.nom.br (www.ricardo.olonca.nom.br)|162.243.226.87|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 302 Found
Localização: http://ricardoolonca.blogspot.com.br [redirecionando]
--2015-09-03 16:27:01--  http://ricardoolonca.blogspot.com.br/
Resolvendo ricardoolonca.blogspot.com.br (ricardoolonca.blogspot.com.br)... 2800:3f0:4003:c01::84, 64.233.190.132
Conectando-se a ricardoolonca.blogspot.com.br (ricardoolonca.blogspot.com.br)|2800:3f0:4003:c01::84|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html”

index.html                   [     <=>                          ] 244,18K   173KB/s   em 1,4s   


2015-09-03 16:27:03 (173 KB/s) - “index.html” salvo [250037]

O wget salva o arquivo index.html (você pode digitar a URL inteira para baixar outro arquivo). Porém, esse arquivo contém todas as marcações e tags HTML. Eis um exemplo de como é o arquivo.

$ head index.html
<!DOCTYPE html>
<html class='v2' dir='ltr'>
<head>
<meta content='width=1100' name='viewport'/>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
<script type="text/javascript">(function() { var b=window,f="chrome",g="tick",k="jstiming";(function(){function d(a){this.t={};this.tick=function(a,d,c){var e=void 0!=c?c:(new Date).getTime();this.t[a]=[e,d];if(void 0==c)try{b.console.timeStamp("CSI/"+a)}catch(h){}};this[g]("start",null,a)}var a;b.performance&&(a=b.performance.timing);var n=a?new d(a.responseStart):new d;b.jstiming={Timer:d,load:n};if(a){var c=a.navigationStart,h=a.responseStart;0<c&&h>=c&&(b[k].srt=h-c)}if(a){var e=b[k].load;0<c&&h>=c&&(e[g]("_wtsrt",void 0,c),e[g]("wtsrt_","_wtsrt",h),e[g]("tbsd_","wtsrt_"))}try{a=null,
b[f]&&b[f].csi&&(a=Math.floor(b[f].csi().pageT),e&&0<c&&(e[g]("_tbnd",void 0,b[f].csi().startE),e[g]("tbnd_","_tbnd",c))),null==a&&b.gtbExternal&&(a=b.gtbExternal.pageT()),null==a&&b.external&&(a=b.external.pageT,e&&0<c&&(e[g]("_tbnd",void 0,b.external.startE),e[g]("tbnd_","_tbnd",c))),a&&(b[k].pt=a)}catch(p){}})();b.tickAboveFold=function(d){var a=0;if(d.offsetParent){do a+=d.offsetTop;while(d=d.offsetParent)}d=a;750>=d&&b[k].load[g]("aft")};var l=!1;function m(){l||(l=!0,b[k].load[g]("firstScrollTime"))}b.addEventListener?b.addEventListener("scroll",m,!1):b.attachEvent("onscroll",m);
 })();</script>
<meta content='blogger' name='generator'/>
<link href='http://ricardoolonca.blogspot.com.br/favicon.ico' rel='icon' type='image/x-icon'/>


Se você quiser somente os textos "úteis" sem as tags e marcações você pode usar o programa html2txt que pode ser instalado via apt-get.

# apt-get install html2txt

Após instalar o programa basta executá-lo passando como parámetro o arquivo index.html

$ html2text index.html
****** Informática, Rede, Software Livre ****** 
Neste espaço eu pretendo escrever pequenos artigos, dicas e opiniões sobre Software Livre e Redes, além de comentários pertinentes ao mundo da Informática. 
***** quarta-feira, 2 de setembro de 2015 ***** 
**** Teste_de_rede_com_hping3 **** 
Se você costuma testar a estabilidade da rede usando o ping, experimente o hping3. 
Com o hping3 você pode controlar melhor o uso do ping. Uma opção que costumo usar faz com que centenas de pacotes icmp sejam enviados para o alvo em um segundo. Muito bom para testar a estabilidade da rede, ou para testar o quanto uma máquina aguenta de requisições. Por exemplo, o comando: 
# hping3 -i u1000 8.8.8.8 -c 1000 -1 
envia 1000 pacotes (-c 1000) icmp (-1) para o alvo (8.8.8.8), cada pacote com um intervalo de 1000 microsegundos (-i u1000). Em outras palavras, 1000 "pings" por segundo. O resultado do comando está resumido abaixo. 
HPING 8.8.8.8 (eth0 8.8.8.8): icmp mode set, 28 headers + 0 data bytes 
len=46 ip=8.8.8.8 ttl=57 id=36829 icmp_seq=0 rtt=7.3 ms 
len=46 ip=8.8.8.8 ttl=57 id=36830 icmp_seq=1 rtt=6.3 ms 
len=46 ip=8.8.8.8 ttl=57 id=36832 icmp_seq=3 rtt=4.9 ms 

quarta-feira, 2 de setembro de 2015

Teste de rede com hping3

Se você costuma testar a estabilidade da rede usando o ping, experimente o hping3.

Com o hping3 você pode controlar melhor o uso do ping. Uma opção que costumo usar faz com que centenas de pacotes icmp sejam enviados para o alvo em um segundo. Muito bom para testar a estabilidade da rede, ou para testar o quanto uma máquina aguenta de requisições. Por exemplo, o comando:

# hping3 -i u1000 8.8.8.8 -c 1000 -1

envia 1000 pacotes (-c 1000) icmp (-1) para o alvo (8.8.8.8), cada pacote com um intervalo de 1000 microsegundos (-i u1000). Em outras palavras, 1000 "pings" por segundo. O resultado do comando está resumido abaixo.

HPING 8.8.8.8 (eth0 8.8.8.8): icmp mode set, 28 headers + 0 data bytes
len=46 ip=8.8.8.8 ttl=57 id=36829 icmp_seq=0 rtt=7.3 ms
len=46 ip=8.8.8.8 ttl=57 id=36830 icmp_seq=1 rtt=6.3 ms
len=46 ip=8.8.8.8 ttl=57 id=36832 icmp_seq=3 rtt=4.9 ms
len=46 ip=8.8.8.8 ttl=57 id=36831 icmp_seq=2 rtt=5.9 ms
len=46 ip=8.8.8.8 ttl=57 id=36834 icmp_seq=4 rtt=6.0 ms
len=46 ip=8.8.8.8 ttl=57 id=36833 icmp_seq=5 rtt=5.5 ms
len=46 ip=8.8.8.8 ttl=57 id=36835 icmp_seq=6 rtt=4.5 ms
len=46 ip=8.8.8.8 ttl=57 id=36836 icmp_seq=7 rtt=4.1 ms
(...)
len=46 ip=8.8.8.8 ttl=57 id=37804 icmp_seq=994 rtt=5.4 ms
len=46 ip=8.8.8.8 ttl=57 id=37805 icmp_seq=995 rtt=4.7 ms
len=46 ip=8.8.8.8 ttl=57 id=37806 icmp_seq=996 rtt=4.8 ms
len=46 ip=8.8.8.8 ttl=57 id=37807 icmp_seq=997 rtt=4.1 ms
len=46 ip=8.8.8.8 ttl=57 id=37808 icmp_seq=998 rtt=6.7 ms
len=46 ip=8.8.8.8 ttl=57 id=37809 icmp_seq=999 rtt=6.3 ms
--- 8.8.8.8 hping statistic ---
1000 packets transmitted, 978 packets received, 3% packet loss
round-trip min/avg/max = 1.9/5.8/1002.6 ms

Na minha máquina esse comando demorou 2 segundos, com 3% de perda. Uma boa marca.
O hping3 pode ser instalado via apt-get.

# apt-get install hping3

quinta-feira, 27 de agosto de 2015

Como alterar o nome da máquina

No Linux, o nome do computador fica armazenado em /etc/hostname. Se você quiser mudar o nome basta editar esse arquivo. O nome passará a ser usado no próximo boot, mas se você quiser setá-lo agora pode usar o comando hostname.

# hostname novo_nome

Onde "novo_nome" é o nome que você quer colocar no computador.

É importante também colocar o nome do compuador e o domínio (FQDN - Full Qualified Domain Name) no arquivo /etc/hosts.

127.0.1.1 novo_nome.suaempresa.inet novo_nome

Para ver somente o dominio do teu computador você pode usar o parâmetro "-d".

$ hostname -d

Para ver o nome completo FQDN use "-f"

$ hostname -f

quarta-feira, 26 de agosto de 2015

Comandos úteis para a resolução de nomes

Neste artigo descrevo os principais comandos que podem ser usados para analisar o cliente DNS, ou seja, o processo de resolução de nomes em uma estação de trabalho Linux.


Nslookup

O nslookup é usado para consultar registros em servidores DNS. A forma mais simples é:

$ nslookup ricardoolonca.blogspot.com.br
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
ricardoolonca.blogspot.com.br canonical name = blogspot.l.googleusercontent.com.
Name: blogspot.l.googleusercontent.com
Address: 74.125.234.107
Name: blogspot.l.googleusercontent.com
Address: 74.125.234.106
Name: blogspot.l.googleusercontent.com
Address: 74.125.234.108

Você pode querer fazer uma consulta usando outro servidor DNS. No exemplo abaixo eu estou fazendo uma consulta DNS, mas não usando o meu DNS, e sim o do Terra (200.176.2.12).

$ nslookup ricardoolonca.blogspot.com.br 200.176.2.12
Server: 200.176.2.12
Address: 200.176.2.12#53

Non-authoritative answer:
ricardoolonca.blogspot.com.br canonical name = blogspot.l.googleusercontent.com.
Name: blogspot.l.googleusercontent.com
Address: 74.125.234.11
Name: blogspot.l.googleusercontent.com
Address: 74.125.234.12
Name: blogspot.l.googleusercontent.com
Address: 74.125.234.10

Para descobrir quem é o servidor DNS do site em questão, use o parâmetro type=ns:

$ nslookup -type=ns ricardoolonca.blogspot.com.br
Server: 192.168.1.1
Address: 192.168.1.1#53

Non-authoritative answer:
ricardoolonca.blogspot.com.br canonical name = blogspot.l.googleusercontent.com.
Authoritative answers can be found from:
l.googleusercontent.com
origin = ns1.google.com
mail addr = dns-admin.google.com
serial = 1529890
refresh = 900
retry = 900
expire = 1800
minimum = 60

Para descobrir qual servidor responde pelos e-mail dos site, utilize type=mx

$ nslookup -type=mx ricardoolonca.blogspot.com.br
Server: 192.168.1.1
Address: 192.168.1.1#53

Non-authoritative answer:
ricardoolonca.blogspot.com.br canonical name = blogspot.l.googleusercontent.com.
Authoritative answers can be found from:
l.googleusercontent.com
origin = ns1.google.com
mail addr = dns-admin.google.com
serial = 1529890
refresh = 900
retry = 900
expire = 1800
minimum = 60

Podemos ver que este domínio não tem serviço de e-mail. Vamos tentar com outro domínio:

$ nslookup -type=mx google.com
Server: 192.168.1.1
Address: 192.168.1.1#53

Non-authoritative answer:
google.com mail exchanger = 40 alt3.aspmx.l.google.com.
google.com mail exchanger = 10 aspmx.l.google.com.
google.com mail exchanger = 20 alt1.aspmx.l.google.com.
google.com mail exchanger = 30 alt2.aspmx.l.google.com.
google.com mail exchanger = 50 alt4.aspmx.l.google.com. Authoritative answers can be found from:
alt1.aspmx.l.google.com internet address = 173.194.75.27
alt2.aspmx.l.google.com internet address = 173.194.67.27

Podemos notar que há cinco servidores que tratam as mensagens de e-mail do Google, sendo o aspmx.l.google.com o prioritário.


Dig

O dig é outro utilitário usado para consultar nomes. Sua sintaxe é simples:

$ dig ricardoolonca.blogspot.com.br
; <<>> DiG 9.9.5-6-Debian <<>> ricardoolonca.blogspot.com.br
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- 20754="" id:="" noerror="" opcode:="" p="" query="" status:="">
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1280
;; QUESTION SECTION:
;ricardoolonca.blogspot.com.br. IN A

;; ANSWER SECTION:
ricardoolonca.blogspot.com.br. 600 IN CNAME blogspot.l.googleusercontent.com.
blogspot.l.googleusercontent.com. 300 IN A 64.233.186.132

;; Query time: 117 msec
;; SERVER: 172.20.1.6#53(172.20.1.6)
;; WHEN: Wed Aug 26 15:32:48 BRT 2015
;; MSG SIZE  rcvd: 120



Para consulta o servidor mx:

$ dig -q-type=mx google.com
;<<>> DiG 9.9.5-6-Debian <<>> -q-type=mx google.com
; global options: +cmd
;; Got answer:
;; ->>HEADER<<- 16201="" id:="" opcode:="" p="" query="" servfail="" status:="">;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1280
;; QUESTION SECTION:
;-type=mx. IN A

;; Query time: 0 msec
;; SERVER: 172.20.1.6#53(172.20.1.6)
;; WHEN: Wed Aug 26 15:33:54 BRT 2015
;; MSG SIZE  rcvd: 37

;; Got answer:
;; ->>HEADER<<- 46779="" id:="" noerror="" opcode:="" p="" query="" status:="">;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1280
;; QUESTION SECTION:
;google.com. IN A

;; ANSWER SECTION:
google.com. 298 IN A 173.194.118.34
google.com. 298 IN A 173.194.118.37
google.com. 298 IN A 173.194.118.35
google.com. 298 IN A 173.194.118.40
google.com. 298 IN A 173.194.118.46
google.com. 298 IN A 173.194.118.39
google.com. 298 IN A 173.194.118.41
google.com. 298 IN A 173.194.118.32
google.com. 298 IN A 173.194.118.38
google.com. 298 IN A 173.194.118.33
google.com. 298 IN A 173.194.118.36

;; Query time: 0 msec
;; SERVER: 172.20.1.6#53(172.20.1.6)
;; WHEN: Wed Aug 26 15:33:54 BRT 2015
;; MSG SIZE  rcvd: 215


Host

Outro comando usado para resolver nomes é o host. O host gera saídas mais enxutas.

$ host ricardoolonca.blogspot.com.br
ricardoolonca.blogspot.com.br is an alias for blogspot.l.googleusercontent.com.
blogspot.l.googleusercontent.com has address 74.125.234.138
blogspot.l.googleusercontent.com has address 74.125.234.139
blogspot.l.googleusercontent.com has address 74.125.234.140
blogspot.l.googleusercontent.com has IPv6 address 2800:3f0:4001:802::100b

Você pode fazer consultas reversas:

$ host 74.125.234.138
138.234.125.74.in-addr.arpa domain name pointer gru03s13-in-f10.1e100.net.


Whois

O comando whois mostra informações sobre o domínio, como o nome e contato dos responsáveis, o DNS, a data da última atualização, etc.

$ whois ricardoolonca.blogspot.com.br 
% Copyright (c) Nic.br
% The use of the data below is only permitted as described in
% full by the terms of use (http://registro.br/termo/en.html),
% being prohibited its distribution, comercialization or
% reproduction, in particular, to use it for advertising or
% any similar purpose.
% 2013-08-19 16:36:04 (BRT -03:00)


domain: blogspot.com.br
owner: Google Brasil Internet Ltda
ownerid: 006.990.590/0001-23
responsible: Domain Administrator
country: BR
owner-c: DOADM17
admin-c: DOADM17
tech-c: DOADM17
billing-c: NAB51
nserver: ns1.google.com
nsstat: 20130818 AA
nslastaa: 20130818
nserver: ns2.google.com
nsstat: 20130818 AA
nslastaa: 20130818
nserver: ns3.google.com
nsstat: 20130818 AA
nslastaa: 20130818
nserver: ns4.google.com
nsstat: 20130818 AA
nslastaa: 20130818
created: 20041205 #1920190
expires: 20131205
changed: 20121113
status: published


nic-hdl-br: DOADM17
person: Domain Admin
e-mail: ccops@markmonitor.com
created: 20100520
changed: 20130423


nic-hdl-br: NAB51
person: NameAction do Brasil
e-mail: cctld@nameaction.com
created: 20020619
changed: 20130430


% Security and mail abuse issues should also be addressed to
% cert.br, http://www.cert.br/, respectivelly to cert@cert.br
% and mail-abuse@cert.br
%
% whois.registro.br accepts only direct match queries. Types
% of queries are: domain (.br), ticket, provider, ID, CIDR
% block, IP and ASN.


Você pode usar o whois para saber quem é o responsável por um ip específico:

$ whois 74.125.234.138

#
# ARIN WHOIS data and services are subject to the Terms of Use
# available at: https://www.arin.net/whois_tou.html
#


#
# The following results may also be obtained via:
# http://whois.arin.net/rest/nets;q=74.125.234.234?showDetails=true&showARIN=false&ext=netref2
#


NetRange: 74.125.0.0 - 74.125.255.255
CIDR: 74.125.0.0/16
OriginAS:
NetName: GOOGLE
NetHandle: NET-74-125-0-0-1
Parent: NET-74-0-0-0-0
NetType: Direct Allocation
RegDate: 2007-03-13
Updated: 2012-02-24
Ref: http://whois.arin.net/rest/net/NET-74-125-0-0-1


OrgName: Google Inc.
OrgId: GOGL
Address: 1600 Amphitheatre Parkway
City: Mountain View
StateProv: CA
PostalCode: 94043
Country: US
RegDate: 2000-03-30
Updated: 2013-08-07
Ref: http://whois.arin.net/rest/org/GOGL


OrgTechHandle: ZG39-ARIN
OrgTechName: Google Inc
OrgTechPhone: +1-650-253-0000
OrgTechEmail: arin-contact@google.com
OrgTechRef: http://whois.arin.net/rest/poc/ZG39-ARIN


OrgAbuseHandle: ZG39-ARIN
OrgAbuseName: Google Inc
OrgAbusePhone: +1-650-253-0000
OrgAbuseEmail: arin-contact@google.com
OrgAbuseRef: http://whois.arin.net/rest/poc/ZG39-ARIN


#
# ARIN WHOIS data and services are subject to the Terms of Use
# available at: https://www.arin.net/whois_tou.html
#

Essas são as principais ferramentas de resolução de nomes usadas para fazer análise de rede. Caso algum site não esteja acessível, antes de ficar fuçando no Squid, verifique se o site existe, usando nslookup, ping, dig, etc.