lunes, 19 de octubre de 2015

Creating Apache Virtual Hosts with Enable/Disable Vhosts Options in RHEL/CentOS 7.0

Virtual Hosting allows Apache Weberver to serve different content based on IP Address, hostname or used port number. This guide will use a Debian like approach on enabling and managing Virtual Hosts on Red Hat Enterprise Linux/CentOS 7.0 by creating two directories on /etc/httpd/ path, which will keep all enabled and disabled website file configurations – sites-available and sites-enabled, and two types of scripts to act as commands, one that enables and other that disables specified virtual hosts – a2ensite and a2dissite. This approach has some advantages because you done have to mess with httpd configuration file and every virtual host has its own configuration file that can be found on a single location – enabled hosts are just symlinks – which make the process of enabling, disabling, creating or deleting them very manageable.
Apache Virtual Hosting in CentOS
Apache Virtual Hosting with Enable/Disable Options

Requirements

  1. LAMP Basic Installation on RHEL/CentOS 7.0

Create and Manage Apache Virtual Hosts in RHEL/CentOS 7

1. To begin, start by entering on /etc/httpd/ path, create sites-available and sites-enabled directories and edit Apache httpd.conf file to apply the new enabled websites location.
# cd /etc/httpd/
# mkdir sites-available sites-enabled
# nano conf/httpd.conf
Create Apache Vhost Directories
Create Apache Vhost Directories
2. On httpd.conf file add the following directive line at the bottom of the file, which will make Apache read and parse all files located on /etc/httpd/sites-enabled/ ended in .conf extension.
IncludeOptional sites-enabled/*.conf
Enable Apache Directories
Enable Apache Directories
3. On next step create a new Virtual Host on sites-available location using a descriptive name – in this case I’ve used rheltest.lan.conf – and use the following file as a template.
# nano /etc/httpd/sites-available/rheltest.lan.conf
Use this configuration as a guide.
<VirtualHost *:80>
        ServerName rheltest.lan
        DocumentRoot "/var/www/rheltest.lan"
                <Directory "/var/www/rheltest.lan">
                Options Indexes FollowSymLinks MultiViews
         # AllowOverride controls what directives may be placed in .htaccess files.      
                        AllowOverride All
        # Controls who can get stuff from this server file
                        Order allow,deny
                        Allow from all
           </Directory>
        <IfModule mpm_peruser_module>
                ServerEnvironment apache apache
        </IfModule>
        ErrorLog  /var/log/httpd/rheltest.lan-error.log
        CustomLog /var/log/httpd/rheltest.lan-access.log combined
</VirtualHost>
Create Apache Vhosts
Create Apache Vhosts
4. If you changed DocumentRoot location on your virtual host from default /var/www/html to other path make sure you also create this path.
# mkdir -p /var/www/rheltest.lan
NOTE: Also assure that ServerName host is a valid DNS record or is added to your local machines hosts file, from where you are planning to visit the website.
5. Now it’s time to create a2ensite and a2dissite bash scripts on a executable system path – in this case is /usr/local/bin/ – but
you can use any executable path that $PATH system variable outputs.
Create a2ensite Script
Create a following file with your choice of editor.
# nano /usr/local/bin/a2ensite
Add the following script to it.
#!/bin/bash
if test -d /etc/httpd/sites-available && test -d /etc/httpd/sites-enabled  ; then
echo "-----------------------------------------------"
else
mkdir /etc/httpd/sites-available
mkdir /etc/httpd/sites-enabled
fi

avail=/etc/httpd/sites-available/$1.conf
enabled=/etc/httpd/sites-enabled/
site=`ls /etc/httpd/sites-available/`

if [ "$#" != "1" ]; then
                echo "Use script: a2ensite virtual_site"
                echo -e "\nAvailable virtual hosts:\n$site"
                exit 0
else

if test -e $avail; then
sudo ln -s $avail $enabled
else

echo -e "$avail virtual host does not exist! Please create one!\n$site"
exit 0
fi
if test -e $enabled/$1.conf; then

echo "Success!! Now restart Apache server: sudo systemctl restart httpd"
else
echo  -e "Virtual host $avail does not exist!\nPlease see available virtual hosts:\n$site"
exit 0
fi
fi
Create a2ensite Script
Create a2ensite Script
Create a2dissite Script
Create a following file with your choice of editor.
# nano /usr/local/bin/a2dissite
Add the whole following script to the file.
#!/bin/bash
avail=/etc/httpd/sites-enabled/$1.conf
enabled=/etc/httpd/sites-enabled
site=`ls /etc/httpd/sites-enabled/`

if [ "$#" != "1" ]; then
                echo "Use script: a2dissite virtual_site"
                echo -e "\nAvailable virtual hosts: \n$site"
                exit 0
else

if test -e $avail; then
sudo rm  $avail
else
echo -e "$avail virtual host does not exist! Exiting!"
exit 0
fi

if test -e $enabled/$1.conf; then
echo "Error!! Could not remove $avail virtual host!"
else
echo  -e "Success! $avail has been removed!\nPlease restart Apache: sudo systemctl restart httpd"
exit 0
fi
fi
Create a2dissite Script
Create a2dissite Script
6. After both script files had been created, make sure they are executable and start using them to enable or disable virtual hosts by appending vhost name as command parameter.
# chmod +x /usr/local/bin/a2*
# a2ensite vhost_name
# a2disite vhost_name
7. To test it, enable the virtual host created earlier, restart Apache service and direct browser to the new virtual host – in this case http://rheltest.lan.
# a2ensite rheltest.lan
# systemctl restart httpd
Enable Apache Virtualhost
Enable Apache Virtualhost
Verify Apache Virtualhost
Verify Apache Virtualhost
That’s it! Now you can use a2eniste and a2disite bash scripts as system commands to manage Apache Vhosts file on RHEL/CentOS 7.0.

martes, 28 de julio de 2015

Netstat: Analizando la red y detectando problemas



netstat es una herramienta que proporciona un conjunto de comandos que permitirá saber qué está pasando en nuestra red. A lo largo de este artículo se explicarán algunas opciones básicas que permitirán entender mejor nuestra red y conocer qué programa puede estar causando problemas. 

Netstat es un paquete de herramienas de red

El comando netstat sirve para varias cosas, como mostrar estadísticas de la red, imprimir la tabla de rutas, mostrar conexiones activas y mucho más. Para cada una de las opciones de uso menciondas existe un comando específico que realiza la misma tarea. Pero netstat los abarca todos bajo un mismo comando, y además es multiplataforma. Lo cual quiere decir que podremos usarlo tanto en Windows, Linux o Mac.
Tras esta pequeña introducción, veamos algunas salidas de este comando:

Mostrar las conexiones de red

Es posible mostrar las conexiones que existen actualmente entre tu máquina y otras máquinas, así como sockets escuchando en un puerto para que otra máquina se conecte. También muestra qué programas están activos en la red:
$ sudo netstat -apA inet
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:sunrpc                *:*                     LISTEN      1775/rpcbind    
tcp        0      0 *:38768                 *:*                     LISTEN      1808/rpc.statd  
tcp        0      0 localhost:smtp          *:*                     LISTEN      2861/exim4      
tcp        0      0 *:17500                 *:*                     LISTEN      2477/dropbox    
tcp        0      0 hkr-pc.local:48985      wordpress.com:https     ESTABLISHED 3451/firefox.real
tcp        0      0 hkr-pc.local:60706      93.184.220.111:http     TIME_WAIT   -               
tcp        0      0 hkr-pc.local:60684      93.184.220.111:http     TIME_WAIT   -               
tcp        0      0 hkr-pc.local:44415      216.151.210.122:http    TIME_WAIT   -               
tcp        0      0 hkr-pc.local:43597      72.21.91.121:http       TIME_WAIT   -               
tcp        0      0 hkr-pc.local:35340      178-33-113-45.ovh.:http TIME_WAIT   -               
tcp        0      0 hkr-pc.local:36162      76.74.254.120:https     ESTABLISHED 3451/firefox.real
tcp        0      0 hkr-pc.local:44472      76.74.254.123:http      TIME_WAIT   -               
tcp        0      0 hkr-pc.local:35336      178-33-113-45.ovh.:http TIME_WAIT   -               
tcp        0      0 hkr-pc.local:43599      72.21.91.121:http       TIME_WAIT   -               
tcp        0      0 hkr-pc.local:37806      amung.us:http           ESTABLISHED 3451/firefox.real
tcp        0  13352 hkr-pc.local:34422      ec2-23-21-220-38.:https ESTABLISHED 2477/dropbox    
tcp        0      0 hkr-pc.local:43260      fa-in-f154.1e100.n:http ESTABLISHED 3451/firefox.real
tcp        0      0 hkr-pc.local:52897      wg-in-f95.1e100.ne:http TIME_WAIT   -               
tcp        0      0 hkr-pc.local:60689      93.184.220.111:http     TIME_WAIT   -               
tcp        0      0 hkr-pc.local:60687      93.184.220.111:http     TIME_WAIT   -               
tcp        0      0 hkr-pc.local:60685      93.184.220.111:http     TIME_WAIT   -               
tcp        0      0 hkr-pc.local:43335      wordpress.com:https     ESTABLISHED 3451/firefox.real
tcp        0      0 hkr-pc.local:52902      wg-in-f95.1e100.ne:http TIME_WAIT   -               
tcp        0      0 hkr-pc.local:44416      216.151.210.122:http    TIME_WAIT   -               
tcp       38      0 hkr-pc.local:58802      v-client-1a.sjc.d:https CLOSE_WAIT  2477/dropbox    
tcp        0      0 hkr-pc.local:57347      ec2-23-21-114-122.:http ESTABLISHED 3451/firefox.real
tcp        0      0 hkr-pc.local:43601      72.21.91.121:http       TIME_WAIT   -               
tcp        0      0 hkr-pc.local:60704      93.184.220.111:http     TIME_WAIT   -               
tcp        0      0 hkr-pc.local:41758      199.119.233.72.sta:http ESTABLISHED 3451/firefox.real
tcp        0      0 hkr-pc.local:60710      93.184.220.111:http     TIME_WAIT   -               
tcp        0      0 hkr-pc.local:52920      wordpress.com:http      ESTABLISHED 3451/firefox.real
tcp        0      0 hkr-pc.local:36232      76.74.254.123:https     ESTABLISHED 3451/firefox.real
tcp        0      0 hkr-pc.local:60688      93.184.220.111:http     TIME_WAIT   -               
tcp        0      0 hkr-pc.local:40181      sjc-not20.sjc.drop:http ESTABLISHED 2477/dropbox    
tcp        0      0 hkr-pc.local:60686      93.184.220.111:http     TIME_WAIT   -               
tcp        0      0 hkr-pc.local:43600      72.21.91.121:http       TIME_WAIT   -               
udp        0      0 *:bootpc                *:*                                 2405/dhclient   
udp        0      0 *:sunrpc                *:*                                 1775/rpcbind    
udp        0      0 *:678                   *:*                                 1775/rpcbind    
udp        0      0 localhost:712           *:*                                 1808/rpc.statd  
udp        0      0 *:17500                 *:*                                 2477/dropbox    
udp        0      0 *:mdns                  *:*                                 2298/avahi-daemon: 
udp        0      0 *:44290                 *:*                                 1808/rpc.statd  
udp        0      0 *:53066                 *:*                                 2405/dhclient   
udp        0      0 *:1900                  *:*                                 2905/minissdpd  
udp        0      0 *:45008                 *:*                                 2298/avahi-daemon:
Las parámetros pasados a netstat son; -a para mostrar todos los sockets, -p muestra la columna PID/Program, -A inet muestra solo sockets TCP/UDP. En Windows la opción -A inet puede omitirse y -p debe reemplazarse por -o. En Mac, no hay equivalente a -p y -A inet debe reemplzarse por -f inet. Para conocer los nombres de los programas en Mac usa lsof -i
El singnificado de cada columna es el siguiente:
Proto: Indica el protocolo usado por el socket, puede ser TCP o UDP (Son protocolos de red). TCP se usa para obtener conexiones en las que se asegura que todos los paquetes llegan a su destino, en el orden correcto. El problema es que se vuelve muy lento si la conexión es mala. UDP es mucho más rápido, pero puede perder paquetes o entregarlos en un orden incorrecto. En resumen, TCP se usa para navegar por internet y descargar ficheros y UDP se usa en videos streaming y juegos.
Recv-Q y Send-Q: Indican la cantidad de bytes que hay en cola para dicho socket. En Recv-Q datos esperando a ser leidos y en Send-Q a ser enviados. Normalmente ambas columnas han de estar a 0. De lo contrario puede que exista algún problema. En el ejemplo hay dos sockets con valores distintos a cero, los miraremos más adelante.
Local Address y Foreign Address: A qué host y puerto está conectado cada socket. La dirección local siempre será el ordenador en el que se está ejecutando netstat, en este caso se llama * hkr-pc*. Foreign Address puede ser cualquier otro pc en internet, o la misma máquina local. Aunque parezca algo extraño, en ocasiones es útil que en ambas columnas aparezca la máquina local, lo cual indica que dicha máquina se está comunicando con ella misma a través de la red.
State: Muestra el estado del socket. TCP dispone de una serie de estados, algunos de ellos son LISTEN (Esperando a que otra máquina establezca conexión),ESTABLISHED (Listo para comunicarse). En la lista aparecen varios más, como CLOSE WAIT, este estado indica que la máquina remota cerró la conexión, pero el programa local no ha seguido la petición y permanece abierto. Normalmente, un estado como este y cantidades distintas a cero en las columnas Recv-Q y Send-Q suelen ir de la mano. Otro estado que aparece en el ejemplo es TIME WAIT, puedes consultar una lista completa de los estados TCP en la referencias.
PID/Program name: El indicador de proceso del socket en ejecución y el nombre del programa ejecutando dicho proceso.
Procedamos a interpretar los resultados de netstat. En el ejemplo de arriba las direcciones de la columna Foreign adress aparecen cortadas. Para verlas completas es necesario ejecutar netstat con el parámetro -W:
$ sudo netstat -apWA inet | grep https
tcp        0      0 hkr-pc.local:50974      ec2-176-34-135-167.eu-west-1.compute.amazonaws.com:https ESTABLISHED 3619/firefox.real
tcp        0      0 hkr-pc.local:48162      ec2-50-18-192-251.us-west-1.compute.amazonaws.com:https ESTABLISHED 3619/firefox.real
tcp        0      0 hkr-pc.local:50145      ec2-46-51-197-88.eu-west-1.compute.amazonaws.com:https ESTABLISHED 3619/firefox.real
tcp        0      0 hkr-pc.local:50149      ec2-46-51-197-88.eu-west-1.compute.amazonaws.com:https ESTABLISHED 3619/firefox.real
tcp        0      0 hkr-pc.local:49490      fa-in-f113.1e100.net:https ESTABLISHED 3619/firefox.real
tcp        0      0 hkr-pc.local:48158      ec2-50-18-192-251.us-west-1.compute.amazonaws.com:https ESTABLISHED 3619/firefox.real
tcp        0      0 hkr-pc.local:59060      mad01s08-in-f31.1e100.net:https ESTABLISHED 3619/firefox.real
tcp        0      0 hkr-pc.local:50147      ec2-46-51-197-88.eu-west-1.compute.amazonaws.com:https ESTABLISHED 3619/firefox.real
tcp        0      0 hkr-pc.local:50976      ec2-176-34-135-167.eu-west-1.compute.amazonaws.com:https ESTABLISHED 3619/firefox.real
tcp        0      0 hkr-pc.local:50972      ec2-176-34-135-167.eu-west-1.compute.amazonaws.com:https ESTABLISHED 3619/firefox.real
tcp        0      0 hkr-pc.local:50973      ec2-176-34-135-167.eu-west-1.compute.amazonaws.com:https ESTABLISHED 3619/firefox.real
tcp        0      0 hkr-pc.local:50977      ec2-176-34-135-167.eu-west-1.compute.amazonaws.com:https ESTABLISHED 3619/firefox.real
tcp        0      0 hkr-pc.local:50144      ec2-46-51-197-88.eu-west-1.compute.amazonaws.com:https ESTABLISHED 3619/firefox.real
tcp        0      0 hkr-pc.local:50148      ec2-46-51-197-88.eu-west-1.compute.amazonaws.com:https TIME_WAIT   -               
tcp        0      0 hkr-pc.local:50975      ec2-176-34-135-167.eu-west-1.compute.amazonaws.com:https ESTABLISHED 3619/firefox.real
tcp        0      0 hkr-pc.local:48163      ec2-50-18-192-251.us-west-1.compute.amazonaws.com:https ESTABLISHED 3619/firefox.real
Con el comando de arriba estoy mostrando únicamente las conexiones https establecidas con mi máquina. Ahora, sí que se ven las direcciones completas. Si te diriges a la dirección
ec2-176-34-135-167.eu-west-1.compute.amazonaws.com
podrás comprobar que dicha dirección pertenece al buscador duckduckgo. Y ha sido listada por netstat porque al momento de ejecutarlo tenía una pestaña del navegador abierta con el buscador del pato.
Veamos ahora la razón de que existan dos conexiones con datos pendientes en la cola de entrada y salida.
Ambas conexiones son de dropbox, una de ellas tiene el estado TCP en ESTABLISHED, así que de esa no hay que preocuparse, ya que está transmitiendo datos. La otra sin embargo tiene datos pendientes en la cola de entrada y estado TCP CLOSE WAIT, es decir, la máquina conectada a la nuestra ha cerrado la conexión, pero nuestro proceso local de dropbox no lo ha hecho. Lo cual quiere decir que aunque haya finalizado la tarea que se estaba llevando a cabo, no se han liberando los recursos que el socket había reservado. Estos escenários no deberían producirse, pero mientras no haya demasiados casos como este no debes preocuparte.
He comentado que en ocasiones es posible que tanto en la columna Local Address como en Foreign Address aparezca la dirección local de nuestra máquina. Este comportamiento lo usan algunos programas para conseguir que la aplicación sea multiplataforma, ya que la comunicación a través de la red no varía de plataforma a plataforma (Linux, Windows, mac ect.)
Otro de los posibles valores que puede aparecer en la columna Foreign Address es *:*, y si el tipo de conexión es TCP tendrá el estado LISTEN. Esto quiere decir que la máquina local está esperando a que otra máquina remota envíe datos. Ejemplos típicos pueden ser sshd (esperando a que alguien abra una conexión ssh), apache o nginx (Esperando a que alguien solicite una página web) etc.
Cuando se realiza una conexión externa, el programa local no suele preocuparse por el puerto local usado para la conexión. Esa es la razón por la que el puerto en el lado local no suele reconocerse y se traduce al nombre del protocolo como https, www etc.
Netstat también sirve para mostrar la tabla de rutas (Routing Table)

Imprimiendo la tabla de rutas (Routing Table)

La tabla de rutas significa dedidir dónde mandar un paquete en base a su destino. Un ejemplo de estas tablas es el siguiente:
$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         10.61.29.89     0.0.0.0         UG        0 0          0 eth1
10.61.29.89     *               255.255.255.255 UH        0 0          0 eth1
192.168.1.32    *               255.255.255.248 U         0 0          0 eth1
Una breve explicación del significado de las columnas:

Destination: Patrón con el que se compara la dirección de destino del paquete. Cuando se envia un paquete a internet, se comprueba esta tabla de arriba a abajo hasta que se cumpla el patrón, luego se envía. El valor 0 se usa como comodín, si usamos este patrón 192.168.1.0, las direcciones desde 192.168.1.1 hasta 192.168.1.255 serán valores válidos para dicho patrón.

Gateway: Indica dónde mandar el paquete que coincide con el patrón de la columna anterior. El * en esta columna significa “enviar localmente” (El destino estará en la misma red.)

Genmask: La máscara de subred. Se usa para determinar cuantos bits desde el principio de la ip se usan para identificar una subred.

Flags: Muestra qué flags se aplican a cada línea de la tabla. U viene de Up, indicando que dicha línea está activa. G significa que la línea usa un Gateway. H, indica que el enrutamiento se hace a una dirección de host completa.

MSS: Maximum Segment Size, parámetro TCP usado para dividir paquetes en partes más pequeñas cuando el destinatario indica que es capaz de trabajar con tamaños muy grandes. A dia de hoy, la mayoría de ordenadores no tienen problemas con esto, por lo que está fijado a 0.

Window: Igual que MSS, permite alterar un parámetro TCP. En este caso el default Window size, que indica cuantos paquetes TCP pueden mandarse antes de que uno de ellos sea de ACKnowledged. Suele estar a 0.

irtt: Initial Round Trip Time, puede ser usado por el Kernel para intentar adivinar la mejor configuración de parámetros para TCP. No suele usarse.

iface: Establece la interfaz de red a usar para enviar los paquetes.

Mostrar estadísticas e interfaces

También es posible, con netstat, mostrar las interfaces disponibles y listar algunas estadísticas de cómo se están comportando:
$ netstat -i
Kernel Interface table
Iface       MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500 0         0      0      0 0             0      0      0      0 BMU
eth1       1500 0    253744      0      0 0        153622      0      0      0 BMRU
lo        16436 0         4      0      0 0             4      0      0      0 LRU
El significado de cada columna es el siguiente:
Iface: Interfaces disponibles para las que se muestran las estadísticas. lo es la interfaz de loopback, una interfaz privada usada por la máquina para comunicarse consigo misma, como se vió arriba, este comportamiento es frecuente y proporciona mayor rendimiento.

MTU: Maximum Transmission Unit (Unidad Máxima de Transmisión) que la interfaz puede enviar de una sola vez.

RX-OK/ERR/DRP/OVR: Estadísticas sobre los paquetes que se han recibido. OK significa “Correctemente recibido”, “ERR” recibido pero con CheckSum incorrecto (ocurre cuando la conexión es mala), “DRP” eliminado porque el buffer está lleno (Ocurre cuando se reciben muchos paquetes en un periodo muy corto de tiempo), “OVR”, eliminado porque el kernel no pudo manejarlo a tiempo (Si esto ocurre, la máquina estaba muy ocupada).

TX-OK/ERR/DRP/OVR: Significan lo mismo que sus homólogos en la columna RX, pero para paquetes enviados por la interfaz.

FLG: Flags activas para la interfaz. “B” de “Capacidad de broadcast”, es decir, la interfaz es capaz de transmitir un paquete a todos los equipos de su misma subred. “M” de “capacidad de Multicast”, la interfaz puede enviar paquetes con múltiples destinos. “L” de “interfaz loopback”, la interfaz con dicho flag activa coloca todo que envía inmediatamente en su cola de recibido. “U” y “R” significan “Up”(Activa) y “running”(ejecutandose) respectivamente.
El motivo por el que el valor del “MTU” es mayor en la interfaz de loopback se debe a motivos de rendimiento, ya que no tendrá que partir los paquetes en trozos más pequeños.
Como se aprecia en el ejemplo, todo parece estar correcto, ya que las columnas de errores están a 0. Una opción interesante de este comando es añadirle la opción -c, es decir “netstat -ci”, para ver la tabla cada segundo, y comprobar así si hay algún error.
Como nota final, y aunque este no es un artículo patrocinado, considero que debo proporcionar un enlace a la Linux Academy, perteneciente al autor cuyo artículo he traducido.

NetStat: Tips para detectar ataques DDoS

 

Me he encontrado un artículo muy interesante en Linuxaria sobre como detectar si nuestro Servidor se encuentra bajo ataque DDoS (Distributed Denial of Service), o lo que es lo mismo, Ataque de Denegación de Servicios.
NetStat para evitar ataques DDoS
Este tipo de ataques es bastante habitual y puede ser el motivo por el cual nuestros servidores estén algo lentos (aunque también puede ser un problema de Capa 8) y nunca está de mas estar prevenidos. Para ello, se puede usar la herramienta netstat, la cual nos permite ver las conexiones de red, tablas de rutas, estadísticas de las interfaces y otras series de cosas.

Ejemplos de NetStat

netstat -na
Esta pantalla se incluyen todas las conexiones de Internet activas en el servidor y sólo las conexiones establecidas.

netstat -an | grep :80 | sort
Mostrar sólo las conexiones activas de Internet al servidor en el puerto 80 , que es el puerto http y ordenar los resultados. Útil en la detección de una sola inundación (flood) por lo que permite reconocer muchas conexiones provenientes de una dirección IP.
 
netstat -n -p|grep SYN_REC | wc -l
Este comando es útil para saber cuántos SYNC_REC activa se están produciendo en el servidor. El número debe ser bastante bajo , preferiblemente menos de 5 . En los incidentes de ataques de denegación de servicio o bombas por correo, el número puede ser bastante alto. Sin embargo, el valor siempre depende del sistema, por lo que un valor alto puede ser normal en otro servidor.
 
netstat -n -p | grep SYN_REC | sort -u
Haz una lista de todas las direcciones IP de los implicados.
 
netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
Enumere todas las direcciones IP únicas del nodo que están enviando el estado de la conexión SYN_REC .
 
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
Utilice el comando netstat para calcular y contar el número de conexiones de cada dirección IP que hace al servidor.
 
netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
Cantidad de direcciones IP que se conectan al servidor mediante el protocolo TCP o UDP.
 
netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
Verifique las conexiones marcadas como ESTABLECIDOS en lugar de todas las conexiones, y muestra las conexiones para cada IP.
 
netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
Muestra y lista de direcciones IP y su número de conexiones que se conectan al puerto 80 en el servidor. El puerto 80 es utilizado principalmente por HTTP para peticiones Web.

Cómo mitigar un ataque DOS

Una vez que haya encontrado la IP que están atacando el servidor puede utilizar los siguientes comandos para bloquear su conexión a su servidor :
 
iptables -A INPUT 1 -s $IPADRESS -j DROP/REJECT
Tenga en cuenta que usted tiene que reemplazar $IPADRESS con las direcciones IP que se han encontrado con netstat.
Después de la cocción el comando anterior, MATAR todas las conexiones httpd para limpiar su sistema y reiniciarlo posteriormente usando los siguientes comandos:

killall -KILL httpd
service httpd start # Para los sistemas de Red Hat
/etc/init/d/apache2 restart # Para sistemas Debian

 

viernes, 24 de julio de 2015

Aviso

Si alguien encuentra publicado su informacion en este sitio quiero que sepa que lo uso para tener guardados todos los temas que me interesan en un solo lugar y como estan en su mayoria muy bien explicados los atesoro !!


Por eso si los ven aca es porque me olvide de ponerlos como borrador para que no se vean !!  Y pido mil disculpas al respecto !!



Comandos avanzados de SSH – SSH Tips & Tricks


1) Acceso SSH sin contraseña:

ssh-copy-id user@host
Generamos las llaves mediante ssh-keygen y luego las copiamos al equipo para permitir el acceso sin clave.

2) Crear un tunel desde un puerto local a un equipo remoto en puerto 80:

ssh -N -L2002:localhost:80 equiporemoto
Nos permite acceder a un sitio web a través de http://localhost:2002/

3) Conectar micrófono a un equipo remoto:

dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp
Nos permite comunicar nuestro microfono con la salida de audio del equipo remoto.

4) Comparar un archivo remoto con uno local:

ssh user@host cat /path/to/remotefile | diff /path/to/localfile -
Útil para saber si un archivo local es idéntico a uno remoto.

5) Montar unidad a través de SSH

sshfs name@server:/path/to/folder /path/to/mount/point
Permite montar un directorio en forma remota, requiere SSHFS: http://fuse.sourceforge.net/sshfs.html

6) Conexión SSH con un host intermedio:

ssh -t reachable_host ssh unreachable_host
Podemos acceder a un equipo inaccesible desde nuestra red, pero que es accesible desde une red remota. Hacemos una conexión con un intermediario que nos permite acceder.

7) Copiar de host1 a host2 mediante el equipo local:

ssh root@host1 “cd /somedir/tocopy/ && tar -cf – .” | ssh root@host2 “cd /samedir/tocopyto/ && tar -xf -”
Útil cuando dos equipos no pueden conectarse en forma directa, utilizamos nuestro equipo como intermediario.

8) Ejecutar programas de entorno gráfico en forma remota:


ssh -fX <user>@<host> <program>
El servidor SSH requiere de la siguiente configuración:
X11Forwarding yes # default en Debian
Recomendable también:
Compression delayed

9) Crear una conexión persistente:

ssh -MNf <user>@<host>

10) Conectar salida de video por SSH:

ssh -t remote_host screen -r

11) Port Knocking!

knock <host> 3000 4000 5000 && ssh -p <port> user@host && knock <host> 5000 4000 3000
Knock para activar servicio SSH y para cerrar.
Ejemplo:
[options]
logfile = /var/log/knockd.log
[openSSH]
sequence = 3000,4000,5000
seq_timeout = 5
command = /sbin/iptables -A INPUT -i eth0 -s %IP% -p tcp –dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 5000,4000,3000
seq_timeout = 5
command = /sbin/iptables -D INPUT -i eth0 -s %IP% -p tcp –dport 22 -j ACCEPT
tcpflags = syn

12) Remover una línea de texto:

ssh-keygen -R <the_offending_host>

13) Ejecutar comandos complejos sobre SSH sin comillas de escape:

ssh host -l user $(<cmd.txt)

14) Copiar una base de datos MySQL a un servidor nuevo:

mysqldump –add-drop-table –extended-insert –force –log-error=error.log -uUSER -pPASS OLD_DB_NAME | ssh -C user@newhost “mysql -uUSER -pPASS NEW_DB_NAME”

15) Quitar una línea de un archivo de texto, útil para eliminar las alertas: “ssh host key change”

sed -i 8d ~/.ssh/known_hosts

16) Copiar la clave pública de SSH s un servidor que no tiene ssh-copy-id

cat ~/.ssh/id_rsa.pub | ssh user@machine “mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys”
Nos permite acceder a un equipo remoto sin necesidad de la contraseña.

17) Test de velocidad SSH

yes | pv | ssh $host “cat > /dev/null”
Nos muestra en vivo la transferencia, envia la salida a /dev/null
Es necesario contar con pv instalado:
Debian: ‘apt-get install pv’
Fedora: ‘yum install pv’ (‘extras’ repository)

18) Establecer una ventana GNU a la cual es posible reconectarse:

ssh -t user@some.domain.com /usr/bin/screen -xRR

19) Continuar scp para un archivo grande:

rsync –partial –progress –rsh=ssh $file_source $user@$host:$destination_file
Permite resumir una copia scp mediante rsync.
Requiere rsync en ambos hosts.
rsync –partial –progress –rsh=ssh $file_source $user@$host:$destination_file local -> remote
o
rsync –partial –progress –rsh=ssh $user@$host:$remote_file $destination_file remote -> local

20) Analizar tráfico ssh remoto mediante wireshark

ssh root@server.com ‘tshark -f “port !22″ -w -’ | wireshark -k -i -
Utilizando tcpdump:
ssh root@example.com tcpdump -w – ‘port !22′ | wireshark -k -i -

21) Abrir una sesión SSH en por tiempo indefinido:

autossh -M50000 -t server.example.com ‘screen -raAd mysession’
Ideal para conexiones inestables o cuando se requiere cambiar de servicio WiFi.

22) Mayor seguridad en la conexión:

ssh -4 -C -c blowfish-cbc

23) Balanceo de ancho de banda:

tar -cj /backup | cstream -t 77k | ssh host ‘tar -xj -C /backup’
Comprime y limita el ancho de banda a 77k bit/s.

24) Transferir la clave pública a través de SSH:

ssh-keygen; ssh-copy-id user@host; ssh user@host

25) Copiar stdin al buffer de tu X11:

ssh user@host cat /path/to/some/file | xclip

martes, 14 de julio de 2015

Ejemplos codigo pdo sqlite pragma sqlite_master