Jun 14

Script en bash para hacer backup de MySQL

En esta ocasión vamos a ver un pequeño script con el cual realizar backups de MySQL

 

#!/bin/bash

# Credenciales BBDD
user=”usuario”
password=”contraseña”
host=”localhost”
db_name=”bbdd”

# definimos las variables del path y la fecha
backup_path=”/backup”
date=$(date +”%d-%b-%Y”)

# Establecemos los permisos predeterminados
umask 177

# Dump de la base de datos
mysqldump –user=$user –password=$password –host=$host $db_name > $backup_path/$db_name-$date.sql

#Comprimir backup

xz -9 $backup_path/$db_name-$date.sql

# Eliminar archivos de más de 30 días
find $backup_path/* -mtime +30 -exec rm {} \;

 

lo añadimos en el crontab

rokitoh@red-orbita:# cronta -l

0 0 * * * /usr/bin/backupmysq.sh

 

Un saludo

:wq!

Jun 14

Autenticación en Active Directory vía RADIUS GNU/Linux

RADIUS (acrónimo en inglés de Remote Authentication Dial-In User Service). Es un protocolo de autenticación y autorización para aplicaciones de acceso a la red o movilidad IP. Utiliza el puerto 1812 UDP para establecer sus conexiones.

Cuando se realiza la conexión con un ISP mediante módem, DSL, cablemódem, Ethernet o Wi-Fi, se envía una información que generalmente es un nombre de usuario y una contraseña. Esta información se transfiere a un dispositivo Network Access Server (NAS) sobre el protocolo PPP, quien redirige la petición a un servidor RADIUS sobre el protocolo RADIUS. El servidor RADIUS comprueba que la información es correcta utilizando esquemas de autenticación como PAP, CHAP o EAP. Si es aceptado, el servidor autorizará el acceso al sistema del ISP y le asigna los recursos de red como una dirección IP, y otros parámetros como L2TP, etc.

Continue reading

Jun 09

Integración MediaWIKI con Active Directory

Nos descargamos la extensión LdapAuthentication:

https://www.mediawiki.org/wiki/Special:ExtensionDistributor/LdapAuthentication

También lo podemos descargar mediante git en la siguiente URL:

https://gerrit.wikimedia.org/r/#/q/status%3Aopen+project%3Amediawiki/extensions/LdapAuthentication

En mi casó dado que tengo instalado MediaWiki 1.27 bajo centOS 7 me bajo dicha versión

wget https://extdist.wmflabs.org/dist/extensions/LdapAuthentication-REL1_27-b0dba33.tar.gz

Descomprimimos la paquete

tar -xzf LdapAuthentication-REL1_27-b0dba33.tar.gz -C /var/www/html/extensions

Continue reading

Jun 01

Proxy inverso SFTP con HAproxy

¿Que es un proxy inverso?

Un Proxy inverso es un intermediario entre una red pública y un conjunto de servidores privados; el cual se encarga de administrar las solicitudes de servicios por parte de uno o varios computadores externos. Estos funcionan manipulando los requerimientos HTTP que son enviados por varios computadores; en un proceso en cual se atienden las solicitudes y al mismo tiempo manipulan la presentación de estos servicios para evitar comprometer información crítica del grupo de servidores privados a donde se solicitan.

Diagrama:

 

Continue reading

Jun 01

Clúster de alta disponibilidad HAproxy en Red Hat 7

¿Que es un Cluster HA?

Un cluster de alta disponibilidad es un conjunto de dos o más máquinas que se caracterizan por mantener una serie de servicios compartidos y por estar constantemente monitorizándose entre sí. Podemos

mas información

¿Que es HAProxy?

HAProxy (que significa alta disponibilidad Proxy) es una solución de código abierto rápido y confiable, que es capaz de manejar el tráfico enorme y ofrece alta disponibilidad, balanceo de carga y proxy para TCP y aplicaciones basadas en HTTP. Similar a NginxBalancer, se utiliza un modelo orientado a eventos de un solo proceso, que consume un bajo (y estable) cantidad de memoria, lo que permite a HAProxy procesar un gran número de peticiones concurrentes al mismo tiempo, garantiza un buen equilibrio de carga con la persistencia inteligente y mitigación de DDoS.

Continue reading

Jun 01

Script en bash para crear usuarios SFTP enjaulados

En esta ocasión vamos a ver un pequeño script el cual permite la creación de usuarios enjaulados en SFTP:

 

#!/bin/bash
usage()
{
cat << EOF
USO: $0 -G grupo -u usuario  -f file system
Script para la creacion de usuarios enjaulados SFTP
OPCIONES:
   -G      Grupo
   -u      Usuario SFTP
   -f      file system
ejemplo de uso: /usr/bin/createuser.sh -G sftp -u usersftp -f /home/usersftp
EOF
}
#Declaramos todas las variables que se van a usar para guardar los parametros
inputgroup=
inputusuario=
inputfs=
#Usamos el getopts para guardar los parametros en variables
while getopts “hH:G:u:f:” OPTION
do
        case $OPTION in
                h)
                usage
                exit 1
                        ;;
                G)
                inputgroup=$OPTARG
                        ;;
                u)
                inputusuario=$OPTARG
                        ;;
                f)
                inputfs=$OPTARG
                        ;;
                esac
done
#Comprobamos que se han introducido los parametros obligatorios
if [ -z $inputgroup ] || [ -z $inputusuario ] || [ -z $inputfs ]
then
        usage
        exit 1
fi
function SSHconfig (){
if [ -f “/etc/ssh/sshd_config-bck” ]
            then
#Comentamos lineas
  sed -i ‘s/Subsystem/#&/’ /etc/ssh/sshd_config
                #Agregamos configuracion
cat << EOF >> /etc/ssh/sshd_config
Subsystem sftp internal-sftp
Match user $inputusuario
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
KbdInteractiveAuthentication yes
EOF
            else
                #Si no existe el fichero de backup muestra un error y sale del script
                echo “No se encontro el fichero de configuracion /etc/ssh/sshd_config-bck”
                exit 1
fi
}
# Creamos el grupo
groupadd $inputgroup
#Creamos el usuario
useradd -g $inputgroup  -s /bin/false -d $inputfs $inputusuario
#Asignamos una contraseña al usuario
passwd $inputusuario
mkdir -p $inputfs/public
chmod 755 $inputfs
chown root:root $inputfs
chown $inputusuario:$inputgroup $inputfs/public
#Creamos backup del fichero de configuracion de SSH
cp /etc/ssh/sshd_config /etc/ssh/sshd_config-bck
#Realizamos la configuracion de SSH
SSHconfig
#Reiniciamos el servicio
service sshd restart
Un saludo
:wq!
May 13

Configuración Proxy Inverso con apache en GNU/Linux

¿Que es un proxy inverso?

Un Proxy inverso es un intermediario entre una red pública y un conjunto de servidores privados; el cual se encarga de administrar las solicitudes de servicios por parte de uno o varios computadores externos. Estos funcionan manipulando los requerimientos HTTP que son enviados por varios computadores; en un proceso en cual se atienden las solicitudes y al mismo tiempo manipulan la presentación de estos servicios para evitar comprometer información crítica del grupo de servidores privados a donde se solicitan.

Diagrama:

Continue reading

May 11

Manual practico de iptables

Resetear reglas

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -t nat -F

Establecer las políticas de firewall por defecto  

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -L -v -n

Ver el estado del firewall

iptables -L -n -v

 

  • -L : Muestra las reglas.
  • -v : Muestra información detallada.
  • -n : Muestra la dirección ip y puerto en formato numérico. No usa DNS para resolver nombres. Esto acelera la lista.

Mediante este ejemplo podremos ver las reglas con el numero de lineas.


iptables -n -L -v --line-numbers  

Mostrar las reglas entrantes

iptables -L INPUT -n -v

Mostrar las reglas salientes

iptables -L OUTPUT -n -v

si agregamos –line-numbers podrémos ver el numero de lineas

Eliminar reglas de Firewall

Se puede eliminar una regla por el numero de la linea, en este caso eliminamos las reglas INPUT y OUTPUT correspondiente a la linea 4.

iptables -D INPUT 4

iptables -D OUTPUT 4

También podemos una regla concreta

iptables -D INPUT -s 10.10.33.14 -j DROP

 

  • -D : Elimina una o más reglas de la cadena seleccionada.

Guardar los cambios

service  iptables save

Sólo a bloquear el tráfico entrante

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -L -v -n

Eliminar direcciones de red privada en la interfaz pública (Suponiendo eth1 como interfaz pública)

iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Permitir todo el tráfico de loopback, y eliminar todo el tráfico a 127/8 que no usa lo0

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

Aceptar todas las conexiones entrantes establecidas

iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

Eliminar cualquier paquete inválido que no pueda ser identificado

iptables -A INPUT -m state –state INVALID -j DROP

Bloquear tráfico a un dominio

Para ello debemos sacar el rango de IP del dominio:

 

host -t a www.google.es
www.google.es has address 216.58.214.163

whois 216.58.214.163  | grep CIDR
CIDR:           216.58.192.0/19

Denegamos el acceso al rango que hemos obtenido:

iptables -A OUTPUT -p tcp -d 216.58.192.0/19 -j DROP

También es posible hacerlo por nombre de dominio

iptables -A OUTPUT -p tcp -d www.google.es -j DROP
iptables -A OUTPUT -p tcp -d google.es -j DROP

Permitir todo el tráfico entrante SSH

iptables -A INPUT  -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Permitir tráfico HTTP

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

Permitir HTTPS saliente.

iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

 

Permitir tráfico HTTP

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

Permitir HTTPS saliente.

iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

Abrir un rango de puertos de entrada

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT

Prevenir ataques DoS
-Limit 25/minute : Limita a sólo 25 conexiones por minuto.
-Limit-burst 100: Indica que el valor de limit/minute será forzado sólo después del número de conexiones en este nivel

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

 

Abrir un rango de direcciones IPs

iptables -A INPUT -p tcp –destination-port 80 -m iprange –src-range 192.168.1.100-192.168.1.200 -j ACCEPT

 

Listado de reglas ejemplo para puertos TCP/UDP comunes:

 

open port ssh tcp port 22 ##
iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state –state NEW -p tcp –dport 22 -j ACCEPT

## open cups (printing service) udp/tcp port 631 for LAN users ##
iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp –dport 631 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp –dport 631 -j ACCEPT

## allow time sync via NTP for lan users (open udp port 123) ##
iptables -A INPUT -s 192.168.1.0/24 -m state –state NEW -p udp –dport 123 -j ACCEPT

## open tcp port 25 (smtp) for all ##
iptables -A INPUT -m state –state NEW -p tcp –dport 25 -j ACCEPT

# open dns server ports for all ##
iptables -A INPUT -m state –state NEW -p udp –dport 53 -j ACCEPT
iptables -A INPUT -m state –state NEW -p tcp –dport 53 -j ACCEPT

## open http/https (Apache) server port to all ##
iptables -A INPUT -m state –state NEW -p tcp –dport 80 -j ACCEPT
iptables -A INPUT -m state –state NEW -p tcp –dport 443 -j ACCEPT

## open tcp port 110 (pop3) for all ##
iptables -A INPUT -m state –state NEW -p tcp –dport 110 -j ACCEPT

## open tcp port 143 (imap) for all ##
iptables -A INPUT -m state –state NEW -p tcp –dport 143 -j ACCEPT

## open access to Samba file server for lan users only ##
iptables -A INPUT -s 192.168.1.0/24 -m state –state NEW -p tcp –dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state –state NEW -p tcp –dport 138 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state –state NEW -p tcp –dport 139 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state –state NEW -p tcp –dport 445 -j ACCEPT

## open access to proxy server for lan users only ##
iptables -A INPUT -s 192.168.1.0/24 -m state –state NEW -p tcp –dport 3128 -j ACCEPT

## open access to mysql server for lan users only ##
iptables -I INPUT -p tcp –dport 3306 -j ACCEPT

 

 

:wq!