Categorías

13 jun 2011

Cortafuegos con IpTables

Buscando información sobre IpTables he encontrado este magnífico manual en el que se explica que es IpTables y unos cuantos scripts de configuraciones de ejemplo con comentarios.

Este manual práctico puede ser muy útil en caso de tener que enfrentarnos a montar un cortafuegos.

Ir al manual de IpTables

9 jun 2011

¿Cómo es de segura tu contraseña?

Navegando encontré esta página que me pareció curiosa, sobre todo al comprobar que la contraseña de mi WIFI tardaría en romperse 28 millones de años...

7 jun 2011

Despliegue de Joomla en NGINX

NGINX es uno de los servidores web que más popularidad está adquiriendo, gracias a su gran rapidez y capacidad para responder un gran número de peticiones sin alterarse.

Como virtudes, este servidor web tiene las que ya hemos comentado:

- Gran rendimiento y velocidad de gestión de peticiones.

Como defectos:

- Menor implantación.
- Menor número de módulos de compatibilidad.

De todos modos es una gran opción que está creciendo y que puede ser muy interesante según que casos. Por ello vamos a desplegar uno de los CMS más usados, es decir Joomla, en nginx para trastear un poco con este servidor web.

1- Instalamos NGINX y MySQL: 

aptitude install mysql-client-5.0 mysql-server-5.0 nginx

Comprobamos que nginx está corriendo:

ps aux | grep nginx
root 4243 0.0 0.0 9608 892 pts/0 S+ 10:45 0:00 grep nginx

2- Instalamos los siguientes módulos PHP:


aptitude install -R php5-cgi php5-mysql 
php5-curl php5-gd php-pear php5-imagick php5-imap php5-mcrypt php5-sqlite
php5-xmlrpc php5-xsl

Especificamos a php5 que utilice FastCgi:
nano /etc/php5/cgi/php.ini
Descomentamos cgi.fix_pathinfo=1

3- Instalamos y configuramos spawn-fcgi

aptitude install spawn-fcgi

Debemos indicar a FastCGI el puerto de escucha, y el usuario y grupo que serán los propietarios del fichero. Para ello ejecutaremos la siguiente instrucción:

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u 
www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid 

Para que arranque el servicio automáticamente nos vamos al fichero /etc/rc.local y añadimos la misma instrucción que antes:

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u 
www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid 

Ahora tenemos que crear un script con el nombre php-fastcgi en el directorio /etc/init.d/php-fastcgi el cual contendrá lo siguiente:
#!/bin/sh
### BEGIN INIT INFO
# Provides: php-fastcgi
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start and stop php-cgi in external FASTCGI mode
# Description: Start and stop php-cgi in external FASTCGI mode
### END INIT INFO
# Author: Kurt Zankl <[EMAIL PROTECTED]>
# Do NOT "set -e"
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="php-cgi in external FASTCGI mode"
NAME=php-fastcgi
DAEMON=/usr/bin/php-cgi
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
PHP_CONFIG_FILE=/etc/php5/cgi/php.ini
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.

Damos permiso de ejecución al script:
chmod + x /etc/init.d/php-fastcgi

Realizaremos un enlace de este script en los directorios en los siguientes directorios:
ln -s /etc/init.d/php-fastcgi /etc/rc2.d
ln -s /etc/init.d/php-fastcgi /etc/rc3.d
ln -s /etc/init.d/php-fastcgi /etc/rc4.d
ln -s /etc/init.d/php-fastcgi /etc/rc5.d

4- Configuramos NGINX:

Por último debemos configurar nginx para que pueda servir los ficheros php por medio de FastCGI. Para hacer esto entramos en el fichero /etc/nginx/sitesavailable/ default añadimos lo siguiente:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/$fastcgi_script_name;
include fastcgi_params;
} 
Vemos que el servidor está escuchando por el puerto 9000:
netstat -putan | grep 9000
tcp        0          0   127.0.0.1:9000             0.0.0.0:*                LISTEN 4881/php5-cgi
5- Despliegue de Joomla

Ahora nos disponemos a desplegar Joomla en el directorio /var/www


Para ello lo movemos a dicho directorio y lo descomprimimos:
mv /home/usuario/Escritorio/Joomla_1.5.9-Stable-Full_Package.zip /var/www/
cd /var/www
unzip Joomla_1.5.9-Stable-Full_Package.zip
Ahora nos vamos a nuestro navegador y accedemos a localhost y nos aparece la pantalla de instalación de Joomla:



Seguimos los pasos de instalación especificando nuestro servidor MySQL y sus credenciales.

Una vez terminada la instalación ya tenemos Joomla corriendo sobre NGINX:


Un saludo!!

1 jun 2011

DNS Dinámico con Bind9

Para mi primera entrada he elegido el DNS por ser uno de los servicios más importantes y utilizados, además de necesitarse para muchos otros servicios. A lo largo de esta memoria detallaré paso a paso el proceso de instalación y condifguración de un servidor DNS con actualizaciones dinámicas, pero también podría utilizarse este documento para un DNS estático, simplemente saltándonos la parte de DHCP.


El manual fue realizado sobre una máquina con sistema operativo Linux Debian Squeeze.

Empezamos:

Paso 1.-Instalamos el servidor DNS bind9 y las dnsutils que nos harán falta para la comprobación de funcionamiento con el comando dig:

aptitude install bind9 dnsutils
Paso 2.- Configuramos bind9 en la máquina “goku” que será master del dominio “example.com”. Para ello comenzamos añadiendo la zona directa y la zona inversa del servidor en el fichero /etc/bind/named.conf.local:

include "/etc/bind/zones.rfc1918"; 

zone "example.com" { 
type master; 
file "/var/cache/bind/example.com.db"; 
allow-update {key "rndc-key";}; 
notify yes; 
};

zone "0.0.10.in-addr.arpa" { 
type master; 
file "/var/cache/bind/10.0.0.db"; 
allow-update {key "rndc-key";}; 
notify yes; 
};

Comprobaremos si existen errores de sintaxis (esto no quiere decir que este bien configurado pero si que está bien escrito) con el siguiente parser:
/etc/bind# named-checkconf named.conf.local

*rndc-key es la clave que utilizarán para comunicarse entre el servidor DNS y DHCP para poder realizar las actualizaciones dinámicas. Este fichero contiene lo siguiente:
key "rndc-key" { 
algorithm hmac-md5; 
secret "NJAvKcLLKI5pUyr5SdWc7A=="; 
};

Paso 3.- Los ficheros que definirán con detalle las asociaciones entre IP y nombre, tanto de la zona directa como de la inversa, se encuentran en el directorio /var/cache/bind/.

Estos ficheros contienen lo siguiente (hay que tener cuidado de no dejarnos un espacio o un caracter por este fichero, si esto ocurre fallará, con lo cual aconsejo copiar a mano lo siguiente):


Zona directa: /var/cache/bind/example.com.db
$ORIGIN . 
$TTL 86400 
example.com IN SOA goku.example.com. root.goku.example.com. ( 
1 ; 
604800 ; 
21600 ; 
3600 ; 
604800 ; 
) 
; 
@ NS goku.example.com. 
$ORIGIN example.com. 
goku A 10.0.0.1 
$TTL 1800 ; 30 minutes 
krilin A 10.0.0.2 
TXT "0034c01d37441096e65f6c71820527d786" 
$TTL 86400 ; 1 day 
localhost A 127.0.0.1 
Para comprobar posibles errores de sintaxis utilizaremos el siguiente parser:
/var/cache/bind# named-checkzone example.com example.com.db 

Zona inversa: /var/cache/bind/10.0.0.db
$ORIGIN 0.0.10.in-addr.arpa. 
$TTL 86400; 
@ IN SOA goku.example.com. root.goku.example.com. ( 
1 ; 
604800 ; 
3600 ; 
604800 ;
21600 ; 
) 
; 
@ NS goku.example.com. 
1 IN PTR goku.example.com. 
Por último para comprobar errores de sintaxis de la zona inversa utilizaremos este parser:
/var/cache/bind# named-checkzone 0.0.10.in-addr.arpa 10.0.0.db 
Paso 4.- Llegados a este punto, haremos comprobaciones de que el dns funciona correctamente mediante el comando dig:

Comprobación Zona directa:
dig @10.0.0.1 goku.example.com 

Comprobación Zona inversa:
dig -x 10.0.0.1


Hasta este momento hemos configurado un servidor DNS estático y hemos comprobado que funciona, ahora nos disponemos a montar el servidor DHCP para integrarlos y hacer un servidor DNS-Dinámico.


Paso 5.- Instalamos el servidor DHCP:
aptitude install isc-dhcp-server 

Paso 6.- Editamos el fichero de configuración del servidor DHCP:
nano /etc/dhcp/dhcpd.conf

#Lineas para la actualización del servidor DNS
server-identifier goku; 
ddns-updates on; 
ddns-update-style interim; 
ddns-domainname "example.com."; 
ddns-rev-domainname "in-addr.arpa."; 
deny client-updates; 

include "/etc/bind/rndc.key"; 

zone example.com. { 
primary 127.0.0.1; 
key rndc-key; 
} 

zone 0.0.10.in-addr.arpa. { 
primary 127.0.0.1; 
key rndc-key; 
} 

#Configuración general DHCP
default-lease-time 3600; 
max-lease-time 86400; 
authoritative; 
subnet 10.0.0.0 netmask 255.255.255.0 { 
range 10.0.0.1 10.0.0.127; 
option domain-name "example.com."; 
option domain-name-servers 10.0.0.1; 
option broadcast-address 10.0.0.255; 
}
Paso 7.- Puesta en marcha. Pararemos ambos servidores y vaciaremos los ficheros de peticiones dhcp que se pudiesen haber generado:
/etc/init.d/bind9 stop
/etc/init.d/dhcp3-server stop
echo "" > /var/lib/dhcp3/dhcpd.leases
echo "" > /var/lib/dhcp3/dhcpd.leases~ 
Arrancamos los servicios de nuevo:
/etc/init.d/bind9 start
/etc/init.d/dhcp3-server start
Paso 8.- En el cliente (krilin) editaremos el fichero /etc/dhcp/dhclient.conf y le diremos que envíe su nombre junto con la petición DNS:
send host-name krilin; 
Así el DHCP y el DNS sabrán quien realiza la petición.

Paso 9.- Comprobamos que el DHCP concede IP a krilin automáticamente:
dhclient 

Paso 10.- Echaremos un vistazo al log del servidor (goku) para comprobar que se están realizando las peticiones y las respuestas correctamente:
tail -f /var/log/syslog 


Paso 11.- Hacemos ping desde goku hacia krilin y comprobamos que aun cambiando la IP de krilin se realiza con éxito:
ping krilin 


Y al fin tenemos nuestro servidor DNS Dinámico funcionando.

Espero que les sea útil.