viernes, 21 de octubre de 2016

Dirty Cow en CentOS

Detectar el bug en CentOS



Esta vulnerabilidad está registrada conel código CVE-2016-5195, aunque se ha hecho popular como Dirty Cow (Copy On Write). Según el informe oficial de Linux, este fallo lleva presente en el sistema operativo desde el año 2007, aunque no había sido detectado hasta ahora por los expertos de seguridad de Red Hat.

Debido a que determinadas tareas se ejecutan en un orden incorrecto, el Kernel almacena una copia de las páginas de memoria con datos privados en vez de borrarlas una vez procesadas.
Básicamente se trata de un bug que permite la escalada de privilegios hasta el nivel superior.

A pesar de que este fallo no ha sido considerado como crítico por los investigadores ni por el Linus Torvalds, los expertos de seguridad que la han descubierto aseguran que debemos tomarla en serio ya que se trata de un fallo real.
La existencia de un exploit disponible en internet la hace más peligrosa.

Proceso de parcheado:



Descargamos el script oficial de Red hat:

# wget https://access.redhat.com/sites/default/files/rh-cve-2016-5195_1.sh



Lo ejecutamos:

# chmod 700 rh-cve-2016-5195_1.sh
# ./rh-cve-2016-5195_1.sh



Si la salida es la siguiente, significa que estamos afectados por el bug:
Your kernel is 2.6.32-573.3.1.el6.x86_64 which IS vulnerable.
Red Hat recommends that you update your kernel. Alternatively, you can apply partial
mitigation described at https://access.redhat.com/security/vulnerabilities/2706661 .



A la espera de la publicación por parte de Red Hat del parche oficial, se recomienda actualizar el kerrnel

CVE-2016-5195

# yum update kernel
# reboot



viernes, 22 de julio de 2016

CentOS-6 : Alta Disponibilidad activo/pasivo con Crosync-Pacemaker + DRBD (III)

Configuración del Cluster





    Observaciones


  • Desactivamos firewall y SELinux en ambos nodos.
  • El usuario administrador del cluster será hacluster.
  • Desactivaremos el Quorum, trabajando con dos nodos no tiene sentido.
  • El nombre elegido para el cluster es BP.
  • Daremos preferencia a node-1 para trabajar como Master.
  • Crearemos los siguientes recurosos para el DRBD.
    • Para los datos : BP_data.
    • Para la sincronización : BP_syncro.
    • Para el filesystem : BP_fs.


Instalamos paquetes en ambos nodos:

yum install corosync pcs pacemaker cman



Configuramos la contraseña para el usuario hacluster:

[node-1]# passwd hacluster
[node-2]# passwd hacluster



Configuramos servicios:

[node-1]# service pcsd start
[node-2]# service pcsd start


[node-1]# chkconfig pcsd on
[node-1]# chkconfig pacemaker on

[node-2]# chkconfig pcsd on
[node-2]# chkconfig pacemaker on



Autenticamos los nodos:

[node-1]# pcs cluster auth node-1 node-2

Username: hacluster
Password: 
node-1: Authorized
node-2: Authorized



Creamos el cluster:

[node-1] mkdir /etc/cluster
[node-2] mkdir /etc/cluster

[node-1]# pcs cluster setup --name BP node-1 node-2

node-1: Updated cluster.conf...
node-2: Updated cluster.conf...

Synchronizing pcsd certificates on nodes node-1, node-2...
node-1: Success
node-2: Success

Restarting pcsd on the nodes in order to reload the certificates...
node-1: Success
node-2: Success



Arrancamos el cluster:

[node-1]# pcs cluster start --all
node-1: Starting Cluster...
node-2: Starting Cluster...



Comprobamos el estado del cluster:

node-1]# pcs status cluster

Cluster Status:
 Last updated: Tue Mar  1 04:58:26 2016
 Last change: Tue Mar  1 04:57:52 2016
 Stack: cman
 Current DC: server2 - partition with quorum
 Version: 1.1.11-97629de
 2 Nodes configured
 0 Resources configured

PCSD Status:
  node-1: Online
  node-2: Online



[node-2]# pcs status cluster

Cluster Status:
 Last updated: Tue Mar  1 05:00:33 2016
 Last change: Tue Mar  1 04:57:52 2016
 Stack: cman
 Current DC: server2 - partition with quorum
 Version: 1.1.11-97629de
 2 Nodes configured
 0 Resources configured

PCSD Status:
  node-1: Online
  node-2: Online




Comprobamos el status de los nodos:

[node-1]# pcs status nodes

Pacemaker Nodes:
 Online: node-1 node-2
 Standby:
 Maintenance:
 Offline:
Pacemaker Remote Nodes:
 Online:
 Standby:
 Maintenance:
 Offline:


[node-2]# pcs status nodes

Pacemaker Nodes:
 Online: node-1 node-2
 Standby:
 Maintenance:
 Offline:
Pacemaker Remote Nodes:
 Online:
 Standby:
 Maintenance:
 Offline:


[node-1]# pcs status corosync

Nodeid     Name
   1   node-1
   2   node-2


[node-2]# pcs status corosync

Nodeid     Name
   1   node-1
   2   node-2




Comprobamos el status general:

[node-1]# pcs status

Cluster name: BP
WARNING: no stonith devices and stonith-enabled is not false
Last updated: Thu Jul  7 13:16:43 2016  Last change: Thu Jul  7 13:14:47 2016 by root via crmd on node-2
Stack: cman
Current DC: node-2 (version 1.1.14-8.el6-70404b0) - partition with quorum
2 nodes and 0 resources configured

Online: [ node-1 node-2 ]

Full list of resources:


PCSD Status:
  node-1: Online
  node-2: Online



Desactivamos el fenced:

[node-1]# pcs property set stonith-enabled=false



Desactivamos el quorum:

[node-1]# pcs property set no-quorum-policy=ignore



Comprobamos las propiedades del clsuter:

[node-1]# pcs property

Cluster Properties:
 cluster-infrastructure: cman
 dc-version: 1.1.14-8.el6-70404b0
 have-watchdog: false
 no-quorum-policy: ignore
 stonith-enabled: false



Añadimos la IP Virtual:

[node-1]# pcs resource create IpVirt ocf:heartbeat:IPaddr2 ip=192.168.0.4 cidr_netmask=32 op monitor interval=30s



Añadimos los servicios MySQl y Tomcat:

[node-1]# pcs resource create MySQL ocf:heartbeat:mysql op monitor interval="20" timeout="60"

[node-1]# pcs resource create Tomcat lsb:tomcat



Vincularemos la Ip Virtual a los servicios para que trabajen siempre juntos:

[node-1]#pcs constraint colocation add Tomcat MySQL INFINITY



Forzamos a que inicie primero la IP Virtual y luego los servicios:

[node-1]# pcs constraint order IpVirt then Tomcat  

Adding IpVirt Tomcat (kind: Mandatory) (Options: first-action=start then-action=start)

[node-1]# pcs constraint order Tomcat then MySQL

Adding Tomcat MySQL (kind: Mandatory) (Options: first-action=start then-action=start)



Damos preferencia al nodo que hará de master:

[node-1]# pcs constraint location MySQL prefers node-1=50
[node-1]# pcs constraint location Tomcat prefers node-1=50



Comprobamos restricciones:

[node-1]# pcs constraint

Location Constraints:
  Resource: MySQL
    Enabled on: node-1 (score:50)
  Resource: Tomcat
    Enabled on: node-1 (score:50)
Ordering Constraints:
  start IpVirt then start Tomcat (kind:Mandatory)
  start Tomcat then start MySQL (kind:Mandatory)
Colocation Constraints:
  Tomcat with MySQL (score:INFINITY)



Gestión del DRBD



Creamos un nuevo CIB (Cluster Infromation Base):

[node-1]# pcs cluster cib add_drbd
[node-1]# ls -al add_drbd

-rw-r--r-- 1 root root 10665  7 jul 13:28 add_drbd

[node-1]# pcs -f add_drbd resource create BP_data ocf:linbit:drbd drbd_resource=data op monitor interval=60
[node-1]# pcs -f add_drbd resource master BP_data_sync BP_data master-max=1 master-node-max=1 clone-max=2\
 clone-node-max=1 notify=true



Consultamos la configuración del CIB:

[node1]# pcs -f add_drbd resource show

IpVirt (ocf::heartbeat:IPaddr2): Started node-1
 MySQL (ocf::heartbeat:mysql): Started node-1
 Tomcat (lsb:tomcat): Started node-1
 Master/Slave Set: BP_data_sync [BP_data]
     Stopped: [ node-1 node-2 ]



Activamos la configuración del CIB :

[node1]# pcs cluster cib-push add_drbd

CIB updated

[node-1]# pcs cluster cib add_fs
[node-1]# pcs -f add_fs resource create BP_fs Filesystem device="/dev/drbd1" directory="/data" fstype="ext3"



El filesystem debe estar disponible en el Master :

[node1]# pcs -f add_fs constraint colocation add BP_fs BP_data_sync INFINITY with-rsc-role=Master



Debe arrancar antes DRBD para que el filesystem este disponible :

[node-1]# pcs -f add_fs constraint order promote BP_data_sync then start BP_fs Adding BP_data_sync BP_fs
Adding BP_data_sync BP_fs (kind: Mandatory) (Options: first-action=promote then-action=start)



El filesystem debe estar montado antes de que arranque los servicios :

[node-1]# pcs -f add_fs  constraint order BP_fs then MySQL
Adding BP_fs MySQL (kind: Mandatory) (Options: first-action=start then-action=start)

[node-1]# pcs -f add_fs constraint order BP_fs then Tomcat
Adding BP_fs Tomcat (kind: Mandatory) (Options: first-action=start then-action=start)




Forzamso a todos los recursos a trabajar juntos :

[node-1]# pcs -f add_fs constraint colocation add BP_fs Tomcat IpVirt MySQL INFINITY with-rsc-role=Master 



Aplicamos cambios :

[node1]# pcs cluster cib-push add_fs
CIB updated



Comprobamos restricciones :

[node-1]# pcs constraint

Location Constraints:
  Resource: MySQL
    Enabled on: node-1 (score:50)
  Resource: Tomcat
    Enabled on: node-1 (score:50)
Ordering Constraints:
  start IpVirt then start Tomcat (kind:Mandatory)
  start Tomcat then start MySQL (kind:Mandatory)
  promote BP_data_sync then start BP_fs (kind:Mandatory)
  start BP_fs then start MySQL (kind:Mandatory)
  start BP_fs then start Tomcat (kind:Mandatory)
Colocation Constraints:
  Tomcat with MySQL (score:INFINITY)
  BP_fs with BP_data_sync (score:INFINITY) (with-rsc-role:Master)
  BP_fs with MySQL (score:INFINITY) (rsc-role:Started) (with-rsc-role:Master)




jueves, 21 de julio de 2016

CentOS-6 : Alta Disponibilidad activo/pasivo con Crosync-Pacemaker + DRBD (II)

Configuración DRBD



    Observaciones


  • En este ejemplo trabajaremos con una sola tarjeta de red, pero es aconsejable utilizar dos. Una de ellas en exclusiva para la sincronización DRBD y siempre que sea físicamente posible directa, sin pasar por switch.
  • Partimos de la base que tenemos en ambos nodos un partición reservada para el DRBD. Esta será exactamente del mismo tamaño y la identificaremos como /dev/sdb1
  • Identificaremos la partición del DRBD como /dev/drbd1
  • El nombre del recurso compartido será data
  • En ambos nodos el recuros se montará en el punto de montaje que creamos en el primer capítulo: /data


Editaremos correctamente el fichero "/etc/hosts" en ambos nodos :

192.168.0.2     node-1
191.168.0.3     node-2


Configuración del fichero "/etc/drbd.conf"

resource data {
protocol C;

handlers {pri-on-incon-degr "echo '!DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f"; }
startup { wfc-timeout 5; degr-wfc-timeout 120; }
disk { on-io-error detach; }

net {
        cram-hmac-alg sha1;
        shared-secret "afsa6eert7";
        after-sb-0pri discard-zero-changes;
        after-sb-1pri discard-secondary;

}


syncer { rate 100M; }

 on BBDD1-act {
   device    /dev/drbd1;
   disk      /dev/sdb1;
   address   192.168.0.2:7789;
   meta-disk internal;
 }
 on BBDD1-pas {
   device    /dev/drbd1;
   disk      /dev/sdb1;
   address   192.168.0.3:7789;
   meta-disk internal;
 }
}



Creamos el recurso :


nodo-1# drbdadm create-md data                
nodo-2# drbdadm create-md data                


node-1# service drbd start               
node-2# service drbd start                


Convertimos node-1 en el nodo primario :

node-1# drbdadm — --overwrite-data-of-peer primary data



Formateamos la partición :
En este caso se utiliza ext3, pero puede utilizarse el filesystem que mas convenga.

node-1# mkfs.ext3 /dev/drbd1       


Montamos la partición :

node-1# mount /dev/drbd1 /data    


Atomáticamente las particiones DRBD de ambos nodos emepezarán a sincronizarse.
Podemos seguir el proceso ejecutando :

#watch -n1 service drbd status 


Procederemos a linkar MySQL y Tomcat en el recurso compartido DRBD

Proceso de linkado en "node-1" :



-----------------MySQL--------------------------------------------------------------------------




cp -av /var/lib/mysql /data/
mv /var/lib/mysql /var/lib/mysql.org
ln -s /data/mysql /var/lib/
chown -h mysql:mysql /var/lib/mysql
cp -av /etc/my.cnf /data/etc/
mv /etc/my.cnf /etc/my.cnf.org
ln -s /data/etc/my.cnf /etc/

chkconfig mysqld off

service mysqld start
service mysqld stop


-----------------------Tomcat-------------------------------------------------------------------



cp -av /var/lib/tomcat /data
mv /varlib/tomcat /var/lib/tomcat.org
cp -av /usr/share/tomcat /usr/share/tomcat.org

mkdir -p /data/tomcat
cp -av /var/cache/tomcat /data/cache/
mv /var/cache/tomcat /var/cache/tomcat.org

mkdir -p /data/etc

cp -av /etc/tomcat /data/etc/
mv /etc/tomcat /etc/tomcat.org
ln -s /data/etc/tomcat /etc/
chgrp -h tomcat /etc/tomcat

unlink /usr/share/tomcat/conf
ln -s /data/etc/tomcat /usr/share/tomcat/conf
chgrp -h tomcat /usr/share/tomcat/conf

unlink /usr/share/tomcat/temp
ln -s /data/cache/tomcat/temp /usr/share/tomcat/temp
chgrp -h tomcat /usr/share/tomcat/temp

unlink /usr/share/tomcat/webapps
ln -s /data/tomcat/webapps /usr/share/tomcat/webapps


unlink /usr/share/tomcat/work
ln -s /data/cache/tomcat/work /usr/share/tomcat/work
chgrp -h tomcat /usr/share/tomcat/work

chkconfig tomcat off


Comprobamos servicios en "node-1" :


service tomcat start
service tomcat stop


Proceso de linkado en "node-2" :



----------------MySQL--------------------------------------------------------------------


mv /var/lib/mysql /var/lib/mysql.org
ln -s /data/mysql /var/lib/
chown -h mysql:mysql /var/lib/mysql
mv /etc/my.cnf /etc/my.cnf.org
ln -s /data/etc/my.cnf /etc/

chkconfig mysqld off




--------------Tomcat--------------------------------------------------------------------


mv /varlib/tomcat /var/lib/tomcat.org
cp -av /usr/share/tomcat /usr/share/tomcat.org

mv /var/cache/tomcat /var/cache/tomcat.org


mv /etc/tomcat /etc/tomcat.org
ln -s /data/etc/tomcat /etc/
chgrp -h tomcat /etc/tomcat

unlink /usr/share/tomcat/conf
ln -s /data/etc/tomcat /usr/share/tomcat/conf
chgrp -h tomcat /usr/share/tomcat/conf

unlink /usr/share/tomcat/temp
ln -s /data/cache/tomcat/temp /usr/share/tomcat/temp
chgrp -h tomcat /usr/share/tomcat/temp

unlink /usr/share/tomcat/webapps
ln -s /data/tomcat/webapps /usr/share/tomcat/webapps

unlink /usr/share/tomcat/work
ln -s /data/cache/tomcat/work /usr/share/tomcat/work
chgrp -h tomcat /usr/share/tomcat/work

chkconfig tomcat off


Comprobamos servicios en "node-2" :



node-1# umount /data
node-1# drbdadm secondary data

node-2# drbdadm primary data
node-2# mount /dev/drbd1 /data
node-2# service tomcat start
node-2# service mysqld start


Detenemos servicios y desmontamos filesystem del DRBD :



node-2# service tomcat stop
node-2# service mysqld stop
node-2# umount /data
node-2# drbdadm secondary data


miércoles, 20 de julio de 2016

CentOS-6 : Alta Disponibilidad activo/pasivo con Crosync-Pacemaker + DRBD (I)

Configuración de los servicios


    Observaciones:

  • Vamos a instalar Tomcat-7 con la versión Java 1.7 de Sun Microsystem, para MySQL y Tomcat utilizaremos la versión del repositorio oficial de CentOS. Los nodos van a tener los nombres de host y las IPS que se muestran en el gráfico.
  • Hasta ahora hemos trabajado con tomcat dentro del directorio "/opt/tomcat", para adaptarnos a la nueva HA y conservar lo máximo posible nuestra estructura deberemos modificar parte de la estructura de directorios original.

Tomcat

En ambos nodos:

yum install epel-release
yum install tomcat



Por defecto, CentOS nos instalará OpenJDK con Tomcat-7
Para ello deberemos localizarlos y desinstalarlos :


rpm -qa | grep java
java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64
java-1.8.0-openjdk-headless-1.8.0.91-1.b14.el6.x86_64
java-1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64
java_cup-0.10k-5.el6.x86_64
tzdata-java-2016e-1.el6.noarch

rpm -e --nodeps java-1.5.0-gcj java-1.8.0-openjdk-headless java-1.8.0-openjdk java_cup-0.10k tzdata-java


rpm -qa | grep jakarta
jakarta-commons-collections-3.2.1-3.5.el6_7.noarch
jakarta-commons-pool-1.3-12.7.el6.x86_64
jakarta-commons-daemon-1.0.1-8.9.el6.x86_64
jakarta-commons-dbcp-1.2.1-13.9.el6.noarch
jakarta-commons-logging-1.0.4-10.el6.noarch


rpm -e --nodeps jakarta-commons-collections jakarta-commons-pool jakarta-commons-daemon jakarta-commons-dbcp\ 
jakarta-commons-logging


Descargaremos e instalaremos el Java de Sun :

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F;\
 oraclelicense=accept-securebackup-cookie"\
 "http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.rpm"

rpm -Uvh jdk-7u79-linux-x64.rpm 


Comprobamos versión :

#java -version

java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)


Iniciamos el servicio y comprobamos versión:
#service tomcat start

#tomcat version

Server version: Apache Tomcat/7.0.65
Server built:   Jan 6 2016 18:50:03 UTC
Server number:  7.0.65.0
OS Name:        Linux
OS Version:     2.6.32-573.el6.x86_64
Architecture:   amd64
JVM Version:    1.7.0_79-b15
JVM Vendor:     Oracle Corporation



MySQL

En ambos nodos:

yum install mysql-server
service mysqld start
service mysqld stop



DRBD

En ambos nodos:
yum install drbd83 kmod-drbd83    
yum install gnutls* ipvsadm*   


mkdir /data



CentOS-6 : Alta Disponibilidad activo/pasivo con Crosync-Pacemaker + DRBD



Configuración de un cluster en activo/pasivo compartiendo datos mediante DRBD y gestionando los servicios :


.- MySQL

.- Tomcat

.- IP Virtual



1.- Configuración de los Servicios (I)

2.- Configuración DRBD (II)

3.- Configuración del Cluster (III)

4.- Gestión Cluster (IV)

viernes, 4 de marzo de 2016

Velocidad de escritura en disco

Para comprobar la velocidad de escritura de nuestros discos, vamos a utilizar una combinación de los comandos "dd" y "time".
Vamos a escribir en el disco 100 registros de 10MB cada uno, total 1GB.
time dd if=/dev/sda of=/dev/null bs=10M count=100

1000+0 records in
1000+0 records out
10485760000 bytes (10 GB) copied, 96,3046 seconds, 109 MB/s

real 0m9.918s
user 0m0.001s
sys 0m3.062s

Explicación de la salida :

real
Tiempo total transcurrido en ejecutar el comando, si hay 
otros procesos en el sistema, se contará también el tiempo 
de los mismos. 
user
Tiempo de CPU del proceso, excluyendo el tiempo de otros 
procesos o delays del disco. 
sys
Tiempo de CPU en las llamadas al sistema del proceso: 
forks execs, etc...

jueves, 3 de marzo de 2016

Apache: desactivar HTTP TRACE/TRACK en Apache



Disable HTTP TRACE/TRACK

http
curl -v -X TRACE http://www.yourserver.com

https
curl --insecure -v -X TRACE https://www.google.com/

* Server certificate:
*        subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=www.google.com
*        start date: 2013-02-20 13:34:56 GMT
*        expire date: 2013-06-07 19:43:27 GMT
*        subjectAltName: www.google.com matched
*        issuer: C=US; O=Google Inc; CN=Google Internet Authority
*        SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
> TRACE / HTTP/1.1
> User-Agent: curl/7.25.0 (x86_64-suse-linux-gnu) libcurl/7.25.0 OpenSSL/1.0.1c zlib/1.2.7 libidn/1.25 libssh2/1.4.0
> Host: www.google.com
> Accept: */*

< HTTP/1.1 405 Method Not Allowed

Solución:

httpd.conf
# DISABLE HTTP TRACE #
LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
TraceEnable off

miércoles, 2 de marzo de 2016

Forzar a un usario a cambiar su contraseña

El comando chage configura el número de días entre cambios de contraseña y la fecha del último cambio de contraseña.
Esta información es utilizada por el sistema para determinar cuando un usuario debe cambiar su contraseña.

Ver configuración del usario john:
# chage -l john

Last password change     : Jul 06, 2013
Password expires     : never
Password inactive     : never
Account expires      : never
Minimum number of days between password change  : 0
Maximum number of days between password change  : 99999
Number of days of warning before password expires : 7
Con la opción -d cambiaremos la fecha del último cambio de contraseña y la pondremos a cero.
#chage -d 0 john
De esta manera el usario john se verá obligado a cambiar la contraseña en su próximo inicio de sesión.

lunes, 29 de febrero de 2016

Alias vs VLANs - Exprimiendo las interfaces de red.

En linux tenemos la posibilidad de operar con más de una dirección IP sobre una única interfaz red red. Mediante los alias de la interfaz o mediante la creación de VLANs.

Creación de alias Tradicionalmente se han utilizado los alias mediante el comando ifconfig que proporciona el paquete net-tools.
# ifconfig eth0:1 192.168.0.5 netmask 255.255.255.0
Desde la entrega de los núcleos 2.2 tenemos la posibilidad de crear alias con el comando ip, pertenciente al paquete iproute2.
#ip addr add 192.168.0.5/24 dev eth0:1
Creación de VLANs A partir de la versión 2.4.14 el kernel de Linux, se incluye la posibilidad de crear VLANs. Esto podemos hacerlo mediante el comado vconfig o bien mediante el comando ip. En Red Hat y derivados se encuentra incluido en el paquete vconfig, en Debian y sus derivados lo podemos encontrar en el paquete vlan. Para ello utiliza el siguiente patrón : vconfig add "ethx" "id_vlan"
# vconfig add eth0 01

Added VLAN with VID == 01 to IF -:eth0:-
Comprobamos la creación del dispositivo mediante ifconfig:
eth0.1   Link encap:Ethernet  HWaddr bc:ae:c5:60:4e:48  
          inet6 addr: fe80::beae:c5ff:fe60:4e38/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:2012 (2.0 KB)

ifstated - OpenBSD



Ifstated es un daemon, para entornos BSD, que puede ejecutar comandos en respuesta a cambios en el estado de las interficies.
El estado de las mismas puede determinarse monitoreando el estado del link o ejecutando comandos externos.
Ifstated tiene definidos 3 estados posibles para un link :

up: la interficie física tiene conexión activa. Para un interficie carp representa el estado master.
down: la interficie física no tiene conexión activa. Para una interficie carp representa el estado backup.
unknown: no se puede determinar el estado de la conexión física. Para una interficie carp representa el estado init.

Esta información por si sola es insuficiente ya que podemos tener link hacia el router, pero este a su vez no tener conexión hacia internet. Necesitamos una herramienta externa para poder verificar esta conexión. Ifstated nos permite ejecutar comandos externos, con los resultados obtenidos podremos determinar el status actual y cargar las reglas de filtrado oportunas.
Para invocar estas herramientas externas, ifstated nos permiter definir en su archivo de configuración /etc/ifstated.conf macros como la siguiente :
adsl1='(“/sbin/ping -q -c 1 -w 66.102.9.147” every 10)'
Estados en ifstated

Ifstated opera con estados y transiciones. Cada estado tiene un bloque de inicio y un cuerpo. El bloque de inicio, se utiliza para inicializar el estado y se ejecuta cada vez que se ingresa en ese estado. El cuerpo del estado solo se ejecuta cuando el estado es el actual y ocurre un evento. Las acciones a tomar dentro de un bloque de estado se especifican con sentecias if . Estas a su vez pueden ejecutar acciones con el comando run o bien disparar una transcion con set-state. Si no se especifica un estado de inicio, ifstated considerará el primer estado del fichero de configuración como tal.

Ejemplo de bloque :
#Falla ADSL1

  state adsl1down {

  init {
   run “/root/auxiliary/adsl2up”
  }
  if (!$asl1 && $adsl2)
   set-state adsldown
  if ($adsl1 && !$adsl2)
   set-state adsl2down
  if (!$adsl1 && !$adsl2)
   set-state bothdown
  }