Minha máquina é um servidor, por isso quero ignorar as conexões que estão sendo feitas com meu servidor (por exemplo, quando alguém visita meu site). Quero ver apenas conexões / solicitações sendo feitas pelo meu servidor para outros lugares.
Como vejo apenas essas conexões de saída?
Edição: Eu sou novo para este tipo de coisas. O que estou tentando fazer é apenas ver se alguma coisa do meu servidor está sendo enviada além de dados para meus aplicativos da web. Por exemplo, se alguém visitar meus sites, obviamente, meu servidor enviará dados para o navegador do cliente. Mas suponha que também exista código em algum lugar da estrutura do meu aplicativo Web que envie dados estatísticos para outro lugar que eu não conheço. Gostaria de ver os lugares para os quais meu servidor está enviando dados, se houver. Provavelmente não é provável, mas suponha que você decida usar uma estrutura php ou nodejs que não escreveu: há uma pequena chance de que ele possa enviar algum tipo de dados para algum lugar. Se assim for, é o que eu gostaria de ver.
fonte
netstat
no "modo contínuo" lá,-c
não funciona. Você usa números, em vez disso,netstat -na 1 | find "[Scan_Host_IP_Addr]"
para atualizar a cada1
segundo (neste exemplo). ( fonte ).strace
no processo, filtrando as pesquisas de servidores de nomes (sem detalhes, essa não é uma resposta completa). Como alternativa, você pode mostrar o DNS reverso dos IPs listadosnetstat
, omitindo an
opção incluída na minha resposta.Se você deseja apenas registrar todas as tentativas de conexão, o mais fácil provavelmente será o
iptables
LOG
destino no Linux (ou o recurso de registro de firewall equivalente em seu sistema).Se você precisar de mais informações, como a duração da conexão e a quantidade de dados trocados nas duas direções, então
conntrackd
(no Linux) é provavelmente a melhor opção.No entanto, observe que os dois acima registram apenas o tráfego que passa pelo netfilter, que geralmente é todo o tráfego, mas não contabiliza o tráfego gerado com pilhas IP no espaço do usuário (como máquinas virtuais ou qualquer coisa usando soquetes brutos) ou tráfego em ponte.
Para soluções mais gerais, você pode ter um olhar para coisas como
argus
,bro-ids
,sancp
ountop
que registrar todos os tipos de informações com base no tráfego que farejar em uma interface.fonte
Eu tentei várias ferramentas, incluindo,,
iftop
entop
, éiptraf
claro, as ferramentas internas muito úteisnetstat -tupln
(as opções suportadas dependem do sistema operacional), mas a mais prática para o meu caso de uso acabou sendonethogs
: ela agrega conexões pela origem aplicativo e é o menos barulhento de todos.Instalável via:
Executar como root:
Se seu objetivo é apenas ver todas as conexões TCP iniciadas por qualquer aplicativo, você poderá usar:
fonte
O que eu acho que você deseja fazer é obter uma lista de portas de escuta e removê-las de outras conexões TCP, que serão todas as conexões de saída. O comando ss (status do soquete) gera as colunas "Local Address: Port" e "Peer Address: Port". Precisamos remover as portas de escuta da coluna "Local Address: Port" e não a coluna "Peer Address: Port", caso contrário, você poderá perder algumas conexões de saída. Então, para conseguir isso, estou usando
\s{2}+
atrás da string ": $ port" no grep para corresponder aos espaços existentes atrás da coluna "Local Address: Port"; essa coluna possui dois ou mais espaços em branco atrás dela, em que o "Endereço do par: porta" possui um espaço e, em seguida, uma nova linha (grrr ... deve ter apenas uma nova linha, IMO,\s+
\s{2}+
.) Normalmente, eu poderia tentar usar a funcionalidade de filtragem de ss, como emss -tn state established '(sport != :<port1> and sport !=:<port2>)' src <ip address>
. Mas parece que há um limite de quanto tempo essa string pode ser lançada em um sistema em que eu tinha muitas portas de escuta. Então, eu estou tentando fazer a mesma coisa com grep. Acredito que o seguinte funcione:Observe que isso depende da versão do ss que você está usando; versões mais antigas (como: utilitário ss, iproute2-ss111117) têm um formato de saída diferente; portanto, você pode precisar usar $ 3 em vez de $ 4 no awk. Observe também
ss -tln
ess -tn state listening
fornece uma saída diferente, o que é um pouco contra-intuitivo para mim. YMMV.Encontrei uma solução um pouco mais elegante que não requer saber o IP do host,
ss -tn state established dst :*
funciona bem, modifiquei as linhas de comando acima.fonte
ss -tn state listening
em um host que executa um servidor FTP e, naturalmente, o comando mostrou que a máquina estava escutando na porta 21. Isso não significa que oegrep -v
filtro filtrará quaisquer hosts remotos cujo endereço IP inclua "21" (incluindo "210" "," 211 "," 212 ", ...)? Além disso, éasort
realmente necessário, ou apenas vitrine?ss --out
para obter uma lista de conexões de saída.tcpdump
permite ver todo o tráfego IP fluindo de / para uma interface específica com a capacidade de filtrar com base em determinados critérios.tcpdump
é normalmente instalado na maioria dos sistemas * nix por padrão, se não houver, geralmente há uma porta em algum lugar para obtê-la para sua distribuição específica.fonte
netstat
é uma boa opção.Use os parâmetros conforme necessário. (consulte suas páginas de manual) Por exemploAqui, ele pode monitorar todo o processo (numérico) de escuta (n) tcp (t) e udp (u) (p).
Você também pode tentar o
ss
comando Para uso de referência:Rede TCP / UDP SS Linux e informações de soquete
fonte
Se você executa o Solaris ou um derivado, dê uma olhada no conntrack
fonte