Archivo de etiquetas de 'servidor'

Pag 2 de 3

Apache Web Server: Autentificación Mediante Digest

A la hora de proteger un dierctorio en Apache2 el protocolo HTTP dispone de dos mecanismos de autentificación para restringir el acceso a un directorio mediante nombre de usuario y contraseña: Basic (el usuario y el password viajan por la red sin cifrar) y Digest (el usuario y el password viajan por la red cifrados con MD5).

La autentificación mediante Basic ya se vió en MONTAJE DE UN SERVIDOR CIEGO CON DEBIAN LENNY (4.-APACHE WEB SERVER), sin embargo no se comentó nada sobre la autentificación Digest, que bueno, para los que dispongan de datos algo “sensibles” y quieran un poco más de seguridad (relativa como el tiempo) no está mal.

Lo primero que debemos hacer es habilitar el módulo de Digest:

# a2enmod auth_digest

En el directorio cuyo acceso queremos restringir, creamos un archivo .htaccess.

# nano /ruta directorio a proteger/.htaccess

Una posible configuración sería:

AuthName “Privado”
AuthType Digest
AuthDigestFile ruta_absoluta_del_fichero_con_passwords
Require valid-user

Para crear el archivo de usuarios y passwords se utiliza la herramienta “htdigest“. La primera vez utilizad la opción -c para crear el fichero, y las sucesivas omitidlo, ya que sino se sobreescribe y se pierden los datos anteriores.

# htdigest [-c] ruta_absoluta_del_fichero_con_passwords Privado nombre_usuario

Tras esto habrá que introducir el password de dicho usuario. Es necesario que el tercer parámetro de htdigest (Privado en este caso) coincida con AuthName, para especificar un dominio de autenticación concreto.

Montaje de un Servidor Ciego con Debian Lenny (10.-Información del Sistema con PHPSYSINFO)

PhpSysInfo es un script escrito en PHP que analiza todos los recursos que nuestro servidor nos ofrece respecto al hardware. Con este software podremos ver el tiempo que lleva activo nuestro servidor y una descripción exacta del Hardware que tenemos un nuestra maquina como es el microprocesador, memoria, discos duros, etc …

Una vez lo tengamos instalado podremos ver que tal vamos de recursos del sistema como por ejemplo el uso del disco duro y el uso de memoria, estos son importantes para tener una idea de lo que vamos necesitando en nuestro servidor.

La instalación de este es muy sencilla, arrancamos nuestro servidor, nos logeamos como root e insertamos:var

#apt-get install phpsysinfo

El programa phpsysinfo se instala en la ruta /var/www/ de nuestro apache2 por defecto pero nosotros la vamos a enlazar a /home/usuarioweb/ para poder acceder a ella desde un navegador, así que ahora tendremos que hacer otro enlace simbólico para poder ver el entorno web de phpsysinfo de la siguiente manera:

Nos logeamos como usuarioweb:

$ln -s /var/www/phpsysinfo /home/usuarioweb/www/restringido/phpsysinfo

Una vez creado el enlace debemos ver el directorio de la aplicación en la raíz de nuestro servidor. Abrimos un navegador e introducimos la dirección http://ipdelservidor/restringido/phpsysinfo/.

Ahora vamos a editar el fichero /etc/phpsysinfo/config.php para que nos muestre el contenido en español o en el idioma que queramos por defecto.

#nano /etc/phpsysinfo/config.php

Obtenemos algo como:

// turn on dubugging of some functions and include errors and warnings in xml a$

// popup for displaying errors

// false = no debug infos are stored in xml or displayed

// true = debug infos stored in xml and displayed *be carfull if set this to tr$

define(’debug’, false);

// define the default language and template here

define(’lang’, ‘en‘);

define(’template’, ‘phpsysinfo.css’);

// display the virtual host name and address

// default is canonical host name and address

// Use define(’useVhost’, true); to display virtual host name.

Como podemos intuir sólo tenemos que modificar “en” por “es”.

Montaje de un Servidor Ciego con Debian Lenny (9.-Base de Datos MYSQL)

Montaremos MySQL y PhpMyAdmin para poder administrar las bases de datos que mas adelante nos podrían hacer falta para algunos usos como crear un Blog con Wordpress o para descargar mediante Torrentflux . Por si no lo sabíais todos los Blogs que podemos ver en la red están vinculados a una base de datos que pueden estar en otros lenguajes pero nosotros vamos a instalar las MySQL. Vamos a instalar unos cuantos paquetes para que nuestro servidor pueda ofrecernos bases de datos MySQL del siguiente modo:

#apt-get install mysql-server mysql-server-5.0 mysql-client-5.0 php5-mysql

Para facilitarnos manejo y la administración de nuestras bases de datos vamos a usar el entorno web PhpMyAdmin, con este software podremos crear, borrar, modificar, dar permisos, bueno podemos hacer todo a lo que se refiere a la administración de bases de datos MySQL. Comenzamos la instalación con:

#apt-get install phpmyadmin

Durante la instalación no pedirá la contraseña de root para acceder a phpmyadmin, que no tiene porqué ser la misma que la contraseña de root de nuestro servidor. La introducimos dos veces para la validación.

Resulta que el programa phpmyadmin se instala en la ruta /usr/share/ de nuestro apache2 por defecto pero nosotros la vamos a enlazar a /home/usuarioweb/ para poder acceder a ella desde un navegador, así que ahora tendremos que hacer otro enlace simbólico para poder ver el entorno web de phpmyadmin de la siguiente manera:

Nos logeamos como usuarioweb:

$ln -s /usr/share/phpmyadmin /home/usuarioweb/www/restringido/phpmyadmin

Ahora reiniciamos Apache2 como root:

#apache2ctl restart

Y ya podemos acceder desde un navegador.

Montaje de un Servidor Ciego con Debian Lenny (8.-Soporte Para PHP)

Con los pasos seguidos hasta aquí, tenemos un Servidor Web con Apache2 que podemos utilizar para subir y bajar archivos de forma privada a través de internet mediante ftp alojándolos en directorios no vistos públicamente y también para subir y bajar archivos a través de un servidor público gestionado por Apache2. Si no hubiésemos instalado Apache2 tan solo hubiésemos podido hacer uso de ftp privado a través de internet. A partir de este punto, se instalarán herramientas para poder gestionar contenido web.

Uno de los lenguajes de programación que vamos a necesitar en el servidor es PHP. Este software es utilizado tanto para programar webs, scripts o cgis. Para ello instalaremos lo siguiente:

#apt-get install php5 php5-gd php5-pgsql php5-cgi php5-cli php5-common libapache2-mod-php5

Vamos a agregar la siguiente linea (DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.shtml) al fichero de configuración del Apache llamado apache2.conf para que nuestro Web server sea compatible con ese tipo de extensiones.

#echo DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.shtml >> /etc/apache2/apache2.conf

Se puede verificar si se ha hecho bien con el comando (cat) que nos muestra en pantalla el contenido de un archivo.

#cat /etc/apache2/apache2.conf

Veremos al final algo así:

# Include of directories ignores editors’ and dpkg’s backup files,

# see README.Debian for details.

# Include generic snippets of statements

Include /etc/apache2/conf.d/

# Include the virtual host configurations:

Include /etc/apache2/sites-enabled/

DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.shtml

Ahora vamos a comprobar que todo ha ido bien editando un fichero en el directorio raíz de nuestro servidor Web, o sea el directorio que es visible desde otros exploradores, (en mi caso /home/usuarioweb/www/ ).

#nano /home/usuarioweb/www/info.php

Insertamos el siguiente código:

<?php phpinfo(); ?>

Guardamos el archivo info.php, cerramos y reiniciamos Apache2:

#apache2ctl restart

Ahora desde un navegador y tras introducir el usuario y la clave, entramos en la dirección IP del servidor http://192.168.0.XXX/info.php (en mi caso) y veremos información detallada sobre el soporte PHP que tenemos instalado.

apache02

DD-WRT: Tu Router un Poco Más Profesional

Hoy cambié de router. Lo cierto es que no estaba demasiado contento con el D’Link 524 que tenía (y tengo). Tras una odisea inacabable por el desierto del Wake On Lan (del que más adelante escribiré en uno de los capítulos de MONTAJE DE UN SERVIDOR CIEGO CON DEBIAN LENNY), descubrí que para despertar mi servidor remotamente desde la WAN había que configurar la tabla ARP del router (no sabía nada de eso y sigo sin saber). Y claro, casualidad de la buena que el mío no dejaba modificarla. No dándome por vencido, intenté sabotear el aparato con engaños sutiles como redirigir el Paquete Mágico a todos los PC’s de la LAN con un redireccionamiento del puerto UDP que utiliza el Wake On Lan hacia el broadcast (192.168.0.255). Pero el muy jodido se bloqueaba (la madre que lo parió!). Al final no conseguí nada, pero se puede decir que casi soy un experto en el puto D’Link 524.

DD-WRT-[1]

Por una de esas casualidades leí un día algo sobre el firmware libre DD-WRT. Bueno, el caso es que no tenía mala pinta. Indagando un poco más descubrí que el suso dicho firmware te convierte tu cutre-router casero en un router con MAYÚSCULAS. Vamos que le dota de funciones propias de un router profesional. De entre todas, la que me llamó muchísimo la atención fue la de Wake On Lan. Joder, es que no me lo creía. Corrí raudo a jugarme la salud de mi router y cuando estaba a punto de flashearlo… ¿a qué no saben? Sí, mi puto router D’Link 524 no estaba en la infinita lista de los router compatibles con este firmware. Tenía ganas de llorar. Pero mira que la lista es larga, joder. Si creo que están hasta los de Telefónica.

Meses más tarde decidí ponerle punto y final al tema: me compre otro router. Lo conseguí por cuatro duros en el eBay y con el firmware DD-WRT ya instalado. Si les digo que aluciné con lo que traía me quedo corto. Joder, si es que todavía no me lo creo! El control es absoluto. Satisface cualquier necesidad que se imaginen para gestionar redes. En fin, pues eso, que si están pensando darle giro a su patata-router no sigan pensando más.

Montaje de un Servidor Ciego con Debian Lenny (7.-FTP con PROFTPD)

Para subir y bajar archivos remotamente vamos a usar el software Proftpd y configuraremos algo de él. Empezaremos la instalación de Proftpd arrancando nuestro servidor. Nos logeamos como root y pasamos a instalar:

#apt-get install proftpd

Durante la instalación nos preguntará algunas cosas:

proftpd

los archivos del servidor son:

/usr/bin/proftpd
El propio servidor de FTP.

/usr/bin/ftpwho
Una utilidad que muestra información sobre los procesos de cada usuario actualmente conectado al servidor.

/usr/bin/ftpcount
Utilidad que muestra el número de conexiones actuales.

/usr/bin/ftpshut
Orden para apagar el servidor, sólo funciona en modo “standalone”.

/var/log/proftpd/proftpd.log
Fichero con la información sobre los “logs” en el servidor, habría que decidir qué política de rotación se desea seguir.

/etc/proftpd/proftpd.conf
El fichero donde configuraremos las diversas opciones que nos ofrece el servidor, en él nos centraremos a continuación, es realmente el único que manipularemos.

Luego por razones de seguridad vamos a crear un shell falso para el acceso de ftp para esto vamos a agregar una linea en el archivo /etc/shell:

#nano /etc/shells

Y agregamos la siguiente línea al final del archivo:

/bin/false

Esto evitará que cualquier usuario que utilice el ftp pueda accesar a nuestra consola de comandos. Ahora visualizaremos el archivo /etc/passwd:

#cat /etc/passwd

Con ello veremos que se ha agregado un usuario llamado “FTP” que es el que nos crea ProFTPD al instalarlo. Este será el usuario para el login al servicio de FTP. Si deseamos que además tenga un password (como es lógico) haremos como root:

#passwd ftp

y le agregaremos la contraseña. En lo listado antes por el terminal, chequeamos que su shell sea /bin/false/ puesto que si es /bin/bash podrá acceder y ejecutar comando bash no solo por el puerto 21 sino por el 22 de ssh por ejemplo y hacer estragos.

Ahora añadimos el usuario ftp al grupo ftp

#adduser ftp ftp

si no esta creado el usuario ftp haremos

#adduser ftp -s /bin/false

si no esta creado el grupo haremos:

#addgroup ftp

Con esto ya tenemos configurada la cuenta de login. Para ser un poco mas ordenado en el directorio /home/ftp/ crearemos dos directorios llamados upload y download donde se realizarán las subidas y las descargas respectivamente.-

#mkdir upload
#mkdir download

le damos los permisos correspondientes

#chmod 755 /home/ftp

#chmod 755 /home/ftp/download

#chmod 777 /home/ftp/upload

cambiamos de dueño:

#chown ftp:ftp upload
#chown ftp:ftp download

Ahora si, a editar el proftpd.conf. Primero haremos una copia por si las moscas..

#cp /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.confOK

Y ahora si editamos:

#nano /etc/proftpd/proftpd.conf

Y modificamos el archivo dejándolo así:

# Para aplicar los cambios tienes que reiniciar el servidor FTP

AllowOverwrite on

AuthAliasOnly on

# Escoge aqui un alias para tu usuario de FTP

UserAlias usuarioftp ftp

ServerName “nombredelservidor

ServerType standalone

DeferWelcome on

MultilineRFC2228 on

DefaultServer on

ShowSymlinks off

TimeoutNoTransfer 600

TimeoutStalled 100

TimeoutIdle 2200

DisplayFirstChdir .message

ListOptions “-l”

RequireValidShell off

TimeoutLogin 20

RootLogin off

# Aqui creamos los archivos de logs que son de mucha utilidad en caso de fallos

ExtendedLog /var/log/ftp.log

TransferLog /var/log/xferlog

SystemLog /var/log/syslog.log

#DenyFilter *.*/

#No vamos a utilizar el archivo /etc/ftpusers file

#(sirve para colocar adentro los usuarios que no queremos que se conecten)

UseFtpUsers off

# Permitir reiniciar una descarga (muy util en caso de que se caiga la conexion)

AllowStoreRestart on

#El puerto 21 es el estandar para FTP,

#es bueno cambiarlo por razones de seguridad

#aqui escogi el XXX puedes escoger el que quieras

Port XXX

#Configuracion detras de un servidor NAT

MasqueradeAddress ippublicadelservidor

# Para evitar ataques de DoS (negacion de servicio), se recomienda

# colocar un maximo de 30 procesos hijos. Si necesitas mas conexiones

# que esta simplemente aumenta este valor. Esto solo funciona con el

# servidor en modo standalone

MaxInstances 8

# Coloca el usuario y el grupo al que el servidor normalmente funciona

User nobody

Group nogroup

# Umask 022 es un buen valor por defecto para evitar que nuevos archivos y directorios

# sean escribibles por todo el mundo o por el grupo.

Umask 022 022

PersistentPasswd off

MaxClients 8

MaxClientsPerHost 8

MaxClientsPerUser 8

MaxHostsPerUser 8

# Despliega un mensaje despues de que ingresa un usuario

AccessGrantMsg “Bienvenido a ……

# Este mensaje es mostrado por cada intento de ingreso sea bueno o no

ServerIdent on “Estas en ……

# Coloca a /home/ftp como el directorio principal (home)

DefaultRoot /home/ftp

# Bloquea a todos los usuarios al directorio home que definimos

DefaultRoot ~

MaxLoginAttempts 5

#Ingresos validos solo permitimos a ftp

<Limit LOGIN>

AllowUser ftp

DenyALL

</Limit>

#Definimos los permisos de los directorios que creamos para el FTP

<Directory /home/ftp>

Umask 022 022

AllowOverwrite off

<Limit MKD STOR DELE XMKD RNRF RNTO RMD XRMD>

DenyAll

</Limit>

</Directory>

<Directory /home/ftp/download/*>

Umask 022 022

AllowOverwrite off

<Limit MKD STOR DELE XMKD RNEF RNTO RMD XRMD>

DenyAll

</Limit>

</Directory>

<Directory> /home/ftp/upload/>

Umask 022 022

AllowOverwrite on

<Limit READ RMD DELE>

DenyAll

</Limit>

<Limit STOR CWD MKD>

AllowAll

</Limit>

</Directory>

Configurarlo así nos permite evitar algunos problemas de seguridad. En primer lugar evitamos que el usuario root se pueda logear. En segundo estamos impidiendo que una vez conectados por ftp se pueda navegar por directorios superiores al estipulado /home/ftp/. En tercer lugar, unicamente se permite el acceso a un usuario, en nuestro caso ftp, al que modificamos el alias en el archivo de configuración. Ningún otro usuario se podrá conectar. Por último, modificamos el puerto 21 por defecto para FTP por otro diferente (recordad que al modificarlo aquí deberemos abrirlo también en el Router, de lo contrario no podrá haber acceso). Ahora reiniciamos proftpd:

#/etc/init.d/proftpd restart

Y ya lo tendríamos preparado.

Si no hubiésemos añadido la opción de MasqueradeAddress con la ip pública de nuestro servidor (la podemos obtener en la pagina de no-ip.com) al conectarnos desde cualquier cliente FTP habríamos observado que el servidor responde con su ip privada, pudiendo llegar a impedirnos enroutar con él y perder la conexión. A pesar de que este problema se puede solventar desde el mismo cliente FTP, diciéndole en opciones que ignore la ip privada, es mejor configurar el archivo proftp.conf para evitar otros problemas.

Montaje de un Servidor Ciego con Debian Lenny (6.-Abriendo Puertos en el Router)

Cada servicio que ofrecemos hacia Internet tiene asignado un puerto con el que se comunicará. Seguro que a mas de uno le suena aquello de … ¿Cómo abro los puertos del Router para el emule? Cuando al acceder a nuestro Router desde Internet con un navegador, el Router debe de tener el puerto 80 abierto y redireccionado hacia la IP de nuestro servidor y con el Ftp el 21.

Cada Router tiene una interfaz gráfica diferente pero básicamente todos tienen las mismas características de configuración.

Para empezar tenemos que acceder a nuestro Router desde un navegador introduciendo su IP local que es lo mismo que nuestra puerta de enlace hacia Internet o gateway.

router-01
Automáticamente se nos pedirá el nombre de usuario y el password para acceder a él. Estos datos seguramente los encontrareis junto a la documentación del Router. Si no tenéis estos datos deberéis llamar a vuestro proveedor de Internet y pedírselos.

Por experiencia, una vez dentro tendréis que modificar la contraseña del administrador porque lo normal es que la que lleve por defecto sea común a todos los Routers. Podéis imaginar el peligro que esto supone. De todos modos cualquiera que haya manejado wirless sabrá de lo que hablo.

Os dejo aquí un enlace sobre los passwords por defecto en diferentes Routers.

En mi caso es un D-Link y el panel de configuración al que accedemos es tal que así:

router-02
Para configurar los puertos debemos hacer click en la pestaña Advanced. Una vez allí podremos gestionar los puertos que deseemos. Para poder tener los servicios de Servidor Web y Ftp (que veremos en el siguiente capítulo) debemos abrir los puertos 80 y 21, y redireccionarlos a la IP estática que le asignamos al servidor, (en mi caso 192.168.0.XXX). Es aquí también donde se debe configurar el puerto para el acceso remoto SSH visto en capítulos anteriores. Si deseamos modificar el puerto 22 para SSH que viene por defecto este es el lugar para hacerlo.

router-03
En este caso el Router también trae algunas otras opciones para configurar interesantes, como son el servicio DDNS. Aquí podemos configurar nuestra cuenta de NO-IP.com u otras…
router-04

Montaje de un servidor Ciego con Debian Lenny (5.-Redireccionamiento DNS con No-IP)

Para los que tenemos una ADSL normalita solemos tener por defecto IP dinámica y con ello un problema a la hora de localizar nuestro Router ADSL desde Internet.
De este modo nos va a ser imposible localizar nuestro Servidor Web desde Internet ya que cada cierto tiempo va cambiando nuestra dirección IP. Para poder localizar lo vamos a usar el servicio gratuito de redireccionamiento de DNS que nos ofrece la empresa No-IP.
De lo que se trata es de darnos de alta en la web de No-IP y elegir un dominio. Los que habéis seguido estos manuales al pie de la letra seguro que os suena la dirección: ejemplo.no-ip.info
Lo que vamos a registrar es un dominio.no-ip.info y en dominio pondremos el nombre de nuestro servidor. Una vez registremos el dominio instalaremos un programa en nuestro servidor que se encargara de mandar un ping cada 30 minutos para que cada vez que nos cambie nuestra IP sea relacionada con el dominio que registremos.
Esta es una manera eficaz de localizar tu Servidor Web hospedado en casa detrás de tu Router ADSL. Una vez explicado que es y para que sirve el servicio de No-IP vamos a proceder con la instalación. Abrimos un navegador e insertamos la dirección http://www.no-ip.com/ para registrarnos.
Lo primero que tenemos que hacer es crear una cuenta. Para ello clickamos en Create Ancount.

noip-1
Tendremos que rellenar un formulario con nuestros datos. Una vez aceptado, nos mandarán un email al correo indicado. Tendremos que entrar en nuestro correo y activar desde allí la cuenta.

noip-2
Una vez hecho esto, nos logeamos y accedemos al panel de control. Allí deberemos seleccionar Add a Host. Como podreis observar, una vez logeados www.no-ip.com detectará nuetra ip pública y nos la mostrará.

noip-3
Aquí es donde tendremos que introducir el nombre de nuetra máquina y seleccionar el subdominio no-ip.info (cualquier otro con el que hayamos configurado nuestro servidor), debiendo quedar algo así como ejemplo.no-ip.info.

noip-4
Al final tendremos en nuestra cuenta la dirección redireccionada.

noip-5
Ahora instalaremos el software cliente No-IP para que mande los pings a nuestro ejemplo.no-ip.info

#apt-get install noip2

Durante la instalación nos preguntará algunos datos:

Nombre de usuario de No-IP.com: dirección email con la que registramos la cuenta
Contraseña de No-IP.com: contraseña de acceso a la cuenta
Intervalo de actualización (en minutos): 30
Lista de Máquinas o Grupos: dejar en blanco
Nombre del dispositivo de red: el nombre del dispositivo de red conectado a internet (eth0, eth1,…)
¿Desea desactivar la Traducción de Dirección de Red “NAT”?: No

Ya tenemos configurado nuestro cliente No-IP que irá mandando pings cada 30 minutos con nuestra IP para que nuestro dominio (ejemplo.no-ip.info) siempre sea relacionado con nuestra IP actual.
De momento no podréis ver el contenido de vuestro servidor web desde el exterior ya que todavía no hemos abierto los puertos en el Router para redireccionarlos hacia el servicio deseado.
Vamos a tener que abrir un par de puertos en nuestro Router para poder operar desde Internet con nuestro servidor.

Montaje de un Servidor Ciego con Debian Lenny (4.-Apache Web Server)

Una de las finalidades de este manual es la de poder servir contenido Web desde nuestro servidor hacia nuestra red local y hacia Internet.

Para esto usaremos el programa Apache Web Server en su versión apache2-mpm-prefork que es la recomendada para Debian por su Multi-Processing Module (MPM) ya que es algo más rápido que el modelo tradicional.

Antes de nada, crearemos un usuario que en mi caso será “usuarioweb” con directorio raíz/home/usuarioweb, donde alojaremos el directorio que queremos sea visible públicamente. Con este usuario también tendremos acceso al FTP para poder subir y bajar archivos directamente. Así pues, desde consola nos conectamos al servidor via ssh y como root:

#addsuser usuarioweb

Se nos crearán los directorios automáticamente, e introduciremos el password por dos veces para su verificación. Nos preguntará algunos datos sobre el usuario, pero lo dejamos en blanco puesto que es opcional.

Añadiendo el usuario `usuarioweb’ …

Añadiendo el nuevo grupo `usuarioweb’ (1001) …

Añadiendo el nuevo usuario `usuarioweb’ (1001) con grupo `usuarioweb’ …

Creando el directorio personal `/home/usuarioweb’ …

Copiando los ficheros desde `/etc/skel’ …

Introduzca la nueva contraseña de UNIX:

Vuelva a escribir la nueva contraseña de UNIX:

passwd: contraseña actualizada correctamente

Cambiando la información de usuario para usuarioweb

Introduzca el nuevo valor, o presione ENTER para el predeterminado

Nombre completo []:

Número de habitación []:

Teléfono del trabajo []:

Teléfono de casa []:

Otro []:

¿Es correcta la información? [S/n]

Contestamos que sí (S) y listo. Ahora instalaremos apache2 y apache2-mpm-prefork:

#apt-get install apache2

#apt-get install apache2-mpm-prefork

Finalizada la instalación, podemos abrir un navegador en nuestro PC e introducir la IP estática del servidor. Veremos entonces un mensaje tal que “It works!”. Esto quiere decir que el servidor Web Apache está funcionando.

El directorio hacia donde apunta el Servidor Web Apache por defecto es a /var/www/apache2-default. Esto lo podemos cambiar para que apunte a uno de los directorios que tenemos en nuestro directorio /home/usuarioweb. Crearemos una nueva carpeta llamada www donde alojaremos lo que queremos que sea público. Por debajo de ese directorio podremos alojar archivos para que sean vistos solo a nivel privado. Así pues, nos logeamos como usuarioweb y nos movemos hasta el directorio /home/usuarioweb/, y allí creamos la carpeta www:

$mkdir www

Ahora vamos a editar el archivo default que se encuentra en la ruta /etc/apache2/sites-available y vamos a substituir la ruta /var/www/ por la nuestra de nuestro /home/usuarioweb/www/. Nos logeamos como root:

#nano /etc/apache2/sites-available/default

Modificaremos los directorios, poniéndo los nuestros:

<VirtualHost *:80>

ServerAdmin webmaster@localhost

DocumentRoot /home/usuarioweb/www/

<Directory />

Options FollowSymLinks

AllowOverride None

</Directory>

<Directory /home/usuarioweb/www/>

Options Indexes FollowSymLinks MultiViews

AllowOverride None

Order allow,deny

allow from all

</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

<Directory “/usr/lib/cgi-bin”>

AllowOverride None

Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch

Order allow,deny

Allow from all

</Directory>

ErrorLog /var/log/apache2/error.log

# Possible values include: debug, info, notice, warn, error, crit,

# alert, emerg.

LogLevel warn

CustomLog /var/log/apache2/access.log combined

Alias /doc/ “/usr/share/doc/”

<Directory “/usr/share/doc/”>

Options Indexes MultiViews FollowSymLinks

AllowOverride None

Order deny,allow

Deny from all

Allow from 127.0.0.0/255.0.0.0 ::1/128

</Directory>

</VirtualHost>

Ahora reiniciamos Apache con:

#apache2ctl restart

Si volvemos a introducir nuestra IP fija en un navegador veremos algo así:

apache01

Imaginemos ahora que queremos proteger mediante contraseña el acceso al directorio restringido que tenemos en /home/usuarioweb/www/restringido.

Para proteger el acceso a un directorio del servidor web mediante contraseña, primero creamos el archivo que contendrá los usuarios y las passwords.

# htpasswd -cm /home/usuarioweb/.htpasswd nombreusuario

Como vemos “.htpasswd” es el nombre que le he dado yo al archivo de claves. Puede llamarse de cualquier otra forma (recomendado si no hay más remedio que ubicarlo en la carpeta pública).

La opción -cm nos permite crear el fichero de claves. Lo usaremos la primera vez y, en sucesivas ocasiones, no será necesario. Una vez creado el fichero, ejecutaremos el comando sin el parámetro -cm:

# htpasswd /home/usuarioweb/.htpasswd nombreusuario2

Cada vez que creemos un usuario, htpasswd nos preguntará qué contraseña queremos asignarle.

El fichero de claves esté fuera de los directorios públicos del servidor web. De este modo, eliminamos la posibilidad de que sea descargado.

Por otra parte, limitaremos los permisos en el sistema para que el fichero .htpasswd sólo pueda ser leido por el usuario www-data (creado para el servidor web).

# chown www-data:www-data /home/usuarioweb/.htpasswd

#chmod 0660 /home/usuarioweb/.htpasswd

Una vez hecho todo ésto, nos situamos dentro del directorio a proteger (/home/usuarioweb/www/restringido) y creamos un fichero .htaccess con el siguiente contenido:

AuthName “Debe registrarse para poder acceder a este directorio”

AuthType Basic

AuthUserFile /home/usuarioweb/.htpasswd

Require valid-user

Y ya para terminar, hacemos que apache2 lea el fichero .htaccess que hemos creado en el directorio /home/usuarioweb/www/restringido, modificando el siguiente contenido al fichero /etc/apache2/sites-available/default:

Cambiar: AllowOverride None

Por: AllowOverride AuthConfig

Por supuesto, después recargaríamos la configuración de apache2:

# /etc/init.d/apache2 restart

Para acceder a la carpeta introducimos en nuestro navegador http//:192.168.X.XXX/restringido, donde 192.168.X.XXX es la ip del servidor. Veremos cómo nos pide un usuario y contraseña para acceder a ella.

ALGUNAS CURIOSIDADES MÁS DE APACHE2:

Deshabilitar el listado del contenido de directorios.

Si queremos evitar que los visitantes de nuestra web vean el contenido de cualquier directorio del sitio no tenemos más que especificar la opción Options -Indexes en el directorio principal (/home/usuarioweb/www/) definido en /etc/apache2/sites-available/default.

<Directory /home/usuarioweb/www/>
Options -Indexes
AllowOverride None
Order allow,deny
allow from all
</Directory>


Ahora bien, si lo que queremos es permitir que se listen los contenidos, salvo los de un directorio en concreto, podemos dejar la siguiente configuración en /etc/apache2/sites-available/default para permitir los listados:

Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all

Y crear un fichero .htaccess en el directorio que queramos evitar listar. Imaginemos que no queremos que se liste el contenido del directorio privado que tenemos en /home/usuarioweb/www/restringido. Nos movemos al directorio y creamos un fichero .htaccess con el siguiente contenido:

Options -Indexes

Control de acceso a carpetas.

Si queremos, podemos deshabilitar totalmente el acceso a una carpeta, de tal forma que podremos acceder a los archivos mediante el sistema de archivos, pero no se podrán acceder a ellos vía web.

Para denegar el acceso vía web a una carpeta, para todo el mundo, creamos un archivo .htaccess en esa carpeta que contenga:

#Denegar el acceso a todos
deny from all

Si queremos denegar el acceso a todos, permitiéndolo tan sólo desde una IP específica, creamos un archivo .htaccess en esa carpeta que contenga:

#Denegar el acceso a todos
deny from all
# Permitir el acceso al equipo con IP 10.0.0.1
allow from 10.0.0.1

Y si queremos permitir tan sólo el acceso a un rango específico de IPs , creamos un archivo .htaccess en la carpeta que contenga las siguientes líneas:

deny from all
allow from 192.168.0.0/24

Montaje de un Servidor Ciego con Debian Lenny (3.-Acceso Remoto con SSH)

SSH (Secure SHell) es una forma segura con la que vamos a poder conectarnos a nuestro servidor de manera remota. Podremos conectarnos a el por nuestra red siendo de manera local o desde Internet. De momento nos conformaremos con poder entrar desde otro PC que tengamos en nuestra red ya que todavía no os he explicado como vamos a localizar nuestro servidor desde Internet, todo se andará.

Arrancamos nuestro servidor, nos logeamos como root e instalamos el programa:

#apt-get install ssh

Reiniciamos el servidor:

#reboot

Una vez tengamos reiniciada la maquina vamos a conectarnos a ella desde otro ordenador de nuestra red. Para los que tenemos Linux nos va a ser fácil conectarnos ya que no tenemos que instalar ningún programa ( los Terminales vienen de serie en Linux ) así que abrimos una terminal y ejecutamos …

#ssh root@192.168.0.XXX

Donde root es el usuario y 192.168.0.XXX es la dirección ip fija del servidor. Obtendremos algo así:

estacionuno:~# ssh root@192.168.0.XXX

The authenticity of host ‘192.168.0.XXX (192.168.0.XXX)’ can’t be established.

RSA key fingerprint is ab:86:d1:0b:d6:5d:01:68:1c:d5:ac:11:89:68:13:52.

Are you sure you want to continue connecting (yes/no)?

El sistema Secure SHell genera una llave de autentificación y si nos equivocamos el sistema nos beta para no dejarnos pasar mas. Esta es una de las medidas de seguridad que nos ofrece este programa.

Le indicamos yes

estacionuno:~# ssh root@192.168.0.XXX

The authenticity of host ‘192.168.0.XXX (192.168.0.XXX)’ can’t be established.

RSA key fingerprint is ab:86:d1:0b:d6:5d:01:68:1c:d5:ac:11:89:68:13:52.

Are you sure you want to continue connecting (yes/no)?

Warning: Permanently added ‘192.168.0.XXX’ (RSA) to the list of known hosts.

root@192.168.0.XXX’s password:

Linux estacioncentral 2.6.26-2-686 #1 SMP Thu Mar 26 01:08:11 UTC 2009 i686

The programs included with the Debian GNU/Linux system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

permitted by applicable law.

Last login: Sun Apr 26 12:11:06 2009

estacioncentral:~#

Como podéis ver ya estamos dentro de nuestro servidor desde un terminal en nuestro ordenador que usamos habitualmente. Con esto hemos conseguido poder abrirnos una puerta para poder entrar en nuestro servidor bajo modo local y mas adelante veremos como conectarnos a él desde Internet.

Para conectarnos como usuario: ssh usuario@ipdelservidor

UN POCO DE SEGURIDAD CON SSH

Un equipo conectado a internet siempre está expuesto a correr el riesgo de recibir ataques pero podemos disminuirlos de forma descomunal con una buena configuración. Esto implica modificar la mayoría de parámetros por defecto del fichero de configuración con la finalidad de reducir al máximo la posibilidad de que alguien vulnere o consiga el acceso a nuestro sistema sin consentimiento. En caso de no realizar estas modificaciones le estaríamos dando al atacante una gran parte del acertijo que debe resolver para acceder a nuesto equipo.

Lo primero que debemos hacer para poder realizar los cambios es conectarnos al servidor mediante ssh. Podríamos hacerlo de dos formas:

  1. Usando la ip privada estática de nuestra red:
  • Utilizando el usuario root:
    ssh root@192.168.0.xxx -p 22
  • Utilizando el usuario que definimos durante la instalación:
    ssh user@192.168.0.xxx -p 22
  1. Usando nuestra ip pública (normalmente dinámica):
  • Utilizando el usuario root :
    ssh root@xxx.xxx.xxx.xxx -p 22
  • Utilizando el usuario que definimos durante la instalación:
    ssh user@xxx.xxx.xxx.xxx -p 22

El acceso a ssh con el usuario root desde el puerto 22 viene por defecto y por lo tanto es algo que debemos modificar de tal forma que siempre accederemos al servidor con el usuario que creamos durante la instalación del sistema operativo y, una vez dentro, ya accederemos como root para poder realizar cambios.

Una vez dentro, en caso de haver accedido con el usuario que no es root, ejecutamos el siguiente comando para obtener los permisos de éste último:

su

Ahora, abrimos el fichero de configuración de ssh con un editor de texto (yo uso el nano):

nano /etc/ssh/sshd_config

Modificamos el puerto desde el cual accedemos al servidor. Para ello, buscamos la siguiente linea

Port 22

y modificamos el numero del puerto (si queremos, lo podemos modificar por otro):

Port 754

Importante!! Para acceder desde internet, debemos abrir este puerto en el router (el protocolo TCP) para nuestra ip privada (192.168.x.xxx) del servidor. -Ver más adelante-

Buscamos la linea siguiente:

PermitRootLogin yes

La substituimos por lo siguiente para evitar el acceso con el usuario root

PermitRootLogin no

Añadimos lo siguiente al final del fichero:

MaxAuthTries 3MaxStartups 3

MaxAuthTries 3 hace que se cierre la conexión tras 3 intentos fallidos ingresando la contraseña. Tras estos 3 intentos, se puede volver a intentar conectando de nuevo.

MaxStartups 1 limita a 1 el número de pantallas de login simultáneas por ip que podemos tener abiertas para acceder con un usuario. Esto no impide que no podamos tener varias sesiones simultáneas abiertas.

Guardamos los cambios pulsando “ctrl + x” y “S” a contnuación.

Ahora debemos reiniciar el servidor ssh para que los cambios surjan efecto:

/etc/init.d/ssh restart

Ahora, sin cerrar la sesión de ssh, abrimos una nueva consola y volvemos a acceder al servidor con los mismos datos que antes.

ssh root@192.168.0.xxx -p 22

¿Qué observamos?
Observamos que no se nos permite conectarnos ya que no tenemos acceso desde el puerto 22.
Veamos si nos lo permite en el puerto que hemos definido:

ssh root@192.168.0.xxx -p 754

Observamos que ahora si que conecta y nos pide la contraseña. La insertamos y observaremos que nos apracere el mensaje “Permission denied, please try again.”. Esto es porque el usuario root no tiene permisos para acceder.
Ahora solo nos falta por ver que podemos acceder con el usuario que hemos definido antes:

ssh user@192.168.0.xxx -p 754

Observamos que si hemos podido entrar.

¿Por qué hacemos todas estas verificaciones?

Al no cerrar la primera sesión ssh, verificamos que no tengamos ningún problema para acceder al servidor tras hacer los cambios. Nos podríamos encontrar por ejemplo, en el caso de que el servidor estuviera en una red desconocida, que entre nuestro servidor e internet hay un firewall que no nos permite el acceso al servidor por el puerto que definimos o bien que el puerto que hemos puesto no se encuentre abierto.
Es entonces cuando debemos volver a dejar la conexión en el puerto 22, reiniciar ssh y ver si funciona correctamente mediante una nueva consola.

Una vez comprobado que los camios han surgido con éxito, para tener permisos root o para poder realizar cambios sobre el servidor, simplemente tenemos que escribir lo siguiente en consola:

Su

Ahora se nos pide la contraseña de root. La introducimos y ya tendremos permiso para realizar cualquier cambio en el servidor.