Redireccionar de HTTP a HTTPS en apache

Aquí un pequeño tip para que nuestro apache redireccione las peticiones http a https
si el usuario usa http://www.dominio.com
sera redirigido a https://www.dominio.com
es tan simple como añadir esta directiva en nuestro VirtualHost
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]
fr33project , un Blog a bajo nivel

Fr33project es el Blog de David Reguera Garcia , un buen amigo especializado en bajo nivel.
En su blog puedes ver algunas cosas interesantes como:
- Documentación sobre seguridad y bajo nivel.
- Herramientas de Explotación
- Herramientas para trabajar con el bajo nivel
En conclusion un blog de calidad sobre el tema , con articulos muy elaborados y muy buenas herramientas.
Ademas esta en español y ingles
http://fr33project.org/
Uninformed , Informando de lo que otros no informan
Uninformed es una publicación electronica sobre seguridad informatica con contenido underground.
Entre su contenido podemos destacar:
- Seguridad informatica
- Programación a bajo nivel
- Ingeniería Inversa
- Técnicas de Explotación
En este nuevo numero concretamente el 9 se incluye:
Permisos con ACL

Los permisos de linux están bien siempre que no dispongamos de un grupo muy grande de usuarios , si es asi se haria muy lioso ya que tendríamos un /etc/group muy grande. Una forma Elegante de arreglar este problema es usando las ACL (Listas de Control de Acceso)
A groso modo una ACL es una lista de usuarios o grupos Linux y sus correspondientes permisos de acceso que tienen a un fichero o directorio.
Instalando y activando las ACL
Para aumentar la granularidad de los permisos en tu sistema debes tener en cuenta:
- El nucleo debe soportar y estar compilado para soportar atributos extendidos y ACL
- El sistema de ficheros tiene de montarse con atributos extendidos y ACL
- Se tienen de instalar las utilidades de espacio de usuario (chacl,getfacl y setfacl) para establecer el ACL.
Una vez claros estos conceptos pasamos a activar ACL.
Soporte ACL del núcleo de sistema
La gran mayoría de distros actuales ya soportan ACL puedes comprobar si tienes soporte con este comando.
# grep POSIX_ACL /boot/config-`uname -r`
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
# CONFIG_TMPFS_POSIX_ACL is not set
Como podéis tenemos activados en el kernel si no es asi recompilamos el kernel marcando estas opciones.
File systems —>
[*] ReiserFS extended attributes
[*] ReiserFS POSIX Access Control Lists
Soporte ACL en /etc/fstab
Una vez que tengamos soporte ACL necesitaremos configurar /etc/fstab para activar los susodichos permisos .
Los sistemas de ficheros montados con acl tendrán la palabra clave “acl” en las porciones de opciones de montaje de sus entradas en el fichero.
Ejemplo
/dev/sda6 /usr reiserfs noatime,acl,user_xattr 1 2
/dev/hda1 /opt ext3 defaults 0 0
Como podéis ver sda6 tiene soporte acl en el punto de montaje , si quisiéramos dar soporte acl a hda1 seria tan fácil como al punto de montaje acl
/dev/hda1 /opt ext3 defaults,acl 0 0
Una vez actualizado el fichero /etc/fstab debemos remontar el sistema de fichero.
Ejemplo para hda1
# mount -o remount,acl /dev/hda1
Soporte ACL en el espacio de usuario
El último paso para usar ACL asegurarse de que las aplicaciónes de espació de usuario estén presentes en el sistema
En Debian o Ubuntu puedes comprobar asi
# dpkg -l |grep acl
ii acl 2.2.42-1ubuntu1 Access control list utilities
ii libacl1 2.2.42-1ubuntu1
Tambien puedes comprobar buscando las herramientas
# type -a getfacl
getfacl is /usr/bin/getfacl
Si ACL no esta instalado puedes instalarlo desde el manejador de paquetes de tu distribución en debian por ejemplo.
# apt-get install acl
Formato ACL
Linux soprta 2 tipos básicos de ACL:
- ACL de control de directorios y ficheros
- ACL de directorio (Mascaras) ACL que toman por defecto los ficheros creados en ese directorio.
La ACL se representa por tres campos separados por “:”
Campo 1
Entrada
- “u” Ususario
- “g” Grupo
- “o” Otro
- “m” Mascara
Campo 2
El segundo campo esta formado por:
- UID (ID numérico de usuario)
- GID (ID numérico de grupo)
- Vacío (Asume UID,GID del Creador)
Campo 3
- El tercer campo es el de acceso y puede ser representado de 2 maneras.
- Cadena estándar RWX (las cadenas se pueden remplazar por – sino queremos dar acceso de ese tipo)
- Cadena simbólica + ^
Herramientas
- chacl : Permite cambiar,examinar o eliminar ACL
- getfacl : Permite examinar acl para encontrar archivos o directorios
- setfacl : Establece ACL a fichero o directorio.
Mostrar ACL
Para el ejemplo usare un directorio con archivos que he creado con touch.
> ls -l
total 0
-rw-r–r– 1 tuxed tuxed 0 2008-01-26 03:03 lerele
-rw-r–r– 1 root root 0 2008-01-26 03:03 pass
-rw-r–r– 1 root root 0 2008-01-26 03:02 user
La acl para el directorio siguiente es
> getfacl .
# file: .
# owner: root
# group: root
user::rwx
group::rwx
other::rwx
La acl por defecto para el fichero lerele es esta
> getfacl lerele
# file: lerele
# owner: tuxed
# group: tuxed
user::rw-
group::r–
other::r–
La acl para el directorio el qual no se le ha asignado coje los de umask.
Establecer ACL
Hay tres maneras de establecer un ACL
- Usando el comando setfacl el qual sobrescribe qualquier ACL anterior.
- Usando el comando setfacl con la opción -m (Modifica ACL)
- Usando chacl para modificar una ACL existente.
En esta ocasión mostrare como se cambian las acl con chacl , ya que este no sobrescribe la ACL existente, y ademas proporciona algo mas de información de como realmente funcionan las acl
Ejemplo
Añadiremos al usuario aitor como alguien que puede leer el fichero lerele , usaría chacl (cambiar la ACL) del siguiente modo:
$ chacl u::rw-,g::r–,o::—,u:aitor:r–,m::rw- lerele
Esta es la forma en la que se ve una acl en la vida real , el hecho de que sea una comando tan largo es que se debe definir los puntos ya nombrados anteriormente el propietario de fichero, grupo propietario y otros
para entendernos mejor la porción u::rw,g::r–,o::— es la ACL existente y la porción u:aitor:r–,m::rw- especifica el nuevo usuario el nuevo usuario que quiero añadir a dicha acl y la mascara de derechos efectivos cuando se añada.
La mascara de derechos efectivos es la unión de todos los permisos ya existentes de UGO para un fichero o directorio. esta se tiene al añadir un usuario a la ACL.
Para comprobar que hemos sido añadidos a la acl usaremos
$ getfacl lerele# file: lerele
# owner: tuxed
# group: tuxed
user::rwx group::r– other::— user:aitor:r– mask::rw-
Ahora que ya sabemos como funciona acl podriamos poner que aitor tenga permisos de lectura y escritura a lerele
$ chacl u::rw-,g::r–,o::—,u:aitor:rw-,m::rw- lerele
como veis le hemos añadido permisos de escritura
$ getfacl lerele# file: lerele
# owner: tuxed
# group: tuxed
user::rwx group::r– other::— user:aitor:rw-
Pues espero que hos guste.
Como proteger el acceso remoto por ssh

Según la wikipedia:
SSH (Secure SHell) es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red. Permite manejar por completo la computadora mediante un intérprete de comandos, y también puede redirigir el tráfico de X para poder ejecutar programas gráficos si tenemos un Servidor X arrancado..
Asegurar SSH
SSH ya de por si es un protocolo seguro , pero podemos afinar mas los parametros para que sea aun mas seguro
Pasos que seguiremos
- Deshabilitar SSH 1
- Autenticación basada en clave
- No permitir autenticación por Password
- Cambiar el puerto por Defecto
- No Permitir logeo como root
- Banear ips tras 5 logins erroneos
Deshabilitar SSH 1
Puesto que la versión del protocolo ssh 1 hay algunas inseguridades , que mejor manera que usar el protocolo 2 que es mucho mas seguro. Para esto editaremos el fichero de configuración de ssh en /etc/ssh/sshd_config
dejaremos la opción protocolo así
Protocolo 2
Eso significa – aceptar la versión 2 del protocolo, y nada más. Guardar el fichero de configuración y reiniciar sshd.
# /etc/init.d/sshd restart
Autenticación basada en clave
Entrar con usuario y password está bien , pero podemos tener mas seguridad usando un par de claves publica y privada
Creando nuestra clave publica (En nuestra maquina Cliente)
ssh-keygen -t rsa
Al ejecutar este comando nos pide una clave le asignamos una y luego deberemos colocar en esa maquina remota la clave RSA publica que acabamos de generar ( ~/.ssh/id_rsa.pub ) en el directorio ~/.ssh/authorized_keys de el servidor ssh.
Habilitamos Autenticación por Clave (En el Servidor)
Ahora es momento de volver a configurar /etc/ssh/sshd_config para habilitar la autenticación con las claves anteriormente añadidas ~/.ssh/authorized_keys del servidor ssh.
En /etc/ssh/sshd_config :
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
Deshabilitar la autenticación por password
Para poder hacer util lo anteriormente mencionado dejaremos solo la autenticación por clave eliminando la autenticación por password para esto editaremos de nuevo /etc/ssh/sshd_config
PasswordAuthentication no
De está forma se elimina el impacto de ataques por fuerza bruta.
Cambiar el puerto por defecto
Para asegurar aun mas nuestro sistema cambiaremos el puerto por defecto de este modo evitaremos exploits tipicos de Script Kidies
/etc/ssh/sshd_config remplazamos la linea
Port 22
por
Port 25142
Donde 25142 puede ser otro puerto.
No permitir logeo como root
Puesto que root es el usuario con mas privilegios y el que se suele intentar explotar pues no permitiremos el logeo como root añadiendo en /etc/ssh/sshd_config
PermitRootLogin no
Banear a las ips que hacen mas de 5 logeos erroneos
Para esto usaremos una herramienta llamada fail2ban
instalamos fail2ban
# apt-get install fail2ban
una vez instalado crearemos una directiva para ssh
# vi /etc/fail2ban/jail.local
añadiendo la siguiente directiva
[ssh]enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
reiniciamos fail2ban
# /etc/init.d/fail2ban restart
Nota: Cada vez que se hace un cambio en /etc/ssh/sshd_config tenemos de reiniciar sshd para ser aplicado /etc/init.d/sshd restart
Espero que os guste
Implementación de AoE (Ata Over Ethernet) En Linux

Segun la Wikipedia:
ATA over Ethernet (AoE) es un protocolo de red desarrollado por la compañía Brantley Coile y diseñado para acceder a dispositivos de almacenamiento ATA mediante redes Ethernet. Proporciona la posibilidad de construir redes de almacenamiento (SAN) de bajo costo con tecnologías estándar.
AoE no depende de las capas superiores de Ethernet, tales como IP, UDP, TCP, etc. Esto significa que AoE no es ruteable en LANs y está diseñado únicamente para SAN. Como alternativa a iSCSI, la especificación AoE mide solamente ocho páginas comparado con las 257 páginas de iSCSI.
_____________________________________________________________________________________________________
Instalando AoE
AoE viene con el nucleo podemos comprobar si esta en nuestro nucleo ejecutando
SolarUX:~ # grep ATA_OVER /boot/config-`uname -r`
CONFIG_ATA_OVER_ETH=m
En este caso esta como modulo si no lo tenemos tenemos de recompilar el kernel habilitando:
Device Drivers –>
|- Block Devices —>
|- <m> ATA over Ethernet support
Una vez lo tenemos cargamos el modulo aoe
SolarUX:~ # modprobe aoe
Ahora que hemos cargado el modulo comprobamos si lo ha cargado
SolarUX:~ # dmesg | tail -n 1
aoe: AoE v32 initialised.
Instalando el Servidor (Debian)
SolarUX:~ # apt-get install vblade
Reading package lists… Done
Building dependency tree… Done
The following NEW packages will be installed:
vblade
[...]
Unpacking vblade (from …/archives/vblade_11-1_i386.deb) …
Setting up vblade (11-1) …
Otros Sistemas Linux
# wget http://surfnet.dl.sourceforge.net/sourceforge/aoetools/vblade-14.tgz
# tar -xvf vblade-14.tgz
# cd vblade*
# make && make install
si obtienes un eror parecido a este
[root@caronte aoetools-21]# make
+ sed -e ’s!@devdir@!/dev/etherd!g’ -e ’s!@npershelf@!16!g’ aoe-discover.in
+ sed -e ’s!@devdir@!/dev/etherd!g’ -e ’s!@npershelf@!16!g’ aoe-interfaces.in
+ sed -e ’s!@devdir@!/dev/etherd!g’ -e ’s!@npershelf@!16!g’ aoe-mkshelf.in
+ sed -e ’s!@devdir@!/dev/etherd!g’ -e ’s!@npershelf@!16!g’ aoe-revalidate.in
+ sed -e ’s!@devdir@!/dev/etherd!g’ -e ’s!@npershelf@!16!g’ aoe-flush.in
+ sed -e ’s!@devdir@!/dev/etherd!g’ -e ’s!@npershelf@!16!g’ aoe-stat.in
cc -Wall -O -g -o aoeping.o -c aoeping.c
make: cc: No se encontró el programa
make: *** [aoeping.o] Error 127
tienes que instalar binutils gcc y make
En Suse
# zypper install binutils gcc make
En Fedora
# yum install binutils gcc make
Mandriva
# urpmi binutils gcc make
En los otros sistemas con su Instalador de paquetes favorito
Una vez satisfechas las dependencias pasamos a instalar de la forma indicada arriba
Ejecutando Vbladed
vbladed 0 1 interface disco/duro
En nuestro caso hacemos de sda1
[root@caronte ~]# fdisk -l |grep Disco |grep sda
Disco /dev/sda: 200.0 GB, 200048565760 bytes
[root@caronte vblade-14]# vbladed 0 1 eth1 /dev/sda1
En el Cliente
# apt-get install aoetools
Otros Sistemas ( sin aoetools en los repos)
# wget http://heanet.dl.sourceforge.net/sourceforge/aoetools/aoetools-21.tar.gz
# tar -xvf aoetools-21.tar.gz
# cd aeo*
# make && make install
Ahora una vez instalado hacemos
# aoe-discover
# aoe-stat
e0.1 200.047GB eth1 up
Como se puede observar el cliente a encontrado el disco de 200GB que es el que hemos puesto en el servidor y ha creado el dispositivo e0.1 que lo podemos ver ejecutando:
# ls -al /dev/etherd/
total 4
drwxr-xr-x 2 root root 140 2007-10-10 13:30 .
drwxr-xr-x 16 root root 14660 2007-10-10 13:30 ..
c-w–w—- 1 root disk 152, 3 2007-10-10 13:30 discover
brw-rw—- 1 root disk 152, 16 2007-10-10 13:30 e0.1
cr–r—– 1 root disk 152, 2 2007-10-10 13:30 err
c-w–w—- 1 root disk 152, 4 2007-10-10 13:30 interfaces
-rw-r–r– 1 root root 5 2007-10-10 13:00 revalidate
Una vez que ha creado el dispositivo tenemos que formatearlo y montarlo
# mkfs.ext3 /dev/etherd/e0.1
Se montaria de la forma habitual
Antes que nada podemos dejar el modulo para que nos cargue en inicio
echo aoe >> /etc/modules
Montamos el Disco
# mount -t ext3 /dev/etherd/e 0.1 /mnt/disco
podriamos crear un punto de montaje en /etc/fstab
/dev/etherd/e0.1 /mnt/disco ext3 defaults 0
Nota:AoE soporta hasta 144TB
Configuración de un sistema de Video Vigilancia

En esta ocasión nos valdremos de Apache2 + una Cámara de vídeo vigilancia concretamente la C54NETCAM de Conceptronic (es la que está en la imagen de arriba.
Puesto que la interface de la camara da accesso a la configuracion y no nos interesa usaremos apache y una pequeña pagina en html que cargara el applet de la camara.
Cargar la Camara desde Apache2
Para hacer que la camara salga en apache.
- Crear directorio en /var/www/seccam ( # mkdir /var/www/seccam)
- nano /var/www/seccam/index.html
- Copiamos en index.html:
<html>
<body bgcolor=”black”>
<center><h1><font color=”white”>Security System</font></h1></center>
<center><h3><font color=”white”>Entrada Principal</font></h3></center>
<br/>
<center>
<TABLE>
<tr>
<td>
<APPLET name=”cvcs” CODEBASE=”http://192.168.1.246:80/” CODE=”xplug.class” WIDTH=640 HEIGHT=480>
<param name=”RemotePort” value=80>
<param name=”Timeout” value=5000>
<param name=”RotateAngle” value=0>
<param name=”PreviewFrameRate” value=2>
<param name=”DeviceSerialNo” value=”YWRtaW46aGV4YWRlY2k=”>
</APPLET>
</td>
</tr>
</TABLE>
</center>
</body>
</html>
La opción marcada en rojo tendriamos de cambiar por ip y puerto
Pantalla Generada

Autenticación del Directorio
Ahora que tenemos la pagina colgada es el momento de protegerla con Password.
Crearemos la siguiente directiva en /etc/apache2/apache2.conf
<Directory /var/www/seccam>
AllowOverride All
</Directory>
Creando el User y Pass
# cd /var/www/seccam
# htpasswd -c .htpasswd Admin
Este comando nos pedirá la password que usaremos en la web.
Creando .htaccess
Creamos el fichero /var/www/seccam/.htaccess con el siguiente contenido:
AuthName “Autentification Required”
AuthType Basic
AuthUserFile /var/www/seccam/.htpasswd
require valid-user
Una vez acabado reiniciamos apache2
# /etc/init.d/apache2 restart
Si todo a Salido bien al intentar acceder a /seccam nos pedirá autenticación

Creando un Dominio para la ip Dinamica
Puesto que la mayoría de mortales tenemos ip dinamica
Crearemos una cuenta en no-ip , una vez tengamos cuenta instalamos no-ip
# apt-get install no-ip
Una vez instalado , activamos no-ip
# no-ip -C
El siguiente comando nos pide los datos de nuestra cuenta correo , password y nombre de host.
Una vez acabado y tras mapear el puerto 80 de apache en el router podremos acceder a la camara de la siguiente manera http://host.no-ip.org/seccam
donde host es el nombre que le dimos.
Espero que sea de vuestra utilidad.
pfSense Firewall , VPN y hotspot wifi
En esta ocasión tengo el honor de presentarles de pfSense
pfSense es un firewall FreeBSD basado en m0n0wall , con funciones de Hotspot wifi (Punto de Acceso con portal cautivo) , Tiene control de ancho de banda , bloqueo de programas P2P , VPN ,etc.
Es muy fácil de instalar, tiene un Wizard para crear la primera configuración esta en español también.
Software Incluido en pfSense
- BandwidthD – Used for tracking & graphing bandwidth usage for individual LAN IP’s.
- ifdepd – Used for building interface dependencies
- ifstated – Adds interval based connection checking
- pfflowd – Used for converting PF status messages to Cisco Netflow Datagrams
- PFStat – Adds additional graphing functionality
- Ntop – Adds the ability to record enhanced network history data
- Stunnel – Adds the ability to wrap standard ports with SSL
- Pure-FTPd – Adds the ability to host FTP files
- Squid Transparent Proxy- An all purpose caching proxy (currently not working but being fixed)
- arpwatch – Used for watching ethernet and ip address pairings
- assp – An anti-spam proxy
- FreeRADIUS – A RADIUS authentication server
- mtr – An enhanced traceroute function
- nmap – A port scanner for security auditing
- siproxd – A proxy with masquerading for the SIP-protocol
- spamd – A fake SMTP-Server used as a spam tarpit
- iperf – Add additional bandwidth measuring capacity
- nut – Adds support for UPS monitoring
- snort – Adds Intrusion Detection capabilities
Capturas

web: www.pfsense.org

