quarta-feira, 23 de abril de 2014

Comando ss (Socket Statistics) - Analisando conexões

Agora de volta para área técnica, vou tentar postar nerdisses de sysadmin e segurança que for achando no dia a dia, logicamente postar no modo raw, sem muita frescura.  O que estou postando aqui não é nenhuma novidade e possivelmente muitos já conhecem, mas posto até para fixar conhecimento =)!

Pesquisando sobre alguns tuning, acabei me deparando sem querer com o comando ss. O comando ss ( socket statistics ) faz parte do pacote iproute2, ou seja, você provavelmente tem ele instalado na sua máquina.

Alguns comandos:

Bom e velho help =)

[root@spookerlabs ~]# ss -h
Usage: ss [ OPTIONS ]
       ss [ OPTIONS ] [ FILTER ]
   -h, --help        this message
   -V, --version    output version information
   -n, --numeric    don't resolve service names
   -r, --resolve       resolve host names
   -a, --all        display all sockets
   -l, --listening    display listening sockets
   -o, --options       show timer information
   -e, --extended      show detailed socket information
   -m, --memory        show socket memory usage
   -p, --processes    show process using socket
   -i, --info        show internal TCP information
   -s, --summary    show socket usage summary
   -b, --bpf           show bpf filter socket information

   -4, --ipv4          display only IP version 4 sockets
   -6, --ipv6          display only IP version 6 sockets
   -0, --packet    display PACKET sockets
   -t, --tcp        display only TCP sockets
   -u, --udp        display only UDP sockets
   -d, --dccp        display only DCCP sockets
   -w, --raw        display only RAW sockets
   -x, --unix        display only Unix domain sockets
   -f, --family=FAMILY display sockets of type FAMILY

  -A, --query=QUERY, --socket=QUERY
       QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

   -D, --diag=FILE     Dump raw information about TCP sockets to FILE
   -F, --filter=FILE   read filter information from FILE
       FILTER := [ state TCP-STATE ] [ EXPRESSION ]
[root@spookerlabs ~]#


Sumário sockets

[root@spookerlabs ~]# ss -s
Total: 99 (kernel 268)
TCP:   7 (estab 1, closed 2, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*      268       -         -       
RAW      0         0         0       
UDP      7         4         3       
TCP      5         2         3       
INET      12        6         6       
FRAG      0         0         0       

[root@spookerlabs ~]#


Portas em Listen em TCP

[root@spookerlabs ~]# ss -lt
State      Recv-Q Send-Q                Local Address:Port                    Peer Address:Port  
LISTEN     0      128                               *:ssh                                *:*      
LISTEN     0      128                              :::http                              :::*      
LISTEN     0      128                              :::ssh                               :::*      
LISTEN     0      128                              :::https                             :::*      
[root@spookerlabs ~]#



Listando conexões baseadas no estado
1. established
2. syn-sent
3. syn-recv
4. fin-wait-1
5. fin-wait-2
6. time-wait
7. closed
8. close-wait
9. last-ack
10. closing
11. all - All of the above states
12. connected - All the states except for listen and closed
13. synchronized - All the connected states except for syn-sent
14. bucket - Show states, which are maintained as minisockets, i.e. time-wait and syn-recv.
15. big - Opposite to bucket state.

Exemplo ESTABLISHED

[root@spookerlabs ~]# ss -t state ESTABLISHED
Recv-Q Send-Q                     Local Address:Port                         Peer Address:Port  
0      88                         23.NN.XX.YYY:ssh                       179.252.XXX.YY:59858  
[root@spookerlabs ~]#


Lembrando que esses são os estados das conexões e quando for fazer um tuning de parametros de protocolo no kernel, é legal ver o que realmente esta acontecendo antes de sair mudando valores com receitas de bolos na internet.

Fonte bnl.gov


E por útlimo, ele da estatísticas do protocolo que realmente num troubleshooting salvarão o dia (mas exige um nível de nerds mais a fundo =D ):

[root@spookerlabs ~]# ss -t state ESTABLISHED -i
Recv-Q Send-Q                     Local Address:Port                         Peer Address:Port  
0      72                         23.239.24.120:ssh                       179.252.240.234:59858  
     cubic wscale:4,7 rto:423.333 rtt:213.333/17.5 ato:40 mss:1440 cwnd:9 ssthresh:8 send 486.0Kbps unacked:2 retrans:0/2 rcv_rtt:300 rcv_space:28960
[root@spookerlabs ~]#


Alguns links e fontes:

http://linuxaria.com/pills/ss-iproute2-linux?lang=en
http://www.binarytides.com/linux-ss-command/
http://www.cyberciti.biz/tips/linux-investigate-sockets-network-connections.html

Vou dar uma melhor estudada nos parâmetros listados no último comando para fazer uma postagem decente referente a eles, se souberem de materiais por favor enviem via e-mail ou comentários.

Happy Networking!

Rodrigo "Sp0oKeR" Montoro

Nenhum comentário: