Salve, encontrei bem elaborado algumas dicas para resolver problemas na rede no blog do
http://eduardosilva.eti.br/sysadmin/canivete-suico-para-redes/ então decidi compartilhar com vocês também mais algumas informações.
Uma grande parte do conteudo estava nos meus milhares MB, então me desculpa se a dica é de algum autor, nos comentários indique o mesmo.
ATUALIZAÇÃO,
18/04 - tcptraceroute
19/04 - telnet smtp/pop/imap
Ping
Obrigatório aparecer na lista pela sua grande importância, mas não entrarei em detalhes pois parto do pré suposto que você já conhece ao menos o básico sobre o ping e o protocolo icmp. Lembrando que tem alguns FW tanto linux quanto windows que bloqueiam o ping então fique alerta para não julgar um problema de FW em um prolema de conexão e sair xingando o TI.
# ping 8.8.8.8
traceroute/mtr
O traceroute, serve para mostrar o caminho que um pacote percorre até o seu destino final, ajuda a identificar problemas de conectividade. Já escutei falara em bloquear o tracert por iptables, mas nunca cheguei a utilizar o mesmo então alerta neste comando.
# traceroute google.com.br
traceroute to google.com.br (74.125.234.152), 30 hops max, 60 byte packets
1 172.16.1.254 (172.16.1.254) 0.214 ms 0.230 ms 0.263 ms
2 192.168.2.1 (192.168.2.1) 1.317 ms 2.172 ms 3.009 ms
3 177.132.200.1 (177.132.200.1) 20.799 ms 21.068 ms 21.420 ms
4 200.175.97.158 (200.175.97.158) 22.273 ms 23.763 ms 24.751 ms
5 189.59.252.113 (189.59.252.113) 31.289 ms 31.442 ms 31.784 ms
6 189.59.248.205 (189.59.248.205) 46.420 ms 31.409 ms 31.577 ms
7 187.115.214.210 (187.115.214.210) 38.104 ms 39.748 ms 39.961 m
# mtr 8.8.8.8
Vai trazer as rotas de uma forma mais limpa e organizada, inclusive ele vai ficar pingando os hosts.
Informações DNS.
Tem o dig e o nslookup
Se usar o nslookup.
$ nslookup
> set q=mx
// opções para o set (mx para mail,A,ANY,CNAME,MX,NS,PTR,SOA,SRV)
> marcos.local
Server: 172.16.1.1
Address: 172.16.1.1#53
marcos.local mail exchanger = 1 mail.marcos.local.
//
> set q=a
> marcos.local
Server: 172.16.1.1
Address: 172.16.1.1#53
Name: marcos.local
Address: 172.16.1.1
//
> set q=ns
> marcos.local
Server: 172.16.1.1
Address: 172.16.1.1#53
marcos.local nameserver = dns.marcos.local.
Utilizando o dig.
# dig -t mx marcos.local
; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6_2.2 <<>> -t mx marcos.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4751
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; QUESTION SECTION:
;marcos.local. IN MX
;; ANSWER SECTION:
marcos.local. 259200 IN MX 1 mail.marcos.local.
;; AUTHORITY SECTION:
marcos.local. 259200 IN NS dns.marcos.local.
;; ADDITIONAL SECTION:
mail.marcos.local. 259200 IN A 172.16.1.1
dns.marcos.local. 259200 IN A 172.16.1.1
;; Query time: 0 msec
;; SERVER: 172.16.1.1#53(172.16.1.1)
;; WHEN: Wed Apr 18 11:40:03 2012
;; MSG SIZE rcvd: 101
//
# dig -t ns marcos.local
; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6_2.2 <<>> -t ns marcos.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62801
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;marcos.local. IN NS
;; ANSWER SECTION:
marcos.local. 259200 IN NS dns.marcos.local.
;; ADDITIONAL SECTION:
dns.marcos.local. 259200 IN A 172.16.1.1
;; Query time: 0 msec
;; SERVER: 172.16.1.1#53(172.16.1.1)
;; WHEN: Wed Apr 18 11:41:12 2012
;; MSG SIZE rcvd: 64
//
# dig -t txt marcos.local
; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6_2.2 <<>> -t txt marcos.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18188
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;marcos.local. IN TXT
;; ANSWER SECTION:
marcos.local. 259200 IN TXT "v=spf1 mx -all"
;; AUTHORITY SECTION:
marcos.local. 259200 IN NS dns.marcos.local.
;; ADDITIONAL SECTION:
dns.marcos.local. 259200 IN A 172.16.1.1
;; Query time: 0 msec
;; SERVER: 172.16.1.1#53(172.16.1.1)
;; WHEN: Wed Apr 18 11:41:42 2012
;; MSG SIZE rcvd: 91
Utilizando a opção +short vai trazer um resumo apenas a informação basica.
# dig -t mx marcos.local +short
1 mail.marcos.local.
# DNS REVERSO
# host 172.16.1.1
1.1.16.172.in-addr.arpa domain name pointer dns.marcos.local.
# nslookup 172.16.1.1
Server: 172.16.1.1
Address: 172.16.1.1#53
1.1.16.172.in-addr.arpa name = dns.marcos.local.
# dig -x 172.16.1.1
; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6_2.2 <<>> -x 172.16.1.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37337
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;1.1.16.172.in-addr.arpa. IN PTR
;; ANSWER SECTION:
1.1.16.172.in-addr.arpa. 259200 IN PTR dns.marcos.local.
;; AUTHORITY SECTION:
1.16.172.in-addr.arpa. 259200 IN NS dns.marcos.local.
;; ADDITIONAL SECTION:
dns.marcos.local. 259200 IN A 172.16.1.1
;; Query time: 0 msec
;; SERVER: 172.16.1.1#53(172.16.1.1)
;; WHEN: Wed Apr 18 11:45:47 2012
;; MSG SIZE rcvd: 101
NMAP
Lista todos os hosts ativos da rede em modo verbose, vai mostrando ip por ip ligado/desligado
# nmap -v -sP 172.16.1.1
Varrer portas de um ip modo syn
# nmap -sS 172.16.1.1
Varrer uma maquina agressivamente, com toda opções, portas abertas, versão do sistema, versão do software rodando na porta.
# nmap -A 172.16.1.1
Mais opções.
-sT – Com esse parâmetro é feito um escaneamento através de tentativas de conexão TCP. Essa forma é muito fácil de ser identificada por firewalls e IDS;
-sS – Assim a tentativa será com pacotes TCP com a flag SYN ligada, ou seja, como apenas uma requisição de conexão. Essa técnica dificulta um pouco a detecção;
-sP – Com essa opção o escaneamento será feito através de pacotes ICMP echo request. Verifica apenas se o host está ativo;
-sU – Envia pacotes UDP com 0 byte para determinar o estado dessas portas;
-sO – É usado para tentar determinar os protocolos suportados pelo host;
-O – Com esse parâmetro é feito uma tentativa de determinar o sistema operacional através de uma técnica conhecida como Active FingerPrint.
-A – Verifica a porta e o serviço que está rodando.
-P0 - Faz um scan da maquina sem enviar o ping
-F - Scan rápido.
TCPDUMP
Manual completo em pt_BR
Monitorar uma eth
# tcpdump -i eth0
Monitorar todas eth
# tcpdump -i any
Monitorar tudo que sai de uma maquina
# tcpdump -i any src host 172.16.1.1
Monitorar tudo que vai para uma maquina
# tcpdump -i any dst host 172.16.1.1
Monitorar tudo que vai para uma determinada porta
# tcpdump -i any dst port 80
# tcpdump -i any dst port 3128
# tcpdump -i any dst port 3306
Monitorar todo trafego da rede menos da maquina X
# tcpdump -i any not host 172.16.1.1
Monitora todo trafego saindo do ip X com destino a porta Y
# tcpdump -i any src host 172.16.1.1 and dst port 80
Começamos a precisar dos operadores lógicos (and, or). O “and” faz com que o TCPDump só capture os pacotes onde ambas as condições forem verdadeiras (o pacote deve ter saído de 192.168.1.100 E ter como destino a porta 80). Se usássemos o “or”, qualquer pacote onde pelo menos uma das duas condições fossem verdadeiras seria capturado. Por exemplo, a linha abaixo captura pacotes originados no host 192.168.1.100 OU com destino à porta 80:
# tcpdump -i any src host 192.168.1.100 or dst port 80
Mesma coisa so vai exibir resultado se for a maquina X ou a Y
# tcpdump -i any host 192.168.1.100 or host 192.168.1.101
Vale lembrar também que você pode utilizar nomes de domínio:
# tcpdump -i any dst host www.google.com.br
Mais opções para o tcpdump
-n : Não faz a resolução dos nomes, mantendo origem, destino e porta como números.
host : Define um host específico, pode ser um ip ou um nome.
src : Define o host origem, pode ser ip ou nome.
dst : Define o host destino, pode ser ip ou nome.
-w : Escreve a saída em um arquivo, o nome do arquivo deve ser fornecido.
-r : Lê o tráfego que foi armazenado em um arquivo, nesse caso não é necessário ser root.
-s : Define, em bytes, o tamanho máximo dos pacotes que serão capturados. O padrão são 68 bytes que são suficientes para alguns protocolo, mas pode truncar (não capturar completamente) um pacote. Um bom número para ser definido é 1000.
-D : Exibe a lista das interfaces de rede disponíveis no sistema e que o tcpdump é capaz de capturar pacotes. Esta opção associa um número a cada interface o qual pode ser usado no lugar do nome da mesma, ex: 1 - eth0, 2 – eth1, 3 – any, 4 – lo (loopback);
-t : Não exibe o timestamp em cada linha.
-v : Exibe a saída com mais detalhes.
-vv : Exibe a saída com mais detalhes ainda.
-vvv : Exibe a saída com informações ainda mais detalhadas.
IPTABLES
Vai que nada disso te ajude, você pode ainda utilizar o iptables para gerar logs.
Pacotes passando de uma ETH para outra ETH/ ou de uma rede para outra REDE
# iptables -A FORWARD -j LOG
Pacotes entrando no servidor, não para a rede interna.
# iptables -A INPUT -j LOG
Pacotes saindo do servidor, e não da rede interna
# ipatbles -A OUTPUT -j LOG
Para fazer a leitura interpretação dos mesmos
# tail -f /var/log/messages
NETSTAT
Portas abertas, que tem algum serviço na escuta
# netstat -patun
Conexões Internet Ativas (servidores e estabelecidas)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:587 0.0.0.0:* OUÇA 1175/master
tcp 0 0 0.0.0.0:110 0.0.0.0:* OUÇA 1578/dovecot
tcp 0 0 0.0.0.0:143 0.0.0.0:* OUÇA 1578/dovecot
tcp 0 0 0.0.0.0:80 0.0.0.0:* OUÇA 1263/httpd
tcp 0 0 172.16.1.1:53 0.0.0.0:* OUÇA 1250/named
tcp 0 0 0.0.0.0:22 0.0.0.0:* OUÇA 1097/sshd
tcp 0 0 127.0.0.1:953 0.0.0.0:* OUÇA 1250/named
tcp 0 0 0.0.0.0:25 0.0.0.0:* OUÇA 1175/master
tcp 0 0 0.0.0.0:993 0.0.0.0:* OUÇA 1578/dovecot
tcp 0 0 0.0.0.0:995 0.0.0.0:* OUÇA 1578/dovecot
tcp 0 0 0.0.0.0:3306 0.0.0.0:* OUÇA 1498/mysqld
tcp 0 0 172.16.1.1:22 172.16.1.209:33848 ESTABELECIDA5415/sshd
udp 0 0 0.0.0.0:631 0.0.0.0:* 1029/portreserve
udp 0 0 172.16.1.1:123 0.0.0.0:* 1268/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 1268/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 1268/ntpd
udp 0 0 172.16.1.1:53 0.0.0.0:* 1250/named
Portas abertas de uma maneira mais organizada
# netstat -lt
Conexões Internet Ativas (sem os servidores)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:submission *:* OUÇA
tcp 0 0 *:pop3 *:* OUÇA
tcp 0 0 *:imap *:* OUÇA
tcp 0 0 *:http *:* OUÇA
tcp 0 0 gw:domain *:* OUÇA
tcp 0 0 *:ssh *:* OUÇA
tcp 0 0 localhost:rndc *:* OUÇA
tcp 0 0 *:smtp *:* OUÇA
tcp 0 0 *:imaps *:* OUÇA
tcp 0 0 *:pop3s *:* OUÇA
tcp 0 0 *:mysql *:* OUÇA
Gerando estatisticas usando o netstat.
Conexões UDP
# netstat -su
Conexões TCP
# netstat -st
Conexões estabelecidas
# netstat -pt
Conexões Internet Ativas (sem os servidores)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 gw:http 172.16.1.209:35233 SYN_RECEBIDO-
tcp 0 0 gw:http 172.16.1.209:35234 SYN_RECEBIDO-
tcp 0 0 gw:http 172.16.1.209:35232 ESTABELECIDA1509/httpd
tcp 0 0 gw:ssh
MATAR CONEXÃO NA PORTA
# yum install dsniff
Mata conexões na porta 53 da eth0
# tcpkill -i eth0 port 53
Mata o IP x conectado em qualquer porta
# tcpkill host 172.16.1.209
Matar o ip 172.16.1.55 entre outros menos o 172.16.1.209
# tcpkill ip host 172.16.1.55 and not 172.16.1.209
Derrubar todos menos o IP definido
# tcpkill -i eth0 not host 172.16.1.209
Mais opções
netstat -at : todas as conexões TCP
netstat -au : todas as conexões UDP
netstat -aw : todas as conexões RAW
netstat -ax : todas as conexões Unix Socket
netstat -aut : todas as conexões TCP e UDP
netstat -r ou sem resolver nomes, netstat -nr : Exibe as rotas do seu computador, novamente, ao omitir a opção -n o comando tentará resolver todos os IPs para nome.
netstat -o : Mostra o temporizador da conexão, ou seja, a quanto tempo essa conexão está estabelecida, pode-se combinar a vontade: netstat -autno, netstat -axuo.
netstat -i : Exibe as informações de todas as interfaces ativas. Podemos ter estatísticas de erros de entrada/saída, assim com estatística de trafego.
netstat -c : Repete o comando ao final, muito útil para verificar o momento exato que uma conexão é estabelecia ou para ter noção do aumento de tráfego nas interfaces, ex.: netstat -ic , netstat -atnc.
netstat -e : Exibe uma lista mais completa. Deve ser combinado com as outras opções, como por exemplo onetstat -atne.
Com esse comando temos mais duas colunas, USER e INODE, ou seja, o usuário que subiu o processo que originou a abertura da porta e o INODE pertencente.
netstat -p : Exibe o daemon e o PID que estão ligados a essa porta, muito importante para detectarmos o daemon responsável.
netstat -s : Exibe as estatísticas dos protocolos, ou seja, quanto foi trafegado em cada protocolo. Podemos combinar para assim pegarmos a estatística de um determinado protocolo, ex.: netstat -st, netstat -su.
PORTA ABERTA OU PORTA FECHADA?
Poh, amigão, ve se a porta 8080 ta aberta no meu fw.
- ok.
# telnet fw.do.camarada.org 8080
# telnet 172.16.1.1 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
^C
Connection closed by foreign host.
# telnet 172.16.1.1 9090
telnet: connect to address 172.16.1.1: Connection refused
Trying ::1...
Demais problemas.
Não se esqueça de olhar os logs dos demais serviços. Configurados no servidor.
TCPTRACEROUTE
Ajuda a descobrir se algum fw, esta bloqueando determinada porta, ele faz a mesma coisa que o tracert mas podemos especificar uma porta.
# tcptraceroute terra.com.br 80
Selected device wlan0, address 10.10.34.122, port 34576 for outgoing packets
Tracing the path to terra.com.br (200.154.56.80) on TCP port 80 (www), 30 hops max
1 10.10.32.254 2.064 ms 1.678 ms 1.434 ms
Sintax normal de uso
# tcptraceroute 200.100.40.1 22
# tcptraceroute 200.100.40.1 8080
# tcptraceroute IP PORTA
TELNET ENVIAR E-MAIL / LER E-MAIl
Para enviar e-mail.
Sinatax:
# telnet SERVIDOR DE E-MAIL 25
# telnet 172.16.1.1 25
Trying 172.16.1.1...
Connected to 172.16.1.1.
Escape character is '^]'.
220 ESMTP
helo escolainfoserv.com.br
// Identifico o dominio de quem vai enviar o e-mail
250 mail.marcos.local
mail from:suporte@escolainfoserv.com.br
// Declaro o meu e-mail no caso de quem esta vindo o e-mail
250 2.1.0 Ok
rcpt to:marcos@marcos.local
// Indico para quem vai ir o e-mail no caso o destinatório.
250 2.1.5 Ok
data
// Começo a escrever o e-mail
354 End data with <CR><LF>.<CR><LF>
Corpo do e-mail
finalizo mesmo com um ponto no final.
.
// Para enviar o e-mail é necessário um ponto numa nova linha
250 2.0.0 Ok: queued as 13C3A60045
SMTP AUTENTICADO
Gerando a autenticação.
# echo -ne '\000marcos@marcos.local\000qwe123' | openssl base64
AG1hcmNvc0BtYXJjb3MubG9jYWwAcXdlMTIz
# telnet 172.16.1.1 25
Trying 172.16.1.1...
Connected to 172.16.1.1.
Escape character is '^]'.
220 ESMTP
helo marcos.local 250 mail.marcos.local
AUTH PLAIN AG1hcmNvc0BtYXJjb3MubG9jYWwAcXdlMTIz 235 2.7.0 Authentication successful
mail from: marcos@marcos.local 250 2.1.0 Ok
rcpt to: suporte@escolainfoserv.com.br 250 2.1.5 Ok
data 354 End data with <CR><LF>.<CR><LF>
teste de e-mail
. 250 2.0.0 Ok: queued as 681C060043
quit 221 2.0.0 Bye
Connection closed by foreign host.
lendo e-mails via IMAP
Esta muito bem explicado.
lendo e-mail via pop
# telnet 172.16.1.1 110
Trying 172.16.1.1...
Connected to 172.16.1.1.
Escape character is '^]'.
+OK Dovecot ready.
user marcos@marcos.local // USUÁRIO DE PREFERENCIA COMPLETO
+OK
pass qwe123 // SENHA
+OK Logged in.
list // LISTA E-MAILS
+OK 13 messages:
1 302
2 1107
3 4096
4 1143
5 30159867
6 589
7 13254267
8 1037
9 557
10 2677
11 2881
12 2743
13 362
.
retr 1 // FAZ LEITURA DO E-MAIL COM ID = 1
+OK 302 octets
Return-Path: <"marcos"@marcos.local>
X-Original-To: marcos@marcos.local
Delivered-To: marcos@marcos.local
Received: from marcos.local (unknown [172.19.0.3])
by mail.marcos.local (Postfix) with SMTP id 9E2D160036
for <marcos@marcos.local>; Tue, 10 Apr 2012 15:29:39 -0300 (BRT)
asdasdasd
.
retr 13 // FAZ LEITURA DO E-MAIL COM ID = 13
+OK 362 octets
Return-Path: <suporte@escolainfoserv.com.br>
X-Original-To: marcos@marcos.local
Delivered-To: marcos@marcos.local
Received: from escolainfoserv.com.br (unknown [172.16.1.209])
by mail.marcos.local (Postfix) with SMTP id 13C3A60045
for <marcos@marcos.local>; Thu, 19 Apr 2012 09:05:08 -0300 (BRT)
Corpo do e-mail
finalizo mesmo com um ponto no final.
.
dele 1 // DELETO E-MAIL COM ID = 1
+OK Marked to be deleted.
lsit
-ERR Unknown command: LSIT
list // LISTO NOVAMENTE OS E-MAILS
+OK 12 messages:
2 1107
3 4096
4 1143
5 30159867
6 589
7 13254267
8 1037
9 557
10 2677
11 2881
12 2743
13 362
.
quit // SAIR
+OK Logging out, messages deleted.
Connection closed by foreign host.