Mostrando entradas con la etiqueta LINUX. Mostrar todas las entradas
Mostrando entradas con la etiqueta LINUX. Mostrar todas las entradas

lunes, 28 de diciembre de 2009

Bounding - Failover

He decidido que poco a poco iré poniendo los PPT que me he hecho sobre todos los temas que trato, para así compartir lo poco que sé y sobre todo a la espera de comentarios para aprender mucho más.

El primero que voy a poner es uno de bounding, que espero que sirva de ayuda para alguien.

miércoles, 12 de noviembre de 2008

LINUX. Gestión de Procesos en 2º plano (parar, continuar, eliminar)

Muchas veces enviamos un comando a 2º plano con & (command &) y va funcionando,
pero que pasa si queremos parar momentaneamente. Para hacerlo utilizaremos [kill].

Kill nos ofrece diferentes opciones:
  • kill -CONT => Continua con la ejecución
  • kill -STOP => Para la ejecución, pero no lo elimina
  • kill -9 => Eliminar la ejecución

Saludos,

Juan

lunes, 26 de mayo de 2008

LINUX: Control RAID fisico discos

En mi caso, para poder gestionar el RAID 1 de discos de mi máquina y el estado del mismo utilizo mpt-status.

Esta utilidad es buena para ver el estado de salud del mismo, sobre todo cuando tenemos un error como este:

Jun 26 11:22:43 my_host kernel: mptbase: ioc0: RAID STATUS CHANGE for PhysDisk 0
Jun 26 11:22:43 my_host kernel: mptbase: ioc0: PhysDisk is now missing
Jun 26 11:22:43 my_host kernel: mptbase: ioc0: RAID STATUS CHANGE for PhysDisk 0
Jun 26 11:22:43 my_host kernel: mptbase: ioc0: PhysDisk is now missing, out of sync
Jun 26 11:22:43 my_host kernel: mptbase: ioc0: RAID STATUS CHANGE for VolumeID 0
Jun 26 11:22:43 my_host kernel: mptbase: ioc0: volume is now degraded, enabled
Jun 26 11:22:43 my_host kernel: klogd 1.4.1, ---------- state change ----------
Jun 26 11:22:49 my_host kernel: mptbase: ioc0: RAID STATUS CHANGE for PhysDisk 0
Jun 26 11:22:49 my_host kernel: mptbase: ioc0: PhysDisk is now online, out of sync
Jun 26 11:22:49 my_host kernel: sdb : READ CAPACITY failed.
Jun 26 11:22:49 my_host kernel: sdb : status=0, message=00, host=1, driver=00
Jun 26 11:22:49 my_host kernel: sdb : sense not available.
Jun 26 11:22:49 my_host kernel: sdb: Write Protect is off
Jun 26 11:22:49 my_host kernel: sdb: Mode Sense: 00 00 00 00
Jun 26 11:22:49 my_host kernel: sdb: asking for cache data failed
Jun 26 11:22:49 my_host kernel: sdb: assuming drive cache: write through
Jun 26 11:22:49 my_host kernel: sd 0:1:1:0: Attached scsi disk sdb
Jun 26 11:22:49 my_host kernel: mptbase: ioc0: RAID STATUS CHANGE for VolumeID 0
Jun 26 11:22:49 my_host kernel: mptbase: ioc0: volume is now degraded, enabled, resync in progress

Jun 26 12:46:34 my_host kernel: mptbase: ioc0: RAID STATUS CHANGE for PhysDisk 0
Jun 26 12:46:34 my_host kernel: mptbase: ioc0: PhysDisk is now online
Jun 26 12:46:34 my_host kernel: mptbase: ioc0: RAID STATUS CHANGE for VolumeID 0
Jun 26 12:46:34 my_host kernel: mptbase: ioc0: volume is now optimal, enabled, resync in progress
Jun 26 12:46:34 my_host kernel: mptbase: ioc0: RAID STATUS CHANGE for VolumeID 0
Jun 26 12:46:34 my_host kernel: mptbase: ioc0: volume is now optimal, enabled



Para instalarlo solo hay que descargarse el rpm de http://rpmfind.net/linux/rpm2html/search.php?query=mpt-status y ejecutar

rpm -i -v mpt-status-1.2.0-72.i586.rpm

Una vez tenemos el paquete hay que:
  1. Crear el dispositivo /dev/mpctl, cargando el modulo en el kernel (#modprobe mptctl)
  2. Añadir "install mptctl" en "/etc/modprobe.conf.local" para que se cargue el módulo al iniciar.

Para ver en que estado nuestro raid, solo hay ejecutar mpt-status -s y si todo va bien, nos saldrá:

my_host:/ # mpt-status -s

log_id 0 OPTIMAL

phys_id 1 ONLINE

phys_id 0 ONLINE

En caso contrario, en /var/log/messages encontraremos log sobre lo que nos está sucediendo o bien haciendo una query al raid mediante mpt-status.

sábado, 24 de mayo de 2008

LINUX: Ejemplo script iptables para firewall

Después de pelearme un poco con esto de iptables, he montado este pequeño script para un firewall.

Este firewall tiene 2 accesos a Internet balanceadas entre ella con iproute2.

Como tal el script utiliza 2 ficheros de configuración (/etc/firewall/acceso.web y /etc/firewall/acceso.ftp.inet2dmz) donde de pueden poner los nombre de los diferentes host/ordenadores y a que lugar pueden ir.

Aunque script funciona para la web, es MUY ACONSEJABLE utilizar squid como servidor de proxy, ya que permite mejor control y gestión.

Para la gestión del log de iptables, existen soluciones freeware que permiten estadisticas y demás.

#Funcion para dar acceso
#Parámetros $1=Origen $2=Interface desde la que accede el origen
# $3=Destino $4=Interface a través de la cual se llega al destino
# $5=Protoco $6=Puerto de destino
function Acceso {
if $iptables -A FORWARD -s $1 -i $2 -d $3 -o $4 -p $5 --dport $6 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
then
echo Acceso de $1 desde $2 para $3 por $4 ,protocolo:$5, puerto $6
else
echo ERROR Acceso de $1 desde $2 para $3 por $4 ,protocolo:$5, puerto $6
fi

if $iptables -A FORWARD -d $1 -o $2 -s $3 -i $4 -p $5 --sport $6 -m state --state ESTABLISHED,RELATED -j ACCEPT
then
echo Acceso de $3 desde $4 para $1 por $2 ,protocolo:$5, puerto $6
else
echo ERROR Acceso de $3 desde $4 para $1 por $2 ,protocolo:$5, puerto $6
fi
}

function AccesoWEB {

#Estructura de cada registro ,,...,,
for registro in `grep -v "^#" /etc/firewall/accesos.web`
do
CAMPOS=`echo $registro | awk -f /etc/firewall/contador.awk`
ULTIMOORIGEN=`expr $CAMPOS - 1`
for cont in `seq 1 $ULTIMOORIGEN`
do
ORIGEN=`echo $registro | cut -f $cont -d ","`
DESTINO=`echo $registro | cut -f $CAMPOS -d ","`
Acceso $ORIGEN $DEV_LAN $DESTINO $DEV_INET1 tcp http
Acceso $ORIGEN $DEV_LAN $DESTINO $DEV_INET2 tcp http
Acceso $ORIGEN $DEV_LAN $DESTINO $DEV_INET1 tcp https
Acceso $ORIGEN $DEV_LAN $DESTINO $DEV_INET2 tcp https
done
done
}

function AccesoFTP {
for registro in `grep -v "^#" $1`
do
ORIGEN=`echo $registro | cut -f 2 -d ","`
DESTINO=`echo $registro | cut -f 3 -d ","`
echo origen $ORIGEN dev_origen $2 destino $DESTINO dev_destino $3
Acceso $ORIGEN $2 $DESTINO $3 tcp 20
Acceso $ORIGEN $2 $DESTINO $3 tcp 21
done
}

function AccesoFTP_INET2DMZ {
#Estructura de cada registro ,,
AccesoFTP /etc/firewall/accesos.ftp.inet2dmz $DEV_INET1 $DEV_DMZ
AccesoFTP /etc/firewall/accesos.ftp.inet2dmz $DEV_INET2 $DEV_DMZ
}

function AccesoADMIN {
$iptables -A INPUT -s $1 -i $DEV_LAN -d $IP_LAN -p tcp --dport ssh -j ACCEPT
$iptables -A OUTPUT -d $1 -o $DEV_LAN -s $IP_LAN -p tcp --sport ssh -j ACCEPT

$iptables -A INPUT -s $1 -i $DEV_LAN -d $IP_LAN -p icmp -j ACCEPT && echo Acceso PING para $1 desde $2
$iptables -A OUTPUT -d $1 -o $DEV_LAN -s $IP_LAN -p icmp -j ACCEPT && echo Acceso PING para $1 desde $2

Acceso $1 $DEV_LAN $ROUTER_INET1 $DEV_INET1 tcp http
Acceso $1 $DEV_LAN $ROUTER_INET1 $DEV_INET1 tcp https
AccesoPING $1 $DEV_LAN $ROUTER_INET1 $DEV_INET1

Acceso $1 $DEV_LAN $FTP_SERVER $DEV_DMZ tcp ssh
AccesoPING $1 $DEV_LAN $FTP_SERVER $DEV_DMZ

$iptables -A FORWARD -s $1 -p icmp -j ACCEPT
$iptables -A FORWARD -d $1 -p icmp -j ACCEPT

$iptables -A INPUT -s $1 -p icmp -j ACCEPT
$iptables -A OUTPUT -d $1 -p icmp -j ACCEPT
}

function LOG_NoDeseado {
$iptables -A INPUT -p udp ! --dport 137:138 -j LOG
$iptables -A INPUT -j LOG
$iptables -A OUTPUT -j LOG
$iptables -A FORWARD -j LOG
}

function Acceso_DNSServer {
$iptables -A OUTPUT -o $DEV_LAN -d $1 -p tcp --dport domain -j ACCEPT
$iptables -A INPUT -i $DEV_LAN -s $1 -p tcp --sport domain -j ACCEPT
$iptables -A OUTPUT -o $DEV_LAN -d $1 -p udp --dport domain -j ACCEPT
$iptables -A INPUT -i $DEV_LAN -s $1 -p udp --sport domain -j ACCEPT
$iptables -A OUTPUT -o $DEV_INET1 -p udp --dport domain -j ACCEPT
$iptables -A INPUT -i $DEV_INET1 -p udp --sport domain -j ACCEPT
Acceso $1 $DEV_LAN $MUNDO $DEV_INET2 tcp domain
Acceso $1 $DEV_LAN $MUNDO $DEV_INET2 udp domain
}

IP_INET1=80.33.33.33
IP_INET2=80.33.34.34
IP_DMZ=10.0.2.1
IP_LAN=10.0.1.1

DEV_INET1=eth3
DEV_INET2=eth2
DEV_DMZ=eth1
DEV_LAN=eth0

NET_INET1=80.33.33.0/24
NET_INET2=80.33.34.0/24
NET_DMZ=10.0.2.0/24
NET_LAN=10.0.1.0/24

MUNDO=0.0.0.0/0

#SERVER
DNS_SERVER=10.0.1.2
FTP_SERVER=10.0.2.2
MAIL_SERVER=10.0.1.3

#COMANDOS
iptables=/usr/sbin/iptables
ifconfig=/sbin/ifconfig
route=/sbin/route

#LIMPIADO DE LAS TABLAS
$iptables -F
$iptables -Z
$iptables -X
$iptables -t nat -F

#DEFINICION POLITICA POR (DROP)
$iptables -P INPUT DROP
$iptables -P OUTPUT DROP
$iptables -P FORWARD DROP

#########################################################################
# D N S - Damos acceso para que los nombre de host se puedan resolver #
#########################################################################

Acceso_DNSServer $DNS_SERVER

#################################
# O T R O S A C C E S O S #
#################################
AccesoADMIN nuestro_host.nuestro_dominio

#############
# D N A T #
#############

# Acceso de Internet a nuestro servidor de correo
# --------------
$iptables -A PREROUTING -t nat -s $MUNDO -i $DEV_INET2 -p tcp --dport 25 -j DNAT --to :25
$iptables -A PREROUTING -t nat -s $MUNDO -i $DEV_INET1 -p tcp --dport 25 -j DNAT --to :25

# DESDE INET A FTP SERVER
-----------------------
$iptables -A PREROUTING -t nat -s $MUNDO -i $DEV_INET2 -p tcp --dport 20 -j DNAT --to :20
$iptables -A PREROUTING -t nat -s $MUNDO -i $DEV_INET2 -p tcp --dport 21 -j DNAT --to :21

$iptables -A PREROUTING -t nat -s $MUNDO -i $DEV_INET1 -p tcp --dport 20 -j DNAT --to :20
$iptables -A PREROUTING -t nat -s $MUNDO -i $DEV_INET1 -p tcp --dport 21 -j DNAT --to :21

#Con esto permitimos el ftp pasivo
modprobe ip_nat_ftp


###################
# R O U T I N G #
###################
$iptables -A POSTROUTING -t nat -o $DEV_INET1 -j MASQUERADE
$iptables -A POSTROUTING -t nat -o $DEV_INET2 -j MASQUERADE
$iptables -A POSTROUTING -t nat -o $DEV_DMZ -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

###########
# F T P #
###########

#Con estos accesos permitimos el tráfico desde fuera a nuestro servidor
Acceso $MUNDO $DEV_INET1 $DEV_DMZ tcp 20
Acceso $MUNDO $DEV_INET1 $DEV_DMZ tcp 21

Acceso $MUNDO $DEV_INET2 $DEV_DMZ tcp 20
Acceso $MUNDO $DEV_INET2 $DEV_DMZ tcp 21

AccesoFTP_INET2DMZ


###################
# A C C E S O S #
###################
AccesoFTP_INET2DMZ
AccesoWEB

###########
# L O G #
###########
LOG_NoDeseado

jueves, 22 de mayo de 2008

LINUX: Tuning básico

Como cualquier otro SO, Linux también necesita algún tuning básico, pues como viene de serie no aprovecha las máquinas.

Algunas de las cosas que he encontrado y probado en mis máquinas son:

1. Tuning TCP - Algunas variables del kernel (/etc/sysctl.conf)
#Tamaño máximo del buffer de recepción de red (en bytes)
net.core.rmem_max="16777216"
#Tamaño máximo del buffer de envío de red (en bytes)
net.core.wmem_max="16777216"
#Mínimo/Defecto/Máximo tamaño del buffer TCP de recepción
net.ipv4.tcp_rmem="4096 87380 16777216"
#Mínimo/Defecto/Máximo tamaño del buffer TCP de envío
net.ipv4.tcp_wmem="4096 65536 16777216"
#Desactivación retraso del inicio threshold para un cliente entre sesiones TCP
net.ipv4.tcp_no_metrics_save=1
#TTL
net.ipv4.ip_default_ttl = 77
#Determina el número de sondeos antes de que se supere el tiempo de espera
net.ipv4.tcp_keepalive_probes =5
#
Determina el tiempo de espera entre sondeos de intervalos isAlive
net.ipv4.tcp_keepalive_intvl =15
#
Determina el tiempo que debe transcurrir antes de que el TCP/IP pueda liberar una conexión cerrada y reutilizar sus recursos
net.ipv4.tcp_fin_timeout=60

Nota: Una vez echos los cambios ejecutar sysctl -q

2. Eliminación de los servicios que no utilizamos. No hay peor que dedicar el tiempo de nuestra máquina en algo que no utilizamos (samba, cups, cron, ....), asi que mejor pararlos y eliminar los links de nuestro runlevel directory (/etc/init.d/rc[345].d)

3. Dejar solo activadas 2 o 3 consolas en /etc/inittab


1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
#4:2345:respawn:/sbin/mingetty tty4
#5:2345:respawn:/sbin/mingetty tty5
#6:2345:respawn:/sbin/mingetty tty6

NOTA: Una vez hechos los cambios ejecutar init q

4. Incrementar memoria
. Mediante vmstat deberiamos de mirar a intervalos diferentes en dias diferentes como funciona nuestra máquina, y ver si hay mucho swap y cuanta memoria estamos utilizando.

Mi máquina muestra lo siguiente con vmstat 5 10

5. Mejora de rendimiento de los discos
. Mediante hdparm y sdparm podemos llegar a mejorar el rendimiento de nuestros discos.

6. Activación Hyperthreading
. Si tenemos una CPU con hyperthreading por que no utilizarlo. Así que a recompilar el kernel (http://www.ibm.com/developerworks/linux/library/l-htl/)