Skip to main content

Netstat: Cómo saber las ips conectadas a mi servidor

Comparte:

¿Cómo saber las ips conectadas a mi servidor?

 El siguiente comando muestra una lista de las IPs que están conectadas a nuestro servidor ignorando el ESTADO de la conexión (CLOSE_WAIT, ESTABLISHED, etc)
netstat -tn 2>/dev/null

el flag -t solicita al comando netstat que muestre solo las conexiones TCP
y el flag -n solicita al comando netstat que no resuelva las IPs a nombres (mostrando el formato numérico)

Mientras con 2>/dev/null, la salida de errores “stderr” (2) se redirecciona (>) a la “papelera” (/dev/null). Con esto simplemente indicamos que no queremos que posibles errores estropeen la bonita salida que estamos intentando hacer.

En este punto ya tenemos toda la información disponible, pero es un poco difícil usarla, así que intentemos llegar a un formato más limpio y manejable.

Añadiendo (|) un grep, podemos dejar solamente las IPs que estan conectadas al puerto 80 de nuestro servidor.

netstat -tn 2>/dev/null | grep ":80 "

¿Y también estaría bien dejar solo la 5ª columna, ¿no os parece?

netstat -tn 2>/dev/null | grep ":80 " | awk '{print $5}'

Quizá la parte más complicada será que solamente queremos que se muestren las IPs, así que usamos: cut -d: -f1

Donde:
-d solicita a ‘cut’ que utilice el siguiente carácter como delimitador.
-f indica a ‘cut’ el numero de campos de salida que queremos, en nuestro caso solo necesitamos uno.

netstat -tn 2>/dev/null | grep ":80 " | awk '{print $5}' | cut -d: -f1

Ahora, utilizando ‘sort’, ordenaremos nuestra lista, usando -c para que muestre solo entradas únicas y podemos mostrarlas en orden descendiente con ‘sort -nr’ (numeric y reverse).

A nuestra elección el usar ‘head’ para mostrar sólo los 10 primeros resultados

netstat -tn 2>/dev/null | grep ":80 " | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head

Y por supuesto, cambiando el puerto en ‘grep’, a el 25, podremos ver si alguien está abusando de nuestro servidor mail, o en un alojamiento VPS el seguimiento de spammers puede ser un poco más facil. También podemos usar un estado de conexión específico en ‘grep’ en el que estemos interesados, contando conexiones por proceso (usando el parámetro -p en netstat). En esencia, todo esto va de unos pocos comandos que combinados juntos se convierten en una herramienta muy útil para un administrador de sistema de red.

inodos al 100%, como liberar …

Comparte:

Problema presentado: Se deben liberar inodos del servidor:

[root@server root]# df -i
S.ficheros Nodos-i NUsados NLibres NUso% Montado en
/dev/hda1 6203942 6203942 0 100% /
none 5534 1 5531 1% /dev/shm

Solución: Empezamos a borrar los logs:

1. Correos y registros:
[root@server root]# cd /var/spool;
[root@server root]# rm -Rf exim

2. Después de un ataque de spam, todos los archivos quedan en cola dentro de /root/.cpanel/comet
Para eliminarlos, se debe aplicar el siguiente script.

[root@server root]# /usr/local/cpanel/bin/purge_dead_comet_files

Monitorear el tráfico de la tarjeta de red con iftop

Comparte:

IFTOP

Iftop es una programa para escanear el tráfico de red, monitorea el tráfico existente (de entrada y salida) y lo muestra gráficamente, entregando un análisis en tiempo real del uso del ancho de banda de una red. Sirve para ver el tráfico de red que pasa por una interfaz. De todas maneras, es mucho más simple y visual que usar netstat.

Para su instalación:
Exp. Probado en Centos 6.8 o inferior.

Primero: Instalar la repo

wget http://pkgs.repoforge.org/iftop/iftop-0.17-1.el6.rf.x86_64.rpm
rpm -ivh iftop-0.17-1.el6.rf.x86_64.rpm

Segundo: yum install iftop

Comandos para administrar bases de datos mysql desde SSH

Comparte:

Comandos:

Ingresar al monitor: mysql -u [username] -p; (Pedirá la contraseña)

Mostrar todas las bases de datos: show databases;

Ingresar a una base de datos: mysql -u [username] -p [database] (will prompt for password)

Crear una nueva base de datos: create database [database];

Seleccionar una base de datos: use [database];

Ver qué base de datos está en uso: select database();

Mostrar todas las tablas: show tables;

Ver la estructura de la table: describe [table];

Listar todos los indexes de una tabla: show index from [table];

Crear una nueva table con columnas: CREATE TABLE [table] ([column] VARCHAR(120), [another-column] DATETIME);

Añadir una columna: ALTER TABLE [table] ADD COLUMN [column] VARCHAR(120);

Añadir una columna con un unique, auto-incrementing ID: ALTER TABLE [table] ADD COLUMN [column] int NOT NULL AUTO_INCREMENT PRIMARY KEY;

Insertar un registro: INSERT INTO [table] ([column], [column]) VALUES (‘[value]’, [value]’);

Función de MySQL para la entrada de fecha y hora: NOW()

Seleccionar un registro: SELECT * FROM [table];

Explicar los registros: EXPLAIN SELECT * FROM [table];

Seleccionar parte de un registro: SELECT [column], [another-column] FROM [table];

Contar la cantidad de registros: SELECT COUNT([column]) FROM [table];

Contar y seleccionar un grupo de registros: SELECT *, (SELECT COUNT([column]) FROM [table]) AS count FROM [table] GROUP BY [column];

Seleccionar un registro específico: SELECT * FROM [table] WHERE [column] = [value]; (Selectors: <, >, !=; combine múltiple selectors with AND, OR)

Seleccionar registros que contienen el valor [value]: SELECT * FROM [table] WHERE [column] LIKE ‘%[value]%’;

Seleccionar registros que comienzan con el valor [value]: SELECT * FROM [table] WHERE [column] LIKE ‘[value]%’;

Seleccionar registros que comienzan con con “val” y terminan con “ue”: SELECT * FROM [table] WHERE [column] LIKE ‘[val_ue]’;

Seleccionar un rango: SELECT * FROM [table] WHERE [column] BETWEEN [value1] and [value2];

Seleccionar con orden personalizado y límite único : SELECT * FROM [table] WHERE [column] ORDER BY [column] ASC LIMIT [value]; (Order: DESC, ASC)

Actualizar registro: UPDATE [table] SET [column] = ‘[updated-value]’ WHERE [column] = [value];

Eliminar registros: DELETE FROM [table] WHERE [column] = [value];

Borrar todos los registros de una tabla (Sin eliminar la table): DELETE FROM [table]; (También pone en cero los incremetales)

Eliminar todos los registros de una tabla: truncate table [table];

Borrar columnas de una tabla: ALTER TABLE [table] DROP COLUMN [column];

Eliminar tablas: DROP TABLE [table];

Eliminar bases de datos: DROP DATABASE [database];

Personalizar los nombres de las columnas de salida: SELECT [column] AS [custom-column] FROM [table];

Exportación de un volcado de la base de datos: mysqldump -u [username] -p [database] > db_backup.sql
Use –lock-tables=false option for locked tables

Importar un volcado de la base de datos: mysql -u [username] -p -h localhost [database] < db_backup.sql

Salida: exit;

Funciones adicionales

Seleccionar sin duplicados: SELECT distinct name, email, acception FROM owners WHERE acception = 1 AND date >= 2015-01-01 00:00:00

Calcular el número de registro totales: SELECT SUM([column]) FROM [table];

Contar el número total de columnas [column] y grupo por [category-column]: SELECT [category-column], SUM([column]) FROM [table] GROUP BY [category-column];

Obtener el valor más largo [column]: SELECT MAX([column]) FROM [table];

Obtener el valor más pequeño: SELECT MIN([column]) FROM [table];

Obtener el valor promedio: SELECT AVG([column]) FROM [table];

Obtener el valor promedio redondeado y grupo po [category-column]: SELECT [category-column], ROUND(AVG([column]), 2) FROM [table] GROUP BY [category-column];

Múltipes tablas

Seleccionar de multiples tablas: SELECT [table1].[column], [table1].[another-column], [table2].[column] FROM [table1], [table2];

Combinar filas de diferentes tablas: SELECT * FROM [table1] INNER JOIN [table2] ON [table1].[column] = [table2].[column];

Combinar filas de tablas diferentes, sin usar la condición join: SELECT * FROM [table1] LEFT OUTER JOIN [table2] ON [table1].[column] = [table2].[column]; (The left table is the first table that appears in the statement.)

Renombrar la columna o tabla usando un alias: SELECT [table1].[column] AS ‘[value]’, [table2].[column] AS ‘[value]’ FROM [table1], [table2];

Funciones de usuario

Listar todos los usuarios: SELECT User,Host FROM mysql.user;

Crear un nuevo usuario: CREATE USER ‘username’@’localhost’ IDENTIFIED BY ‘password’;

Grant ALL access to user for * tables: GRANT ALL ON database.* TO ‘user’@’localhost’;

Find out the IP Address of the Mysql Host : SHOW VARIABLES WHERE Variable_name = ‘hostname’; (source)

Otros

Cambiar contraseña de una base de datos mysql: set password for ‘prefijo_db’@’localhost’ = password(‘aquielpassword’);

Exim – Script para encontrar el origen de spam

Comparte:

Para obtener una lista ordenada de los remitentes de correo electrónico de la cola de correo exim, se mostrará el número de mensajes enviados por cada uno.

# exim -bpr | grep "<" | awk {'print $4'} | cut -d "<" -f 2 | cut -d ">" -f 1 | sort -n | uniq -c | sort -n

Deberías obterner un resultado como el siguiente

1 arun@testdomain.com
2 sales@test1domain.com
3 sandy@test123.com
4 root@testdomain.com
29 admin@testdomain.com
325 arun@test123domain.com

=============================================================================================

Los siguientes compandos van a comprobar el script desde donde se origina el spam

# grep "cwd=/home" /var/log/exim_mainlog | awk '{for(i=1;i<=10;i++){print $i}}' | sort | uniq -c | grep cwd | sort -n

# awk '{ if ($0 ~ "cwd" && $0 ~ "home") {print $3} }' /var/log/exim_mainlog | sort | uniq -c | sort -nk 1

# grep 'cwd=/home' /var/log/exim_mainlog | awk '{print $3}' | cut -d / -f 3 | sort -bg | uniq -c | sort -bg

Se Obtendrá un resultado que se desprende de los dos primeros guiones. La tercera secuencia de comandos es sólo una sub de las dos primeras secuencias de comandos.


9 cwd=/home/test1/public_html
10 cwd=/home/test2/public_html/a1/www
15 cwd=/home/test3/public_html
91 cwd=/home/test4/public_html
178 cwd=/home/test5/public_html/web
770 cwd=/home/test6/public_html/foro
803 cwd=/home/test7/public_html/web
124348 cwd=/home/test8/public_html/wp/wp-content/themes/twentyeleven

=============================================================================================

Si tenemos que averiguar exactamente el script de spam . La siguiente secuencia de comandos muestra los actuales script que envían spam ahora. La siguiente secuencia de comandos le ayudará en todo momento de los servidores de correo. Le ayudará a encontrar el script exacto, que el envío de correos de spam.

# ps auxwwwe | grep | grep --color=always "" | head

El uso de la secuencia de comandos es como se muestra a continuación.
Ejemplo:

# ps auxwwwe | grep test8 | grep --color=always "/home/test8/public_html/wp/wp-content/themes/twentyeleven" | head

Cuando se haya encontrado el script exacto, el siguiente script ayudará a encontra la dirección ip responsable del spam . Se obtendrán una lista de ips del scripts. La ip que tenga el mayor número de accesos, es probablemente que sea la que esté enviando spam. Se recomienda bloquearla en el firewall.

# grep "" /home/user/access-logs/testdomain.com | awk '{print $1}' | sort -n | uniq -c | sort -n

=============================================================================================

Siguiente comando que le mostrará el scripts usando para enviar email masivos:

# egrep -R "X-PHP-Script" /var/spool/exim/input/*

=============================================================================================

Muestra los 50 dominios que usan con mayor frecuencia el servidor de correos

# eximstats -ne -nr /var/log/exim_mainlog

=============================================================================================
Muestra desde qué usuario del home el correo está saliendo, se puede rastrear rapidamente y bloquearlo. Muestra los mensajes que salen del servidor

# ps -C exim -fH ewww | grep home
=============================================================================================

Muestra las direcciones IP que están conectados al servidor a través del número de puerto 25.Si una ip está teniendo más de 10 conexiones, se recomienda bloquear del firewall.

# netstat -plan | grep :25 | awk {'print $5'} | cut -d: -f 1 | sort | uniq -c | sort -nk 1

==============================================================================================

Para encontrar spamming "nobody", emita el siguiente comando

# ps -C exim -fH ewww | awk '{for(i=1;i<=40;i++){print $i}}' | sort | uniq -c | grep PWD | sort -n

Se dará algún resultado como:
Ejemplo:

6 PWD=/
347 PWD=/home/sample/public_html/test

Contar el PWD y si este tiene un valor muy grande, revisar los archivos listados en el directorio PWD
(Ignorar si es / or /var/spool/mail /var/spool/exim)

El comando anterior sólo es válida si el envío de correo basura está actualmente en curso
. Si el envío de correo basura ha pasado algunas horas antes, utilice el siguiente comando.

# grep "cwd=" /var/log/exim_mainlog | awk '{for(i=1;i<=10;i++){print $i}}' | sort | uniq -c | grep cwd | sort -n

==============================================================================================
La siguiente secuencia de comandos dará el resumen de mensajes en la cola de correo.

exim -bpr | exiqsumm -c | head

El resultado obtenido será similar a:

Count Volume Oldest Newest Domain
----- ------ ------ ------ ------

114 171KB 24h 28m testdomain.com
15 28KB 36h 7m gmail.com
5 10KB 34h 10h test2domain.com
4 8192 27h 4h yourdomain.com
4 75KB 7m 7m server.domain.com
3 6041 23h 42m test123.com

Localizar SPAM en el Asunto en el log exim_mainlog

awk -F"T=\"" '/<=/ {print $2}' /var/log/exim_mainlog | cut -d\" -f1 | sort | uniq -c | sort -n

La salida será similar a:

200 Venta de servicio de hosting económico
303 Respuesta: Gracias por preferirnos
102 Nueva cuenta creada

Para encontrar al usuario:

grep "Nueva cuenta creada" /var/log/exim_mainlog | awk '{print $5}' | sort | uniq -c | sort -n

El resultado:
1 test@ejemplo.cl
9283 usuario1@ejemplo.cl

Localizar la ip del sender

grep "<= usuario1@ejemplo.cl" /var/log/exim_mainlog | grep "Nueva cuenta creada" | grep -o "\[[0-9.]*\]" | sort -n | uniq -c | sort -n

==============================================================================================

Para encontrar comandos básicos de exim

http://linuxadmintips4u.blogspot.in/2012/11/most-frequently-used-commands-in-exim.html

Cómo habilitar modo pasivo en CSF y PureFTP / ProFTP

Comparte:

1. Lo primero es añadir el rango para el modo pasivo, que está entre 30000-50000 para Pureftp o Proftp

(a) Pureftpd

nano /etc/pure-ftpd.conf, y descomentar la siguiente línea:

PassivePortRange 30000 35000

(b) ProFTP

nano /etc/proftpd.conf, y descomentar o añadir la siguiente línea:

PassivePorts 30000 35000

2. Ahora, se debe abrir el puerto en el CSF, 30000 – 35000 en el archivo de configuración de CSF, en la la parte de TCP_IN

nano /etc/csf/csf.conf

# Abrir los puertos entrantes
TCP_IN = "20,21,22,25,53,80,110,30000:35000"

Finalmente, hay que reiniciar el firewall CSF, y el servidor FTP

service csf restart o csf -r
service pureftpd restart (or)
service proftpd restart

Cómo Instalar CSF firewall

Comparte:

Ir a la consola:

cd /usr/src
rm -fv csf.tgz
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh

Habilitar csf

cd /etc/csf
nano csf.conf

Editar (por default!)

# lfd will not start while this is enabled
TESTING = “0”

# 3 = Restrict syslog/rsyslog access to RESTRICT_SYSLOG_GROUP ** RECOMMENDED **
RESTRICT_SYSLOG = “3”

Cómo listar archivos por tamaño en linux

Comparte:

El comando para listar en linux es

ls

Luego, existen muchas variantes, por ejemplo:

ls -lt : Ordena por fecha de creación/modificación de forma descendente.

ls -ltr : Ordena por fecha de creación/modificación de forma ascendente.

ls -lsh –sort=size : ordenar por tamaño y muestra desde los más grandes hasta los mas pequeños.
ls -lsh –sort=size -r : Ordena por tamaño y muestra primero los más pequeños y al final de la lista los mas grandes.

Ojo: El parámetro -r para es el que invierte todo, y –sort y quien le da la orden para el tipo de orden que queremos.

Más opciones para el sort sacadas directamente del man:

–sort=WORD
extension -X, none -U, size -S, time -t, version -v, status -c,
time -t, atime -u, access -u, use -u

size: Seleccionará por tamaños

Desactivar MYSQL STRICT MODE (Probado)

Comparte:

Sistema op. y base de datos:

Centos 6.8
Mysql 5.6.3

Al intentar Desactivar MYSQL STRICT MODE lo primero que hice fue modificar el archivo my.cnf localizado en /etc/my.cnf y añadí probando, todas las líneas que detallo a continuación:

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
sql-mode=""
sql-mode="TRADITIONAL"

Luego, revise si se había hecho el cambio,


root@054 [~]# mysql -e 'select @@GLOBAL.sql_mode;'

Reinicié mysql, y seguía el mismo problema.

Finalmente, leí la documentación completa de SQL y me di cuenta que mysql y mariadb leen la configuración de my.cnf en un orden preestablecido. Esto quiere decir que, primero lee /etc/my.cnf y después /usr/my.cnf.
Entonces, ingresé a /usr/my.cnf, y añadí lo siguiente:


sql-mode=""

Reinicié mysql y al fin funcionó.

Cómo configurar zona dns con bind en Centos 6.2 , 6.5, 6.7 y 6.8 Paso a Paso

Comparte:

Hoy vamos a escribir sobre cómo configurar un servidor DNS correctamente. No está demás recordar, que un servidor DNS es un servidor que traduce nombres de dominio a IPs y viceversa. En una imagen muy resumida, el servidor DNS tiene la siguiente función:

funcionamiento de bind como servidor dns

Para comenzar, lo primero es instalar bind como servidor DNS (Si vas a utilizar cPanel, no debes instalarlo de forma manual, cPanel instala LAMP por completo)

yum install bind*

instalar bind paso 1

Luego de instalar bind, continuamos verificando nuestra ip en la red para comprobar que todo esté correcto para empezar. Para ello, vamos a la siguiente ruta:
CentOS 6.2, 6.5 /etc/sysconfig/network-scripts/ifcfg-Auto_eth1
CentOS 6.7 nano /etc/sysconfig/network-scripts/ifcfg-eth0

ipconfig paso 2

Finalmente reiniciamos el servicio con el siguiente comando:
service network restart

Lo que sigue a continuación, te recomendamos hacerlo solo si vas a configurar el bin de forma manual, si instalaste cPanel, entonces mejor hazlo desde su interfaz una vez que ingresas por primera vez. Estos pasos te servirán de guía para ir revisando que todo quede correctamente. Si te equivocas en algo, ya sabes que tienes que ir a estos archivos de configuración. Lo que haremos ahora, es ir a modificar el nombre del servidor o también llamado Hostname

nano /etc/sysconfig/network

cambiar hostname de un servidor centos

Con eso ya tenemos el nombre de la máquina Ok.

Sigamos… Nuevamente, este item recomendamos modificarlo desde la configuración inicial de WHM/cPanel en caso de que lo uses, en otro caso, debes hacerlo directamente desde acá. Estas IPs te las tiene que entregar el administrador del Datacenter.

modificar servidores dns

Ahora, iremos a configurar el archivo “hosts” para agregar el nombre de nuestro servidor y de las dns que vamos a configurar. La ip que aparece más abajo, será la ip de tu servidor.

modificar el archivo hosts de /etc/hosts en centos

Muy bien… ahora tenido toda lo anteriormente citado bien configurado, vamos a proceder a la configuración del demonio named, lo que vamos a hacer, es permitir consultas desde cualquier ip en nuestro dominio.

nano /etc/named.conf
modificar archivo named.conf

Lo que se realizó, fue agregar la ip de nuestro servidor:


allow-transfer { "none";192.168.0.40;};
};

Luego, guardamos los cambios.

Ahora, salgamos de la carpeta /etc, y nos vamos a configurar nuestra zona DNS en la dirección /var/named, y lo primero, es hacer una copia de dos archivos:

root@vps[~]# cp named.localhost forward.zone
root@vps[~]# cp named.loopback reverse.zone

Estos nuevos archivos sirven para definir las zonas frontales e inversas del DNS.
Luego, le damos los permisos a los nuevos archivos que creados:

root@vps[~]# chown named forward.zone reverse.zone
root@vps[~]# chogrp named forward.zone reverse.zone

Ahora,nos vamos a editar el archivo forward.zone

root@vps[~]# nano /var/named/forward.zone

modificar archivo forward.zone

Ahora, vamos a modificar el archivo named.rfc1912.zones

nano named.rfc1912.zones

modificar archivo forward.zone

Sigamos bajando y hagamos una copia de la zona para no estar escribiéndola por completo:

modificar archivo forward.zone

y finalmente, debemos configurar la reversa

modificar archivo reverse.zone

Cambiamos los permisos de los archivos del named

/var/named
chmod 750 *