Mi máquina es un servidor, por lo que quiero ignorar las conexiones que se realizan a mi servidor (por ejemplo, cuando alguien visita mi sitio web). Quiero ver solo conexiones / solicitudes realizadas por mi servidor a otros lugares.
¿Cómo veo solo esas conexiones salientes?
EDITAR: Soy nuevo en este tipo de cosas. Lo que intento hacer es ver si se está enviando algo de mi servidor que no sea datos para mis aplicaciones web. Por ejemplo, si alguien visita mis sitios web, obviamente mi servidor enviará datos al navegador del cliente. Pero supongamos que también hay código en algún lugar del marco de mi aplicación web que envía datos estadísticos a otro lugar que no conozco. Me gustaría ver aquellos lugares a los que mi servidor envía datos, si los hay. Probablemente no sea probable, pero supongamos que decide utilizar un marco php o nodejs que no escribió: hay una pequeña posibilidad de que envíe algún tipo de datos a alguna parte. Si es así, eso es lo que me gustaría ver.
fuente
netstat
en "modo continuo" allí,-c
no funciona. En su lugar, utiliza números, comonetstat -na 1 | find "[Scan_Host_IP_Addr]"
para que se actualice cada1
segundo (en este ejemplo). ( fuente )strace
el proceso, filtrando las búsquedas del servidor de nombres (sin detalles, esta no es una respuesta completa). Alternativamente, puede mostrar el DNS inverso de las IP enumeradasnetstat
al omitir lan
opción incluida en mi respuesta.Si solo desea registrar cada intento de conexión, el más fácil probablemente sea el
iptables
LOG
objetivo en Linux (o la función de registro de firewall equivalente en su sistema).Si necesita más información como la duración de la conexión y la cantidad de datos intercambiados en ambas direcciones, entonces
conntrackd
(en Linux) es probablemente la mejor opción.Sin embargo, tenga en cuenta que los dos anteriores solo registran el tráfico que pasa a través de netfilter, que generalmente es todo el tráfico pero no tiene en cuenta el tráfico generado con pilas de IP en el espacio del usuario (como máquinas virtuales o cualquier cosa que use sockets sin procesar) o tráfico puenteado.
Para soluciones más generales, se puede echar un vistazo a cosas como
argus
,bro-ids
,sancp
ontop
que ingrese todo tipo de información sobre la base de tráfico que huelen en una interfaz.fuente
He probado un montón de herramientas, incluidas
iftop
,ntop
yiptraf
, por supuesto, las muy útiles integradasnetstat -tupln
(las opciones compatibles dependen del sistema operativo), pero resultó ser la más práctica para mi caso de usonethogs
: agrega conexiones por el origen aplicación , y es el menos ruidoso de todos.Instalable a través de:
Ejecutar como root:
Si su objetivo es ver todas las conexiones TCP iniciadas por cualquier aplicación, puede usar:
fuente
Lo que creo que quieres hacer es obtener una lista de puertos de escucha y luego eliminarlos de cualquier otra conexión TCP, entonces todas esas conexiones saldrán. El comando ss (estado del socket) genera las columnas "Dirección local: puerto" y "Dirección par: puerto", necesitamos eliminar los puertos de escucha de la columna "Dirección local: puerto" y no la columna "Dirección par: puerto", de lo contrario, puede perder algunas conexiones salientes. Para lograr eso, estoy usando
\s{2}+
detrás de la cadena ": $ port" en el grep para que coincida con los espacios que existen detrás de la columna "Dirección local: puerto"; esa columna tiene dos o más espacios en blanco detrás, donde la "Dirección de pares: Puerto" tiene un espacio y luego una nueva línea (grrr ... debería tener una nueva línea, IMO,\s+
\s{2}+
.) Normalmente podría intentar usar la funcionalidad de filtrado de ss, como conss -tn state established '(sport != :<port1> and sport !=:<port2>)' src <ip address>
. Pero parece que hay un límite en cuanto al tiempo que puede durar esa cadena, se bombardeó en un sistema donde tenía muchos puertos de escucha. Así que estoy tratando de hacer lo mismo con grep. Creo que lo siguiente funcionará:Tenga en cuenta que esto depende de la versión de ss que esté usando, las versiones anteriores (como: ss utility, iproute2-ss111117) tienen un formato de salida diferente, por lo que es posible que deba usar $ 3 en lugar de $ 4 en awk. Tenga en cuenta también
ss -tln
yss -tn state listening
le da una salida diferente, lo cual es un poco intuitivo para mí. YMMV.Encontré una solución un poco más elegante que no requiere conocer la IP del host,
ss -tn state established dst :*
funciona bien, modifiqué las líneas de comando anteriores.fuente
ss -tn state listening
en un host que ejecuta un servidor FTP, y naturalmente el comando mostró que la máquina estaba escuchando en el puerto 21. Entonces, eso no significa queegrep -v
filtrará los hosts remotos cuya dirección IP incluye "21" (incluyendo "210 "," 211 "," 212 ", ...)? Además, ¿esasort
realmente necesario, o solo un escaparate?ss --out
para obtener una lista de conexiones salientes.tcpdump
le permite ver todo el tráfico IP que fluye hacia / desde una interfaz específica con la capacidad de filtrar según ciertos criterios.tcpdump
Por lo general, se instala en la mayoría de los sistemas * nix de forma predeterminada, si no, generalmente hay un puerto en algún lugar para tomarlo para su distribución específica.fuente
netstat
es una buena opción. Utilice los parámetros según sea necesario. (consulte sus páginas de manual) Por ejemploAquí puede monitorear todo (a) proceso numérico de escucha (n) tcp (t) y udp (u) (p).
También puedes probar el
ss
comando. Para uso de referencia:SS Red TCP / UDP e información de socket
fuente
Si ejecuta Solaris o un derivado, eche un vistazo a conntrack
fuente